Skip to content

Commit c8ca153

Browse files
Merge pull request #7096 from apple/eng/stable-abi-cherrypicks
Cherry-pick missing asan stable-abi commits
2 parents 3942501 + 93d2903 commit c8ca153

File tree

13 files changed

+234
-21
lines changed

13 files changed

+234
-21
lines changed

compiler-rt/cmake/Modules/AllSupportedArchDefs.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ set(ALL_SANITIZER_COMMON_SUPPORTED_ARCH ${X86} ${X86_64} ${PPC64} ${RISCV64}
2929
set(ALL_ASAN_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} ${RISCV64}
3030
${MIPS32} ${MIPS64} ${PPC64} ${S390X} ${SPARC} ${SPARCV9} ${HEXAGON}
3131
${LOONGARCH64})
32+
set(ALL_ASAN_ABI_SUPPORTED_ARCH ${X86_64} ${ARM64})
3233
set(ALL_DFSAN_SUPPORTED_ARCH ${X86_64} ${MIPS64} ${ARM64})
3334

3435
if(ANDROID)

compiler-rt/cmake/config-ix.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,7 @@ if(APPLE)
583583
)
584584
set(LSAN_COMMON_SUPPORTED_ARCH ${SANITIZER_COMMON_SUPPORTED_ARCH})
585585
set(UBSAN_COMMON_SUPPORTED_ARCH ${SANITIZER_COMMON_SUPPORTED_ARCH})
586+
set(ASAN_ABI_SUPPORTED_ARCH ${ALL_ASAN_ABI_SUPPORTED_ARCH})
586587
list_intersect(ASAN_SUPPORTED_ARCH
587588
ALL_ASAN_SUPPORTED_ARCH
588589
SANITIZER_COMMON_SUPPORTED_ARCH)

compiler-rt/lib/asan/asan_interface.inc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,13 @@ INTERFACE_FUNCTION(__asan_report_store_n_noabort)
108108
INTERFACE_FUNCTION(__asan_set_death_callback)
109109
INTERFACE_FUNCTION(__asan_set_error_report_callback)
110110
INTERFACE_FUNCTION(__asan_set_shadow_00)
111+
INTERFACE_FUNCTION(__asan_set_shadow_01)
112+
INTERFACE_FUNCTION(__asan_set_shadow_02)
113+
INTERFACE_FUNCTION(__asan_set_shadow_03)
114+
INTERFACE_FUNCTION(__asan_set_shadow_04)
115+
INTERFACE_FUNCTION(__asan_set_shadow_05)
116+
INTERFACE_FUNCTION(__asan_set_shadow_06)
117+
INTERFACE_FUNCTION(__asan_set_shadow_07)
111118
INTERFACE_FUNCTION(__asan_set_shadow_f1)
112119
INTERFACE_FUNCTION(__asan_set_shadow_f2)
113120
INTERFACE_FUNCTION(__asan_set_shadow_f3)

compiler-rt/lib/asan/asan_interface_internal.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,20 @@ extern "C" {
9090
SANITIZER_INTERFACE_ATTRIBUTE
9191
void __asan_set_shadow_00(uptr addr, uptr size);
9292
SANITIZER_INTERFACE_ATTRIBUTE
93+
void __asan_set_shadow_01(uptr addr, uptr size);
94+
SANITIZER_INTERFACE_ATTRIBUTE
95+
void __asan_set_shadow_02(uptr addr, uptr size);
96+
SANITIZER_INTERFACE_ATTRIBUTE
97+
void __asan_set_shadow_03(uptr addr, uptr size);
98+
SANITIZER_INTERFACE_ATTRIBUTE
99+
void __asan_set_shadow_04(uptr addr, uptr size);
100+
SANITIZER_INTERFACE_ATTRIBUTE
101+
void __asan_set_shadow_05(uptr addr, uptr size);
102+
SANITIZER_INTERFACE_ATTRIBUTE
103+
void __asan_set_shadow_06(uptr addr, uptr size);
104+
SANITIZER_INTERFACE_ATTRIBUTE
105+
void __asan_set_shadow_07(uptr addr, uptr size);
106+
SANITIZER_INTERFACE_ATTRIBUTE
93107
void __asan_set_shadow_f1(uptr addr, uptr size);
94108
SANITIZER_INTERFACE_ATTRIBUTE
95109
void __asan_set_shadow_f2(uptr addr, uptr size);

compiler-rt/lib/asan/asan_poisoning.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,34 @@ void __asan_set_shadow_00(uptr addr, uptr size) {
312312
REAL(memset)((void *)addr, 0, size);
313313
}
314314

315+
void __asan_set_shadow_01(uptr addr, uptr size) {
316+
REAL(memset)((void *)addr, 0x01, size);
317+
}
318+
319+
void __asan_set_shadow_02(uptr addr, uptr size) {
320+
REAL(memset)((void *)addr, 0x02, size);
321+
}
322+
323+
void __asan_set_shadow_03(uptr addr, uptr size) {
324+
REAL(memset)((void *)addr, 0x03, size);
325+
}
326+
327+
void __asan_set_shadow_04(uptr addr, uptr size) {
328+
REAL(memset)((void *)addr, 0x04, size);
329+
}
330+
331+
void __asan_set_shadow_05(uptr addr, uptr size) {
332+
REAL(memset)((void *)addr, 0x05, size);
333+
}
334+
335+
void __asan_set_shadow_06(uptr addr, uptr size) {
336+
REAL(memset)((void *)addr, 0x06, size);
337+
}
338+
339+
void __asan_set_shadow_07(uptr addr, uptr size) {
340+
REAL(memset)((void *)addr, 0x07, size);
341+
}
342+
315343
void __asan_set_shadow_f1(uptr addr, uptr size) {
316344
REAL(memset)((void *)addr, 0xf1, size);
317345
}

compiler-rt/lib/asan/asan_rtl.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -288,11 +288,18 @@ static NOINLINE void force_interface_symbols() {
288288
case 38: __asan_region_is_poisoned(0, 0); break;
289289
case 39: __asan_describe_address(0); break;
290290
case 40: __asan_set_shadow_00(0, 0); break;
291-
case 41: __asan_set_shadow_f1(0, 0); break;
292-
case 42: __asan_set_shadow_f2(0, 0); break;
293-
case 43: __asan_set_shadow_f3(0, 0); break;
294-
case 44: __asan_set_shadow_f5(0, 0); break;
295-
case 45: __asan_set_shadow_f8(0, 0); break;
291+
case 41: __asan_set_shadow_01(0, 0); break;
292+
case 42: __asan_set_shadow_02(0, 0); break;
293+
case 43: __asan_set_shadow_03(0, 0); break;
294+
case 44: __asan_set_shadow_04(0, 0); break;
295+
case 45: __asan_set_shadow_05(0, 0); break;
296+
case 46: __asan_set_shadow_06(0, 0); break;
297+
case 47: __asan_set_shadow_07(0, 0); break;
298+
case 48: __asan_set_shadow_f1(0, 0); break;
299+
case 49: __asan_set_shadow_f2(0, 0); break;
300+
case 50: __asan_set_shadow_f3(0, 0); break;
301+
case 51: __asan_set_shadow_f5(0, 0); break;
302+
case 52: __asan_set_shadow_f8(0, 0); break;
296303
}
297304
// clang-format on
298305
}

compiler-rt/lib/asan/tests/asan_internal_interface_test.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,27 @@ TEST(AddressSanitizerInternalInterface, SetShadow) {
1919
__asan_set_shadow_00((uptr)buffer.data(), buffer.size());
2020
EXPECT_EQ(std::vector<char>(buffer.size(), 0x00), buffer);
2121

22+
__asan_set_shadow_01((uptr)buffer.data(), buffer.size());
23+
EXPECT_EQ(std::vector<char>(buffer.size(), 0x01), buffer);
24+
25+
__asan_set_shadow_02((uptr)buffer.data(), buffer.size());
26+
EXPECT_EQ(std::vector<char>(buffer.size(), 0x02), buffer);
27+
28+
__asan_set_shadow_03((uptr)buffer.data(), buffer.size());
29+
EXPECT_EQ(std::vector<char>(buffer.size(), 0x03), buffer);
30+
31+
__asan_set_shadow_04((uptr)buffer.data(), buffer.size());
32+
EXPECT_EQ(std::vector<char>(buffer.size(), 0x04), buffer);
33+
34+
__asan_set_shadow_05((uptr)buffer.data(), buffer.size());
35+
EXPECT_EQ(std::vector<char>(buffer.size(), 0x05), buffer);
36+
37+
__asan_set_shadow_06((uptr)buffer.data(), buffer.size());
38+
EXPECT_EQ(std::vector<char>(buffer.size(), 0x06), buffer);
39+
40+
__asan_set_shadow_07((uptr)buffer.data(), buffer.size());
41+
EXPECT_EQ(std::vector<char>(buffer.size(), 0x07), buffer);
42+
2243
__asan_set_shadow_f1((uptr)buffer.data(), buffer.size());
2344
EXPECT_EQ(std::vector<char>(buffer.size(), 0xf1), buffer);
2445

compiler-rt/lib/asan/weak_symbols.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@ ___asan_default_options
22
___asan_default_suppressions
33
___asan_on_error
44
___asan_set_shadow_00
5+
___asan_set_shadow_01
6+
___asan_set_shadow_02
7+
___asan_set_shadow_03
8+
___asan_set_shadow_04
9+
___asan_set_shadow_05
10+
___asan_set_shadow_06
11+
___asan_set_shadow_07
512
___asan_set_shadow_f1
613
___asan_set_shadow_f2
714
___asan_set_shadow_f3

compiler-rt/lib/asan_abi/CMakeLists.txt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,18 @@ include_directories(..)
1313
add_compiler_rt_component(asan_abi)
1414

1515
if (APPLE)
16-
# TODO: set in config-ix.cmake
17-
set(ASAN_ABI_SUPPORTED_OS osx)
18-
set(ASAN_ABI_SUPPORTED_ARCHS ${X86_64} ${ARM64})
1916
# Compile Stable API sources into an object library.
2017
add_compiler_rt_object_libraries(RTASAN_ABI
21-
OS ${ASAN_ABI_SUPPORTED_OS}
22-
ARCHS ${ASAN_ABI_SUPPORTED_ARCHS}
18+
OS ${SANITIZER_COMMON_SUPPORTED_OS}
19+
ARCHS ${ASAN_ABI_SUPPORTED_ARCH}
2320
SOURCES ${ASAN_ABI_SOURCES}
2421
ADDITIONAL_HEADERS ${ASAN_ABI_HEADERS}
2522
CFLAGS ${SANITIZER_COMMON_CFLAGS})
2623

2724
add_compiler_rt_runtime(clang_rt.asan_abi
2825
STATIC
29-
OS ${ASAN_ABI_SUPPORTED_OS}
30-
ARCHS ${ASAN_ABI_SUPPORTED_ARCHS}
26+
OS ${SANITIZER_COMMON_SUPPORTED_OS}
27+
ARCHS ${ASAN_ABI_SUPPORTED_ARCH}
3128
OBJECT_LIBS RTASAN_ABI
3229
CFLAGS ${SANITIZER_COMMON_CFLAGS}
3330
LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}

compiler-rt/test/asan/TestCases/set_shadow_test.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@
1313
#include <stdlib.h>
1414

1515
void __asan_set_shadow_00(size_t addr, size_t size);
16+
void __asan_set_shadow_01(size_t addr, size_t size);
17+
void __asan_set_shadow_02(size_t addr, size_t size);
18+
void __asan_set_shadow_03(size_t addr, size_t size);
19+
void __asan_set_shadow_04(size_t addr, size_t size);
20+
void __asan_set_shadow_05(size_t addr, size_t size);
21+
void __asan_set_shadow_06(size_t addr, size_t size);
22+
void __asan_set_shadow_07(size_t addr, size_t size);
1623
void __asan_set_shadow_f1(size_t addr, size_t size);
1724
void __asan_set_shadow_f2(size_t addr, size_t size);
1825
void __asan_set_shadow_f3(size_t addr, size_t size);
@@ -32,6 +39,34 @@ void f(long arg) {
3239
// X00: PASS
3340
case 0x00:
3441
return __asan_set_shadow_00(addr, 1);
42+
// X01: AddressSanitizer: stack-buffer-overflow
43+
// X01: [01]
44+
case 0x01:
45+
return __asan_set_shadow_01(addr, 1);
46+
// X02: AddressSanitizer: stack-buffer-overflow
47+
// X02: [02]
48+
case 0x02:
49+
return __asan_set_shadow_02(addr, 1);
50+
// X03: AddressSanitizer: stack-buffer-overflow
51+
// X03: [03]
52+
case 0x03:
53+
return __asan_set_shadow_03(addr, 1);
54+
// X04: AddressSanitizer: stack-buffer-overflow
55+
// X04: [04]
56+
case 0x04:
57+
return __asan_set_shadow_04(addr, 1);
58+
// X05: AddressSanitizer: stack-buffer-overflow
59+
// X05: [05]
60+
case 0x05:
61+
return __asan_set_shadow_05(addr, 1);
62+
// X06: AddressSanitizer: stack-buffer-overflow
63+
// X06: [06]
64+
case 0x06:
65+
return __asan_set_shadow_06(addr, 1);
66+
// X07: AddressSanitizer: stack-buffer-overflow
67+
// X07: [07]
68+
case 0x07:
69+
return __asan_set_shadow_07(addr, 1);
3570
// XF1: AddressSanitizer: stack-buffer-underflow
3671
// XF1: [f1]
3772
case 0xf1:

0 commit comments

Comments
 (0)