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

Reply via email to