Re: [PATCH] of: module: prevent NULL pointer dereference in vsnprintf()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Mar 27, 2024 at 9:52 AM Sergey Shtylyov <s.shtylyov@xxxxxx> wrote:
>
> In of_modalias(), we can get passed the str and len parameters which would
> cause a kernel oops in vsnprintf() since it only allows passing a NULL ptr
> when the length is also 0. Also, we need to filter out the negative values
> of the len parameter as these will result in a really huge buffer since
> snprintf() takes size_t parameter while ours is ssize_t...
>
> Found by Linux Verification Center (linuxtesting.org) with the Svace static
> analysis tool.
>
> Signed-off-by: Sergey Shtylyov <s.shtylyov@xxxxxx>
>
> ---
> The patch is against the for-next branch of Rob Herring's linux-git repo...
>
>  drivers/of/module.c |    8 ++++++++
>  1 file changed, 8 insertions(+)
>
> Index: linux/drivers/of/module.c
> ===================================================================
> --- linux.orig/drivers/of/module.c
> +++ linux/drivers/of/module.c
> @@ -16,6 +16,14 @@ ssize_t of_modalias(const struct device_
>         ssize_t csize;
>         ssize_t tsize;
>
> +       /*
> +        * Prevent a kernel oops in vsnprintf() -- it only allows passing a
> +        * NULL ptr when the length is also 0. Also filter out the negative
> +        * lengths...
> +        */
> +       if ((len > 0 && !str) || len < 0)
> +               return -EINVAL;
> +

Even if vsnprintf() didn't oops, the input doesn't make sense. So, I
think the comment should just say that. Or maybe just delete the
comment since it'd be redundant at that point.

Not a strong opinion.

Acked-by: Saravana Kannan <saravanak@xxxxxxxxxx>

-Saravana

>         /* Name & Type */
>         /* %p eats all alphanum characters, so %c must be used here */
>         csize = snprintf(str, len, "of:N%pOFn%c%s", np, 'T',





[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux