]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
x86/unwind/orc: Fix ORC unwind table alignment
authorJosh Poimboeuf <jpoimboe@redhat.com>
Wed, 6 Mar 2019 17:07:24 +0000 (11:07 -0600)
committerKleber Sacilotto de Souza <kleber.souza@canonical.com>
Wed, 14 Aug 2019 09:18:49 +0000 (11:18 +0200)
BugLink: https://bugs.launchpad.net/bugs/1837952
commit f76a16adc485699f95bb71fce114f97c832fe664 upstream.

The .orc_unwind section is a packed array of 6-byte structs.  It's
currently aligned to 6 bytes, which is causing warnings in the LLD
linker.

Six isn't a power of two, so it's not a valid alignment value.  The
actual alignment doesn't matter much because it's an array of packed
structs.  An alignment of two is sufficient.  In reality it always gets
aligned to four bytes because it comes immediately after the
4-byte-aligned .orc_unwind_ip section.

Fixes: ee9f8fce9964 ("x86/unwind: Add the ORC unwinder")
Reported-by: Nick Desaulniers <ndesaulniers@google.com>
Reported-by: Dmitry Golovin <dima@golovin.in>
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: stable@vger.kernel.org
Link: https://github.com/ClangBuiltLinux/linux/issues/218
Link: https://lkml.kernel.org/r/d55027ee95fe73e952dcd8be90aebd31b0095c45.1551892041.git.jpoimboe@redhat.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
include/asm-generic/vmlinux.lds.h

index 2f3019ba9571f13a03bd62803ddcbc99e0fc730e..4e51d2f098da7a55e39c1591214b0b0b094f8f5a 100644 (file)
                KEEP(*(.orc_unwind_ip))                                 \
                VMLINUX_SYMBOL(__stop_orc_unwind_ip) = .;               \
        }                                                               \
-       . = ALIGN(6);                                                   \
+       . = ALIGN(2);                                                   \
        .orc_unwind : AT(ADDR(.orc_unwind) - LOAD_OFFSET) {             \
                VMLINUX_SYMBOL(__start_orc_unwind) = .;                 \
                KEEP(*(.orc_unwind))                                    \