mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
treewide: kmalloc() -> kmalloc_array()
The kmalloc() function has a 2-factor argument form, kmalloc_array(). This
patch replaces cases of:
kmalloc(a * b, gfp)
with:
kmalloc_array(a * b, gfp)
as well as handling cases of:
kmalloc(a * b * c, gfp)
with:
kmalloc(array3_size(a, b, c), gfp)
as it's slightly less ugly than:
kmalloc_array(array_size(a, b), c, gfp)
This does, however, attempt to ignore constant size factors like:
kmalloc(4 * 1024, gfp)
though any constants defined via macros get caught up in the conversion.
Any factors with a sizeof() of "unsigned char", "char", and "u8" were
dropped, since they're redundant.
The tools/ directory was manually excluded, since it has its own
implementation of kmalloc().
The Coccinelle script used for this was:
// Fix redundant parens around sizeof().
@@
type TYPE;
expression THING, E;
@@
(
kmalloc(
- (sizeof(TYPE)) * E
+ sizeof(TYPE) * E
, ...)
|
kmalloc(
- (sizeof(THING)) * E
+ sizeof(THING) * E
, ...)
)
// Drop single-byte sizes and redundant parens.
@@
expression COUNT;
typedef u8;
typedef __u8;
@@
(
kmalloc(
- sizeof(u8) * (COUNT)
+ COUNT
, ...)
|
kmalloc(
- sizeof(__u8) * (COUNT)
+ COUNT
, ...)
|
kmalloc(
- sizeof(char) * (COUNT)
+ COUNT
, ...)
|
kmalloc(
- sizeof(unsigned char) * (COUNT)
+ COUNT
, ...)
|
kmalloc(
- sizeof(u8) * COUNT
+ COUNT
, ...)
|
kmalloc(
- sizeof(__u8) * COUNT
+ COUNT
, ...)
|
kmalloc(
- sizeof(char) * COUNT
+ COUNT
, ...)
|
kmalloc(
- sizeof(unsigned char) * COUNT
+ COUNT
, ...)
)
// 2-factor product with sizeof(type/expression) and identifier or constant.
@@
type TYPE;
expression THING;
identifier COUNT_ID;
constant COUNT_CONST;
@@
(
- kmalloc
+ kmalloc_array
(
- sizeof(TYPE) * (COUNT_ID)
+ COUNT_ID, sizeof(TYPE)
, ...)
|
- kmalloc
+ kmalloc_array
(
- sizeof(TYPE) * COUNT_ID
+ COUNT_ID, sizeof(TYPE)
, ...)
|
- kmalloc
+ kmalloc_array
(
- sizeof(TYPE) * (COUNT_CONST)
+ COUNT_CONST, sizeof(TYPE)
, ...)
|
- kmalloc
+ kmalloc_array
(
- sizeof(TYPE) * COUNT_CONST
+ COUNT_CONST, sizeof(TYPE)
, ...)
|
- kmalloc
+ kmalloc_array
(
- sizeof(THING) * (COUNT_ID)
+ COUNT_ID, sizeof(THING)
, ...)
|
- kmalloc
+ kmalloc_array
(
- sizeof(THING) * COUNT_ID
+ COUNT_ID, sizeof(THING)
, ...)
|
- kmalloc
+ kmalloc_array
(
- sizeof(THING) * (COUNT_CONST)
+ COUNT_CONST, sizeof(THING)
, ...)
|
- kmalloc
+ kmalloc_array
(
- sizeof(THING) * COUNT_CONST
+ COUNT_CONST, sizeof(THING)
, ...)
)
// 2-factor product, only identifiers.
@@
identifier SIZE, COUNT;
@@
- kmalloc
+ kmalloc_array
(
- SIZE * COUNT
+ COUNT, SIZE
, ...)
// 3-factor product with 1 sizeof(type) or sizeof(expression), with
// redundant parens removed.
@@
expression THING;
identifier STRIDE, COUNT;
type TYPE;
@@
(
kmalloc(
- sizeof(TYPE) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kmalloc(
- sizeof(TYPE) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kmalloc(
- sizeof(TYPE) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kmalloc(
- sizeof(TYPE) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kmalloc(
- sizeof(THING) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kmalloc(
- sizeof(THING) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kmalloc(
- sizeof(THING) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kmalloc(
- sizeof(THING) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
)
// 3-factor product with 2 sizeof(variable), with redundant parens removed.
@@
expression THING1, THING2;
identifier COUNT;
type TYPE1, TYPE2;
@@
(
kmalloc(
- sizeof(TYPE1) * sizeof(TYPE2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
kmalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
kmalloc(
- sizeof(THING1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
kmalloc(
- sizeof(THING1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
kmalloc(
- sizeof(TYPE1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
|
kmalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
)
// 3-factor product, only identifiers, with redundant parens removed.
@@
identifier STRIDE, SIZE, COUNT;
@@
(
kmalloc(
- (COUNT) * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kmalloc(
- COUNT * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kmalloc(
- COUNT * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kmalloc(
- (COUNT) * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kmalloc(
- COUNT * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kmalloc(
- (COUNT) * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kmalloc(
- (COUNT) * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kmalloc(
- COUNT * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
)
// Any remaining multi-factor products, first at least 3-factor products,
// when they're not all constants...
@@
expression E1, E2, E3;
constant C1, C2, C3;
@@
(
kmalloc(C1 * C2 * C3, ...)
|
kmalloc(
- (E1) * E2 * E3
+ array3_size(E1, E2, E3)
, ...)
|
kmalloc(
- (E1) * (E2) * E3
+ array3_size(E1, E2, E3)
, ...)
|
kmalloc(
- (E1) * (E2) * (E3)
+ array3_size(E1, E2, E3)
, ...)
|
kmalloc(
- E1 * E2 * E3
+ array3_size(E1, E2, E3)
, ...)
)
// And then all remaining 2 factors products when they're not all constants,
// keeping sizeof() as the second factor argument.
@@
expression THING, E1, E2;
type TYPE;
constant C1, C2, C3;
@@
(
kmalloc(sizeof(THING) * C2, ...)
|
kmalloc(sizeof(TYPE) * C2, ...)
|
kmalloc(C1 * C2 * C3, ...)
|
kmalloc(C1 * C2, ...)
|
- kmalloc
+ kmalloc_array
(
- sizeof(TYPE) * (E2)
+ E2, sizeof(TYPE)
, ...)
|
- kmalloc
+ kmalloc_array
(
- sizeof(TYPE) * E2
+ E2, sizeof(TYPE)
, ...)
|
- kmalloc
+ kmalloc_array
(
- sizeof(THING) * (E2)
+ E2, sizeof(THING)
, ...)
|
- kmalloc
+ kmalloc_array
(
- sizeof(THING) * E2
+ E2, sizeof(THING)
, ...)
|
- kmalloc
+ kmalloc_array
(
- (E1) * E2
+ E1, E2
, ...)
|
- kmalloc
+ kmalloc_array
(
- (E1) * (E2)
+ E1, E2
, ...)
|
- kmalloc
+ kmalloc_array
(
- E1 * E2
+ E1, E2
, ...)
)
Signed-off-by: Kees Cook <[email protected]>
This commit is contained in:
parent
1c542f38ab
commit
6da2ec5605
377 changed files with 1014 additions and 748 deletions
|
|
@ -256,7 +256,8 @@ bttv_risc_overlay(struct bttv *btv, struct btcx_riscmem *risc,
|
|||
u32 addr;
|
||||
|
||||
/* skip list for window clipping */
|
||||
if (NULL == (skips = kmalloc(sizeof(*skips) * ov->nclips,GFP_KERNEL)))
|
||||
skips = kmalloc_array(ov->nclips, sizeof(*skips),GFP_KERNEL);
|
||||
if (NULL == skips)
|
||||
return -ENOMEM;
|
||||
|
||||
/* estimate risc mem: worst case is (1.5*clip+1) * lines instructions
|
||||
|
|
|
|||
|
|
@ -1077,7 +1077,7 @@ static int ivtvfb_init_vidmode(struct ivtv *itv)
|
|||
|
||||
/* Allocate the pseudo palette */
|
||||
oi->ivtvfb_info.pseudo_palette =
|
||||
kmalloc(sizeof(u32) * 16, GFP_KERNEL|__GFP_NOWARN);
|
||||
kmalloc_array(16, sizeof(u32), GFP_KERNEL|__GFP_NOWARN);
|
||||
|
||||
if (!oi->ivtvfb_info.pseudo_palette) {
|
||||
IVTVFB_ERR("abort, unable to alloc pseudo palette\n");
|
||||
|
|
|
|||
|
|
@ -859,8 +859,9 @@ static int vivid_create_instance(struct platform_device *pdev, int inst)
|
|||
/* create a string array containing the names of all the preset timings */
|
||||
while (v4l2_dv_timings_presets[dev->query_dv_timings_size].bt.width)
|
||||
dev->query_dv_timings_size++;
|
||||
dev->query_dv_timings_qmenu = kmalloc(dev->query_dv_timings_size *
|
||||
(sizeof(void *) + 32), GFP_KERNEL);
|
||||
dev->query_dv_timings_qmenu = kmalloc_array(dev->query_dv_timings_size,
|
||||
(sizeof(void *) + 32),
|
||||
GFP_KERNEL);
|
||||
if (dev->query_dv_timings_qmenu == NULL)
|
||||
goto free_dev;
|
||||
for (i = 0; i < dev->query_dv_timings_size; i++) {
|
||||
|
|
|
|||
|
|
@ -663,7 +663,8 @@ static int submit_urbs(struct camera_data *cam)
|
|||
if (cam->sbuf[i].data)
|
||||
continue;
|
||||
cam->sbuf[i].data =
|
||||
kmalloc(FRAMES_PER_DESC * FRAME_SIZE_PER_DESC, GFP_KERNEL);
|
||||
kmalloc_array(FRAME_SIZE_PER_DESC, FRAMES_PER_DESC,
|
||||
GFP_KERNEL);
|
||||
if (!cam->sbuf[i].data) {
|
||||
while (--i >= 0) {
|
||||
kfree(cam->sbuf[i].data);
|
||||
|
|
|
|||
|
|
@ -710,7 +710,7 @@ static int cx231xx_audio_init(struct cx231xx *dev)
|
|||
dev_info(dev->dev,
|
||||
"audio EndPoint Addr 0x%x, Alternate settings: %i\n",
|
||||
adev->end_point_addr, adev->num_alt);
|
||||
adev->alt_max_pkt_size = kmalloc(32 * adev->num_alt, GFP_KERNEL);
|
||||
adev->alt_max_pkt_size = kmalloc_array(32, adev->num_alt, GFP_KERNEL);
|
||||
if (!adev->alt_max_pkt_size) {
|
||||
err = -ENOMEM;
|
||||
goto err_free_card;
|
||||
|
|
|
|||
|
|
@ -1143,7 +1143,8 @@ static int go7007_usb_probe(struct usb_interface *intf,
|
|||
usb->intr_urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||
if (usb->intr_urb == NULL)
|
||||
goto allocfail;
|
||||
usb->intr_urb->transfer_buffer = kmalloc(2*sizeof(u16), GFP_KERNEL);
|
||||
usb->intr_urb->transfer_buffer = kmalloc_array(2, sizeof(u16),
|
||||
GFP_KERNEL);
|
||||
if (usb->intr_urb->transfer_buffer == NULL)
|
||||
goto allocfail;
|
||||
|
||||
|
|
|
|||
|
|
@ -363,7 +363,7 @@ static void reg_w_ixbuf(struct gspca_dev *gspca_dev,
|
|||
if (len * 2 <= USB_BUF_SZ) {
|
||||
p = tmpbuf = gspca_dev->usb_buf;
|
||||
} else {
|
||||
p = tmpbuf = kmalloc(len * 2, GFP_KERNEL);
|
||||
p = tmpbuf = kmalloc_array(len, 2, GFP_KERNEL);
|
||||
if (!tmpbuf) {
|
||||
pr_err("Out of memory\n");
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -290,8 +290,9 @@ static int stk1160_probe(struct usb_interface *interface,
|
|||
return -ENODEV;
|
||||
|
||||
/* Alloc an array for all possible max_pkt_size */
|
||||
alt_max_pkt_size = kmalloc(sizeof(alt_max_pkt_size[0]) *
|
||||
interface->num_altsetting, GFP_KERNEL);
|
||||
alt_max_pkt_size = kmalloc_array(interface->num_altsetting,
|
||||
sizeof(alt_max_pkt_size[0]),
|
||||
GFP_KERNEL);
|
||||
if (alt_max_pkt_size == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -463,11 +463,12 @@ static int tm6000_alloc_urb_buffers(struct tm6000_core *dev)
|
|||
if (dev->urb_buffer)
|
||||
return 0;
|
||||
|
||||
dev->urb_buffer = kmalloc(sizeof(void *)*num_bufs, GFP_KERNEL);
|
||||
dev->urb_buffer = kmalloc_array(num_bufs, sizeof(void *), GFP_KERNEL);
|
||||
if (!dev->urb_buffer)
|
||||
return -ENOMEM;
|
||||
|
||||
dev->urb_dma = kmalloc(sizeof(dma_addr_t *)*num_bufs, GFP_KERNEL);
|
||||
dev->urb_dma = kmalloc_array(num_bufs, sizeof(dma_addr_t *),
|
||||
GFP_KERNEL);
|
||||
if (!dev->urb_dma)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
@ -583,12 +584,14 @@ static int tm6000_prepare_isoc(struct tm6000_core *dev)
|
|||
|
||||
dev->isoc_ctl.num_bufs = num_bufs;
|
||||
|
||||
dev->isoc_ctl.urb = kmalloc(sizeof(void *)*num_bufs, GFP_KERNEL);
|
||||
dev->isoc_ctl.urb = kmalloc_array(num_bufs, sizeof(void *),
|
||||
GFP_KERNEL);
|
||||
if (!dev->isoc_ctl.urb)
|
||||
return -ENOMEM;
|
||||
|
||||
dev->isoc_ctl.transfer_buffer = kmalloc(sizeof(void *)*num_bufs,
|
||||
GFP_KERNEL);
|
||||
dev->isoc_ctl.transfer_buffer = kmalloc_array(num_bufs,
|
||||
sizeof(void *),
|
||||
GFP_KERNEL);
|
||||
if (!dev->isoc_ctl.transfer_buffer) {
|
||||
kfree(dev->isoc_ctl.urb);
|
||||
return -ENOMEM;
|
||||
|
|
|
|||
|
|
@ -1492,7 +1492,8 @@ static int usbvision_probe(struct usb_interface *intf,
|
|||
|
||||
usbvision->num_alt = uif->num_altsetting;
|
||||
PDEBUG(DBG_PROBE, "Alternate settings: %i", usbvision->num_alt);
|
||||
usbvision->alt_max_pkt_size = kmalloc(32 * usbvision->num_alt, GFP_KERNEL);
|
||||
usbvision->alt_max_pkt_size = kmalloc_array(32, usbvision->num_alt,
|
||||
GFP_KERNEL);
|
||||
if (!usbvision->alt_max_pkt_size) {
|
||||
ret = -ENOMEM;
|
||||
goto err_pkt;
|
||||
|
|
|
|||
|
|
@ -513,8 +513,8 @@ static int uvc_video_clock_init(struct uvc_streaming *stream)
|
|||
spin_lock_init(&clock->lock);
|
||||
clock->size = 32;
|
||||
|
||||
clock->samples = kmalloc(clock->size * sizeof(*clock->samples),
|
||||
GFP_KERNEL);
|
||||
clock->samples = kmalloc_array(clock->size, sizeof(*clock->samples),
|
||||
GFP_KERNEL);
|
||||
if (clock->samples == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -175,7 +175,8 @@ static int videobuf_dma_init_user_locked(struct videobuf_dmabuf *dma,
|
|||
dma->offset = data & ~PAGE_MASK;
|
||||
dma->size = size;
|
||||
dma->nr_pages = last-first+1;
|
||||
dma->pages = kmalloc(dma->nr_pages * sizeof(struct page *), GFP_KERNEL);
|
||||
dma->pages = kmalloc_array(dma->nr_pages, sizeof(struct page *),
|
||||
GFP_KERNEL);
|
||||
if (NULL == dma->pages)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue