firewire: core: use struct_size and flex_array_size in ioctl_add_descriptor
authorThorsten Blum <thorsten.blum@linux.dev>
Tue, 16 Sep 2025 12:21:45 +0000 (14:21 +0200)
committerTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 17 Sep 2025 15:29:48 +0000 (00:29 +0900)
Use struct_size() to determine the memory needed for a new 'struct
descriptor_resource' and flex_array_size() to calculate the number of
bytes to copy from userspace. This removes the hardcoded size (4 bytes)
for the 'u32 data[]' entries.

No functional changes intended.

Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
Link: https://lore.kernel.org/r/20250916122143.2459993-3-thorsten.blum@linux.dev
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
drivers/firewire/core-cdev.c

index 112b330..9913162 100644 (file)
@@ -940,11 +940,12 @@ static int ioctl_add_descriptor(struct client *client, union ioctl_arg *arg)
        if (a->length > 256)
                return -EINVAL;
 
-       r = kmalloc(sizeof(*r) + a->length * 4, GFP_KERNEL);
+       r = kmalloc(struct_size(r, data, a->length), GFP_KERNEL);
        if (r == NULL)
                return -ENOMEM;
 
-       if (copy_from_user(r->data, u64_to_uptr(a->data), a->length * 4)) {
+       if (copy_from_user(r->data, u64_to_uptr(a->data),
+                          flex_array_size(r, data, a->length))) {
                ret = -EFAULT;
                goto failed;
        }