Message ID | 20220519202308.1435903-2-mkl@pengutronix.de (mailing list archive) |
---|---|
State | Accepted |
Commit | b76b163f46b661499921a0049982764a6659bfe7 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next,1/4] can: isotp: isotp_bind(): do not validate unused address information | expand |
Hello: This series was applied to netdev/net-next.git (master) by Marc Kleine-Budde <mkl@pengutronix.de>: On Thu, 19 May 2022 22:23:05 +0200 you wrote: > From: Oliver Hartkopp <socketcan@hartkopp.net> > > With commit 2aa39889c463 ("can: isotp: isotp_bind(): return -EINVAL on > incorrect CAN ID formatting") the bind() syscall returns -EINVAL when > the given CAN ID needed to be sanitized. But in the case of an unconfirmed > broadcast mode the rx CAN ID is not needed and may be uninitialized from > the caller - which is ok. > > [...] Here is the summary with links: - [net-next,1/4] can: isotp: isotp_bind(): do not validate unused address information https://git.kernel.org/netdev/net-next/c/b76b163f46b6 - [net-next,2/4] can: can-dev: move to netif_napi_add_weight() https://git.kernel.org/netdev/net-next/c/caf6b7f81e05 - [net-next,3/4] can: can-dev: remove obsolete CAN LED support https://git.kernel.org/netdev/net-next/c/6c1e423a3c84 - [net-next,4/4] can: mcp251xfd: silence clang's -Wunaligned-access warning https://git.kernel.org/netdev/net-next/c/1a6dd9996699 You are awesome, thank you!
diff --git a/net/can/isotp.c b/net/can/isotp.c index 4a4007f10970..43a27d19cdac 100644 --- a/net/can/isotp.c +++ b/net/can/isotp.c @@ -1212,31 +1212,36 @@ static int isotp_bind(struct socket *sock, struct sockaddr *uaddr, int len) struct net *net = sock_net(sk); int ifindex; struct net_device *dev; - canid_t tx_id, rx_id; + canid_t tx_id = addr->can_addr.tp.tx_id; + canid_t rx_id = addr->can_addr.tp.rx_id; int err = 0; int notify_enetdown = 0; if (len < ISOTP_MIN_NAMELEN) return -EINVAL; - /* sanitize tx/rx CAN identifiers */ - tx_id = addr->can_addr.tp.tx_id; + /* sanitize tx CAN identifier */ if (tx_id & CAN_EFF_FLAG) tx_id &= (CAN_EFF_FLAG | CAN_EFF_MASK); else tx_id &= CAN_SFF_MASK; - rx_id = addr->can_addr.tp.rx_id; - if (rx_id & CAN_EFF_FLAG) - rx_id &= (CAN_EFF_FLAG | CAN_EFF_MASK); - else - rx_id &= CAN_SFF_MASK; - - /* give feedback on wrong CAN-ID values */ - if (tx_id != addr->can_addr.tp.tx_id || - rx_id != addr->can_addr.tp.rx_id) + /* give feedback on wrong CAN-ID value */ + if (tx_id != addr->can_addr.tp.tx_id) return -EINVAL; + /* sanitize rx CAN identifier (if needed) */ + if (isotp_register_rxid(so)) { + if (rx_id & CAN_EFF_FLAG) + rx_id &= (CAN_EFF_FLAG | CAN_EFF_MASK); + else + rx_id &= CAN_SFF_MASK; + + /* give feedback on wrong CAN-ID value */ + if (rx_id != addr->can_addr.tp.rx_id) + return -EINVAL; + } + if (!addr->can_ifindex) return -ENODEV;