From: Marc Kleine-Budde <mkl@pengutronix.de>
To: netdev@vger.kernel.org
Cc: davem@davemloft.net, kuba@kernel.org, linux-can@vger.kernel.org,
kernel@pengutronix.de, Vincent Mailhol <mailhol@kernel.org>,
Marc Kleine-Budde <mkl@pengutronix.de>
Subject: [PATCH net-next 25/48] can: annotate mtu accesses with READ_ONCE()
Date: Thu, 25 Sep 2025 14:08:02 +0200 [thread overview]
Message-ID: <20250925121332.848157-26-mkl@pengutronix.de> (raw)
In-Reply-To: <20250925121332.848157-1-mkl@pengutronix.de>
From: Vincent Mailhol <mailhol@kernel.org>
As hinted in commit 501a90c94510 ("inet: protect against too small mtu
values."), net_device->mtu is vulnerable to race conditions if it is
written and read without holding the RTNL.
At the moment, all the writes are done while the interface is down,
either in the devices' probe() function or in can_changelink(). So
there are no such issues yet. But upcoming changes will allow to
modify the MTU while the CAN XL devices are up.
In preparation to the introduction of CAN XL, annotate all the
net_device->mtu accesses which are not yet guarded by the RTNL with a
READ_ONCE().
Note that all the write accesses are already either guarded by the
RTNL or are already annotated and thus need no changes.
Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
Link: https://patch.msgid.link/20250923-can-fix-mtu-v3-1-581bde113f52@kernel.org
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
net/can/af_can.c | 2 +-
net/can/isotp.c | 2 +-
net/can/raw.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/net/can/af_can.c b/net/can/af_can.c
index b2387a46794a..770173d8db42 100644
--- a/net/can/af_can.c
+++ b/net/can/af_can.c
@@ -221,7 +221,7 @@ int can_send(struct sk_buff *skb, int loop)
}
/* Make sure the CAN frame can pass the selected CAN netdevice. */
- if (unlikely(skb->len > skb->dev->mtu)) {
+ if (unlikely(skb->len > READ_ONCE(skb->dev->mtu))) {
err = -EMSGSIZE;
goto inval_skb;
}
diff --git a/net/can/isotp.c b/net/can/isotp.c
index dee1412b3c9c..74ee1e52249b 100644
--- a/net/can/isotp.c
+++ b/net/can/isotp.c
@@ -1313,7 +1313,7 @@ static int isotp_bind(struct socket *sock, struct sockaddr *uaddr, int len)
err = -ENODEV;
goto out;
}
- if (dev->mtu < so->ll.mtu) {
+ if (READ_ONCE(dev->mtu) < so->ll.mtu) {
dev_put(dev);
err = -EINVAL;
goto out;
diff --git a/net/can/raw.c b/net/can/raw.c
index bf65d67b5df0..a53853f5e9af 100644
--- a/net/can/raw.c
+++ b/net/can/raw.c
@@ -961,7 +961,7 @@ static int raw_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
err = -EINVAL;
/* check for valid CAN (CC/FD/XL) frame content */
- txmtu = raw_check_txframe(ro, skb, dev->mtu);
+ txmtu = raw_check_txframe(ro, skb, READ_ONCE(dev->mtu));
if (!txmtu)
goto free_skb;
--
2.51.0
next prev parent reply other threads:[~2025-09-25 12:14 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-25 12:07 [PATCH net-next 0/48] pull-request: can-next 2025-09-25 Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 01/48] can: m_can: use us_to_ktime() where appropriate Marc Kleine-Budde
2025-09-26 22:01 ` patchwork-bot+netdevbpf
2025-09-25 12:07 ` [PATCH net-next 02/48] MAINTAINERS: update Vincent Mailhol's email address Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 03/48] can: dev: sort includes by alphabetical order Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 04/48] can: peak: Modification of references to email accounts being deleted Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 05/48] can: rcar_canfd: Update bit rate constants for RZ/G3E and R-Car Gen4 Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 06/48] can: rcar_canfd: Update RCANFD_CFG_* macros Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 07/48] can: rcar_canfd: Simplify nominal bit rate config Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 08/48] can: rcar_canfd: Simplify data " Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 09/48] can: rcar_can: Consistently use ndev for net_device pointers Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 10/48] can: rcar_can: Add helper variable dev to rcar_can_probe() Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 11/48] can: rcar_can: Convert to Runtime PM Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 12/48] can: rcar_can: Convert to BIT() Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 13/48] can: rcar_can: Convert to GENMASK() Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 14/48] can: rcar_can: CTLR bitfield conversion Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 15/48] can: rcar_can: TFCR " Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 16/48] can: rcar_can: BCR " Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 17/48] can: rcar_can: Mailbox " Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 18/48] can: rcar_can: Do not print alloc_candev() failures Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 19/48] can: rcar_can: Convert to %pe Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 20/48] can: esd_usb: Rework display of error messages Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 21/48] can: esd_usb: Avoid errors triggered from USB disconnect Marc Kleine-Budde
2025-09-25 12:07 ` [PATCH net-next 22/48] can: raw: reorder struct uniqframe's members to optimise packing Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 23/48] can: raw: use bitfields to store flags in struct raw_sock Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 24/48] can: raw: reorder struct raw_sock's members to optimise packing Marc Kleine-Budde
2025-09-25 12:08 ` Marc Kleine-Budde [this message]
2025-09-25 12:08 ` [PATCH net-next 26/48] can: dev: turn can_set_static_ctrlmode() into a non-inline function Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 27/48] can: populate the minimum and maximum MTU values Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 28/48] can: enable CAN XL for virtual CAN devices by default Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 29/48] can: dev: move struct data_bittiming_params to linux/can/bittiming.h Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 30/48] can: dev: make can_get_relative_tdco() FD agnostic and move it to bittiming.h Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 31/48] can: netlink: document which symbols are FD specific Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 32/48] can: netlink: refactor can_validate_bittiming() Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 33/48] can: netlink: add can_validate_tdc() Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 34/48] can: netlink: add can_validate_databittiming() Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 35/48] can: netlink: refactor CAN_CTRLMODE_TDC_{AUTO,MANUAL} flag reset logic Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 36/48] can: netlink: remove useless check in can_tdc_changelink() Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 37/48] can: netlink: make can_tdc_changelink() FD agnostic Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 38/48] can: netlink: add can_dtb_changelink() Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 39/48] can: netlink: add can_ctrlmode_changelink() Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 40/48] can: netlink: make can_tdc_get_size() FD agnostic Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 41/48] can: netlink: add can_data_bittiming_get_size() Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 42/48] can: netlink: add can_bittiming_fill_info() Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 43/48] can: netlink: add can_bittiming_const_fill_info() Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 44/48] can: netlink: add can_bitrate_const_fill_info() Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 45/48] can: netlink: make can_tdc_fill_info() FD agnostic Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 46/48] can: calc_bittiming: make can_calc_tdco() " Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 47/48] can: dev: add can_get_ctrlmode_str() Marc Kleine-Budde
2025-09-25 12:08 ` [PATCH net-next 48/48] can: netlink: add userland error messages Marc Kleine-Budde
-- strict thread matches above, loose matches on Subject: below --
2025-09-24 8:06 [PATCH net-next 0/48] pull-request: can-next 2025-09-24 Marc Kleine-Budde
2025-09-24 8:06 ` [PATCH net-next 25/48] can: annotate mtu accesses with READ_ONCE() Marc Kleine-Budde
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=20250925121332.848157-26-mkl@pengutronix.de \
--to=mkl@pengutronix.de \
--cc=davem@davemloft.net \
--cc=kernel@pengutronix.de \
--cc=kuba@kernel.org \
--cc=linux-can@vger.kernel.org \
--cc=mailhol@kernel.org \
--cc=netdev@vger.kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).