[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aW-VDu4aPV6kZv80@smile.fi.intel.com>
Date: Tue, 20 Jan 2026 16:45:34 +0200
From: Andy Shevchenko <andriy.shevchenko@...el.com>
To: Dmitry Antipov <dmantipov@...dex.ru>
Cc: Andrew Morton <akpm@...ux-foundation.org>, Kees Cook <kees@...nel.org>,
Carlos Maiolino <cem@...nel.org>,
Christoph Hellwig <hch@...radead.org>, linux-xfs@...r.kernel.org,
linux-hardening@...r.kernel.org
Subject: Re: [PATCH v4 1/3] lib: introduce simple error-checking wrapper for
memparse()
On Tue, Jan 20, 2026 at 05:12:27PM +0300, Dmitry Antipov wrote:
> Introduce 'memvalue()' which uses 'memparse()' to parse a string
> with optional memory suffix into a non-negative number. If parsing
> has succeeded, returns 0 and stores the result at the location
> specified by the second argument. Otherwise returns -EINVAL and
> leaves the location untouched.
...
> +/**
> + * memvalue - Wrap memparse() with simple error detection
> + * @ptr: Where parse begins
> + * @valptr: Where to store result
> + *
> + * Uses memparse() to parse a string into a number stored at
> + * @valptr, leaving memory at @valptr untouched in case of error.
> + *
> + * Return: -EINVAL for a presumably negative value or if an
> + * unrecognized character was encountered, and 0 otherwise.
> + */
> +int __must_check memvalue(const char *ptr, unsigned long long *valptr)
> +{
> + unsigned long long ret;
> + char *end;
> +
> + if (*ptr == '-')
> + return -EINVAL;
> + ret = memparse(ptr, &end);
> + if (*end)
> + return -EINVAL;
> + *valptr = ret;
> + return 0;
> +}
My questions seem left unsettled:
- why -EINVAL in the first place and not -ERANGE in the first place;
- why do we need this patch _at all_ based on the how callers are
doing now (w.o. this change), i.o.w. why the memparse() can't be
used directly.
--
With Best Regards,
Andy Shevchenko
Powered by blists - more mailing lists