summaryrefslogtreecommitdiffstats
path: root/net/can
diff options
context:
space:
mode:
authorOliver Hartkopp <socketcan@hartkopp.net>2022-03-16 17:42:57 +0100
committerMarc Kleine-Budde <mkl@pengutronix.de>2022-03-16 21:41:40 +0100
commit30ffd5332e06316bd69a654c06aa033872979b7c (patch)
treef6706cff0e5a3525728b1d34548144ab27302ca0 /net/can
parent3ea566422cbde9610c2734980d1286ab681bb40e (diff)
downloadlinux-30ffd5332e06316bd69a654c06aa033872979b7c.tar.gz
linux-30ffd5332e06316bd69a654c06aa033872979b7c.tar.bz2
linux-30ffd5332e06316bd69a654c06aa033872979b7c.zip
can: isotp: return -EADDRNOTAVAIL when reading from unbound socket
When reading from an unbound can-isotp socket the syscall blocked indefinitely. As unbound sockets (without given CAN address information) do not make sense anyway we directly return -EADDRNOTAVAIL on read() analogue to the known behavior from sendmsg(). Fixes: e057dd3fc20f ("can: add ISO 15765-2:2016 transport protocol") Link: https://github.com/linux-can/can-utils/issues/349 Link: https://lore.kernel.org/all/20220316164258.54155-2-socketcan@hartkopp.net Suggested-by: Derek Will <derekrobertwill@gmail.com> Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Diffstat (limited to 'net/can')
-rw-r--r--net/can/isotp.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/net/can/isotp.c b/net/can/isotp.c
index 1662103ce125..6b6c82206c30 100644
--- a/net/can/isotp.c
+++ b/net/can/isotp.c
@@ -1046,12 +1046,16 @@ static int isotp_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
{
struct sock *sk = sock->sk;
struct sk_buff *skb;
+ struct isotp_sock *so = isotp_sk(sk);
int err = 0;
int noblock;
noblock = flags & MSG_DONTWAIT;
flags &= ~MSG_DONTWAIT;
+ if (!so->bound)
+ return -EADDRNOTAVAIL;
+
skb = skb_recv_datagram(sk, flags, noblock, &err);
if (!skb)
return err;