On Fri, Aug 16, 2024 at 7:20 PM Jeff Xu <jeffxu@xxxxxxxxxxxx> wrote: > > On Fri, Aug 16, 2024 at 11:09 AM Pedro Falcato <pedro.falcato@xxxxxxxxx> wrote: > > > > On Fri, Aug 16, 2024 at 6:07 PM Jeff Xu <jeffxu@xxxxxxxxxxxx> wrote: > > > Please run this test on the latest kernel branch to verify: > > > > > > static void test_munmap_free_multiple_ranges(bool seal) > > > { > > > void *ptr; > > > unsigned long page_size = getpagesize(); > > > unsigned long size = 8 * page_size; > > > int ret; > > > int prot; > > > > > > setup_single_address(size, &ptr); > > > FAIL_TEST_IF_FALSE(ptr != (void *)-1); > > > > > > /* unmap one page from beginning. */ > > > ret = sys_munmap(ptr, page_size); > > > FAIL_TEST_IF_FALSE(!ret); > > > > > > /* unmap one page from middle. */ > > > ret = sys_munmap(ptr + 4 * page_size, page_size); > > > FAIL_TEST_IF_FALSE(!ret); > > > > > > /* seal the last page */ > > > if (seal) { > > > ret = sys_mseal(ptr + 7 * page_size, page_size); > > > FAIL_TEST_IF_FALSE(!ret); > > > } > > > > > > /* munmap all 8 pages from beginning */ > > > ret = sys_munmap(ptr, 8 * page_size); > > > if (seal) { > > > FAIL_TEST_IF_FALSE(ret < 0); > > > > > > /* verify none of existing pages in the range are unmapped */ > > > size = get_vma_size(ptr + page_size, &prot); > > > FAIL_TEST_IF_FALSE(size == 3 * page_size); > > > FAIL_TEST_IF_FALSE(prot == 4); > > > > > > size = get_vma_size(ptr + 5 * page_size, &prot); > > > FAIL_TEST_IF_FALSE(size == 2 * page_size); > > > FAIL_TEST_IF_FALSE(prot == 4); > > > > > > size = get_vma_size(ptr + 7 * page_size, &prot); > > > FAIL_TEST_IF_FALSE(size == 1 * page_size); > > > FAIL_TEST_IF_FALSE(prot == 4); > > > } else { > > > FAIL_TEST_IF_FALSE(!ret); > > > > > > /* verify all pages are unmapped */ > > > for (int i = 0; i < 8; i++) { > > > size = get_vma_size(ptr, &prot); > > > FAIL_TEST_IF_FALSE(size == 0); > > > } > > > } > > > > > > REPORT_TEST_PASS(); > > > } > > > > > > > FWIW this test does not work correctly on my end due to sealed VMAs > > getting merged. I hacked up setup_single_address to work around that, > > and the test does pass on both 6.10.5 and my local mseal changes > > branch. > Yes. you would need to comment out other tests and run this test only, > it didn't consider the case that sealed vma will merge with another > sealed vma (created from another test) > > The test didn't pass with the V2 patch (the seal = true) case. Because we... found a bug in my munmap changes. The fixed v3 I'm planning to send out does indeed pass. -- Pedro