Re: [PATCH 1/5] ISDN-Gigaset: Use kmalloc_array() in two functions
From: Paul Bolle <hidden>
Date: 2016-09-28 11:37:28
Also in:
lkml, netdev
On Mon, 2016-09-26 at 17:38 +0200, SF Markus Elfring wrote:
* Multiplications for the size determination of memory allocations indicated that array data structures should be processed. Thus use the corresponding function "kmalloc_array".
Was the current code incorrect? What makes kmalloc_array() better? None of this is obvious to me. I'm not going to change code just because some checker suggests to do so.
This issue was detected by using the Coccinelle software.
So? And which coccinelle script was actually used? I couldn't spot a coccinelle script doing that in the current tree.
* Replace the specification of a data structure by a pointer dereference to make the corresponding size determination a bit safer according to the Linux coding style convention.
I'm not happy with you mixing this with the above, less trivial, change.
Signed-off-by: Markus Elfring <redacted>
quoted hunk ↗ jump to hunk
--- a/drivers/isdn/gigaset/common.c +++ b/drivers/isdn/gigaset/common.c@@ -709,8 +709,7 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels,cs->mode = M_UNKNOWN; cs->mstate = MS_UNINITIALIZED; -
Unrelated whitespace change.
- cs->bcs = kmalloc(channels * sizeof(struct bc_state), GFP_KERNEL); + cs->bcs = kmalloc_array(channels, sizeof(*cs->bcs), GFP_KERNEL);
For the record: "channels" is basically hardcoded in the three gigaset hardware drivers.
quoted hunk ↗ jump to hunk
cs->inbuf = kmalloc(sizeof(struct inbuf_t), GFP_KERNEL); if (!cs->bcs || !cs->inbuf) { pr_err("out of memory\n");@@ -1089,8 +1088,7 @@ struct gigaset_driver*gigaset_initdriver(unsigned minor, unsigned minors, drv->ops = ops; drv->owner = owner; INIT_LIST_HEAD(&drv->list); -
Again unrelated whitespace change.
- drv->cs = kmalloc(minors * sizeof *drv->cs, GFP_KERNEL); + drv->cs = kmalloc_array(minors, sizeof(*drv->cs), GFP_KERNEL);
For "minors" the same holds as for "channels", above. And you snuck in a parentheses change. That should have probably been merged with 5/5.
if (!drv->cs) goto error;
Paul Bolle