]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
svcrdma: Use struct_size() in kmalloc()
authorGustavo A. R. Silva <gustavo@embeddedor.com>
Tue, 15 Jan 2019 21:11:40 +0000 (15:11 -0600)
committerJ. Bruce Fields <bfields@redhat.com>
Wed, 6 Feb 2019 20:37:14 +0000 (15:37 -0500)
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.

Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
net/sunrpc/xprtrdma/svc_rdma_rw.c

index c35753691960c0289a7d6be0f6335ded0d5fe2b4..65ee6fd60162702e0d04d3de36e51765ed6ac242 100644 (file)
@@ -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;