]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
can: add CAN skb extension infrastructure
authorOliver Hartkopp <socketcan@hartkopp.net>
Sun, 1 Feb 2026 14:33:17 +0000 (15:33 +0100)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 5 Feb 2026 10:58:39 +0000 (11:58 +0100)
commit96ea3a1e2d317e7ecb6b65dc65c9dd917905a6a8
tree2780347dd8e2aea4538e15f43a207e193edf7ab7
parentd4fb6514ff8ed6912a71294e6b66a5d59ee88007
can: add CAN skb extension infrastructure

To remove the private CAN bus skb headroom infrastructure 8 bytes need to
be stored in the skb. The skb extensions are a common pattern and an easy
and efficient way to hold private data travelling along with the skb. We
only need the skb_ext_add() and skb_ext_find() functions to allocate and
access CAN specific content as the skb helpers to copy/clone/free skbs
automatically take care of skb extensions and their final removal.

This patch introduces the complete CAN skb extensions infrastructure:
- add struct can_skb_ext in new file include/net/can.h
- add include/net/can.h in MAINTAINERS
- add SKB_EXT_CAN to skbuff.c and skbuff.h
- select SKB_EXTENSIONS in Kconfig when CONFIG_CAN is enabled
- check for existing CAN skb extensions in can_rcv() in af_can.c
- add CAN skb extensions allocation at every skb_alloc() location
- duplicate the skb extensions if cloning outgoing skbs (framelen/gw_hops)
- introduce can_skb_ext_add() and can_skb_ext_find() helpers

The patch also corrects an indention issue in the original code from 2018:
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202602010426.PnGrYAk3-lkp@intel.com/
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
Link: https://patch.msgid.link/20260201-can_skb_ext-v8-2-3635d790fe8b@hartkopp.net
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
15 files changed:
MAINTAINERS
drivers/net/can/dev/skb.c
drivers/net/can/vxcan.c
include/linux/can/skb.h
include/linux/skbuff.h
include/net/can.h [new file with mode: 0644]
net/can/Kconfig
net/can/af_can.c
net/can/bcm.c
net/can/gw.c
net/can/isotp.c
net/can/j1939/socket.c
net/can/j1939/transport.c
net/can/raw.c
net/core/skbuff.c