From patchwork Fri Nov 24 10:19:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 13467575 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 7ACCFC61DF7 for ; Fri, 24 Nov 2023 11:32:01 +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=8NYOu5nPCLoWpVHFE0hMg1SvuKInGDNI5YRJBAmlkJI=; b=P5PLg3VnECm+iFMz58selk7uoE 9EdEST90OE5aXroAmYRqqgg2H0codLA5sX2Gu4AXU3ycPvdAJ+6C2+8/5ZIJlE8Bb9j3pFThOQMYA Re1ZwJxhhBKU4/dYPiCQ9nuMEUr1F9d41efu/na9WAAQ5Ri0f7kR9/0b7oRtQxmniL0d9I4eXZAhC zjStqBbIx4XLfs9sHIp5XbUG0JY1C4xU9oNNHm4UGbedEM0Oyv7QI92vCIy5f6uZHApmVxdbmMABp wVojkwvF3E/s47s4FxOJ3TJ5ahI3Ksc3iEcDFANqHSk8Y3gxj29Z+zX0Xj6IfTUopxHghwHWQdioX TuO2xJVw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r6UPb-006yYy-0g; Fri, 24 Nov 2023 11:31:55 +0000 Received: from mail-yb1-xb49.google.com ([2607:f8b0:4864:20::b49]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r6TJD-006p0R-0p for linux-arm-kernel@lists.infradead.org; Fri, 24 Nov 2023 10:21:28 +0000 Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-db40f549659so1961019276.0 for ; Fri, 24 Nov 2023 02:21:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1700821274; x=1701426074; 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=S3e5I+bgR/tzZLdbHycPVzYs/+XiaKWgnJ1R1oh4B0o=; b=Kgywlau0SEx6xAFl1i4/8QIrUelKnEdKMEy3U/7NfUwRsTtmZ2lw6kW2+fadK6f5LO OT2WbZVF31pMGSBudDRPWOrkvltH6ozvI85e5+V+IsNPKibVB7FbjtmJqmKkWglSS2t/ LghxZBTE+j5FLvcRmhbuMZtAQaI1Q5+Erb7gRmC/gRzNCcZm2MDVGrp1C2BLE0P9nO++ deikn0bEq3WiCVhUgxH5eGDVnbIsxRgj4LSRXMqPo0oUzVdv/Frwel0KMwI/qG6tWH3Q 8OmawPX4j/F+lSnEasPxwVKETRuSgc1TWL+duu6S4LETyKN4piQhbEAXFO9KQIdWBgxO heVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700821274; x=1701426074; 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=S3e5I+bgR/tzZLdbHycPVzYs/+XiaKWgnJ1R1oh4B0o=; b=dEsdCJnXISLM7D2+HUb8ytauuiNGld2Q7P3lgFQnWRfVJ22mF3ZlQsmwtkM1I4aeat +SV7JAYsw245Pk7ajNu7GaTXLRf+N89bFF9b1j255rDabFWySbwXo90+HopYIibiHbA7 P96ugX0glEz6Cbr2mWjvMIRSJfie2qgiJIEQK2wLGHkEzsVYjGwoVg//anUjhEn3kgeh fLAA0I5sPRcAXU6D7KQN+n6Fk71/jme/rx/s5kBncBn4lM6gg6eaarW5Q7ekctcCV5Zj o8gCx04S9DzLFQ5+JcMb4dvpZr8IvoBN3WyIQ8tSdPdSOfNOKcmL8TxKQ0xZRE7QzETe TPww== X-Gm-Message-State: AOJu0YwBifO3bw7T+b05oLOF2f16rlB7ZeZkAVgXER2cppoQunMnv/fP f+t0dFMpJnX2CeKT02mFHB9DK6Kqvut/yRLCkKodI7Sh4gKcQ6rzQBoEYNyo9FSjx3ZYwrzR7wM XDa2Ohi+u037X3DrXC2eBgHqZ0yFG1u1P5pOQ6gG/NVPVi1vcfRFQobz7deA7EGkMQYqj6Yx+Qa c= X-Google-Smtp-Source: AGHT+IG6w+jGBjeF64U075K8IqGtdu27ZhUbrQU7jEWCoZ5EI/S67YfAY/HBOfqNW4wwp+ZTkVmNXf3I X-Received: from palermo.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:118a]) (user=ardb job=sendgmr) by 2002:a25:cf8e:0:b0:daf:34be:1e83 with SMTP id f136-20020a25cf8e000000b00daf34be1e83mr70336ybg.2.1700821273301; Fri, 24 Nov 2023 02:21:13 -0800 (PST) Date: Fri, 24 Nov 2023 11:19:06 +0100 In-Reply-To: <20231124101840.944737-41-ardb@google.com> Mime-Version: 1.0 References: <20231124101840.944737-41-ardb@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=3526; i=ardb@kernel.org; h=from:subject; bh=lBhgC2RIE3W64cp9ghnBvS79VDuJ3eFWjD45q0X0UGw=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JITWhYqnZh/cWD8/LSajymIfXrnB/I3DUo9BH4mO9TG+Eh sSujOkdpSwMYhwMsmKKLAKz/77beXqiVK3zLFmYOaxMIEMYuDgFYCLXkhgZtl+7YfB1/b3d2w7G 8qxse/at57XR03k//2+/+O7p+oszGF4zMnyQO9D0em/F0yk7/G4pntrCsaFJQDlvnZKyxxEXtbI NojwA X-Mailer: git-send-email 2.43.0.rc1.413.gea7ed67945-goog Message-ID: <20231124101840.944737-67-ardb@google.com> Subject: [PATCH v5 26/39] 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231124_022115_363258_207EF657 X-CRM114-Status: GOOD ( 16.96 ) 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 f6d416fe49b0..77ed3b28cbc6 100644 --- a/arch/arm64/include/asm/cpufeature.h +++ b/arch/arm64/include/asm/cpufeature.h @@ -909,6 +909,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);