From: Oliver Hartkopp <socketcan@hartkopp.net>
To: linux-can@vger.kernel.org, Marc Kleine-Budde <mkl@pengutronix.de>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>
Cc: Vincent Mailhol <mailhol@kernel.org>,
netdev@vger.kernel.org, Eric Dumazet <edumazet@google.com>,
Simon Horman <horms@kernel.org>,
Oleksij Rempel <o.rempel@pengutronix.de>,
davem@davemloft.net, Oliver Hartkopp <socketcan@hartkopp.net>
Subject: [can-next v2 0/5] can: remove private skb headroom infrastructure
Date: Sat, 17 Jan 2026 14:28:19 +0100 [thread overview]
Message-ID: <20260117132824.3649-1-socketcan@hartkopp.net> (raw)
CAN bus related skbuffs (ETH_P_CAN/ETH_P_CANFD/ETH_P_CANXL) simply contain
CAN frame structs for CAN CC/FD/XL of skb->len length at skb->data.
Those CAN skbs do not have network/mac/transport headers nor other such
references for encapsulated protocols like ethernet/IP protocols.
To store data for CAN specific use-cases all CAN bus related skbuffs are
created with a 16 byte private skb headroom (struct can_skb_priv).
Using the skb headroom and accessing skb->head for this private data
led to several problems in the past likely due to "The struct can_skb_priv
business is highly unconventional for the networking stack." [1]
This patch set aims to remove the unconventional skb headroom usage for
CAN bus related skbuffs. To store the data for CAN specific use-cases
unused space in CAN skbs is used, namely the inner protocol space for
ethernet/IP encapsulation. The skb->encapsulation flag remains false in
CAN skbs so that the ethernet/IP encapsulation (tunnel) data is tagged as
unused/invalid in the case the skb is accidentally routed to non-CAN
targets (netdev/netlayer).
The patch set reduces the potential interactions with ethernet/IP code and
builds skbs that won't harm the system even if the skb is evaluated or
modified by other networking components. In such an invalid case the CAN
skb is dropped in can_rcv, e.g. if skb->encapsulation was set.
[1] https://lore.kernel.org/linux-can/20260104074222.29e660ac@kernel.org/
V2: - net-next rebase due to net/can/raw.c fix in commit faba5860fcf9
("can: raw: instantly reject disabled CAN frames")
- extend the cover letter to address concerns raised by Jakub Kicinski
and Paolo Abeni regarding the safety of using the shared space for
ethernet/IP encapsulation for CAN skbs
- extend the commit messages in patches 1/2/5
- Added Tested-by: and Acked-by: tags from Oleksij Rempel and me
Oliver Hartkopp (5):
can: use skb hash instead of private variable in headroom
can: move can_iif from private headroom to struct sk_buff
can: move frame length from private headroom to struct sk_buff
can: remove private skb headroom infrastructure
can: gw: use new can_gw_hops variable instead of re-using csum_start
drivers/net/can/dev/skb.c | 45 ++++++++++++++++-----------------------
include/linux/can/core.h | 1 +
include/linux/can/skb.h | 33 ----------------------------
include/linux/skbuff.h | 27 +++++++++++++++++------
net/can/af_can.c | 35 +++++++++++++++++++-----------
net/can/bcm.c | 13 ++++-------
net/can/gw.c | 25 ++++++----------------
net/can/isotp.c | 18 ++++++----------
net/can/j1939/socket.c | 7 ++----
net/can/j1939/transport.c | 13 ++++-------
net/can/raw.c | 14 ++++++------
11 files changed, 92 insertions(+), 139 deletions(-)
--
2.47.3
next reply other threads:[~2026-01-17 13:29 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-17 13:28 Oliver Hartkopp [this message]
2026-01-17 13:28 ` [can-next v2 1/5] can: use skb hash instead of private variable in headroom Oliver Hartkopp
2026-01-17 13:28 ` [can-next v2 2/5] can: move can_iif from private headroom to struct sk_buff Oliver Hartkopp
2026-01-17 13:28 ` [can-next v2 3/5] can: move frame length " Oliver Hartkopp
2026-01-17 13:28 ` [can-next v2 4/5] can: remove private skb headroom infrastructure Oliver Hartkopp
2026-01-17 13:28 ` [can-next v2 5/5] can: gw: use new can_gw_hops variable instead of re-using csum_start Oliver Hartkopp
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260117132824.3649-1-socketcan@hartkopp.net \
--to=socketcan@hartkopp.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-can@vger.kernel.org \
--cc=mailhol@kernel.org \
--cc=mkl@pengutronix.de \
--cc=netdev@vger.kernel.org \
--cc=o.rempel@pengutronix.de \
--cc=pabeni@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox