@@ -36,15 +36,20 @@ decltype(__hwasan_shadow)* __hwasan_premap_shadow();
3636
3737namespace __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+
3945// Conservative upper limit.
4046static uptr PremapShadowSize () {
41- return RoundUpTo (GetMaxVirtualAddress () >> kShadowScale ,
42- GetMmapGranularity ());
47+ return RoundUpTo (GetMaxVirtualAddress () >> kShadowScale , kMaxGranularity );
4348}
4449
4550static uptr PremapShadow () {
4651 return MapDynamicShadow (PremapShadowSize (), kShadowScale ,
47- kShadowBaseAlignment , kHighMemEnd );
52+ kShadowBaseAlignment , kHighMemEnd , kMaxGranularity );
4853}
4954
5055static bool IsPremapShadowAvailable () {
@@ -56,7 +61,7 @@ static bool IsPremapShadowAvailable() {
5661}
5762
5863static uptr FindPremappedShadowStart (uptr shadow_size_bytes) {
59- const uptr granularity = GetMmapGranularity () ;
64+ const uptr granularity = kMaxGranularity ;
6065 const uptr shadow_start = reinterpret_cast <uptr>(&__hwasan_shadow);
6166 const uptr premap_shadow_size = PremapShadowSize ();
6267 const uptr shadow_size = RoundUpTo (shadow_size_bytes, granularity);
@@ -109,7 +114,7 @@ uptr FindDynamicShadowStart(uptr shadow_size_bytes) {
109114 if (IsPremapShadowAvailable ())
110115 return FindPremappedShadowStart (shadow_size_bytes);
111116 return MapDynamicShadow (shadow_size_bytes, kShadowScale , kShadowBaseAlignment ,
112- kHighMemEnd );
117+ kHighMemEnd , kMaxGranularity );
113118}
114119
115120} // namespace __hwasan
@@ -135,7 +140,7 @@ uptr FindDynamicShadowStart(uptr shadow_size_bytes) {
135140 RingBufferSize ());
136141# endif
137142 return MapDynamicShadow (shadow_size_bytes, kShadowScale , kShadowBaseAlignment ,
138- kHighMemEnd );
143+ kHighMemEnd , GetMmapGranularity () );
139144}
140145
141146} // namespace __hwasan
0 commit comments