]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commit
x86/unwind: Add the ORC unwinder
authorJosh Poimboeuf <jpoimboe@redhat.com>
Mon, 24 Jul 2017 23:36:57 +0000 (18:36 -0500)
committerKleber Sacilotto de Souza <kleber.souza@canonical.com>
Sat, 6 Jan 2018 12:22:22 +0000 (13:22 +0100)
commitdccbf63d7a6cc431af23a86e28275a74904545cd
tree58263dee6a1f51323546b482707df63ce67568b5
parenta1fed2e10e84d48643a09861c2d127968621813e
x86/unwind: Add the ORC unwinder

CVE-2017-5754

Add the new ORC unwinder which is enabled by CONFIG_ORC_UNWINDER=y.
It plugs into the existing x86 unwinder framework.

It relies on objtool to generate the needed .orc_unwind and
.orc_unwind_ip sections.

For more details on why ORC is used instead of DWARF, see
Documentation/x86/orc-unwinder.txt - but the short version is
that it's a simplified, fundamentally more robust debugninfo
data structure, which also allows up to two orders of magnitude
faster lookups than the DWARF unwinder - which matters to
profiling workloads like perf.

Thanks to Andy Lutomirski for the performance improvement ideas:
splitting the ORC unwind table into two parallel arrays and creating a
fast lookup table to search a subset of the unwind table.

Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Jiri Slaby <jslaby@suse.cz>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: live-patching@vger.kernel.org
Link: http://lkml.kernel.org/r/0a6cbfb40f8da99b7a45a1a8302dc6aef16ec812.1500938583.git.jpoimboe@redhat.com
[ Extended the changelog. ]
Signed-off-by: Ingo Molnar <mingo@kernel.org>
(cherry picked from commit ee9f8fce99640811b2b8e79d0d1dbe8bab69ba67)
Signed-off-by: Andy Whitcroft <apw@canonical.com>
Signed-off-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
18 files changed:
Documentation/x86/orc-unwinder.txt [new file with mode: 0644]
arch/um/include/asm/unwind.h [new file with mode: 0644]
arch/x86/Kconfig
arch/x86/Kconfig.debug
arch/x86/include/asm/module.h
arch/x86/include/asm/orc_lookup.h [new file with mode: 0644]
arch/x86/include/asm/orc_types.h
arch/x86/include/asm/unwind.h
arch/x86/kernel/Makefile
arch/x86/kernel/module.c
arch/x86/kernel/setup.c
arch/x86/kernel/unwind_frame.c
arch/x86/kernel/unwind_guess.c
arch/x86/kernel/unwind_orc.c [new file with mode: 0644]
arch/x86/kernel/vmlinux.lds.S
include/asm-generic/vmlinux.lds.h
lib/Kconfig.debug
scripts/Makefile.build