From patchwork Tue Sep 12 14:16:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 13381774 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 9B003CA0EEC for ; Tue, 12 Sep 2023 14:18:55 +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=v4KZ9iliifinFm/VPdOa5Qs97h0Ef8yP1+7O+/UlvTE=; b=wEuvSwHt5JrYK3acQ1KPDCJ1Jc L+BEJopAGo3H0+ZBL0VwdX5Zh72LoKg6F89YIRgjP54yAPUGilAfq7eSKm8fHDkOPglelwDrGRayp Aa2vmGtHiQjdt+j2wym+Ap9Lo7O1k1mtW6uwwRvZoUB32r+1yGGfoRjyX0KqGIMS7PszNhgUYNxSv 48Ug6UwrxO5JROrcLmpNE6PWZZdFPWRcl41PpfKZAKzSRskNzgHSMXDnrZrTH80GR92glwTgaRAS7 /XNy9zfItMISXjKXKca2rl5Ogroo/x3T+V+vZ8uCSXtyIgTqJNUPz9JAcpvRuFiCIMISjpSdUC+L+ RXBw9r4w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qg4Dj-003Wdv-25; Tue, 12 Sep 2023 14:18:27 +0000 Received: from mail-yw1-x114a.google.com ([2607:f8b0:4864:20::114a]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qg4DK-003WHt-06 for linux-arm-kernel@lists.infradead.org; Tue, 12 Sep 2023 14:18:09 +0000 Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-59b6083fa00so43633867b3.0 for ; Tue, 12 Sep 2023 07:18:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1694528280; x=1695133080; 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=DZ6BAESjoTESHzBJpPMGEjJbYG4JorqLYEqotZx2wE4=; b=u+dcXGFFAHdjPR6MnYvcybGQ0nb8qjQ6UbBBDb/V1Axw4IxzJPj7LTnIsFB+lw/Lpl lA6eVH73ZTZwunTA4pXV/Wjia1nKoWWxNYA3Qx3hg70O534TcIqi1R/6fzGfxz5QzQ6l 4CTQxOiEn0tp0wNnlmvO1C5/gjmcpw2HzDM1FB4vxk5qx+U2/tDfLgbCuPZsV4jUiIQf 0Ahg/8t1OXS6zFVxWOd1z3C13g2oklPkUJRwaDcC8TXRSmC9TDkf7Hm3835x6CfRnRTo cIWrjkRJkrPBosBpGLrU3K9VjIPM8NTNGjmXGEvQLmbXobROZbzOQD70R52SxzQcZb0u 6WOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694528280; x=1695133080; 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=DZ6BAESjoTESHzBJpPMGEjJbYG4JorqLYEqotZx2wE4=; b=vSEDSxrjtJ20t+g/oP3j5LNxzRB6r3EI0OQMyMLLI1SfXM+Dg/neTCBRbNqsOUUmsK LMXbNkvZmTU6xQQnLCn760UYCOV7uzSZLtT1YWl6Y4w8JM9Nuq+cl0h5H5evtV23kGZy xpnWFJjETStLSy1yR0Bbu0w70Q1K64WC48mE77W9Vxc3RoTXkvKCvs0IJRowtvXsXfTy 4utnn5DvBBxJJ07vmRpH4MlLrgCff5XtJm4IQqd9JkF3aQuqTAWz0CqFILite+Y2a++h 2Hkg/eLiMS9FzoUOAtIXUTDvqxj6bq4nYFsdmdCDNfTJqH1pFX0q9/4n61GgePHS6Crb VGzQ== X-Gm-Message-State: AOJu0YzgcuPYpba5nRiRZNHrit9t37IW1FG9Pbjv8w+aEG0PucjdO2jI uI7Mtuj3uq6+1a6H70N1Krq5t8ORcVO/MBKLpr+Gz52x2RmGcnyHlUjj6OZmC6npfNVqABYK2Dv bNTUJOs1k8bdLhqqzOTTqp1EsGyjnA59698vdbfA73k4WOQi0AcLgccL2zLCXnUhkaDSbtsGkCF I= X-Google-Smtp-Source: AGHT+IEh8UTm7zy1Zd7oKrQd44AqYWet4j2viCM2PKqcHgv4P8DzE4lg0eyWbDuzBAw1wvQw/twy/DiD X-Received: from palermo.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:118a]) (user=ardb job=sendgmr) by 2002:a81:7642:0:b0:586:5d03:67c8 with SMTP id j2-20020a817642000000b005865d0367c8mr360381ywk.3.1694528280316; Tue, 12 Sep 2023 07:18:00 -0700 (PDT) Date: Tue, 12 Sep 2023 14:16:09 +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=1679; i=ardb@kernel.org; h=from:subject; bh=41N28jcvzRhByazbRSwqcfuI8Bs+Iu8HC5RqEulc/ck=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIZWhaNWLeDnJrG3cL4/kOJosfTAnpElZUfFHVgxTavZsx 6eL93B0lLIwiHEwyIopsgjM/vtu5+mJUrXOs2Rh5rAygQxh4OIUgInwKzH8T19Xrf47ee21dV+3 JE/m2K/3Y5vGjEW/OebvS2w7tqMuUIWR4R5HrKB1MhfX6v61/15JvpnO1fuIV+Zwq8wSzReiTnZ buQE= X-Mailer: git-send-email 2.42.0.283.g2d96d420d3-goog Message-ID: <20230912141549.278777-82-ardb@google.com> Subject: [PATCH v4 19/61] arm64: idreg-override: Avoid kstrtou64() to parse a single hex digit 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_071802_101968_14B20028 X-CRM114-Status: GOOD ( 16.24 ) 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 All ID register value overrides are =0 with the exception of the nokaslr pseudo feature which uses =1. In order to remove the dependency on kstrtou64(), which is part of the core kernel and no longer usable once we move idreg-override into the early mini C runtime, let's just parse a single hex digit (with optional leading 0x) and set the output value accordingly. Signed-off-by: Ard Biesheuvel --- arch/arm64/kernel/idreg-override.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kernel/idreg-override.c b/arch/arm64/kernel/idreg-override.c index 41eeca857b32..2eb81795934a 100644 --- a/arch/arm64/kernel/idreg-override.c +++ b/arch/arm64/kernel/idreg-override.c @@ -215,6 +215,20 @@ static int __init parse_nokaslr(char *unused) } early_param("nokaslr", parse_nokaslr); +static int __init parse_hexdigit(const char *p, u64 *v) +{ + // skip "0x" if it comes next + if (p[0] == '0' && tolower(p[1]) == 'x') + p += 2; + + // check whether the RHS is a single hex digit + if (!isxdigit(p[0]) || (p[1] && !isspace(p[1]))) + return -EINVAL; + + *v = tolower(*p) - (isdigit(*p) ? '0' : 'a' - 10); + return 0; +} + static int __init find_field(const char *cmdline, char *opt, int len, const struct ftr_set_desc *reg, int f, u64 *v) { @@ -228,7 +242,7 @@ static int __init find_field(const char *cmdline, char *opt, int len, if (memcmp(cmdline, opt, len)) return -1; - return kstrtou64(cmdline + len, 0, v); + return parse_hexdigit(cmdline + len, v); } static void __init match_options(const char *cmdline)