powerpc/spufs: use struct_size() in kmalloc()
authorGustavo A. R. Silva <gustavo@embeddedor.com>
Tue, 8 Jan 2019 18:37:20 +0000 (12:37 -0600)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 14 Jan 2019 09:39:27 +0000 (20:39 +1100)
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 = kmalloc(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 = 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>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/platforms/cell/spufs/file.c

index ae8123edddc670ed2b413129ee8a97aade121200..48c2477e7e2a2c462bafc022a6ad53ade37cdde3 100644 (file)
@@ -2338,9 +2338,8 @@ static int spufs_switch_log_open(struct inode *inode, struct file *file)
                goto out;
        }
 
-       ctx->switch_log = kmalloc(sizeof(struct switch_log) +
-               SWITCH_LOG_BUFSIZE * sizeof(struct switch_log_entry),
-               GFP_KERNEL);
+       ctx->switch_log = kmalloc(struct_size(ctx->switch_log, log,
+                                 SWITCH_LOG_BUFSIZE), GFP_KERNEL);
 
        if (!ctx->switch_log) {
                rc = -ENOMEM;