Message ID | 20220429125612.1792561-2-mkl@pengutronix.de (mailing list archive) |
---|---|
State | Accepted |
Commit | 72ed3ee9fa0b461ad086403a8b5336154bd82234 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,1/5] can: isotp: remove re-binding of bound socket | expand |
Hello: This series was applied to netdev/net.git (master) by Marc Kleine-Budde <mkl@pengutronix.de>: On Fri, 29 Apr 2022 14:56:08 +0200 you wrote: > From: Oliver Hartkopp <socketcan@hartkopp.net> > > As a carry over from the CAN_RAW socket (which allows to change the CAN > interface while mantaining the filter setup) the re-binding of the > CAN_ISOTP socket needs to take care about CAN ID address information and > subscriptions. It turned out that this feature is so limited (e.g. the > sockopts remain fix) that it finally has never been needed/used. > > [...] Here is the summary with links: - [net,1/5] can: isotp: remove re-binding of bound socket https://git.kernel.org/netdev/net/c/72ed3ee9fa0b - [net,2/5] can: grcan: grcan_close(): fix deadlock https://git.kernel.org/netdev/net/c/47f070a63e73 - [net,3/5] can: grcan: use ofdev->dev when allocating DMA memory https://git.kernel.org/netdev/net/c/101da4268626 - [net,4/5] can: grcan: grcan_probe(): fix broken system id check for errata workaround needs https://git.kernel.org/netdev/net/c/1e93ed26acf0 - [net,5/5] can: grcan: only use the NAPI poll budget for RX https://git.kernel.org/netdev/net/c/2873d4d52f7c You are awesome, thank you!
diff --git a/net/can/isotp.c b/net/can/isotp.c index ff5d7870294e..1e7c6a460ef9 100644 --- a/net/can/isotp.c +++ b/net/can/isotp.c @@ -1189,6 +1189,11 @@ static int isotp_bind(struct socket *sock, struct sockaddr *uaddr, int len) lock_sock(sk); + if (so->bound) { + err = -EINVAL; + goto out; + } + /* do not register frame reception for functional addressing */ if (so->opt.flags & CAN_ISOTP_SF_BROADCAST) do_rx_reg = 0; @@ -1199,10 +1204,6 @@ static int isotp_bind(struct socket *sock, struct sockaddr *uaddr, int len) goto out; } - if (so->bound && addr->can_ifindex == so->ifindex && - rx_id == so->rxid && tx_id == so->txid) - goto out; - dev = dev_get_by_index(net, addr->can_ifindex); if (!dev) { err = -ENODEV; @@ -1237,22 +1238,6 @@ static int isotp_bind(struct socket *sock, struct sockaddr *uaddr, int len) dev_put(dev); - if (so->bound && do_rx_reg) { - /* unregister old filter */ - if (so->ifindex) { - dev = dev_get_by_index(net, so->ifindex); - if (dev) { - can_rx_unregister(net, dev, so->rxid, - SINGLE_MASK(so->rxid), - isotp_rcv, sk); - can_rx_unregister(net, dev, so->txid, - SINGLE_MASK(so->txid), - isotp_rcv_echo, sk); - dev_put(dev); - } - } - } - /* switch to new settings */ so->ifindex = ifindex; so->rxid = rx_id;