On 9/10/26 13:30, Yeoreum Yun wrote:
>> On 9/10/26 13:22, Yeoreum Yun wrote:
>>>
>>> As I mentioned in my previous reply, what I’m trying to prevent here is
>>> a failure when checking, immediately after memory allocation,
>>> that a specific vm_flag is not set.
>>>
>>> Yes, I agree that this could have been a problem even before
>>> the internal changes to memalign(). An unwanted VMA merge could already
>>> occur at the time of memory allocation.
>>>
>>> So what I’m trying to avoid is a test failure where, due to such an
>>> unexpected VMA merge during allocation, the subsequent check that
>>> a specific vm_flag is not present fails.
>> Which is only a guard-region marker problem?
> 
> Yes. so if we remove ASSERT_FALSE(check_vmflag_guard(ptr)), TBH
> we don't need this patch unless other usage comes up to prevent unwanted
> VMA merge.
> 
> Would it be better to drop ASSERT_FALSE(check_vmflag_guard(ptr)) in
> guard test?

I guess there is value in asserting that not all VMAs by accident start
with an over-indication of maybe having guard pages, which is why Lorenzo
added that check :)

But I think even alloc_isolated_mem() is wrong in that regard: if the
original VMA gets merged, we could inherit the guard-marker, no?

Maybe the following would be good enough?

diff --git a/tools/testing/selftests/mm/guard-regions.c 
b/tools/testing/selftests/mm/guard-regions.c
index 5c8ec3ca75d7d..791bf6a68b9e6 100644
--- a/tools/testing/selftests/mm/guard-regions.c
+++ b/tools/testing/selftests/mm/guard-regions.c
@@ -2257,10 +2257,20 @@ 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);
+       /* Reserve a 10 page region with 1 page space to both sides. */
+       ptr = mmap_(self, variant, NULL, 12 * page_size, PROT_NONE, 0, 0);
        ASSERT_NE(ptr, MAP_FAILED);

+       /* Map a new region that is guaranteed to not get merged in any way. */
+       ptr = mmap_(self, variant | MAP_FIXED, ptr + pagesize, 10 * page_size,
+                   PROT_READ | PROT_WRITE, 0, 0);
+       ASSERT_EQ(ptr, ptr + pagesize);
+
+       /* Clean up the excess pages left and right. */
+       munmap(ptr, pagesize);
+       munmap(ptr + 11, pagesize);
+       ptr + = pagesize;
+
        /* We shouldn't yet see a guard flag. */
        ASSERT_FALSE(check_vmflag_guard(ptr));

-- 
Cheers,

David

Reply via email to