All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Oliver Hartkopp" <socketcan@hartkopp.net>
Cc: "Marc Kleine-Budde" <mkl@pengutronix.de>,
	"Oleksij Rempel" <o.rempel@pengutronix.de>,
	"Oliver Hartkopp" <socketcan@hartkopp.net>,
	"Vincent Mailhol" <mailhol@kernel.org>,
	linux-can@vger.kernel.org
Subject: Re: [PATCH v11 09/11] can: bcm: fix stale rx/tx ops after device removal
Date: Thu, 09 Jul 2026 18:39:06 +0000	[thread overview]
Message-ID: <20260709183906.E99A31F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260709-bcm_fixes-v11-9-067ba11bec5c@hartkopp.net>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:

Pre-existing issues:
- [High] Data race on op->rx_stamp and op->rx_ifindex in bcm_rx_handler causes incorrect metadata to be delivered to userspace.
--

--- Patch [9]: [PATCH v11 09/11] can: bcm: fix stale rx/tx ops after device removal ---
commit ef4eaedce01b041fb9a737217fc61cc4150a0e37
Author: Oliver Hartkopp <socketcan@hartkopp.net>

can: bcm: fix stale rx/tx ops after device removal

This commit fixes issues with stale rx and tx operations after a CAN device
is removed. It ensures rx operations are re-registered if they were torn
down by a concurrent NETDEV_UNREGISTER, and cancels the hrtimer for tx
operations to prevent runaway timers.

Link: https://lore.kernel.org/linux-can/20260708094536.DDF821F00A3A@smtp.kernel.org/
Link: https://lore.kernel.org/linux-can/20260708154039.347ED1F000E9@smtp.kernel.org/

> diff --git a/net/can/bcm.c b/net/can/bcm.c
> index 5660165cdf0eb..fbf1cbb7c99fe 100644
> --- a/net/can/bcm.c
> +++ b/net/can/bcm.c

[ ... ]

> @@ -1714,11 +1735,19 @@ static void bcm_notify(struct bcm_sock *bo, unsigned long msg,
>  	case NETDEV_UNREGISTER:
>  		lock_sock(sk);
>  
> -		/* remove device specific receive entries */
> +		/* rx_ops: remove device specific receive entries */
>  		list_for_each_entry(op, &bo->rx_ops, list)
>  			if (op->rx_reg_dev == dev)
>  				bcm_rx_unreg(dev, op);

[Severity: High]
This is a pre-existing issue, but is there a data race on op->rx_stamp and
op->rx_ifindex in bcm_rx_handler() that causes incorrect metadata to be
delivered to userspace?

If a CAN frame matching the same ANYDEV filter is received concurrently on
different interfaces, bcm_rx_handler() can execute simultaneously on
different CPUs. Could both CPUs write to the shared op->rx_stamp and
op->rx_ifindex without holding a lock?

net/can/bcm.c:bcm_rx_handler() {
	/* save rx timestamp */
	op->rx_stamp = skb->tstamp;
	/* save originator for recvfrom() */
	op->rx_ifindex = skb->dev->ifindex;

	/* op->flags/op->frames may be updated concurrently by bcm_rx_setup() */
	spin_lock_bh(&op->bcm_rx_update_lock);
}

When CPU 1 subsequently acquires op->bcm_rx_update_lock and calls
bcm_send_to_user(), will it read the values overwritten by CPU 2?

net/can/bcm.c:bcm_send_to_user() {
	if (has_timestamp) {
		/* restore rx timestamp */
		skb->tstamp = op->rx_stamp;
	}

	/* ... */

	addr = (struct sockaddr_can *)skb->cb;
	memset(addr, 0, sizeof(*addr));
	addr->can_family  = AF_CAN;
	addr->can_ifindex = op->rx_ifindex;
}

For ANYDEV sockets, the ifindex returned in sockaddr_can is the sole source
of truth for identifying the origin bus, and delivering the wrong ifindex
can cause userspace gateway applications to misroute CAN frames.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260709-bcm_fixes-v11-0-067ba11bec5c@hartkopp.net?part=9

  reply	other threads:[~2026-07-09 18:39 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 [this message]
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

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=20260709183906.E99A31F000E9@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.