@@ -36,15 +36,20 @@ decltype(__hwasan_shadow)* __hwasan_premap_shadow();
36
36
37
37
namespace __hwasan {
38
38
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
+
39
45
// Conservative upper limit.
40
46
static uptr PremapShadowSize () {
41
- return RoundUpTo (GetMaxVirtualAddress () >> kShadowScale ,
42
- GetMmapGranularity ());
47
+ return RoundUpTo (GetMaxVirtualAddress () >> kShadowScale , kMaxGranularity );
43
48
}
44
49
45
50
static uptr PremapShadow () {
46
51
return MapDynamicShadow (PremapShadowSize (), kShadowScale ,
47
- kShadowBaseAlignment , kHighMemEnd );
52
+ kShadowBaseAlignment , kHighMemEnd , kMaxGranularity );
48
53
}
49
54
50
55
static bool IsPremapShadowAvailable () {
@@ -56,7 +61,7 @@ static bool IsPremapShadowAvailable() {
56
61
}
57
62
58
63
static uptr FindPremappedShadowStart (uptr shadow_size_bytes) {
59
- const uptr granularity = GetMmapGranularity () ;
64
+ const uptr granularity = kMaxGranularity ;
60
65
const uptr shadow_start = reinterpret_cast <uptr>(&__hwasan_shadow);
61
66
const uptr premap_shadow_size = PremapShadowSize ();
62
67
const uptr shadow_size = RoundUpTo (shadow_size_bytes, granularity);
@@ -109,7 +114,7 @@ uptr FindDynamicShadowStart(uptr shadow_size_bytes) {
109
114
if (IsPremapShadowAvailable ())
110
115
return FindPremappedShadowStart (shadow_size_bytes);
111
116
return MapDynamicShadow (shadow_size_bytes, kShadowScale , kShadowBaseAlignment ,
112
- kHighMemEnd );
117
+ kHighMemEnd , kMaxGranularity );
113
118
}
114
119
115
120
} // namespace __hwasan
@@ -135,7 +140,7 @@ uptr FindDynamicShadowStart(uptr shadow_size_bytes) {
135
140
RingBufferSize ());
136
141
# endif
137
142
return MapDynamicShadow (shadow_size_bytes, kShadowScale , kShadowBaseAlignment ,
138
- kHighMemEnd );
143
+ kHighMemEnd , GetMmapGranularity () );
139
144
}
140
145
141
146
} // namespace __hwasan
0 commit comments