usb: iowarrior: replace kmalloc with kmalloc_array
PATCH v2 1/1 usb: iowarrior: replace kmalloc with kmalloc_array
A common flaw in the kernel is integer overflow during memory allocation size calculations. In an effort to reduce the frequency of these bugs, kmalloc_array was implemented, which allocates memory for an array, while at the same time detects integer overflow.
This patch replaces cases of:
kmalloc(a * b, gfp)
with:
kmalloc_array(a * b, gfp)
---
Changes in v2:
- Align GFP_KERNEL to open parenthesis.
drivers/usb/misc/iowarrior.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/usb/misc/iowarrior.c +2 -2
@@ -808,8 +808,8 @@ static int iowarrior_probe(struct usb_interface *interface, dev->int_in_endpoint->bInterval);/* create an internal buffer for interrupt data from the device */ dev->read_queue = -kmalloc (((dev->report_size +1 ) *MAX_INTERRUPT_BUFFER ), -GFP_KERNEL ); +kmalloc_array (dev->report_size +1 ,MAX_INTERRUPT_BUFFER , +GFP_KERNEL );if (!dev->read_queue) goto error;/* Get the serial-number of the chip */
Quoted 11 lines · Gustavo A. R. Silva
A common flaw in the kernel is integer overflow during memory allocation size calculations. In an effort to reduce the frequency of these bugs,
kmalloc_arraywas implemented, which allocates memory for an array, while at the same time detects integer overflow.This patch replaces cases of:
kmalloc(a * b, gfp)with:
kmalloc_array(a * b, gfp)
I am afraid there is a problem here. The driver currently is a gross violation of the DMA rules. Unfortunately your patch does not fix that.
That is on anyrhing other than x86 you cannot take the size of a report,
but you must use the size of a cache line.
Regards
Oliver