From patchwork Thu Jan 28 00:09:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Brown X-Patchwork-Id: 60667 Delivered-To: patch@linaro.org Received: by 10.112.130.2 with SMTP id oa2csp156346lbb; Wed, 27 Jan 2016 16:08:56 -0800 (PST) X-Received: by 10.98.72.87 with SMTP id v84mr91676pfa.15.1453939736264; Wed, 27 Jan 2016 16:08:56 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b88si12621504pfd.24.2016.01.27.16.08.55; Wed, 27 Jan 2016 16:08:56 -0800 (PST) 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; 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; dkim=pass header.i=@linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935422AbcA1AIy (ORCPT + 30 others); Wed, 27 Jan 2016 19:08:54 -0500 Received: from mail-oi0-f53.google.com ([209.85.218.53]:34252 "EHLO mail-oi0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933741AbcA1AIv (ORCPT ); Wed, 27 Jan 2016 19:08:51 -0500 Received: by mail-oi0-f53.google.com with SMTP id k206so16697296oia.1 for ; Wed, 27 Jan 2016 16:08:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=u5RiEqiARx487pER9ixzf6V+8xPmjQODbMLKI3yggW0=; b=I+20uo2nLs66kqZd0B4pzmTq5TMymwLphJxTC0tEDLUzGym/4BR0+UbV2P6+E3SlJm 7e5uM+A43eReGbljPP9XK/dfzOwko3S2PL0QcSfAv+AMlY+NBfqVSC6lkNgP0vf34kN3 zjAX96CzBVrjBJ72wcoVh1itr1myXpGlns0GI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=u5RiEqiARx487pER9ixzf6V+8xPmjQODbMLKI3yggW0=; b=gePLo8oStMb7rKFrDh3bLvTDtWqqIiDK02zqOTQSl8FxYYxg4R22TznJs76V77cVuE 1AYrQkEMSayLjfX+pclM2+ZhRdA8EuY0rKeQ8vqmEo8TKrm1Q5B2E6I6aB/chxyagJBc jADUIQyBFcwlaLLmi3leAw7ZItILRY1H7tcu3JPJf8Q86d5PQnbE+3k77h5M1X+Lmx2D hY8wSqUXwVJvjWl7xLhV9PM8myQZkLhAyV2BMZs0gEMNZW/MfLWdFBn0UfIuH41bvyNV ZjPFdeYmHEyEq32xoBGyYO5q9zmLihIu8eZrH5tL5RHyfRNAkDamyJg5Nk1j19HbehUA TmJg== X-Gm-Message-State: AG10YOQzF/FHfiwiCW9VUKSJ/fjMWNYNmI9f0ml0LVE/eWXivOYRMXpQknUaqudBk4nxmQAs X-Received: by 10.202.218.138 with SMTP id r132mr21127oig.55.1453939730837; Wed, 27 Jan 2016 16:08:50 -0800 (PST) Received: from davidb.org (c-73-217-22-149.hsd1.co.comcast.net. [73.217.22.149]) by smtp.gmail.com with ESMTPSA id i4sm4137301oel.12.2016.01.27.16.08.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 27 Jan 2016 16:08:50 -0800 (PST) Date: Wed, 27 Jan 2016 17:09:06 -0700 From: David Brown To: Kees Cook Cc: "kernel-hardening@lists.openwall.com" , Ingo Molnar , Andy Lutomirski , "H. Peter Anvin" , Michael Ellerman , Mathias Krause , Thomas Gleixner , "x86@kernel.org" , Arnd Bergmann , PaX Team , Emese Revfy , LKML , linux-arch , Catalin Marinas , Will Deacon , Marc Zyngier , yalin wang , Zi Shen Lim , Yang Shi , Mark Rutland , Ard Biesheuvel , Laura Abbott , "Suzuki K. Poulose" , Steve Capper , Jeremy Linton , Mark Salter , linux-arm-kernel@lists.infradead.org Subject: [PATCH] arm64: make CONFIG_DEBUG_RODATA non-optional Message-ID: <20160128000906.GA42530@davidb.org> References: <1453226922-16831-1-git-send-email-keescook@chromium.org> <1453226922-16831-4-git-send-email-keescook@chromium.org> <20160127211105.GA41450@davidb.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org >From 2efef8aa0f8f7f6277ffebe4ea6744fc93d54644 Mon Sep 17 00:00:00 2001 From: David Brown Date: Wed, 27 Jan 2016 13:58:44 -0800 This removes the CONFIG_DEBUG_RODATA option and makes it always enabled. Signed-off-by: David Brown --- v1: This is in the same spirit as the x86 patch, removing allowing this option to be config selected. The associated patch series adds a runtime option for the same thing. However, it does affect the way some things are mapped, and could possibly result in either increased memory usage, or a performance hit (due to TLB misses from 4K pages). I've tested this on a Hikey 96board (hi6220-hikey.dtb), both with and without 'rodata=off' on the command line. arch/arm64/Kconfig | 3 +++ arch/arm64/Kconfig.debug | 10 ---------- arch/arm64/kernel/insn.c | 2 +- arch/arm64/kernel/vmlinux.lds.S | 5 +---- arch/arm64/mm/mmu.c | 12 ------------ 5 files changed, 5 insertions(+), 27 deletions(-) -- 2.7.0 diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 8cc6228..ffa617a 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -201,6 +201,9 @@ config KERNEL_MODE_NEON config FIX_EARLYCON_MEM def_bool y +config DEBUG_RODATA + def_bool y + config PGTABLE_LEVELS int default 2 if ARM64_16K_PAGES && ARM64_VA_BITS_36 diff --git a/arch/arm64/Kconfig.debug b/arch/arm64/Kconfig.debug index e13c4bf..db994ec 100644 --- a/arch/arm64/Kconfig.debug +++ b/arch/arm64/Kconfig.debug @@ -48,16 +48,6 @@ config DEBUG_SET_MODULE_RONX against certain classes of kernel exploits. If in doubt, say "N". -config DEBUG_RODATA - bool "Make kernel text and rodata read-only" - help - If this is set, kernel text and rodata will be made read-only. This - is to help catch accidental or malicious attempts to change the - kernel's executable code. Additionally splits rodata from kernel - text so it can be made explicitly non-executable. - - If in doubt, say Y - config DEBUG_ALIGN_RODATA depends on DEBUG_RODATA && ARM64_4K_PAGES bool "Align linker sections up to SECTION_SIZE" diff --git a/arch/arm64/kernel/insn.c b/arch/arm64/kernel/insn.c index 7371455..a04bdef 100644 --- a/arch/arm64/kernel/insn.c +++ b/arch/arm64/kernel/insn.c @@ -95,7 +95,7 @@ static void __kprobes *patch_map(void *addr, int fixmap) if (module && IS_ENABLED(CONFIG_DEBUG_SET_MODULE_RONX)) page = vmalloc_to_page(addr); - else if (!module && IS_ENABLED(CONFIG_DEBUG_RODATA)) + else if (!module) page = virt_to_page(addr); else return addr; diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S index e3928f5..f80903c 100644 --- a/arch/arm64/kernel/vmlinux.lds.S +++ b/arch/arm64/kernel/vmlinux.lds.S @@ -65,12 +65,9 @@ PECOFF_FILE_ALIGNMENT = 0x200; #if defined(CONFIG_DEBUG_ALIGN_RODATA) #define ALIGN_DEBUG_RO . = ALIGN(1<