From patchwork Fri Aug 21 19:42:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kees Cook X-Patchwork-Id: 11730371 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EB5E7722 for ; Fri, 21 Aug 2020 19:44:48 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C20B92072D for ; Fri, 21 Aug 2020 19:44:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="CZ2JKqMo"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="DTGcBO8E" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C20B92072D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=HFeYPqKNLkGgz6mHdfruW7chY+N2pEZv7+c8cMEC8lM=; b=CZ2JKqMokYDqlwyWafMiUGIqdn EadgpxrQS+AvFa2HiUHrJEmVcwmnB74YbvGelJYSJDU9nUQ/qDB3tlSGvCfwtfqTMh6vTu3wpD23A gzcja2jNT+xKwGFc2YucdhzjjP2PyMYL+tqrYu+/oKWYYDhWDZK5ssdEajCLigRBjxlsztee0rixD TV6bbePf8BqsgHPCFC2LO1OAlbqMGQk69+QFzvcgdzuIPP8XQPPnxXCbFHhEQLw0une6OOEIQyvQR 7DtPyZ3wKYEnvDRF0s7oX+gDrh5GntzpOzK2NfFtGue48CKuE/djdKrp76Xq40t3BufP6j15yK1F5 lIHyRmCg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k9Cxl-0006bc-Ur; Fri, 21 Aug 2020 19:44:34 +0000 Received: from mail-pl1-x644.google.com ([2607:f8b0:4864:20::644]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k9Cxa-0006Sz-Qo for linux-arm-kernel@lists.infradead.org; Fri, 21 Aug 2020 19:44:27 +0000 Received: by mail-pl1-x644.google.com with SMTP id f5so1334298plr.9 for ; Fri, 21 Aug 2020 12:44:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=XC3x//tBbsyo8eKHRkCaYogz5DHFYFIlIb0mj2CsQ+Q=; b=DTGcBO8ELZaLcKzLXcNWncSGk8WWdWCuUmI0uSZgP5QmJSGKtVbQKsOJS34BAPwK92 iOCV0pm2zduuw2ya7pIKhxn+D28CuEBQPguY8GpiBj5dADTG8mMQxbIExn4esiexEkcR P8ihjvNZ+5WFHHsmVKQYv/TCg0XgBBTEI0wDk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=XC3x//tBbsyo8eKHRkCaYogz5DHFYFIlIb0mj2CsQ+Q=; b=fnnXp/YZpmqK+YFWdxMv7/fQcjHU+bhpMnoLMjl22z9C5KHvTSMG3pF0wMSRJZaqOR Qr2z1dZMNiL/39ha0RgFTVyTkn8XCDXK/Xo5GiA/WX1fghALb/vlZ/WXpYElmkozN6yX lSOkfoj/OZLtiPSd3AiKFkMfyK0IYGBJTnbPPOoZPRVhxPTP8kfkJlwkvOGiU6negPbc uc02D/aeA8eEJdjy1GE+gHRmkeZksHd/HMhrHm7UeCtVodKN0RjxVAIev/dOjngx9rqQ 9EVmpg5GRTAZZ3jvDRVJKXZDP00kEFdPA2BjSsQzoDLnGHRL1jLo5hkSBNcLwzIiJ1cO UeBA== X-Gm-Message-State: AOAM533GARsQKIxHjs/DlWSnxq19PMGXKO1CJoT6A/mxpgHmISueL9vQ MS/Gm+FfIaBB3oK0C1QUNufmSA== X-Google-Smtp-Source: ABdhPJyJbgSmV247uvBq4gDSqdhOZMSgMJyesc2VDY7qu07/N5IGhKeJXjacdWoOSZKeA7P3fECHYw== X-Received: by 2002:a17:902:b111:: with SMTP id q17mr3452650plr.202.1598039060409; Fri, 21 Aug 2020 12:44:20 -0700 (PDT) Received: from www.outflux.net (smtp.outflux.net. [198.145.64.163]) by smtp.gmail.com with ESMTPSA id k125sm2945849pga.48.2020.08.21.12.44.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Aug 2020 12:44:19 -0700 (PDT) From: Kees Cook To: Ingo Molnar Subject: [PATCH v6 00/29] Warn on orphan section placement Date: Fri, 21 Aug 2020 12:42:41 -0700 Message-Id: <20200821194310.3089815-1-keescook@chromium.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200821_154422_900765_045D13F6 X-CRM114-Status: GOOD ( 17.52 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:644 listed in] [list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , linux-arch@vger.kernel.org, linux-efi@vger.kernel.org, Kees Cook , Arnd Bergmann , Catalin Marinas , Masahiro Yamada , x86@kernel.org, Nick Desaulniers , Russell King , linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com, Arvind Sankar , Ingo Molnar , James Morse , Nathan Chancellor , Borislav Petkov , Peter Collingbourne , Ard Biesheuvel , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Hi Ingo, Based on my testing, this is ready to go. I've reviewed the feedback on v5 and made a few small changes, noted below. https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git/log/?h=linker/orphans/warn/v6 v6: - rebase to -tip x86/boot - remove 0-sized NOLOAD - move .got.plt to end with INFO (NOLOAD warns) - add Reviewed-bys v5: https://lore.kernel.org/lkml/20200731230820.1742553-1-keescook@chromium.org/ v4: https://lore.kernel.org/lkml/20200629061840.4065483-1-keescook@chromium.org/ 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. Similar situation have continued to recur, and it's clear the kernel build needs to be much more explicit about linker sections. Similarly, the recent FGKASLR series brought up orphan section handling too[2]. In all 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, discarded, or verified to be zero-sized) with any orphans throwing a warning. The powerpc architecture has actually been doing this for some time, so this series just extends that coverage to x86, arm, and arm64. This has gotten sucecssful build testing under the following matrix: compiler/linker: gcc+ld.bfd, clang+ld.lld targets: defconfig, allmodconfig architectures: x86, i386, arm64, arm versions: -tip x86/boot All three architectures depend on the first several commits to vmlinux.lds.h. x86 depends on Arvind's GOT series (in -tip x86/boot now). arm64 depends on the efi/libstub patch. As such, I'd like to land this series as a whole. Ingo has suggested he'd take it into -tip. Thanks! -Kees [1] https://github.com/ClangBuiltLinux/linux/issues/282 [2] https://lore.kernel.org/lkml/202002242122.AA4D1B8@keescook/ Kees Cook (28): vmlinux.lds.h: Create COMMON_DISCARDS vmlinux.lds.h: Add .gnu.version* to COMMON_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 efi/libstub: Disable -mbranch-protection arm64/mm: Remove needless section quotes arm64/kernel: Remove needless Call Frame Information annotations arm64/build: Remove .eh_frame* sections due to unwind tables arm64/build: Use common DISCARDS in linker script arm64/build: Add missing DWARF sections arm64/build: Assert for unwanted sections arm64/build: Warn on orphan section placement arm/build: Refactor linker script headers arm/build: Explicitly keep .ARM.attributes sections arm/build: Add missing sections arm/build: Assert for unwanted sections arm/build: Warn on orphan section placement arm/boot: Handle all sections explicitly arm/boot: Warn on orphan section placement x86/asm: Avoid generating unused kprobe sections x86/build: Enforce an empty .got.plt section x86/build: Assert for unwanted sections x86/build: Warn on orphan section placement x86/boot/compressed: Reorganize zero-size section asserts x86/boot/compressed: Remove, discard, or assert for unwanted sections x86/boot/compressed: Add missing debugging sections to output x86/boot/compressed: Warn on orphan section placement Nick Desaulniers (1): vmlinux.lds.h: add PGO and AutoFDO input sections arch/alpha/kernel/vmlinux.lds.S | 1 + arch/arc/kernel/vmlinux.lds.S | 1 + arch/arm/Makefile | 4 ++ arch/arm/boot/compressed/Makefile | 2 + arch/arm/boot/compressed/vmlinux.lds.S | 20 +++---- .../arm/{kernel => include/asm}/vmlinux.lds.h | 30 ++++++++-- arch/arm/kernel/vmlinux-xip.lds.S | 8 ++- arch/arm/kernel/vmlinux.lds.S | 8 ++- arch/arm64/Makefile | 9 ++- arch/arm64/kernel/smccc-call.S | 2 - arch/arm64/kernel/vmlinux.lds.S | 28 +++++++-- 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/x86/Makefile | 4 ++ arch/x86/boot/compressed/Makefile | 2 + arch/x86/boot/compressed/vmlinux.lds.S | 58 +++++++++++++------ arch/x86/include/asm/asm.h | 6 +- arch/x86/kernel/vmlinux.lds.S | 39 ++++++++++++- drivers/firmware/efi/libstub/Makefile | 9 ++- include/asm-generic/vmlinux.lds.h | 49 +++++++++++++--- 35 files changed, 241 insertions(+), 60 deletions(-) rename arch/arm/{kernel => include/asm}/vmlinux.lds.h (84%)