Re: [PATCH] lib: vsprintf: fix invalid arg check

From: Andrew Morton
Date: Wed Nov 10 2010 - 16:09:15 EST


On Wed, 10 Nov 2010 23:38:08 +0300
Vasiliy Kulikov <segooon@xxxxxxxxx> wrote:

> "size" is size_t. If we want to check whether it was underflowed
> then we should cast it to ssize_t instead of int. When
> sizeof(size_t) > sizeof(int) the code sees UINT_MAX as underflow,
> but it is not.
>

Does this patch fix any actual observed problem?

> Compile tested.
>

I guess not.

> --- a/lib/vsprintf.c
> +++ b/lib/vsprintf.c
> @@ -1290,7 +1290,7 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
>
> /* Reject out-of-range values early. Large positive sizes are
> used for unknown buffer sizes. */

Thousands of people would find that comment to be utterly mysterious.
I am one.

> - if (WARN_ON_ONCE((int) size < 0))
> + if (WARN_ON_ONCE((ssize_t) size < 0))
> return 0;
>
> str = buf;

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/