Message ID | 20210209150240.epboynhzuaia4qyr@work-tp |
---|---|
State | New |
Headers | show |
Series | powerpc/64/signal: Fix regression in __kernel_sigtramp_rt64() semantics | expand |
On Tue, Feb 09, 2021 at 12:02:40PM -0300, Raoni Fassina Firmino wrote: > Repeated the same tests as the upstream code on top of v5.10.14 and > v5.9.16, tested on powerpc64 and powerpc64le, with a glibc build and > running the affected glibc's testcase[2], inspected that glibc's > backtrace() now gives the correct result and gdb backtrace also keeps > working as before. > > I believe this should be backported to releases 5.9 and 5.10 as > userspace is affected in this releases. I hope I had tagged this > correctly in the patch. Now added to 5.10.y, 5.9.y is long end-of-life so there is nothing we can do there, sorry. thanks for the backport, greg k-h
On Wed, Feb 10, 2021 at 03:27:05PM +0100, Greg KH wrote: > On Tue, Feb 09, 2021 at 12:02:40PM -0300, Raoni Fassina Firmino wrote: > > Repeated the same tests as the upstream code on top of v5.10.14 and > > v5.9.16, tested on powerpc64 and powerpc64le, with a glibc build and > > running the affected glibc's testcase[2], inspected that glibc's > > backtrace() now gives the correct result and gdb backtrace also keeps > > working as before. > > > > I believe this should be backported to releases 5.9 and 5.10 as > > userspace is affected in this releases. I hope I had tagged this > > correctly in the patch. > > Now added to 5.10.y, 5.9.y is long end-of-life so there is nothing we > can do there, sorry. No problem, I didn't know 5.9.y was already EOL, that is on me. Thanks, o/ Raoni
On Thu, Feb 11, 2021 at 08:28:09AM -0300, Raoni Fassina Firmino wrote: > On Wed, Feb 10, 2021 at 03:27:05PM +0100, Greg KH wrote: > > On Tue, Feb 09, 2021 at 12:02:40PM -0300, Raoni Fassina Firmino wrote: > > > Repeated the same tests as the upstream code on top of v5.10.14 and > > > v5.9.16, tested on powerpc64 and powerpc64le, with a glibc build and > > > running the affected glibc's testcase[2], inspected that glibc's > > > backtrace() now gives the correct result and gdb backtrace also keeps > > > working as before. > > > > > > I believe this should be backported to releases 5.9 and 5.10 as > > > userspace is affected in this releases. I hope I had tagged this > > > correctly in the patch. > > > > Now added to 5.10.y, 5.9.y is long end-of-life so there is nothing we > > can do there, sorry. > > No problem, I didn't know 5.9.y was already EOL, that is on me. Hint, in the future www.kernel.org shows you this :)
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index 8dad44262e75..495ffc9cf5e2 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c @@ -475,7 +475,7 @@ static __init void vdso_setup_trampolines(struct lib32_elfinfo *v32, */ #ifdef CONFIG_PPC64 - vdso64_rt_sigtramp = find_function64(v64, "__kernel_sigtramp_rt64"); + vdso64_rt_sigtramp = find_function64(v64, "__kernel_start_sigtramp_rt64"); #endif vdso32_sigtramp = find_function32(v32, "__kernel_sigtramp32"); vdso32_rt_sigtramp = find_function32(v32, "__kernel_sigtramp_rt32"); diff --git a/arch/powerpc/kernel/vdso64/sigtramp.S b/arch/powerpc/kernel/vdso64/sigtramp.S index bbf68cd01088..2d4067561293 100644 --- a/arch/powerpc/kernel/vdso64/sigtramp.S +++ b/arch/powerpc/kernel/vdso64/sigtramp.S @@ -15,11 +15,20 @@ .text +/* + * __kernel_start_sigtramp_rt64 and __kernel_sigtramp_rt64 together + * are one function split in two parts. The kernel jumps to the former + * and the signal handler indirectly (by blr) returns to the latter. + * __kernel_sigtramp_rt64 needs to point to the return address so + * glibc can correctly identify the trampoline stack frame. + */ .balign 8 .balign IFETCH_ALIGN_BYTES -V_FUNCTION_BEGIN(__kernel_sigtramp_rt64) +V_FUNCTION_BEGIN(__kernel_start_sigtramp_rt64) .Lsigrt_start: bctrl /* call the handler */ +V_FUNCTION_END(__kernel_start_sigtramp_rt64) +V_FUNCTION_BEGIN(__kernel_sigtramp_rt64) addi r1, r1, __SIGNAL_FRAMESIZE li r0,__NR_rt_sigreturn sc diff --git a/arch/powerpc/kernel/vdso64/vdso64.lds.S b/arch/powerpc/kernel/vdso64/vdso64.lds.S index 256fb9720298..bd120f590b9e 100644 --- a/arch/powerpc/kernel/vdso64/vdso64.lds.S +++ b/arch/powerpc/kernel/vdso64/vdso64.lds.S @@ -150,6 +150,7 @@ VERSION __kernel_get_tbfreq; __kernel_sync_dicache; __kernel_sync_dicache_p5; + __kernel_start_sigtramp_rt64; __kernel_sigtramp_rt64; __kernel_getcpu; __kernel_time;