On 26/02/24 12:32PM, Rodrigo Alencar wrote:
> On 26/02/12 07:44PM, Dmitry Antipov wrote:
> > Since '_parse_integer_limit()' (and so 'simple_strtoull()') is now
> > capable to handle overflow, adjust 'memparse()' to handle overflow
> > (denoted by ULLONG_MAX) returned from 'simple_strtoull()'. Also
> > use 'check_shl_overflow()' to catch an overflow possibly caused
> > by processing size suffix and denote it with ULLONG_MAX as well.
>
> is returning ULLONG_MAX the proper way to indicate overflow with
> simple_strtoull()?
>
> ...
>
> > unsigned long long memparse(const char *ptr, char **retptr)
> > {
> > char *endptr; /* local pointer to end of parsed string */
> > -
> > unsigned long long ret = simple_strtoull(ptr, &endptr, 0);
>
> ... or a new wrapper for _parse_integer_limit() is needed?
>
> I am interested on having _parse_integer_limit() overflow check
> exposed to kernel modules.
> ...
I could propose the exposure of simple_strntoull() which is private
to lib/vsprintf.c, slightly changing its prototype:
* from:
unsigned long long simple_strntoull(const char *startp,
char **endp,
unsigned int base,
size_t max_chars)
* to:
int simple_strntoull(const char *startp,
char **endp,
unsigned long long *result,
unsigned int base,
size_t max_chars)
That would allow to tackle the FIXME tag. I suppose it is there
because the overflow flag is being ignored, so the returned integer
can be set to -ERANGE or -EOVERFLOW when overflow happens.
--
Kind regards,
Rodrigo Alencar