mtd: rawnand: rockchip: Use struct_size()
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sun, 1 Oct 2023 07:44:04 +0000 (09:44 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Mon, 16 Oct 2023 09:16:51 +0000 (11:16 +0200)
Use struct_size() instead of hand writing it.
This is less verbose and more robust.

While at it, prepare for the coming implementation by GCC and Clang of the
__counted_by attribute. Flexible array members annotated with __counted_by
can have their accesses bounds-checked at run-time checking via
CONFIG_UBSAN_BOUNDS (for array indexing) and CONFIG_FORTIFY_SOURCE (for
strcpy/memcpy-family functions).

Also remove a useless comment about the position of a flex-array in a
structure.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Acked-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/481721c2c7fe570b4027dbe231d523961c953d5a.1696146232.git.christophe.jaillet@wanadoo.fr
drivers/mtd/nand/raw/rockchip-nand-controller.c

index 5bc90ffa721f0d7c685da2d769e3afd3f62a4d38..596cf9a782749a7576265f01ffd4d464677c12e8 100644 (file)
@@ -158,8 +158,7 @@ struct rk_nfc_nand_chip {
        u32 timing;
 
        u8 nsels;
-       u8 sels[];
-       /* Nothing after this field. */
+       u8 sels[] __counted_by(nsels);
 };
 
 struct rk_nfc {
@@ -1119,7 +1118,7 @@ static int rk_nfc_nand_chip_init(struct device *dev, struct rk_nfc *nfc,
                return -EINVAL;
        }
 
-       rknand = devm_kzalloc(dev, sizeof(*rknand) + nsels * sizeof(u8),
+       rknand = devm_kzalloc(dev, struct_size(rknand, sels, nsels),
                              GFP_KERNEL);
        if (!rknand)
                return -ENOMEM;