From 849655a145a40b056a751528cebc78a11481514c Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Thu, 5 Jun 2025 03:25:46 +0000 Subject: [PATCH] 8358632: [asan] reports heap-buffer-overflow in AOTCodeCache::copy_bytes Reviewed-by: vlivanov, iveresov --- src/hotspot/share/code/aotCodeCache.cpp | 15 +++------------ .../appcds/aotCode/AOTCodeCompressedOopsTest.java | 2 +- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/hotspot/share/code/aotCodeCache.cpp b/src/hotspot/share/code/aotCodeCache.cpp index 6d8faa10a38..d0692ee678b 100644 --- a/src/hotspot/share/code/aotCodeCache.cpp +++ b/src/hotspot/share/code/aotCodeCache.cpp @@ -460,18 +460,9 @@ AOTCodeCache* AOTCodeCache::open_for_dump() { } void copy_bytes(const char* from, address to, uint size) { - assert(size > 0, "sanity"); - bool by_words = true; - if ((size > 2 * HeapWordSize) && (((intptr_t)from | (intptr_t)to) & (HeapWordSize - 1)) == 0) { - // Use wordwise copies if possible: - Copy::disjoint_words((HeapWord*)from, - (HeapWord*)to, - ((size_t)size + HeapWordSize-1) / HeapWordSize); - } else { - by_words = false; - Copy::conjoint_jbytes(from, to, (size_t)size); - } - log_trace(aot, codecache)("Copied %d bytes as %s from " INTPTR_FORMAT " to " INTPTR_FORMAT, size, (by_words ? "HeapWord" : "bytes"), p2i(from), p2i(to)); + assert((int)size > 0, "sanity"); + memcpy(to, from, size); + log_trace(aot, codecache)("Copied %d bytes from " INTPTR_FORMAT " to " INTPTR_FORMAT, size, p2i(from), p2i(to)); } AOTCodeReader::AOTCodeReader(AOTCodeCache* cache, AOTCodeEntry* entry) { diff --git a/test/hotspot/jtreg/runtime/cds/appcds/aotCode/AOTCodeCompressedOopsTest.java b/test/hotspot/jtreg/runtime/cds/appcds/aotCode/AOTCodeCompressedOopsTest.java index 267b9a267b2..4587eeae5e5 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/aotCode/AOTCodeCompressedOopsTest.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/aotCode/AOTCodeCompressedOopsTest.java @@ -173,7 +173,7 @@ public class AOTCodeCompressedOopsTest { * [0.022s][info][cds] narrow_oop_mode = 3, narrow_oop_base = 0x0000000300000000, narrow_oop_shift = 3 * [0.022s][info][cds] heap range = [0x0000000301000000 - 0x0000000ac1000000] */ - Pattern p = Pattern.compile("narrow_oop_base = 0x(\\d+), narrow_oop_shift = (\\d)"); + Pattern p = Pattern.compile("narrow_oop_base = 0x([0-9a-fA-F]+), narrow_oop_shift = (\\d)"); for (int i = 0; i < list.size(); i++) { String line = list.get(i); if (line.indexOf("CDS archive was created with max heap size") != -1) {