svcrdma: Use struct_size() in kmalloc()
Subsystems (4)
PATCH 1/1 svcrdma: Use struct_size() in kmalloc()
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;
struct boo entry[];
};instance = kmalloc(sizeof(struct foo) + count * sizeof(struct boo), GFP_KERNEL);
Instead of leaving these open-coded and prone to type mistakes, we can now use the new struct_size() helper:
instance = kmalloc(struct_size(instance, entry, count), GFP_KERNEL);
This code was detected with the help of Coccinelle.
--- net/sunrpc/xprtrdma/svc_rdma_rw.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
net/sunrpc/xprtrdma/svc_rdma_rw.c +1 -2
@@ -64,8 +64,7 @@ svc_rdma_get_rw_ctxt(struct svcxprt_rdma *rdma, unsigned int sges)spin_unlock (&rdma->sc_rw_ctxt_lock); }else {spin_unlock (&rdma->sc_rw_ctxt_lock); - ctxt =kmalloc (sizeof (*ctxt) + -SG_CHUNK_SIZE *sizeof (struct scatterlist ), + ctxt =kmalloc (struct_size (ctxt, rw_first_sgl,SG_CHUNK_SIZE ),GFP_KERNEL );if (!ctxt) goto out;
Signature · 1 line
2.20.1
Quoted 11 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; struct boo entry[]; };instance =
kmalloc(sizeof(struct foo) + count * sizeof(struct boo), GFP_KERNEL);
Quoted 8 lines
Instead of leaving these open-coded and prone to type mistakes, we can now use the new
struct_size()helper:instance =
kmalloc(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]>
Quoted 20 lines
---
net/sunrpc/xprtrdma/svc_rdma_rw.c| 3 +--1 file changed, 1 insertion(+), 2 deletions(-)net/sunrpc/xprtrdma/svc_rdma_rw.c +1
-2@@ -64,8 +64,7 @@ svc_rdma_get_rw_ctxt(struct svcxprt_rdma *rdma, unsigned int sges)spin_unlock (&rdma->sc_rw_ctxt_lock); }else {spin_unlock (&rdma->sc_rw_ctxt_lock); - ctxt =kmalloc (sizeof (*ctxt) + -SG_CHUNK_SIZE *sizeof (struct scatterlist ), + ctxt =kmalloc (struct_size (ctxt, rw_first_sgl,SG_CHUNK_SIZE ),GFP_KERNEL );if (!ctxt) goto out;Signature · 1 line
2.20.1
--
Chuck Lever
Quoted 18 lines · Chuck Lever
Quoted 14 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; struct boo entry[]; };instance =
kmalloc(sizeof(struct foo) + count * sizeof(struct boo), GFP_KERNEL);Instead of leaving these open-coded and prone to type mistakes, we can now use the new
struct_size()helper:
Quoted 8 lines
Quoted 5 lines
instance =
kmalloc(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]>Reviewed-by Chuck Lever <[email protected]>
Thank you, Chuck.
--
Gustavo
Quoted 27 lines
Quoted 21 lines
---
net/sunrpc/xprtrdma/svc_rdma_rw.c| 3 +--1 file changed, 1 insertion(+), 2 deletions(-)net/sunrpc/xprtrdma/svc_rdma_rw.c +1
-2@@ -64,8 +64,7 @@ svc_rdma_get_rw_ctxt(struct svcxprt_rdma *rdma, unsigned int sges)spin_unlock (&rdma->sc_rw_ctxt_lock); }else {spin_unlock (&rdma->sc_rw_ctxt_lock); - ctxt =kmalloc (sizeof (*ctxt) + -SG_CHUNK_SIZE *sizeof (struct scatterlist ), + ctxt =kmalloc (struct_size (ctxt, rw_first_sgl,SG_CHUNK_SIZE ),GFP_KERNEL );if (!ctxt) goto out;Signature · 1 line
2.20.1--
Chuck Lever
Quoted 18 lines · Chuck Lever
Quoted 14 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; struct boo entry[]; };instance =
kmalloc(sizeof(struct foo) + count * sizeof(struct boo), GFP_KERNEL);Instead of leaving these open-coded and prone to type mistakes, we can now use the new
struct_size()helper:
Quoted 7 lines
Quoted 5 lines
instance =
kmalloc(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]>Reviewed-by Chuck Lever <[email protected]>
Thanks, applying for 5.1.--b.
Quoted 27 lines
Quoted 22 lines
---
net/sunrpc/xprtrdma/svc_rdma_rw.c| 3 +--1 file changed, 1 insertion(+), 2 deletions(-)net/sunrpc/xprtrdma/svc_rdma_rw.c +1
-2@@ -64,8 +64,7 @@ svc_rdma_get_rw_ctxt(struct svcxprt_rdma *rdma, unsigned int sges)spin_unlock (&rdma->sc_rw_ctxt_lock); }else {spin_unlock (&rdma->sc_rw_ctxt_lock); - ctxt =kmalloc (sizeof (*ctxt) + -SG_CHUNK_SIZE *sizeof (struct scatterlist ), + ctxt =kmalloc (struct_size (ctxt, rw_first_sgl,SG_CHUNK_SIZE ),GFP_KERNEL );if (!ctxt) goto out;Signature · 1 line
2.20.1--
Chuck Lever