On Sun, 2011-09-25 at 21:15 -0400, Kevin McKinney wrote:
> This patch fixes two issues within bcm/Bcmchar.c.
[]
> diff --git a/drivers/staging/bcm/Bcmchar.c b/drivers/staging/bcm/Bcmchar.c
[]
> @@ -216,7 +216,12 @@ static long bcm_char_ioctl(struct file *filp, UINT cmd, 
> ULONG arg)
>               if (copy_from_user(&sRdmBuffer, IoBuffer.InputBuffer, 
> IoBuffer.InputLength))
>                       return -EFAULT;
>  
> -             /* FIXME: need to restrict BuffLen */
> +             if (IoBuffer.OutputLength == 0)
> +                     return -EINVAL;
> +
> +             if (IoBuffer.OutputLength > USHRT_MAX)
> +                     return -EINVAL;

It's reasonable and shorter to combine these tests.

                if (IoBuffer.OutputLength == 0 ||
                    IoBuffer.OutputLength > USHRT_MAX)
                        return -EINVAL;

> +
>               Bufflen = IoBuffer.OutputLength + (4 - 
> IoBuffer.OutputLength%4)%4;

Not your issue, but because it's near the patched bits:

Because of the two modulos, this is not straightforward.
Perhaps a temporary helps.

                Bufflen = IoBuffer.OutputLength;
                u16 extra = Bufflen % 4;
                if (extra)
                        Bufflen += 4 - extra;

>               temp_buff = kmalloc(Bufflen, GFP_KERNEL);
>               if (!temp_buff)



_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to