On Fri, Sep 11, 2026 at 03:29:03PM +0100, Yeoreum Yun wrote: > check_vmflag_guard() uses /proc/self/smaps to retrieve the VMA flags, > but this can fail if the mapping is merged with an adjacent VMA. > > To avoid this potential failure, first allocate a temporary region with > extra pages at both ends, unmap it, and then map the test region within > the temporary address range, leaving an unmapped page on each side to > prevent VMA merging. > > Signed-off-by: Yeoreum Yun <[email protected]>
LGTM so: Reviewed-by: Lorenzo Stoakes (ARM) <[email protected]> Thanks! > --- > Change in v2: > - change the prot as PROT_NONE for placeholder region. > - add comment for clarification. > - Link to v1: > https://lore.kernel.org/all/[email protected]/ > --- > tools/testing/selftests/mm/guard-regions.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/tools/testing/selftests/mm/guard-regions.c > b/tools/testing/selftests/mm/guard-regions.c > index 5c8ec3ca75d7..b724d62d2b75 100644 > --- a/tools/testing/selftests/mm/guard-regions.c > +++ b/tools/testing/selftests/mm/guard-regions.c > @@ -2257,8 +2257,18 @@ TEST_F(guard_regions, smaps) > char *ptr, *ptr2; > int i; > > - /* Map a region. */ > - ptr = mmap_(self, variant, NULL, 10 * page_size, PROT_READ | > PROT_WRITE, 0, 0); > + /* Map then unmap placeholder to avoid adjacent merges */ > + ptr = mmap_(self, variant, NULL, 12 * page_size, PROT_NONE, 0, 0); > + ASSERT_NE(ptr, MAP_FAILED); > + ASSERT_EQ(munmap(ptr, 12 * page_size), 0); > + > + /* > + * Map a region for the test. Since the preceding temporary mapping > + * succeeded, this mapping should also succeed without merging with > + * adjacent VMAs. > + */ > + ptr = mmap_(self, variant, ptr + page_size, 10 * page_size, > + PROT_READ | PROT_WRITE, MAP_FIXED, 0); > ASSERT_NE(ptr, MAP_FAILED); > > /* We shouldn't yet see a guard flag. */ > -- > LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7} > -- Cheers, Lorenzo

