chelsio/l2t: Annotate struct l2t_data with __counted_by
authorKees Cook <keescook@chromium.org>
Fri, 29 Sep 2023 18:11:45 +0000 (11:11 -0700)
committerJakub Kicinski <kuba@kernel.org>
Wed, 4 Oct 2023 22:37:13 +0000 (15:37 -0700)
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).

As found with Coccinelle[1], add __counted_by for struct l2t_data.

[1] https://github.com/kees/kernel-tools/blob/trunk/coccinelle/examples/counted_by.cocci

Cc: Raju Rangoju <rajur@chelsio.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Link: https://lore.kernel.org/r/20230929181149.3006432-1-keescook@chromium.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/chelsio/cxgb3/l2t.h
drivers/net/ethernet/chelsio/cxgb4/l2t.c

index ea75f275023ffad95a4e2dfa46b1db51935417d8..646ca0bc25bd013a06d1a997f2e12409886d67c8 100644 (file)
@@ -76,7 +76,7 @@ struct l2t_data {
        atomic_t nfree;         /* number of free entries */
        rwlock_t lock;
        struct rcu_head rcu_head;       /* to handle rcu cleanup */
-       struct l2t_entry l2tab[];
+       struct l2t_entry l2tab[] __counted_by(nentries);
 };
 
 typedef void (*arp_failure_handler_func)(struct t3cdev * dev,
index a10a6862a9a465e5abb8ac2120bf88bba5b3d0bd..1e5f5b1a22a6dedcc00a5b0b3e9af393dceab0d6 100644 (file)
@@ -59,7 +59,7 @@ struct l2t_data {
        rwlock_t lock;
        atomic_t nfree;             /* number of free entries */
        struct l2t_entry *rover;    /* starting point for next allocation */
-       struct l2t_entry l2tab[];  /* MUST BE LAST */
+       struct l2t_entry l2tab[] __counted_by(l2t_size);  /* MUST BE LAST */
 };
 
 static inline unsigned int vlan_prio(const struct l2t_entry *e)