qxl: Use struct_size() in kzalloc()
authorGustavo A. R. Silva <gustavo@embeddedor.com>
Tue, 8 Jan 2019 16:21:52 +0000 (10:21 -0600)
committerGerd Hoffmann <kraxel@redhat.com>
Wed, 9 Jan 2019 08:38:49 +0000 (09:38 +0100)
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.

Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20190108162152.GA25361@embeddedor
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
drivers/gpu/drm/qxl/qxl_display.c

index 72a1784dae5481db9a2c289ec81b36ff990b436a..1f8fddcc34d61a9880464f3f9334d10d7ebf0e34 100644 (file)
@@ -48,8 +48,8 @@ static int qxl_alloc_client_monitors_config(struct qxl_device *qdev,
        }
        if (!qdev->client_monitors_config) {
                qdev->client_monitors_config = kzalloc(
-                               sizeof(struct qxl_monitors_config) +
-                               sizeof(struct qxl_head) * count, GFP_KERNEL);
+                               struct_size(qdev->client_monitors_config,
+                               heads, count), GFP_KERNEL);
                if (!qdev->client_monitors_config)
                        return -ENOMEM;
        }