lkml.org 
[lkml]   [2023]   [Mar]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 22/60] arm64: idreg-override: Avoid kstrtou64() to parse a single hex digit
    Date
    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 <ardb@kernel.org>
    ---
    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 58c02fe20e1050b4..758f0e86e2bd2a34 100644
    --- a/arch/arm64/kernel/idreg-override.c
    +++ b/arch/arm64/kernel/idreg-override.c
    @@ -195,6 +195,20 @@ static const struct {
    { "nokaslr", "arm64_sw.nokaslr=1" },
    };

    +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)
    {
    @@ -208,7 +222,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)
    --
    2.39.2
    \
     
     \ /
      Last update: 2023-03-27 00:47    [W:4.164 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site