From: Kees Cook <keescook@chromium.org> To: Will Deacon <will@kernel.org> Cc: Kees Cook <keescook@chromium.org>, Catalin Marinas <catalin.marinas@arm.com>, Mark Rutland <mark.rutland@arm.com>, Ard Biesheuvel <ardb@kernel.org>, Peter Collingbourne <pcc@google.com>, James Morse <james.morse@arm.com>, Borislav Petkov <bp@suse.de>, Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>, Russell King <linux@armlinux.org.uk>, Masahiro Yamada <masahiroy@kernel.org>, Arvind Sankar <nivedita@alum.mit.edu>, Nick Desaulniers <ndesaulniers@google.com>, Nathan Chancellor <natechancellor@gmail.com>, Arnd Bergmann <arnd@arndb.de>, x86@kernel.org, clang-built-linux@googlegroups.com, linux-arch@vger.kernel.org, linux-efi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 00/17] Warn on orphan section placement Date: Sun, 28 Jun 2020 23:18:23 -0700 Message-ID: <20200629061840.4065483-1-keescook@chromium.org> (raw) v4: - explicitly add .ARM.attributes - split up arm64 changes into separate patches - split up arm changes into separate patches - work around Clang section generation bug in -mbranch-protection - work around Clang section generation bug in KASAN and KCSAN - split "common" ELF sections out of STABS_DEBUG - changed relative position of .comment - add reviews/acks v3: https://lore.kernel.org/lkml/20200624014940.1204448-1-keescook@chromium.org/ v2: https://lore.kernel.org/lkml/20200622205815.2988115-1-keescook@chromium.org/ v1: https://lore.kernel.org/lkml/20200228002244.15240-1-keescook@chromium.org/ A recent bug[1] was solved for builds linked with ld.lld, and tracking it down took way longer than it needed to (a year). Ultimately, it boiled down to differences between ld.bfd and ld.lld's handling of orphan sections. Similarly, the recent FGKASLR series brough up orphan section handling too[2]. In both cases, it would have been nice if the linker was running with --orphan-handling=warn so that surprise sections wouldn't silently get mapped into the kernel image at locations up to the whim of the linker's orphan handling logic. Instead, all desired sections should be explicitly identified in the linker script (to be either kept or discarded) with any orphans throwing a warning. The powerpc architecture actually already does this, so this series extends coverage to x86, arm, and arm64. All three architectures depend on the first four commits (to vmlinux.lds.h), and arm64 depends on the 5th and 6th patches (to ctype, and efi/libstub). As such, I'd like to land this series as a whole. Given that two thirds of it is in the arm universe, perhaps this can land via the arm64 tree? If x86 -tip is preferred, that works too. Or I could just carry this myself in -next. In all cases, I would really appreciate reviews/acks/etc. :) Thanks! -Kees https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git/log/?h=linker/orphans/warn/v4 Kees Cook (17): vmlinux.lds.h: Add .gnu.version* to DISCARDS vmlinux.lds.h: Avoid KASAN and KCSAN's unwanted sections vmlinux.lds.h: Split ELF_DETAILS from STABS_DEBUG vmlinux.lds.h: Add .symtab, .strtab, and .shstrtab to ELF_DETAILS ctype: Work around Clang -mbranch-protection=none bug efi/libstub: Disable -mbranch-protection arm64/build: Use common DISCARDS in linker script arm64/mm: Remove needless section quotes arm64/build: Remove .eh_frame* sections due to unwind tables arm64/kernel: Remove needless Call Frame Information annotations arm64/build: Warn on orphan section placement arm/build: Refactor linker script headers arm/build: Explicitly keep .ARM.attributes sections arm/build: Warn on orphan section placement arm/boot: Warn on orphan section placement x86/build: Warn on orphan section placement x86/boot: Warn on orphan section placement arch/alpha/kernel/vmlinux.lds.S | 1 + arch/arc/kernel/vmlinux.lds.S | 1 + arch/arm/boot/compressed/Makefile | 2 ++ arch/arm/boot/compressed/vmlinux.lds.S | 18 +++++----- .../arm/{kernel => include/asm}/vmlinux.lds.h | 25 ++++++++++--- arch/arm/kernel/vmlinux-xip.lds.S | 6 ++-- arch/arm/kernel/vmlinux.lds.S | 6 ++-- arch/arm64/Makefile | 9 ++++- arch/arm64/kernel/smccc-call.S | 2 -- arch/arm64/kernel/vmlinux.lds.S | 17 ++++++--- arch/arm64/mm/mmu.c | 2 +- arch/csky/kernel/vmlinux.lds.S | 1 + arch/hexagon/kernel/vmlinux.lds.S | 1 + arch/ia64/kernel/vmlinux.lds.S | 1 + arch/mips/kernel/vmlinux.lds.S | 1 + arch/nds32/kernel/vmlinux.lds.S | 1 + arch/nios2/kernel/vmlinux.lds.S | 1 + arch/openrisc/kernel/vmlinux.lds.S | 1 + arch/parisc/boot/compressed/vmlinux.lds.S | 1 + arch/parisc/kernel/vmlinux.lds.S | 1 + arch/powerpc/kernel/vmlinux.lds.S | 2 +- arch/riscv/kernel/vmlinux.lds.S | 1 + arch/s390/kernel/vmlinux.lds.S | 1 + arch/sh/kernel/vmlinux.lds.S | 1 + arch/sparc/kernel/vmlinux.lds.S | 1 + arch/um/kernel/dyn.lds.S | 2 +- arch/um/kernel/uml.lds.S | 2 +- arch/unicore32/kernel/vmlinux.lds.S | 1 + arch/x86/Makefile | 8 ++++- arch/x86/boot/compressed/Makefile | 3 +- arch/x86/boot/compressed/vmlinux.lds.S | 12 +++++++ arch/x86/include/asm/asm.h | 6 +++- arch/x86/kernel/vmlinux.lds.S | 7 ++++ drivers/firmware/efi/libstub/Makefile | 3 +- include/asm-generic/vmlinux.lds.h | 35 +++++++++++++++++-- lib/ctype.c | 10 ++++++ 36 files changed, 154 insertions(+), 39 deletions(-) rename arch/arm/{kernel => include/asm}/vmlinux.lds.h (88%) -- 2.25.1
next reply index Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-06-29 6:18 Kees Cook [this message] 2020-06-29 6:18 ` [PATCH v4 01/17] vmlinux.lds.h: Add .gnu.version* to DISCARDS Kees Cook 2020-06-29 6:18 ` [PATCH v4 02/17] vmlinux.lds.h: Avoid KASAN and KCSAN's unwanted sections Kees Cook 2020-06-29 6:18 ` [PATCH v4 03/17] vmlinux.lds.h: Split ELF_DETAILS from STABS_DEBUG Kees Cook 2020-06-29 6:18 ` [PATCH v4 04/17] vmlinux.lds.h: Add .symtab, .strtab, and .shstrtab to ELF_DETAILS Kees Cook 2020-06-29 6:18 ` [PATCH v4 05/17] ctype: Work around Clang -mbranch-protection=none bug Kees Cook 2020-06-29 8:15 ` Ard Biesheuvel 2020-06-29 14:43 ` Kees Cook 2020-06-29 15:06 ` Kees Cook 2020-06-29 15:08 ` Ard Biesheuvel 2020-06-29 15:16 ` Kees Cook 2020-06-29 18:02 ` Nick Desaulniers 2020-06-29 18:37 ` Kees Cook 2020-06-29 6:18 ` [PATCH v4 06/17] efi/libstub: Disable -mbranch-protection Kees Cook 2020-06-29 6:18 ` [PATCH v4 07/17] arm64/build: Use common DISCARDS in linker script Kees Cook 2020-06-29 6:18 ` [PATCH v4 08/17] arm64/mm: Remove needless section quotes Kees Cook 2020-06-29 19:53 ` Nick Desaulniers 2020-06-29 20:03 ` Joe Perches 2020-06-29 20:29 ` Nick Desaulniers 2020-06-29 20:04 ` Kees Cook 2020-06-29 20:54 ` Arvind Sankar 2020-06-29 21:06 ` Arvind Sankar 2020-06-29 6:18 ` [PATCH v4 09/17] arm64/build: Remove .eh_frame* sections due to unwind tables Kees Cook 2020-06-29 6:18 ` [PATCH v4 10/17] arm64/kernel: Remove needless Call Frame Information annotations Kees Cook 2020-06-29 6:18 ` [PATCH v4 11/17] arm64/build: Warn on orphan section placement Kees Cook 2020-06-29 6:18 ` [PATCH v4 12/17] arm/build: Refactor linker script headers Kees Cook 2020-06-29 6:18 ` [PATCH v4 13/17] arm/build: Explicitly keep .ARM.attributes sections Kees Cook 2020-06-29 6:18 ` [PATCH v4 14/17] arm/build: Warn on orphan section placement Kees Cook 2020-06-29 15:54 ` Arvind Sankar 2020-06-29 18:07 ` Russell King - ARM Linux admin 2020-06-29 18:15 ` Arvind Sankar 2020-06-29 19:03 ` Russell King - ARM Linux admin 2020-06-29 19:47 ` Nick Desaulniers 2020-06-29 6:18 ` [PATCH v4 15/17] arm/boot: " Kees Cook 2020-06-29 6:18 ` [PATCH v4 16/17] x86/build: " Kees Cook 2020-06-29 6:18 ` [PATCH v4 17/17] x86/boot: " Kees Cook 2020-08-21 16:02 ` [PATCH v4 00/17] " Will Deacon 2020-08-21 17:36 ` Kees Cook
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200629061840.4065483-1-keescook@chromium.org \ --to=keescook@chromium.org \ --cc=ardb@kernel.org \ --cc=arnd@arndb.de \ --cc=bp@suse.de \ --cc=catalin.marinas@arm.com \ --cc=clang-built-linux@googlegroups.com \ --cc=james.morse@arm.com \ --cc=linux-arch@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-efi@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux@armlinux.org.uk \ --cc=mark.rutland@arm.com \ --cc=masahiroy@kernel.org \ --cc=mingo@redhat.com \ --cc=natechancellor@gmail.com \ --cc=ndesaulniers@google.com \ --cc=nivedita@alum.mit.edu \ --cc=pcc@google.com \ --cc=tglx@linutronix.de \ --cc=will@kernel.org \ --cc=x86@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Linux-EFI Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-efi/0 linux-efi/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-efi linux-efi/ https://lore.kernel.org/linux-efi \ linux-efi@vger.kernel.org public-inbox-index linux-efi Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-efi AGPL code for this site: git clone https://public-inbox.org/public-inbox.git