• Alexey Dobriyan's avatar
    proc: test how it holds up with mapping'less process · 5bc73bb3
    Alexey Dobriyan authored
    Create process without mappings and check
    
    	/proc/*/maps
    	/proc/*/numa_maps
    	/proc/*/smaps
    	/proc/*/smaps_rollup
    
    They must be empty (excluding vsyscall page) or full of zeroes.
    
    Retroactively this test should've caught embarassing /proc/*/smaps_rollup
    oops:
    
    [17752.703567] BUG: kernel NULL pointer dereference, address: 0000000000000000
    [17752.703580] #PF: supervisor read access in kernel mode
    [17752.703583] #PF: error_code(0x0000) - not-present page
    [17752.703587] PGD 0 P4D 0
    [17752.703593] Oops: 0000 [#1] PREEMPT SMP PTI
    [17752.703598] CPU: 0 PID: 60649 Comm: cat Tainted: G        W         5.19.9-100.fc35.x86_64 #1
    [17752.703603] Hardware name: To Be Filled By O.E.M. To Be Filled By O.E.M./X99 Extreme6/3.1, BIOS P3.30 08/05/2016
    [17752.703607] RIP: 0010:show_smaps_rollup+0x159/0x2e0
    
    Note 1:
    	ProtectionKey field in /proc/*/smaps is optional,
    	so check most of its contents, not everything.
    
    Note 2:
    	due to the nature of this test, child process hardly can signal
    	its readiness (after unmapping everything!) to parent.
    	I feel like "sleep(1)" is justified.
    	If you know how to do it without sleep please tell me.
    
    Note 3:
    	/proc/*/statm is not tested but can be.
    
    Link: https://lkml.kernel.org/r/Yz3liL6Dn+n2SD8Q@localhost.localdomainSigned-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    5bc73bb3
proc-empty-vm.c 9.98 KB