netlink: Annotate struct netlink_policy_dump_state with __counted_by
Subsystems (2)
PATCH 1/1 netlink: Annotate struct netlink_policy_dump_state with __counted_by
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 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 netlink_policy_dump_state.
Additionally update the size of the usage array length before accessing it. This requires remembering the old size for the memset() and later assignments.
--- net/netlink/policy.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-)
net/netlink/policy.c +8 -7
@@ -21,7 +21,7 @@ struct netlink_policy_dump_state {struct {const struct nla_policy *policy;unsigned int maxtype; - } policies[]; + } policies[] __counted_by(n_alloc); }; static int add_policy(struct netlink_policy_dump_state **statep,
@@ -29,7 +29,7 @@ static int add_policy(struct netlink_policy_dump_state **statep, unsigned int maxtype) {struct netlink_policy_dump_state *state = *statep; -unsigned int n_alloc, i; +unsigned int old_n_alloc, n_alloc, i;if (!policy || !maxtype)return 0 ;
@@ -52,12 +52,13 @@ static int add_policy(struct netlink_policy_dump_state **statep,if (!state)return -ENOMEM ; -memset (&state->policies[state->n_alloc],0 , -flex_array_size (state, policies, n_alloc - state->n_alloc)); - - state->policies[state->n_alloc].policy = policy; - state->policies[state->n_alloc].maxtype = maxtype; + old_n_alloc = state->n_alloc; state->n_alloc = n_alloc; +memset (&state->policies[old_n_alloc],0 , +flex_array_size (state, policies, n_alloc - old_n_alloc)); + + state->policies[old_n_alloc].policy = policy; + state->policies[old_n_alloc].maxtype = maxtype; *statep = state;return 0 ;
Signature · 1 line
2.34.1
Quoted 12 lines · Kees Cook
Prepare for the coming implementation by GCC and Clang of the
__counted_byattribute. Flexible array members annotated with__counted_bycan have their accesses bounds-checked at run-time viaCONFIG_UBSAN_BOUNDS(for array indexing) andCONFIG_FORTIFY_SOURCE(for strcpy/memcpy-family functions).As found with Coccinelle[1], add
__counted_byfor structnetlink_policy_dump_state.Additionally update the size of the usage array length before accessing it. This requires remembering the old size for the
memset()and later assignments.
Quoted 8 lines
Cc "David S. Miller" <[email protected]>Cc Eric Dumazet <[email protected]>Cc Jakub Kicinski <[email protected]>Cc Paolo Abeni <[email protected]>Cc Johannes Berg <[email protected]>Signed-off-by Kees Cook <[email protected]>
Thanks
--
Gustavo
Quoted 45 lines
--- net/netlink/policy.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-)net/netlink/policy.c +8
-7@@ -21,7 +21,7 @@ struct netlink_policy_dump_state {struct {const struct nla_policy *policy;unsigned int maxtype; - } policies[]; + } policies[] __counted_by(n_alloc); }; static int add_policy(struct netlink_policy_dump_state **statep,@@ -29,7 +29,7 @@ static int add_policy(struct netlink_policy_dump_state **statep, unsigned int maxtype) {struct netlink_policy_dump_state *state = *statep; -unsigned int n_alloc, i; +unsigned int old_n_alloc, n_alloc, i;if (!policy || !maxtype)return 0 ;@@ -52,12 +52,13 @@ static int add_policy(struct netlink_policy_dump_state **statep,if (!state)return -ENOMEM ; -memset (&state->policies[state->n_alloc],0 , -flex_array_size (state, policies, n_alloc - state->n_alloc)); - - state->policies[state->n_alloc].policy = policy; - state->policies[state->n_alloc].maxtype = maxtype; + old_n_alloc = state->n_alloc; state->n_alloc = n_alloc; +memset (&state->policies[old_n_alloc],0 , +flex_array_size (state, policies, n_alloc - old_n_alloc)); + + state->policies[old_n_alloc].policy = policy; + state->policies[old_n_alloc].maxtype = maxtype; *statep = state;return 0 ;
This patch was applied to netdev/net-next.git (main) by David S. Miller <[email protected]>:
Hello:
This patch was applied to netdev/net-next.git (main) by David S. Miller <[email protected]>:
Quoted 9 lines · On Tue, 3 Oct 2023 16:21:02 -0700 you wrote:
Prepare for the coming implementation by GCC and Clang of the
__counted_byattribute. Flexible array members annotated with__counted_bycan have their accesses bounds-checked at run-time viaCONFIG_UBSAN_BOUNDS(for array indexing) andCONFIG_FORTIFY_SOURCE(for strcpy/memcpy-family functions).As found with Coccinelle[1], add
__counted_byfor structnetlink_policy_dump_state.[...]
Here is the summary with links:
- netlink: Annotate struct netlink_policy_dump_state with __counted_by
https://git.kernel.org/netdev/net-next/c/eaede99c3aeb
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html