Re: [PATCH v2] ipr: fix out-of-bounds null overwrite

From: Matthew R. Ochs
Date: Wed Jan 06 2016 - 12:26:24 EST


On Jan 6, 2016, at 7:53 AM, Insu Yun <wuninsu@xxxxxxxxx> wrote:
>
> Return value of snprintf is not bound by size value, 2nd argument.
> (https://www.kernel.org/doc/htmldocs/kernel-api/API-snprintf.html).
> Return value is number of printed chars, can be larger than 2nd argument.
> Therefore, it can write null byte out of bounds ofbuffer.
> Since snprintf puts null, it does not need to put additional null byte.
>
> Signed-off-by: Insu Yun <wuninsu@xxxxxxxxx>
> ---
> drivers/scsi/ipr.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
> index 536cd5a..caf63f9 100644
> --- a/drivers/scsi/ipr.c
> +++ b/drivers/scsi/ipr.c
> @@ -4003,13 +4003,12 @@ static ssize_t ipr_store_update_fw(struct device *dev,
> struct ipr_sglist *sglist;
> char fname[100];
> char *src;
> - int len, result, dnld_size;
> + int result, dnld_size;
>
> if (!capable(CAP_SYS_ADMIN))
> return -EACCES;
>
> - len = snprintf(fname, 99, "%s", buf);
> - fname[len-1] = '\0';
> + snprintf(fname, 99, "%s", buf);

Changing the 99 to sizeof(fname) as part of this change would also
make for cleaner code in my opinion. Will leave it up to you if you'd
like to do a v3.

Reviewed-by: Matthew R. Ochs <mrochs@xxxxxxxxxxxxxxxxxx>
--
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/