From patchwork Tue Sep 12 14:16:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 13381789 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A1921CA0EEB for ; Tue, 12 Sep 2023 14:19:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=f1NWoL1OCSDO4XcCmwmia+thL5Y2sCS9NbSVOOnAlJw=; b=FLx8wbh4FrxztM1Kxg43YDfQaO VO7eKIihgKmur7hdDmrily76EDrCNvL4AECdXHLKsvlnjn3RoQEJAYjiyWy38Zn/aVZ+Ht7+Njsoy B84VKQzFXQZTIkXPhjLSYr/XzyMgP1HXbDA9AHtx9ozDMz7ZorhDgYfum05DGiPdxsxSALNc7CUze m+GMv5jQ1RJdC9qaQzzfkxXU8qWNSP1A3TYdhkfyhaOjwia5SoqwA68GXnPvU2m3A2CtmBv4S9OZg GueXayzy6/81bCJMGnpCKwUuS9XMEZoKNO2abLQ89RFZZLq/2fLP5C1JWsTMkHr7LVCv/QwH+lPAw aOzkF/4Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qg4EH-003X8N-2Y; Tue, 12 Sep 2023 14:19:01 +0000 Received: from mail-ed1-x54a.google.com ([2a00:1450:4864:20::54a]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qg4Dd-003WXh-0X for linux-arm-kernel@lists.infradead.org; Tue, 12 Sep 2023 14:18:32 +0000 Received: by mail-ed1-x54a.google.com with SMTP id 4fb4d7f45d1cf-52c03bb5327so3791658a12.0 for ; Tue, 12 Sep 2023 07:18:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1694528298; x=1695133098; darn=lists.infradead.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=xEzGWOTV0DR0iUim1KYbpl164MrytvFFLZfT6M6cUqI=; b=dVft35NCYF8F1VNRIwc5bGg3VYdRrgDWT7BMcRL4LL6sIMM5pNsLVILr1l/BCDtYa0 vQhsKB4372zPkbPBmTqLJzCwkIIzXR1ZzD/+8KN7QSZh4ki1qAb4zfXJtoMvibdiNXbE 2DeKzG+8WDJBz/jPCTvnys24ItlTNB+F+K62rkJFmcdmVSgars+5hjk2WAaR3Wr1G2Wc akJiZohkG1NknIduOpwVGzj+bQyuI01s92TiSbTpo/m8E5HmXzt03zUT94oCLsuPPk1O FXEYLOx5d2xPzcO2MPOlvxDM/8Xriw1VsbbYgKpaWONCMD6euzn8v59THQvhqDHZSnj9 VeOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694528298; x=1695133098; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xEzGWOTV0DR0iUim1KYbpl164MrytvFFLZfT6M6cUqI=; b=e+CUA7axkURNAOEPhN44bZUfFT4cam9YYnqZce1Ry/UbF9/nUvtSB76dL+fKt5EQiL hXKtdzNzWDEUSxvIa0E+HSgKbcunVlm/pf137UjuiaFm4mszG3XSIOPGc6l1jfxdSC09 YDcFi1YTOrNc73ltFiR8Pr8ufc0ADCSZlVSOh4tuGs/66qykbxockhp9JR8/TugURaPS tPFHuzVs0LlZVkFjhdm99Sib432onHXlOkNvqjJvC+IcRtxNRjKfHo77kSOiVnXv7BLP qxu3zjf60N+W8R/Dq9BJFq42qMJ11SLUbHwmFKLt2tEPm9C8WZ3fxm37ZqoKg5r+5gS9 /M3g== X-Gm-Message-State: AOJu0Ywsoy81VbtYICaD+mVWqCfOPJ8aWOGY74c+/7Bpv8qc/aFyGVmJ tL8xP+jvTVYgBcq2RB14RqmavUaAmAytCQe2j0+YegaocbkyZSJA9YUgnle7JkYs/jDeGJOwsCh 8VP9IPhdljK3qmpw1e73o3BeDch6rZ0waNCrAlWfVzRW3ywnp0tU6Y8j2NsLBRB8yDv3ivBL4hD k= X-Google-Smtp-Source: AGHT+IGWnU8u0B1jr1sDlL5ZC5ur4Yk8xQJqdHJjOWFbvyHpFfkggHQAcUqIlgqtAzt0I50/L6ih85nI X-Received: from palermo.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:118a]) (user=ardb job=sendgmr) by 2002:a17:907:1587:b0:9a1:b85a:1a05 with SMTP id cf7-20020a170907158700b009a1b85a1a05mr96317ejc.12.1694528297912; Tue, 12 Sep 2023 07:18:17 -0700 (PDT) Date: Tue, 12 Sep 2023 14:16:16 +0000 In-Reply-To: <20230912141549.278777-63-ardb@google.com> Mime-Version: 1.0 References: <20230912141549.278777-63-ardb@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=3522; i=ardb@kernel.org; h=from:subject; bh=WpRIXhqE8P+ptTCMt5CXywczxDNmLCqMW7ThFtxeIPs=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIZWhaOO5zyXz5pXO4xD52/685R2bb6VszYfuCuk3cXm7b rw6OkWuo5SFQYyDQVZMkUVg9t93O09PlKp1niULM4eVCWQIAxenAEwkO4+RYeOUlWfLTDhkE8Mz gtK7bvxsW7JXWcK3/3R47kaZq3qeYQz/FPa1XuXxsqqYlba08cD2x3+PWgbenv02ZpOaStp7thh TfgA= X-Mailer: git-send-email 2.42.0.283.g2d96d420d3-goog Message-ID: <20230912141549.278777-89-ardb@google.com> Subject: [PATCH v4 26/61] arm64: kaslr: Use feature override instead of parsing the cmdline again From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org Cc: Ard Biesheuvel , Catalin Marinas , Will Deacon , Marc Zyngier , Mark Rutland , Ryan Roberts , Anshuman Khandual , Kees Cook , Joey Gouly X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230912_071821_244939_DF15A5F0 X-CRM114-Status: GOOD ( 18.36 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Ard Biesheuvel The early kaslr code open codes the detection of 'nokaslr' on the kernel command line, and this is no longer necessary now that the feature detection code, which also looks for the same string, executes before this code. Note that the pseudo-feature's mask can be disregarded: it is used for true CPU features to mask the CPU feature register, not the value of the override. Signed-off-by: Ard Biesheuvel --- arch/arm64/include/asm/cpufeature.h | 8 +++ arch/arm64/kernel/kaslr.c | 4 +- arch/arm64/kernel/pi/kaslr_early.c | 53 +------------------- 3 files changed, 10 insertions(+), 55 deletions(-) diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h index 96e50227f940..6c0e2cb710d0 100644 --- a/arch/arm64/include/asm/cpufeature.h +++ b/arch/arm64/include/asm/cpufeature.h @@ -921,6 +921,14 @@ extern struct arm64_ftr_override id_aa64isar2_override; extern struct arm64_ftr_override arm64_sw_feature_override; +static inline bool kaslr_disabled_cmdline(void) +{ + if (cpuid_feature_extract_unsigned_field(arm64_sw_feature_override.val, + ARM64_SW_FEATURE_OVERRIDE_NOKASLR)) + return true; + return false; +} + u32 get_kvm_ipa_limit(void); void dump_cpu_features(void); diff --git a/arch/arm64/kernel/kaslr.c b/arch/arm64/kernel/kaslr.c index 94a269cd1f07..efbeb8356769 100644 --- a/arch/arm64/kernel/kaslr.c +++ b/arch/arm64/kernel/kaslr.c @@ -16,9 +16,7 @@ bool __ro_after_init __kaslr_is_enabled = false; void __init kaslr_init(void) { - if (cpuid_feature_extract_unsigned_field(arm64_sw_feature_override.val & - arm64_sw_feature_override.mask, - ARM64_SW_FEATURE_OVERRIDE_NOKASLR)) { + if (kaslr_disabled_cmdline()) { pr_info("KASLR disabled on command line\n"); return; } diff --git a/arch/arm64/kernel/pi/kaslr_early.c b/arch/arm64/kernel/pi/kaslr_early.c index 167081b30a15..f2305e276ec3 100644 --- a/arch/arm64/kernel/pi/kaslr_early.c +++ b/arch/arm64/kernel/pi/kaslr_early.c @@ -16,57 +16,6 @@ #include #include -/* taken from lib/string.c */ -static char *__init __strstr(const char *s1, const char *s2) -{ - size_t l1, l2; - - l2 = strlen(s2); - if (!l2) - return (char *)s1; - l1 = strlen(s1); - while (l1 >= l2) { - l1--; - if (!memcmp(s1, s2, l2)) - return (char *)s1; - s1++; - } - return NULL; -} -static bool __init cmdline_contains_nokaslr(const u8 *cmdline) -{ - const u8 *str; - - str = __strstr(cmdline, "nokaslr"); - return str == cmdline || (str > cmdline && *(str - 1) == ' '); -} - -static bool __init is_kaslr_disabled_cmdline(void *fdt) -{ - if (!IS_ENABLED(CONFIG_CMDLINE_FORCE)) { - int node; - const u8 *prop; - - node = fdt_path_offset(fdt, "/chosen"); - if (node < 0) - goto out; - - prop = fdt_getprop(fdt, node, "bootargs", NULL); - if (!prop) - goto out; - - if (cmdline_contains_nokaslr(prop)) - return true; - - if (IS_ENABLED(CONFIG_CMDLINE_EXTEND)) - goto out; - - return false; - } -out: - return cmdline_contains_nokaslr(CONFIG_CMDLINE); -} - static u64 __init get_kaslr_seed(void *fdt) { static char const chosen_str[] __initconst = "chosen"; @@ -92,7 +41,7 @@ asmlinkage u64 __init kaslr_early_init(void *fdt) { u64 seed, range; - if (is_kaslr_disabled_cmdline(fdt)) + if (kaslr_disabled_cmdline()) return 0; seed = get_kaslr_seed(fdt);