IB/srp: Use struct_size() in kzalloc()
Subsystems (2)
PATCH 1/1 IB/srp: Use struct_size() in kzalloc()
One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:
struct foo {
int stuff;
void *entry[];
};instance = kzalloc(sizeof(struct foo) + sizeof(void *) * count, GFP_KERNEL);
Instead of leaving these open-coded and prone to type mistakes, we can now use the new struct_size() helper:
instance = kzalloc(struct_size(instance, entry, count), GFP_KERNEL);
This code was detected with the help of Coccinelle.
--- drivers/infiniband/ulp/srp/ib_srp.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/infiniband/ulp/srp/ib_srp.c +1 -2
@@ -443,8 +443,7 @@ static struct srp_fr_pool *srp_create_fr_pool(struct ib_device *device,if (pool_size <=0 ) goto err; ret = -ENOMEM ; - pool =kzalloc (sizeof (struct srp_fr_pool ) + - pool_size *sizeof (struct srp_fr_desc ),GFP_KERNEL ); + pool =kzalloc (struct_size (pool, desc, pool_size),GFP_KERNEL );if (!pool) goto err; pool->size = pool_size;
Signature · 1 line
2.20.1
Quoted 24 lines · Gustavo A. R. Silva
One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:
struct foo {> int stuff;> void *entry[];>};>
instance =kzalloc(sizeof(struct foo) +-sizeof(void * *count, GFP_KERNEL);> Instead of leaving these open-coded and prone to type mistakes, we can now use the newstruct_size()helper:instance =kzalloc(struct_size(instance, entry, count),
GFP_KERNEL);> This code was detected with the help of Coccinelle.Signed-off-by Gustavo A. R. Silva <[email protected]>>---
drivers/infiniband/ulp/srp/ib_srp.c|3 +---1 file changed, 1 insertion(+-), 2 deletions(-)drivers/infiniband/ulp/srp/ib_srp.c +1
-1--- a/drivers/infiniband/ulp/srp/ib_srp.c +-+-+- b/drivers/infiniband/ulp/srp/ib_srp.c@@-443,8 +-443,7 @@static struct
srp_fr_pool*srp_create_fr_pool(structib_device*device,if (pool_size <=0) goto err;> ret =-ENOMEM;>- pool =kzalloc(sizeof(struct srp_fr_pool) +-drivers/infiniband/ulp/srp/ib_srp.c +0
-1- pool_size *sizeof(struct srp_fr_desc), GFP_KERNEL);>+- pool =kzalloc(struct_size(pool, desc, pool_size), GFP_KERNEL);> if (!pool)
Quoted 1 line
goto err;> pool->size =pool_size;
Jason Gunthorpe
AppliedQuoted 16 lines · Gustavo A. R. Silva
One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:
struct foo { int stuff; void *entry[]; };instance =
kzalloc(sizeof(struct foo) + sizeof(void *) * count, GFP_KERNEL);Instead of leaving these open-coded and prone to type mistakes, we can now use the new
struct_size()helper:instance =
kzalloc(struct_size(instance, entry, count), GFP_KERNEL);
Quoted 7 lines
This code was detected with the help of Coccinelle.
Signed-off-by Gustavo A. R. Silva <[email protected]>Reviewed-by Bart Van Assche <[email protected]>--- drivers/infiniband/ulp/srp/ib_srp.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
Applied to for-next
Thanks,
Jason