s390/vdso64: add sigreturn,rt_sigreturn and restart_syscall
authorSven Schnelle <svens@linux.ibm.com>
Fri, 25 Jun 2021 12:48:28 +0000 (14:48 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Thu, 8 Jul 2021 13:37:28 +0000 (15:37 +0200)
Add minimalistic trampolines to vdso64 so we can return from signal
without using the stack which requires pgm check handler hacks when
NX is enabled.

restart_syscall will be called from vdso to work around the architectural
limitation that the syscall number might be encoded in the svc instruction,
and therefore can not be changed.

Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/kernel/vdso64/vdso64.lds.S
arch/s390/kernel/vdso64/vdso_user_wrapper.S

index 518f1ea..489a72a 100644 (file)
@@ -137,6 +137,9 @@ VERSION
                __kernel_clock_gettime;
                __kernel_clock_getres;
                __kernel_getcpu;
+               __kernel_restart_syscall;
+               __kernel_rt_sigreturn;
+               __kernel_sigreturn;
        local: *;
        };
 }
index f773505..97f0c0a 100644 (file)
@@ -37,3 +37,20 @@ vdso_func gettimeofday
 vdso_func clock_getres
 vdso_func clock_gettime
 vdso_func getcpu
+
+.macro vdso_syscall func,syscall
+       .globl __kernel_\func
+       .type  __kernel_\func,@function
+       .align 8
+__kernel_\func:
+       CFI_STARTPROC
+       svc     \syscall
+       /* Make sure we notice when a syscall returns, which shouldn't happen */
+       .word   0
+       CFI_ENDPROC
+       .size   __kernel_\func,.-__kernel_\func
+.endm
+
+vdso_syscall restart_syscall,__NR_restart_syscall
+vdso_syscall sigreturn,__NR_sigreturn
+vdso_syscall rt_sigreturn,__NR_rt_sigreturn