Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp232786ybp; Thu, 10 Oct 2019 17:09:13 -0700 (PDT) X-Google-Smtp-Source: APXvYqzwkNvTcOKhu1JOTRNXx4Xs2xso87aMGUAJbgZAW7CjZp5xygVV0o6JeuewcZF/zVkGa0Im X-Received: by 2002:a17:906:f2c1:: with SMTP id gz1mr10775415ejb.51.1570752553723; Thu, 10 Oct 2019 17:09:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570752553; cv=none; d=google.com; s=arc-20160816; b=J9yDblKB2YucgAMjXLfDssG2D47oOFl4dkgUIc2nrejRmuGccyvM7X39zGaVkE2KXZ lgIB7ExDaZvraYyC96hkCv+ODgq38ESjosyQzr+AcEjZbZg8aI9shN8GZS4x+q0z+DBn czeoRUZiHJVKh1+W8t7mOHiF++zTJwqV2uN+VTYeBKqVdJ+ZxVwsdBiwagxxnOnoFJn+ dIiJYOt3bHntGU1164jKyJWm1vxG/kAsVEGo/B24UF6l+H9ICG4FYFv+WBMaruNZ/9fS yGy6js7lXY32qWCOSJz6P6y+026UiMm5TxXRoy5R5OhIiCTyxNgOsClF4VvOv5GboAXx NkKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=9StLK2MlJr7BNY6TFoL2FLdWEIH7MyJyYVIq4dGaZdM=; b=B2ejNEUdGF+flzqLpUJfalP7xrRu6exLZJEFJEQSD+XvN5rQD/i39Qmb9fsRSmcHnH 2q4l+fnwbr5c2UZZXiPynWotrNZK80PxD8Taz9XnQ+uB/CSL1N/4HIDuDMR0XNYNrITh aqJw6K0qGg295vs7IwV1ncOK3yIWcqG5pPpVcGig91ubljbhlaUm8XbjwC0LlIEM2vdz /I56hmkKQmfmLMSWBv+dVMZCnnjmjJ09hd7gmXOzWjF0phCJWPAGrcKHa+3ZaZ6LVoFS Hp+C0RG7Y57nEV0degmyb2/uIc+ENRFJPwhwWd273gR1wslB7VVp36zi8vouNucwxxBb jlYg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=nSazSiol; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g25si4076361eds.210.2019.10.10.17.08.50; Thu, 10 Oct 2019 17:09:13 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=nSazSiol; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727393AbfJKAGW (ORCPT + 99 others); Thu, 10 Oct 2019 20:06:22 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:36427 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726096AbfJKAGW (ORCPT ); Thu, 10 Oct 2019 20:06:22 -0400 Received: by mail-pg1-f195.google.com with SMTP id 23so4704340pgk.3 for ; Thu, 10 Oct 2019 17:06:21 -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; bh=9StLK2MlJr7BNY6TFoL2FLdWEIH7MyJyYVIq4dGaZdM=; b=nSazSiolb/UE6P+d6rHzH+plQd9BvPZ3YU+Man7WIT3R8sZhs7kVHXwU9QaLRP510Y dorUYmhg3KsIFCy/xwIiMTBtYQUTSPbAS/cxZFArOFUrePZF8eMYBvFWZOPX367uO7AQ tOtSHwKalmk9pRcI3vDDcxSyHH7wzEBksWqjA= 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; bh=9StLK2MlJr7BNY6TFoL2FLdWEIH7MyJyYVIq4dGaZdM=; b=gk5JcEyglN5bpF6R21o9GERBs0QjrJ5cLX3vuMr58llpHdfdtAcoVXnyjaLBS60rJD 8jIsySO8OrKd29cwTNfpTvJjFjPxTaQ6HDvHWGqX7R77aMQHopUFn2dpUIhaoS6Zzrqx 3jW45dgGREsPANujprcJKDieCNGkCynoeHelvvwHapdTdcROZOuK/1nBsefBU0Oi+2T5 P1H3e77kZkudAbpEWYowY90aq72BpopSaYa7fLg9+8WyE/a28LA0F5dcoaH2xDOQLbKg Slnk3i2xVLoLliwXKtN7q2fR38iiKhPobq2+Q2XL7OgfEaMzAA7o58sSUHP4+p8ct6BM Sriw== X-Gm-Message-State: APjAAAXGMpg6dl/zDMyebMJ8xnSUFd7drPIgZ14qd6GMNd2y5cZERizT L357oTc2JAFus3nZE2GU+7fcuA== X-Received: by 2002:a17:90a:20cb:: with SMTP id f69mr13865338pjg.110.1570752380991; Thu, 10 Oct 2019 17:06:20 -0700 (PDT) Received: from www.outflux.net (smtp.outflux.net. [198.145.64.163]) by smtp.gmail.com with ESMTPSA id y2sm6740817pfe.126.2019.10.10.17.06.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Oct 2019 17:06:20 -0700 (PDT) From: Kees Cook To: Borislav Petkov Cc: Kees Cook , Rick Edgecombe , Dave Hansen , Andy Lutomirski , Arnd Bergmann , Michael Ellerman , Heiko Carstens , Will Deacon , linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, linux-alpha@vger.kernel.org, linux-ia64@vger.kernel.org, linux-s390@vger.kernel.org, linux-c6x-dev@linux-c6x.org, Yoshinori Sato , Michal Simek , linux-parisc@vger.kernel.org, linux-xtensa@linux-xtensa.org, x86@kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 00/29] vmlinux.lds.h: Refactor EXCEPTION_TABLE and NOTES Date: Thu, 10 Oct 2019 17:05:40 -0700 Message-Id: <20191011000609.29728-1-keescook@chromium.org> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Arch maintainers: please send Acks (if you haven't already) for your respective linker script changes; the intention is for this series to land via -tip. v1: https://lore.kernel.org/lkml/20190926175602.33098-1-keescook@chromium.org v2: clean up commit messages, rename RO_EXCEPTION_TABLE (bp) This series works to move the linker sections for NOTES and EXCEPTION_TABLE into the RO_DATA area, where they belong on most (all?) architectures. The problem being addressed was the discovery by Rick Edgecombe that the exception table was accidentally marked executable while he was developing his execute-only-memory series. When permissions were flipped from readable-and-executable to only-executable, the exception table became unreadable, causing things to explode rather badly. :) Roughly speaking, the steps are: - regularize the linker names for PT_NOTE and PT_LOAD program headers (to "note" and "text" respectively) - regularize restoration of linker section to program header assignment (when PT_NOTE exists) - move NOTES into RO_DATA - finish macro naming conversions for RO_DATA and RW_DATA - move EXCEPTION_TABLE into RO_DATA on architectures where this is clear - clean up some x86-specific reporting of kernel memory resources - switch x86 linker fill byte from x90 (NOP) to 0xcc (INT3), just because I finally realized what that trailing ": 0x9090" meant -- and we should trap, not slide, if execution lands in section padding Thanks! -Kees Kees Cook (29): powerpc: Rename "notes" PT_NOTE to "note" powerpc: Remove PT_NOTE workaround powerpc: Rename PT_LOAD identifier "kernel" to "text" alpha: Rename PT_LOAD identifier "kernel" to "text" ia64: Rename PT_LOAD identifier "code" to "text" s390: Move RO_DATA into "text" PT_LOAD Program Header x86: Restore "text" Program Header with dummy section vmlinux.lds.h: Provide EMIT_PT_NOTE to indicate export of .notes vmlinux.lds.h: Move Program Header restoration into NOTES macro vmlinux.lds.h: Move NOTES into RO_DATA vmlinux.lds.h: Replace RODATA with RO_DATA vmlinux.lds.h: Replace RO_DATA_SECTION with RO_DATA vmlinux.lds.h: Replace RW_DATA_SECTION with RW_DATA vmlinux.lds.h: Allow EXCEPTION_TABLE to live in RO_DATA x86: Actually use _etext for end of text segment x86: Move EXCEPTION_TABLE to RO_DATA segment alpha: Move EXCEPTION_TABLE to RO_DATA segment arm64: Move EXCEPTION_TABLE to RO_DATA segment c6x: Move EXCEPTION_TABLE to RO_DATA segment h8300: Move EXCEPTION_TABLE to RO_DATA segment ia64: Move EXCEPTION_TABLE to RO_DATA segment microblaze: Move EXCEPTION_TABLE to RO_DATA segment parisc: Move EXCEPTION_TABLE to RO_DATA segment powerpc: Move EXCEPTION_TABLE to RO_DATA segment xtensa: Move EXCEPTION_TABLE to RO_DATA segment x86/mm: Remove redundant &s on addresses x86/mm: Report which part of kernel image is freed x86/mm: Report actual image regions in /proc/iomem x86: Use INT3 instead of NOP for linker fill bytes arch/alpha/kernel/vmlinux.lds.S | 18 +++++----- arch/arc/kernel/vmlinux.lds.S | 6 ++-- arch/arm/kernel/vmlinux-xip.lds.S | 4 +-- arch/arm/kernel/vmlinux.lds.S | 4 +-- arch/arm64/kernel/vmlinux.lds.S | 9 ++--- arch/c6x/kernel/vmlinux.lds.S | 8 ++--- arch/csky/kernel/vmlinux.lds.S | 5 ++- arch/h8300/kernel/vmlinux.lds.S | 9 ++--- arch/hexagon/kernel/vmlinux.lds.S | 5 ++- arch/ia64/kernel/vmlinux.lds.S | 20 +++++------ arch/m68k/kernel/vmlinux-nommu.lds | 4 +-- arch/m68k/kernel/vmlinux-std.lds | 2 +- arch/m68k/kernel/vmlinux-sun3.lds | 2 +- arch/microblaze/kernel/vmlinux.lds.S | 8 ++--- arch/mips/kernel/vmlinux.lds.S | 15 ++++---- arch/nds32/kernel/vmlinux.lds.S | 5 ++- arch/nios2/kernel/vmlinux.lds.S | 5 ++- arch/openrisc/kernel/vmlinux.lds.S | 7 ++-- arch/parisc/kernel/vmlinux.lds.S | 11 +++--- arch/powerpc/kernel/vmlinux.lds.S | 37 ++++--------------- arch/riscv/kernel/vmlinux.lds.S | 5 ++- arch/s390/kernel/vmlinux.lds.S | 12 +++---- arch/sh/kernel/vmlinux.lds.S | 3 +- arch/sparc/kernel/vmlinux.lds.S | 3 +- arch/um/include/asm/common.lds.S | 3 +- arch/unicore32/kernel/vmlinux.lds.S | 5 ++- arch/x86/include/asm/processor.h | 2 +- arch/x86/include/asm/sections.h | 1 - arch/x86/kernel/setup.c | 12 ++++++- arch/x86/kernel/vmlinux.lds.S | 16 ++++----- arch/x86/mm/init.c | 8 ++--- arch/x86/mm/init_64.c | 16 +++++---- arch/x86/mm/pti.c | 2 +- arch/xtensa/kernel/vmlinux.lds.S | 8 ++--- include/asm-generic/vmlinux.lds.h | 53 ++++++++++++++++++++-------- 35 files changed, 159 insertions(+), 174 deletions(-) -- 2.17.1 Kees Cook (29): powerpc: Rename "notes" PT_NOTE to "note" powerpc: Remove PT_NOTE workaround powerpc: Rename PT_LOAD identifier "kernel" to "text" alpha: Rename PT_LOAD identifier "kernel" to "text" ia64: Rename PT_LOAD identifier "code" to "text" s390: Move RO_DATA into "text" PT_LOAD Program Header x86: Restore "text" Program Header with dummy section vmlinux.lds.h: Provide EMIT_PT_NOTE to indicate export of .notes vmlinux.lds.h: Move Program Header restoration into NOTES macro vmlinux.lds.h: Move NOTES into RO_DATA vmlinux.lds.h: Replace RODATA with RO_DATA vmlinux.lds.h: Replace RO_DATA_SECTION with RO_DATA vmlinux.lds.h: Replace RW_DATA_SECTION with RW_DATA vmlinux.lds.h: Allow EXCEPTION_TABLE to live in RO_DATA x86: Actually use _etext for end of text segment x86: Move EXCEPTION_TABLE to RO_DATA segment alpha: Move EXCEPTION_TABLE to RO_DATA segment arm64: Move EXCEPTION_TABLE to RO_DATA segment c6x: Move EXCEPTION_TABLE to RO_DATA segment h8300: Move EXCEPTION_TABLE to RO_DATA segment ia64: Move EXCEPTION_TABLE to RO_DATA segment microblaze: Move EXCEPTION_TABLE to RO_DATA segment parisc: Move EXCEPTION_TABLE to RO_DATA segment powerpc: Move EXCEPTION_TABLE to RO_DATA segment xtensa: Move EXCEPTION_TABLE to RO_DATA segment x86/mm: Remove redundant &s on addresses x86/mm: Report which part of kernel image is freed x86/mm: Report actual image regions in /proc/iomem x86: Use INT3 instead of NOP for linker fill bytes arch/alpha/kernel/vmlinux.lds.S | 18 +++++----- arch/arc/kernel/vmlinux.lds.S | 6 ++-- arch/arm/kernel/vmlinux-xip.lds.S | 4 +-- arch/arm/kernel/vmlinux.lds.S | 4 +-- arch/arm64/kernel/vmlinux.lds.S | 10 +++--- arch/c6x/kernel/vmlinux.lds.S | 8 ++--- arch/csky/kernel/vmlinux.lds.S | 5 ++- arch/h8300/kernel/vmlinux.lds.S | 9 ++--- arch/hexagon/kernel/vmlinux.lds.S | 5 ++- arch/ia64/kernel/vmlinux.lds.S | 20 +++++------ arch/m68k/kernel/vmlinux-nommu.lds | 4 +-- arch/m68k/kernel/vmlinux-std.lds | 2 +- arch/m68k/kernel/vmlinux-sun3.lds | 2 +- arch/microblaze/kernel/vmlinux.lds.S | 8 ++--- arch/mips/kernel/vmlinux.lds.S | 15 ++++---- arch/nds32/kernel/vmlinux.lds.S | 5 ++- arch/nios2/kernel/vmlinux.lds.S | 5 ++- arch/openrisc/kernel/vmlinux.lds.S | 7 ++-- arch/parisc/kernel/vmlinux.lds.S | 11 +++--- arch/powerpc/kernel/vmlinux.lds.S | 37 ++++--------------- arch/riscv/kernel/vmlinux.lds.S | 5 ++- arch/s390/kernel/vmlinux.lds.S | 12 +++---- arch/sh/kernel/vmlinux.lds.S | 3 +- arch/sparc/kernel/vmlinux.lds.S | 3 +- arch/um/include/asm/common.lds.S | 3 +- arch/unicore32/kernel/vmlinux.lds.S | 5 ++- arch/x86/include/asm/processor.h | 2 +- arch/x86/include/asm/sections.h | 1 - arch/x86/kernel/setup.c | 12 ++++++- arch/x86/kernel/vmlinux.lds.S | 16 ++++----- arch/x86/mm/init.c | 8 ++--- arch/x86/mm/init_64.c | 16 +++++---- arch/x86/mm/pti.c | 2 +- arch/xtensa/kernel/vmlinux.lds.S | 8 ++--- include/asm-generic/vmlinux.lds.h | 53 ++++++++++++++++++++-------- 35 files changed, 159 insertions(+), 175 deletions(-) -- 2.17.1