diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-06-28 17:40:21 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-07-02 05:12:10 +0300 |
commit | 362b87f5b1c6603b72699e8bb18661ecc4efc0bb (patch) | |
tree | 8f2019d80b6f5eee9c5036fea8650b773f3614b6 /include/linux/netlink.h | |
parent | 53962bcea9975a33669ba03e06111df636048bb1 (diff) | |
download | linux-362b87f5b1c6603b72699e8bb18661ecc4efc0bb.tar.xz |
netlink: use 48 byte ctx instead of 6 signed longs for callback
People are inclined to stuff random things into cb->args[n] because it
looks like an array of integers. Sometimes people even put u64s in there
with comments noting that a certain member takes up two slots. The
horror! Really this should mirror the usage of skb->cb, which are just
48 opaque bytes suitable for casting a struct. Then people can create
their usual casting macros for accessing strongly typed members of a
struct.
As a plus, this also gives us the same amount of space on 32bit and 64bit.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/netlink.h')
-rw-r--r-- | include/linux/netlink.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index 593d1b9c33a8..205fa7b1f07a 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h @@ -192,7 +192,14 @@ struct netlink_callback { bool strict_check; u16 answer_flags; unsigned int prev_seq, seq; - long args[6]; + union { + u8 ctx[48]; + + /* args is deprecated. Cast a struct over ctx instead + * for proper type safety. + */ + long args[6]; + }; }; struct netlink_notify { |