• David Hildenbrand's avatar
    selftests/mm: mkdirty: test behavior of (pte|pmd)_mkdirty on VMAs without write permissions · 9eac40fc
    David Hildenbrand authored
    Let's add some tests that trigger (pte|pmd)_mkdirty on VMAs without write
    permissions.  If an architecture implementation is wrong, we might
    accidentally set the PTE/PMD writable and allow for write access in a VMA
    without write permissions.
    
    The tests include reproducers for the two issues recently discovered
    and worked-around in core-MM for now:
    
    (1) commit 624a2c94 ("Partly revert "mm/thp: carry over dirty
        bit when thp splits on pmd"")
    (2) commit 96a9c287 ("mm/migrate: fix wrongly apply write bit
        after mkdirty on sparc64")
    
    In addition, some other tests that reveal further issues.
    
    All tests pass under x86_64:
    	./mkdirty
    	# [INFO] detected THP size: 2048 KiB
    	TAP version 13
    	1..6
    	# [INFO] PTRACE write access
    	ok 1 SIGSEGV generated, page not modified
    	# [INFO] PTRACE write access to THP
    	ok 2 SIGSEGV generated, page not modified
    	# [INFO] Page migration
    	ok 3 SIGSEGV generated, page not modified
    	# [INFO] Page migration of THP
    	ok 4 SIGSEGV generated, page not modified
    	# [INFO] PTE-mapping a THP
    	ok 5 SIGSEGV generated, page not modified
    	# [INFO] UFFDIO_COPY
    	ok 6 SIGSEGV generated, page not modified
    	# Totals: pass:6 fail:0 xfail:0 xpass:0 skip:0 error:0
    
    But some fail on sparc64:
    	./mkdirty
    	# [INFO] detected THP size: 8192 KiB
    	TAP version 13
    	1..6
    	# [INFO] PTRACE write access
    	not ok 1 SIGSEGV generated, page not modified
    	# [INFO] PTRACE write access to THP
    	not ok 2 SIGSEGV generated, page not modified
    	# [INFO] Page migration
    	ok 3 SIGSEGV generated, page not modified
    	# [INFO] Page migration of THP
    	ok 4 SIGSEGV generated, page not modified
    	# [INFO] PTE-mapping a THP
    	ok 5 SIGSEGV generated, page not modified
    	# [INFO] UFFDIO_COPY
    	not ok 6 SIGSEGV generated, page not modified
    	Bail out! 3 out of 6 tests failed
    	# Totals: pass:3 fail:3 xfail:0 xpass:0 skip:0 error:0
    
    Reverting both above commits makes all tests fail on sparc64:
    	./mkdirty
    	# [INFO] detected THP size: 8192 KiB
    	TAP version 13
    	1..6
    	# [INFO] PTRACE write access
    	not ok 1 SIGSEGV generated, page not modified
    	# [INFO] PTRACE write access to THP
    	not ok 2 SIGSEGV generated, page not modified
    	# [INFO] Page migration
    	not ok 3 SIGSEGV generated, page not modified
    	# [INFO] Page migration of THP
    	not ok 4 SIGSEGV generated, page not modified
    	# [INFO] PTE-mapping a THP
    	not ok 5 SIGSEGV generated, page not modified
    	# [INFO] UFFDIO_COPY
    	not ok 6 SIGSEGV generated, page not modified
    	Bail out! 6 out of 6 tests failed
    	# Totals: pass:0 fail:6 xfail:0 xpass:0 skip:0 error:0
    
    The tests are useful to detect other problematic archs, to verify new
    arch fixes, and to stop such issues from reappearing in the future.
    
    For now, we don't add any hugetlb tests.
    
    Link: https://lkml.kernel.org/r/20230411142512.438404-3-david@redhat.comSigned-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Cc: Anshuman Khandual <anshuman.khandual@arm.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Sam Ravnborg <sam@ravnborg.org>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Yu Zhao <yuzhao@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    9eac40fc
mkdirty.c 8.85 KB