lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20221125103740.2062285-1-vincent.whitchurch@axis.com> Date: Fri, 25 Nov 2022 11:37:40 +0100 From: Vincent Whitchurch <vincent.whitchurch@...s.com> To: Catalin Marinas <catalin.marinas@....com>, Will Deacon <will@...nel.org> CC: <kernel@...s.com>, Vincent Whitchurch <vincent.whitchurch@...s.com>, Tamas Zsoldos <tamas.zsoldos@....com>, Szabolcs Nagy <szabolcs.nagy@....com>, Daniel Kiss <daniel.kiss@....com>, Vincenzo Frascino <vincenzo.frascino@....com>, Ard Biesheuvel <ardb@...nel.org>, <linux-arm-kernel@...ts.infradead.org>, <linux-kernel@...r.kernel.org> Subject: [PATCH] arm64: vdso: Include .eh_frame in debug ELF We currently strip out .eh_frame to work around crashes in libgcc when it tries to unwind out of signal handlers, see commit 87676cfca141 ("arm64: vdso: Disable dwarf unwinding through the sigreturn trampoline"). The .eh_frame does however have correct unwind information for the functions implemented in C in vgettimeofday.c, but currently this information is not available even for offline unwinding using the vdso.so.dbg. As a result of this, perf built with libdw is unable to unwind the stack when the PC is inside one of these functions. To fix this, strip the .eh_frame section only from the vdso.so and not from the vdso.so.dbg. This can be used by offline unwinders with access to the debug symbols, and will not affect libgcc since the section will still not be present in the normal vDSO. Cc: Tamas Zsoldos <tamas.zsoldos@....com> Cc: Szabolcs Nagy <szabolcs.nagy@....com> Cc: Daniel Kiss <daniel.kiss@....com> Cc: Vincenzo Frascino <vincenzo.frascino@....com> Cc: Ard Biesheuvel <ardb@...nel.org> Signed-off-by: Vincent Whitchurch <vincent.whitchurch@...s.com> --- arch/arm64/kernel/vdso/Makefile | 2 +- arch/arm64/kernel/vdso/vdso.lds.S | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile index 619e2dc7ee14..91aac17e11bc 100644 --- a/arch/arm64/kernel/vdso/Makefile +++ b/arch/arm64/kernel/vdso/Makefile @@ -65,7 +65,7 @@ $(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE $(call if_changed,vdsold_and_vdso_check) # Strip rule for the .so file -$(obj)/%.so: OBJCOPYFLAGS := -S +$(obj)/%.so: OBJCOPYFLAGS := -S --remove-section=.eh_frame --remove-section=.eh_frame_hdr $(obj)/%.so: $(obj)/%.so.dbg FORCE $(call if_changed,objcopy) diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S index 6028f1fe2d1c..66abf70efc58 100644 --- a/arch/arm64/kernel/vdso/vdso.lds.S +++ b/arch/arm64/kernel/vdso/vdso.lds.S @@ -31,6 +31,8 @@ SECTIONS .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } + .eh_frame : { *(.eh_frame) } + .eh_frame_hdr : { *(.eh_frame_hdr) } /* * Discard .note.gnu.property sections which are unused and have @@ -78,7 +80,6 @@ SECTIONS /DISCARD/ : { *(.data .data.* .gnu.linkonce.d.* .sdata*) *(.bss .sbss .dynbss .dynsbss) - *(.eh_frame .eh_frame_hdr) } } -- 2.34.1
Powered by blists - more mailing lists