Staging: bcm: Fix an invalid dereference to a kmalloc in IOCTL_BCM_BULK_WRM
Variable IoBuffer.InputLength is chosen from userspace, and can therefore be less than the intended size. In this case,the memory from the kmalloc call is eventually cast to a PBULKWRM_BUFFER. If the IoBuffer.InputLength does not meet the minimum size of PBULKWRM_BUFFER, then we will get a kernel Oops. To resolve this issue, this patch verifies IoBuffer.InputLength meets the minimum size before invoking the kmalloc call. Signed-off-by: Kevin McKinney <klmckinney1@gmail.com> Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
b72a7c859e
commit
221fd753dd
|
@ -1137,7 +1137,9 @@ cntrlEnd:
|
|||
if (copy_from_user(&IoBuffer, argp, sizeof(IOCTL_BUFFER)))
|
||||
return -EFAULT;
|
||||
|
||||
/* FIXME: restrict length */
|
||||
if (IoBuffer.InputLength < sizeof(ULONG) * 2)
|
||||
return -EINVAL;
|
||||
|
||||
pvBuffer = kmalloc(IoBuffer.InputLength, GFP_KERNEL);
|
||||
if (!pvBuffer)
|
||||
return -ENOMEM;
|
||||
|
|
Loading…
Reference in New Issue