Skip to content

Commit 1adf0fa

Browse files
authored
Revert "[HWASan] [compiler-rt] support non-4k pages on Android" (#95853)
Reverts #95069 Broke windows bot
1 parent 3a2f7d8 commit 1adf0fa

File tree

10 files changed

+29
-35
lines changed

10 files changed

+29
-35
lines changed

compiler-rt/lib/asan/asan_linux.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,7 @@ uptr FindDynamicShadowStart() {
9393
# endif
9494

9595
return MapDynamicShadow(shadow_size_bytes, ASAN_SHADOW_SCALE,
96-
/*min_shadow_base_alignment*/ 0, kHighMemEnd,
97-
GetMmapGranularity());
96+
/*min_shadow_base_alignment*/ 0, kHighMemEnd);
9897
}
9998

10099
void AsanApplyToGlobals(globals_op_fptr op, const void *needle) {

compiler-rt/lib/asan/asan_mac.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ bool IsSystemHeapAddress (uptr addr) { return false; }
5151

5252
uptr FindDynamicShadowStart() {
5353
return MapDynamicShadow(MemToShadowSize(kHighMemEnd), ASAN_SHADOW_SCALE,
54-
/*min_shadow_base_alignment*/ 0, kHighMemEnd,
55-
GetMmapGranularity());
54+
/*min_shadow_base_alignment*/ 0, kHighMemEnd);
5655
}
5756

5857
// No-op. Mac does not support static linkage anyway.

compiler-rt/lib/asan/asan_premap_shadow.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ uptr PremapShadowSize() {
3333
// PremapShadowSize() bytes on the right of it are mapped r/o.
3434
uptr PremapShadow() {
3535
return MapDynamicShadow(PremapShadowSize(), /*mmap_alignment_scale*/ 3,
36-
/*min_shadow_base_alignment*/ 0, kHighMemEnd,
37-
GetMmapGranularity());
36+
/*min_shadow_base_alignment*/ 0, kHighMemEnd);
3837
}
3938

4039
bool PremapShadowFailed() {

compiler-rt/lib/hwasan/hwasan_dynamic_shadow.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,15 @@ decltype(__hwasan_shadow)* __hwasan_premap_shadow();
3636

3737
namespace __hwasan {
3838

39-
// We cannot call anything in libc here (see comment above), so we need to
40-
// assume the biggest allowed page size.
41-
// Android max page size is defined as 16k here:
42-
// https://android.googlesource.com/platform/bionic/+/main/libc/platform/bionic/page.h#41
43-
static constexpr uptr kMaxGranularity = 16384;
44-
4539
// Conservative upper limit.
4640
static uptr PremapShadowSize() {
47-
return RoundUpTo(GetMaxVirtualAddress() >> kShadowScale, kMaxGranularity);
41+
return RoundUpTo(GetMaxVirtualAddress() >> kShadowScale,
42+
GetMmapGranularity());
4843
}
4944

5045
static uptr PremapShadow() {
5146
return MapDynamicShadow(PremapShadowSize(), kShadowScale,
52-
kShadowBaseAlignment, kHighMemEnd, kMaxGranularity);
47+
kShadowBaseAlignment, kHighMemEnd);
5348
}
5449

5550
static bool IsPremapShadowAvailable() {
@@ -61,7 +56,7 @@ static bool IsPremapShadowAvailable() {
6156
}
6257

6358
static uptr FindPremappedShadowStart(uptr shadow_size_bytes) {
64-
const uptr granularity = kMaxGranularity;
59+
const uptr granularity = GetMmapGranularity();
6560
const uptr shadow_start = reinterpret_cast<uptr>(&__hwasan_shadow);
6661
const uptr premap_shadow_size = PremapShadowSize();
6762
const uptr shadow_size = RoundUpTo(shadow_size_bytes, granularity);
@@ -114,7 +109,7 @@ uptr FindDynamicShadowStart(uptr shadow_size_bytes) {
114109
if (IsPremapShadowAvailable())
115110
return FindPremappedShadowStart(shadow_size_bytes);
116111
return MapDynamicShadow(shadow_size_bytes, kShadowScale, kShadowBaseAlignment,
117-
kHighMemEnd, kMaxGranularity);
112+
kHighMemEnd);
118113
}
119114

120115
} // namespace __hwasan
@@ -140,7 +135,7 @@ uptr FindDynamicShadowStart(uptr shadow_size_bytes) {
140135
RingBufferSize());
141136
# endif
142137
return MapDynamicShadow(shadow_size_bytes, kShadowScale, kShadowBaseAlignment,
143-
kHighMemEnd, GetMmapGranularity());
138+
kHighMemEnd);
144139
}
145140

146141
} // namespace __hwasan

compiler-rt/lib/memprof/memprof_linux.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,7 @@ void InitializePlatformExceptionHandlers() {}
5858
uptr FindDynamicShadowStart() {
5959
uptr shadow_size_bytes = MemToShadowSize(kHighMemEnd);
6060
return MapDynamicShadow(shadow_size_bytes, SHADOW_SCALE,
61-
/*min_shadow_base_alignment*/ 0, kHighMemEnd,
62-
GetMmapGranularity());
61+
/*min_shadow_base_alignment*/ 0, kHighMemEnd);
6362
}
6463

6564
void *MemprofDlSymNext(const char *sym) { return dlsym(RTLD_NEXT, sym); }

compiler-rt/lib/sanitizer_common/sanitizer_common.h

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,14 @@ inline int Verbosity() {
6060
return atomic_load(&current_verbosity, memory_order_relaxed);
6161
}
6262

63-
#if SANITIZER_ANDROID && !defined(__aarch64__)
64-
// 32-bit Android only has 4k pages.
65-
inline uptr GetPageSize() { return 4096; }
66-
inline uptr GetPageSizeCached() { return 4096; }
63+
#if SANITIZER_ANDROID
64+
inline uptr GetPageSize() {
65+
// Android post-M sysconf(_SC_PAGESIZE) crashes if called from .preinit_array.
66+
return 4096;
67+
}
68+
inline uptr GetPageSizeCached() {
69+
return 4096;
70+
}
6771
#else
6872
uptr GetPageSize();
6973
extern uptr PageSizeCached;
@@ -73,7 +77,6 @@ inline uptr GetPageSizeCached() {
7377
return PageSizeCached;
7478
}
7579
#endif
76-
7780
uptr GetMmapGranularity();
7881
uptr GetMaxVirtualAddress();
7982
uptr GetMaxUserVirtualAddress();
@@ -88,7 +91,6 @@ void GetThreadStackAndTls(bool main, uptr *stk_addr, uptr *stk_size,
8891

8992
// Memory management
9093
void *MmapOrDie(uptr size, const char *mem_type, bool raw_report = false);
91-
9294
inline void *MmapOrDieQuietly(uptr size, const char *mem_type) {
9395
return MmapOrDie(size, mem_type, /*raw_report*/ true);
9496
}
@@ -137,8 +139,7 @@ void UnmapFromTo(uptr from, uptr to);
137139
// shadow_size_bytes bytes on the right, which on linux is mapped no access.
138140
// The high_mem_end may be updated if the original shadow size doesn't fit.
139141
uptr MapDynamicShadow(uptr shadow_size_bytes, uptr shadow_scale,
140-
uptr min_shadow_base_alignment, uptr &high_mem_end,
141-
uptr granularity);
142+
uptr min_shadow_base_alignment, uptr &high_mem_end);
142143

143144
// Let S = max(shadow_size, num_aliases * alias_size, ring_buffer_size).
144145
// Reserves 2*S bytes of address space to the right of the returned address and

compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,7 +1136,7 @@ uptr GetMaxUserVirtualAddress() {
11361136
return addr;
11371137
}
11381138

1139-
# if !SANITIZER_ANDROID || defined(__aarch64__)
1139+
# if !SANITIZER_ANDROID
11401140
uptr GetPageSize() {
11411141
# if SANITIZER_LINUX && (defined(__x86_64__) || defined(__i386__)) && \
11421142
defined(EXEC_PAGESIZE)
@@ -1155,7 +1155,7 @@ uptr GetPageSize() {
11551155
return sysconf(_SC_PAGESIZE); // EXEC_PAGESIZE may not be trustworthy.
11561156
# endif
11571157
}
1158-
# endif
1158+
# endif // !SANITIZER_ANDROID
11591159

11601160
uptr ReadBinaryName(/*out*/ char *buf, uptr buf_len) {
11611161
# if SANITIZER_SOLARIS

compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -995,8 +995,9 @@ void UnmapFromTo(uptr from, uptr to) {
995995
}
996996

997997
uptr MapDynamicShadow(uptr shadow_size_bytes, uptr shadow_scale,
998-
uptr min_shadow_base_alignment, UNUSED uptr &high_mem_end,
999-
uptr granularity) {
998+
uptr min_shadow_base_alignment,
999+
UNUSED uptr &high_mem_end) {
1000+
const uptr granularity = GetMmapGranularity();
10001001
const uptr alignment =
10011002
Max<uptr>(granularity << shadow_scale, 1ULL << min_shadow_base_alignment);
10021003
const uptr left_padding =

compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,8 +1188,8 @@ uptr GetMaxVirtualAddress() {
11881188
}
11891189

11901190
uptr MapDynamicShadow(uptr shadow_size_bytes, uptr shadow_scale,
1191-
uptr min_shadow_base_alignment, uptr &high_mem_end,
1192-
uptr granularity) {
1191+
uptr min_shadow_base_alignment, uptr &high_mem_end) {
1192+
const uptr granularity = GetMmapGranularity();
11931193
const uptr alignment =
11941194
Max<uptr>(granularity << shadow_scale, 1ULL << min_shadow_base_alignment);
11951195
const uptr left_padding =

compiler-rt/lib/sanitizer_common/sanitizer_win.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,8 +384,9 @@ bool DontDumpShadowMemory(uptr addr, uptr length) {
384384
}
385385

386386
uptr MapDynamicShadow(uptr shadow_size_bytes, uptr shadow_scale,
387-
uptr min_shadow_base_alignment, UNUSED uptr &high_mem_end,
388-
uptr granularity) {
387+
uptr min_shadow_base_alignment,
388+
UNUSED uptr &high_mem_end) {
389+
const uptr granularity = GetMmapGranularity();
389390
const uptr alignment =
390391
Max<uptr>(granularity << shadow_scale, 1ULL << min_shadow_base_alignment);
391392
const uptr left_padding =

0 commit comments

Comments
 (0)