diff --git a/net/qrtr/qrtr.c b/net/qrtr/qrtr.c index 2e7fb5518ec4..61309932fdb5 100644 --- a/net/qrtr/qrtr.c +++ b/net/qrtr/qrtr.c @@ -1741,16 +1741,20 @@ static int qrtr_recvmsg(struct socket *sock, struct msghdr *msg, struct qrtr_cb *cb; int copied, rc; + lock_sock(sk); - if (sock_flag(sk, SOCK_ZAPPED)) + if (sock_flag(sk, SOCK_ZAPPED)) { + release_sock(sk); + pr_err("%s: Invalid addr error\n", __func__); return -EADDRNOTAVAIL; - + } skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT, flags & MSG_DONTWAIT, &rc); - if (!skb) + if (!skb) { + release_sock(sk); + pr_err("%s: Failed to get skb rc[%d]\n", __func__, rc); return rc; - - lock_sock(sk); + } cb = (struct qrtr_cb *)skb->cb; copied = skb->len; @@ -1760,8 +1764,10 @@ static int qrtr_recvmsg(struct socket *sock, struct msghdr *msg, } rc = skb_copy_datagram_msg(skb, 0, msg, copied); - if (rc < 0) + if (rc < 0) { + pr_err("%s: Failed to copy skb rc[%d]\n", __func__, rc); goto out; + } rc = copied; if (addr) {