Bug 1659295
Summary: | kernel: Empty GNU_EH_FRAME segment in vDSO breaks libgcc unwinder | ||
---|---|---|---|
Product: | [Fedora] Fedora | Reporter: | Carlos O'Donell <codonell> |
Component: | kernel | Assignee: | Kernel Maintainer List <kernel-maint> |
Status: | CLOSED ERRATA | QA Contact: | Fedora Extras Quality Assurance <extras-qa> |
Severity: | medium | Docs Contact: | |
Priority: | medium | ||
Version: | 28 | CC: | airlied, aoliva, arjun.is, bskeggs, codonell, dj, ewk, fweimer, hdegoede, hongjiu.lu, ichavero, itamar, jarodwilson, jglisse, john.j5live, jonathan, josef, kernel-maint, labbott, law, linville, mchehab, mfabian, mjg59, mjw, pfrankli, rth, siddhesh, steved |
Target Milestone: | --- | ||
Target Release: | --- | ||
Hardware: | i686 | ||
OS: | Linux | ||
Whiteboard: | |||
Fixed In Version: | Doc Type: | If docs needed, set a value | |
Doc Text: | Story Points: | --- | |
Clone Of: | Environment: | ||
Last Closed: | 2019-01-29 17:02:51 UTC | Type: | Bug |
Regression: | --- | Mount Type: | --- |
Documentation: | --- | CRM: | |
Verified Versions: | Category: | --- | |
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
Cloudforms Team: | --- | Target Upstream Version: | |
Embargoed: | |||
Bug Depends On: | |||
Bug Blocks: | 1489998 |
Description
Carlos O'Donell
2018-12-14 02:37:48 UTC
When I rebuild glibc-2.27-36.fc28 (previous version) all of the same i686 tests fail. For debug/tst-backtrace5, I see this: Obtained backtrace with 3 functions But: /* Check that there are at least seven functions. */ if (n < NUM_FUNCTIONS) { FAIL (); return; } NUM_FUNCTIONS is 7. And: (gdb) print addresses $1 = {0x8049482 <handle_signal+18>, 0xf7fd2060 <__kernel_sigreturn>, 0xf7fd2049 <__kernel_vsyscall+9>, 0x0, 0x1000, 0x13c0, 0x0} (gdb) bt #0 0xf7e6d920 in printf () from /lib/libc.so.6 #1 0x080495b7 in handle_signal (signum=10) at tst-backtrace5.c:53 #2 <signal handler called> #3 0xf7fd2049 in __kernel_vsyscall () #4 0xf7ef33ab in read () from /lib/libc.so.6 #5 0x08049719 in fn (c=0, flags=0) at tst-backtrace5.c:127 #6 0x08049763 in fn (c=1, flags=0) at tst-backtrace5.c:103 #7 0x08049763 in fn (c=2, flags=0) at tst-backtrace5.c:103 #8 0x0804978c in do_test () at tst-backtrace5.c:135 #9 0x08049d72 in support_test_main (argc=1, argv=<optimized out>, config=0xffffcd64) at support_test_main.c:350 #10 0x0804935e in main (argc=2, argv=0xffffce54) at ../support/test-driver.c:168 So glibc's backtrace can no longer unwind through signal handlers, which of course breaks cancellation tests and more. Downgrading libgcc does not fix this. Downgrading to kernel-4.18.16-300.fc29.x86_64 fixes the problem. I believe the unwind information in the kernel vDSO is broken. The unwinding information has been stripped. /lib/modules/4.18.16-300.fc29.x86_64/vdso/vdso32.so has this: GNU_EH_FRAME 0x0005e4 0x000005e4 0x000005e4 0x000024 0x000024 R 0x4 But /lib/modules/4.19.8-300.fc29.x86_64/vdso/vdso32.so has this: GNU_EH_FRAME 0x000000 0x00000000 0x00000000 0x000000 0x000000 0x4 vdso64.so seems affected as well, but the libgcc fallback code in x86_frob_update_context seems to work there. Is this i686 only? If so, I want to update the proper tracker so the i686 SIG can track this. (In reply to Laura Abbott from comment #4) > Is this i686 only? If so, I want to update the proper tracker so the i686 > SIG can track this. No, the segment is missing from vdso64.so as well. The only difference appears to be that the unwinder is able to cope, but this may be because x86-64 using __kernel_rt_sigreturn (which is recognized by the unwinder), not __kernel_sigreturn. Issue appears to be caused by https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=379d98ddf41344273d9718556f761420f4dc80b3 , "x86: vdso: Use $LD instead of $CC to link". I don't know enough details to guess what's happening on but I'll report this to the maintainers unless someone beats me to it. Oops. Now I'm remembering where I saw this before. *** Bug 1651010 has been marked as a duplicate of this bug. *** *********** MASS BUG UPDATE ************** We apologize for the inconvenience. There are a large number of bugs to go through and several of them have gone stale. Due to this, we are doing a mass bug update across all of the Fedora 28 kernel bugs. Fedora 28 has now been rebased to 4.20.5-100.fc28. Please test this kernel update (or newer) and let us know if you issue has been resolved or if it is still present with the newer kernel. If you have moved on to Fedora 29, and are still experiencing this issue, please change the version to Fedora 29. If you experience different issues, please open a new bug report for those. I can confirm that this is fixed in kernel-4.20.4-200.fc29.x86_64. |