Linux CAN drivers development
 help / color / mirror / Atom feed
From: Oliver Hartkopp <socketcan@hartkopp.net>
To: linux-can@vger.kernel.org
Cc: Oliver Hartkopp <socketcan@hartkopp.net>, stable@vger.kernel.org
Subject: [PATCH v8 5/7] can: isotp: check the return values of can_rx_register() in isotp_bind()
Date: Fri, 23 Oct 2026 14:17:59 +0200	[thread overview]
Message-ID: <20261023121801.3052075-6-socketcan@hartkopp.net> (raw)
In-Reply-To: <20261023121801.3052075-1-socketcan@hartkopp.net>

isotp_bind() ignores the return values of can_rx_register() for the RX
and the echo receiver and binds the socket anyway. When a receiver can
not be allocated, bind() succeeds without this receiver, so the socket
does not receive frames or its transmissions time out. isotp_release()
and isotp_notify() later try to remove the missing receiver, which
triggers the "receive list entry not found" warning in
can_rx_unregister().

As the device has been checked before and RTNL prevents a namespace
change during bind(), only -ENOMEM can be returned here.

Check the return values, remove an already registered RX receiver when
the echo receiver can not be registered and return the error.

Fixes: e057dd3fc20f ("can: add ISO 15765-2:2016 transport protocol")
Cc: stable@vger.kernel.org
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
---
 net/can/isotp.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/net/can/isotp.c b/net/can/isotp.c
index 1a272ce6a2bd..da80ef606ce0 100644
--- a/net/can/isotp.c
+++ b/net/can/isotp.c
@@ -1622,20 +1622,29 @@ static int isotp_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int l
 	if (!(dev->flags & IFF_UP))
 		notify_enetdown = 1;
 
 	ifindex = dev->ifindex;
 
-	if (isotp_register_rxid(so))
-		can_rx_register(net, dev, rx_id, SINGLE_MASK(rx_id),
-				isotp_rcv, sk, sock_i_ino(sk), sk);
+	if (isotp_register_rxid(so)) {
+		err = can_rx_register(net, dev, rx_id, SINGLE_MASK(rx_id),
+				      isotp_rcv, sk, sock_i_ino(sk), sk);
+		if (err)
+			goto out_put_dev;
+	}
 
 	/* no consecutive frame echo skb in flight */
 	WRITE_ONCE(so->cfecho, 0);
 
 	/* register for echo skb's */
-	can_rx_register(net, dev, tx_id, SINGLE_MASK(tx_id),
-			isotp_rcv_echo, sk, sock_i_ino(sk), sk);
+	err = can_rx_register(net, dev, tx_id, SINGLE_MASK(tx_id),
+			      isotp_rcv_echo, sk, sock_i_ino(sk), sk);
+	if (err) {
+		if (isotp_register_rxid(so))
+			can_rx_unregister(net, dev, rx_id, SINGLE_MASK(rx_id),
+					  isotp_rcv, sk);
+		goto out_put_dev;
+	}
 
 	/* switch to new settings */
 	so->ifindex = ifindex;
 	so->rxid = rx_id;
 	so->txid = tx_id;
-- 
2.43.0


  parent reply	other threads:[~2026-10-23 12:18 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-23 12:17 [PATCH v8 0/7] can: protect the receive lists with a per-device lock Oliver Hartkopp
2026-10-23 12:17 ` [PATCH v8 1/7] can: proc: reset pkg_stats atomics individually Oliver Hartkopp
2026-10-23 12:17 ` [PATCH v8 2/7] can: proc: skip stats calculation after reset in can_stat_update() Oliver Hartkopp
2026-10-23 12:17 ` [PATCH v8 3/7] can: proc: remove pointers from CAN specific proc output Oliver Hartkopp
2026-10-23 12:17 ` [PATCH v8 4/7] can: replace ARPHRD_CAN type checks with can_get_ml_priv() Oliver Hartkopp
2026-10-23 12:17 ` Oliver Hartkopp [this message]
2026-10-23 12:18 ` [PATCH v8 6/7] can: protect the receive lists with a per-device lock Oliver Hartkopp
2026-10-23 12:18 ` [PATCH v8 7/7] can: raw, isotp: copy socket options outside of lock_sock() Oliver Hartkopp
2026-10-25 11:28 ` [PATCH v8 0/7] can: protect the receive lists with a per-device lock Marc Kleine-Budde
2026-10-25 18:55   ` Oliver Hartkopp
2026-10-25 19:06     ` Marc Kleine-Budde
2026-10-25 19:16       ` Oliver Hartkopp
2026-10-25 19:19         ` Marc Kleine-Budde
2026-10-25 19:22           ` Oliver Hartkopp
2026-10-25 19:43             ` Marc Kleine-Budde
2026-10-25 19:51               ` Oliver Hartkopp
2026-10-25 20:01                 ` Marc Kleine-Budde
2026-10-25 20:02                   ` Marc Kleine-Budde
2026-10-25 11:43 ` 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=20261023121801.3052075-6-socketcan@hartkopp.net \
    --to=socketcan@hartkopp.net \
    --cc=linux-can@vger.kernel.org \
    --cc=stable@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