linux/tools/testing/selftests/proc
Alexey Dobriyan 5316a017d0 proc: fix PIE proc-empty-vm, proc-pid-vm tests
vsyscall detection code uses direct call to the beginning of
the vsyscall page:

	asm ("call %P0" :: "i" (0xffffffffff600000))

It generates "call rel32" instruction but it is not relocated if binary
is PIE, so binary segfaults into random userspace address and vsyscall
page status is detected incorrectly.

Do more direct:

	asm ("call *%rax")

which doesn't do need any relocaltions.

Mark g_vsyscall as volatile for a good measure, I didn't find instruction
setting it to 0. Now the code is obviously correct:

	xor	eax, eax
	mov	rdi, rbp
	mov	rsi, rbp
	mov	DWORD PTR [rip+0x2d15], eax      # g_vsyscall = 0
	mov	rax, 0xffffffffff600000
	call	rax
	mov	DWORD PTR [rip+0x2d02], 1        # g_vsyscall = 1
	mov	eax, DWORD PTR ds:0xffffffffff600000
	mov	DWORD PTR [rip+0x2cf1], 2        # g_vsyscall = 2
	mov	edi, [rip+0x2ceb]                # exit(g_vsyscall)
	call	exit

Note: fixed proc-empty-vm test oopses 5.19.0-28-generic kernel
	but this is separate story.

Link: https://lkml.kernel.org/r/Y7h2xvzKLg36DSq8@p183
Fixes: 5bc73bb345 ("proc: test how it holds up with mapping'less process")
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Reported-by: Mirsad Goran Todorovac <mirsad.todorovac@alu.unizg.hr>
Tested-by: Mirsad Goran Todorovac <mirsad.todorovac@alu.unizg.hr>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2023-01-11 16:14:22 -08:00
..
.gitignore proc: test how it holds up with mapping'less process 2022-10-11 18:51:11 -07:00
config
fd-001-lookup.c selftests: fix warning: "_GNU_SOURCE" redefined 2018-10-24 14:49:37 -06:00
fd-002-posix-eq.c
fd-003-kthread.c selftests: fix warning: "_GNU_SOURCE" redefined 2018-10-24 14:49:37 -06:00
Makefile proc: test how it holds up with mapping'less process 2022-10-11 18:51:11 -07:00
proc-empty-vm.c proc: fix PIE proc-empty-vm, proc-pid-vm tests 2023-01-11 16:14:22 -08:00
proc-fsconfig-hidepid.c proc: use human-readable values for hidepid 2020-04-22 10:51:22 -05:00
proc-loadavg-001.c selftests: proc: fix warning: _GNU_SOURCE redefined 2020-11-05 10:08:14 -07:00
proc-multiple-procfs.c proc: allow to mount many instances of proc in one pid namespace 2020-04-22 10:51:21 -05:00
proc-pid-vm.c proc: fix PIE proc-empty-vm, proc-pid-vm tests 2023-01-11 16:14:22 -08:00
proc-self-map-files-001.c
proc-self-map-files-002.c selftests: proc: Make va_max 1MB 2019-11-07 14:52:57 -07:00
proc-self-syscall.c selftests: proc: fix warning: _GNU_SOURCE redefined 2020-11-05 10:08:14 -07:00
proc-self-wchan.c proc: return exit code 4 for skipped tests 2019-03-05 21:07:21 -08:00
proc-subset-pid.c selftests: proc: test subset=pid 2021-05-06 19:24:11 -07:00
proc-tid0.c procfs: do not list TID 0 in /proc/<pid>/task 2021-11-09 10:02:48 -08:00
proc-uptime-001.c
proc-uptime-002.c proc: fixup uptime selftest 2022-11-18 13:55:08 -08:00
proc-uptime.h
proc.h proc: test /proc/thread-self symlink 2018-08-22 10:52:45 -07:00
read.c proc: mandate ->proc_lseek in "struct proc_ops" 2021-05-06 19:24:11 -07:00
self.c
setns-dcache.c proc: fix /proc/net/* after setns(2) 2019-02-01 15:46:22 -08:00
setns-sysvipc.c proc: test /proc/sysvipc vs setns(CLONE_NEWIPC) 2019-07-16 19:23:21 -07:00
thread-self.c proc: test /proc/thread-self symlink 2018-08-22 10:52:45 -07:00