From: sashiko-bot@kernel.org
To: "Oliver Hartkopp" <socketcan@hartkopp.net>
Cc: "Oliver Hartkopp" <socketcan@hartkopp.net>,
linux-can@vger.kernel.org, "Vincent Mailhol" <mailhol@kernel.org>,
"Oleksij Rempel" <o.rempel@pengutronix.de>,
"Marc Kleine-Budde" <mkl@pengutronix.de>
Subject: Re: [PATCH v11 11/11] can: bcm: track a single source interface for ANYDEV timeout/throttle ops
Date: Thu, 09 Jul 2026 18:43:51 +0000 [thread overview]
Message-ID: <20260709184351.723F71F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260709-bcm_fixes-v11-11-067ba11bec5c@hartkopp.net>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Race condition between interface unregistration and in-flight packets permanently breaks ANYDEV sockets.
- [Medium] Data race and torn read on 64-bit ktime_t variables bypassing ANYDEV concurrency protection.
--
--- Patch [11]: [PATCH v11 11/11] can: bcm: track a single source interface for ANYDEV timeout/throttle ops ---
commit ed6fe9660233297822929009c213120acb00229f
Author: Oliver Hartkopp <socketcan@hartkopp.net>
can: bcm: track a single source interface for ANYDEV timeout/throttle ops
An ANYDEV rx op with an active RX timeout/throttle timer has no defined
semantics when matching frames arrive from multiple interfaces, leading to
data corruption. This patch adds op->if_detected to track the first interface
that delivers a matching frame, rejecting frames from other interfaces.
The claim is released on NETDEV_UNREGISTER or timer reconfiguration.
Link: https://lore.kernel.org/linux-can/20260709105031.1A39C1F000E9@smtp.kernel.org/
> diff --git a/net/can/bcm.c b/net/can/bcm.c
> index 10a883b50fc63..8cc0d2267582f 100644
> --- a/net/can/bcm.c
> +++ b/net/can/bcm.c
[ ... ]
> @@ -776,6 +777,28 @@ static void bcm_rx_handler(struct sk_buff *skb, void *data)
> return;
> }
>
> + /* An ANYDEV op with an active RX timeout and/or throttle timer
> + * tracks a single source interface: claim the first interface that
> + * delivers a matching frame and reject frames from any other one,
> + * before hrtimer_cancel() below can touch op->timer - this avoids
> + * racing bcm_rx_timeout_handler() across concurrent interfaces.
> + * RX_RTR_FRAME ops are excluded, as kt_ival1/kt_ival2 may briefly
> + * hold a stale value from an earlier non-RTR configuration.
> + */
> + if (!op->ifindex && !(op->flags & RX_RTR_FRAME) &&
> + (op->kt_ival1 || op->kt_ival2)) {
[Severity: Medium]
Can the lockless read of these 64-bit ktime_t variables cause a torn read on
32-bit platforms?
If the torn read evaluates to zero while the timers are actually configured,
wouldn't it bypass the interface-tracking logic and allow concurrent frames
to clobber shared metadata?
> + bool foreign;
> +
> + spin_lock_bh(&op->bcm_rx_update_lock);
> + if (!op->if_detected)
> + op->if_detected = skb->dev->ifindex;
[Severity: High]
Can an in-flight packet spuriously re-claim the stale ifindex here?
In bcm_notify(), the claim is released when an interface goes down. Since
bcm_notify() executes before synchronize_net(), could an already dequeued
packet arrive here, see op->if_detected == 0, and re-claim the dead
interface's index?
This seems like it would permanently block future packets from other valid
interfaces.
> + foreign = op->if_detected != skb->dev->ifindex;
> + spin_unlock_bh(&op->bcm_rx_update_lock);
> +
> + if (foreign)
> + return;
> + }
> +
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260709-bcm_fixes-v11-0-067ba11bec5c@hartkopp.net?part=11
prev parent reply other threads:[~2026-07-09 18:43 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-09 17:56 [PATCH v11 00/11] can: bcm: collected fixes - final6 \o/ Oliver Hartkopp via B4 Relay
2026-07-09 17:56 ` Oliver Hartkopp
2026-07-09 17:56 ` [PATCH v11 01/11] can: bcm: defer rx_op deallocation to workqueue to fix thrtimer UAF Oliver Hartkopp via B4 Relay
2026-07-09 17:56 ` Oliver Hartkopp
2026-07-09 18:10 ` sashiko-bot
2026-07-09 17:56 ` [PATCH v11 02/11] can: bcm: fix lockless bound/ifindex race and silent RX_SETUP failure Oliver Hartkopp via B4 Relay
2026-07-09 17:56 ` Oliver Hartkopp
2026-07-09 18:09 ` sashiko-bot
2026-07-09 17:56 ` [PATCH v11 03/11] can: bcm: add locking when updating filter and timer values Oliver Hartkopp via B4 Relay
2026-07-09 17:56 ` Oliver Hartkopp
2026-07-09 18:18 ` sashiko-bot
2026-07-09 17:56 ` [PATCH v11 04/11] can: bcm: fix CAN frame rx/tx statistics Oliver Hartkopp via B4 Relay
2026-07-09 17:56 ` Oliver Hartkopp
2026-07-09 18:23 ` sashiko-bot
2026-07-09 17:56 ` [PATCH v11 05/11] can: bcm: add missing rcu list annotations and operations Oliver Hartkopp via B4 Relay
2026-07-09 17:56 ` Oliver Hartkopp
2026-07-09 18:21 ` sashiko-bot
2026-07-09 17:56 ` [PATCH v11 06/11] can: bcm: extend bcm_tx_lock usage for data and timer updates Oliver Hartkopp via B4 Relay
2026-07-09 17:56 ` Oliver Hartkopp
2026-07-09 17:56 ` [PATCH v11 07/11] can: bcm: validate frame length in bcm_rx_setup() for RTR replies Oliver Hartkopp via B4 Relay
2026-07-09 17:56 ` Oliver Hartkopp
2026-07-09 17:56 ` [PATCH v11 08/11] can: bcm: add missing device refcount for CAN filter removal Oliver Hartkopp via B4 Relay
2026-07-09 17:56 ` Oliver Hartkopp
2026-07-09 17:56 ` [PATCH v11 09/11] can: bcm: fix stale rx/tx ops after device removal Oliver Hartkopp via B4 Relay
2026-07-09 17:56 ` Oliver Hartkopp
2026-07-09 18:39 ` sashiko-bot
2026-07-09 17:56 ` [PATCH v11 10/11] can: bcm: fix data race on rx_stamp/rx_ifindex in bcm_rx_handler() Oliver Hartkopp via B4 Relay
2026-07-09 17:56 ` Oliver Hartkopp
2026-07-09 18:38 ` sashiko-bot
2026-07-09 17:56 ` [PATCH v11 11/11] can: bcm: track a single source interface for ANYDEV timeout/throttle ops Oliver Hartkopp via B4 Relay
2026-07-09 17:56 ` Oliver Hartkopp
2026-07-09 18:43 ` sashiko-bot [this message]
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=20260709184351.723F71F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=linux-can@vger.kernel.org \
--cc=mailhol@kernel.org \
--cc=mkl@pengutronix.de \
--cc=o.rempel@pengutronix.de \
--cc=sashiko-reviews@lists.linux.dev \
--cc=socketcan@hartkopp.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.