diff --git a/net/can/isotp.c b/net/can/isotp.c
index d1f54273c0bb5b65dcdab01d339a20057e4cc2d2..df6968b28bf41e53a11eaf60a32e8817da54e05e 100644
--- a/net/can/isotp.c
+++ b/net/can/isotp.c
@@ -971,6 +971,9 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
 	if (wait_tx_done) {
 		/* wait for complete transmission of current pdu */
 		wait_event_interruptible(so->wait, so->tx.state == ISOTP_IDLE);
+
+		if (sk->sk_err)
+			return -sk->sk_err;
 	}
 
 	return size;