Skip to content

Commit

Permalink
mISDN: Fix skb leak in error cases
Browse files Browse the repository at this point in the history
If the channel receive function returns an error the skb must be freed.

Signed-off-by: Karsten Keil <keil@b1-systems.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Karsten Keil authored and David S. Miller committed May 25, 2009
1 parent d796509 commit 5df3b8b
Showing 1 changed file with 12 additions and 10 deletions.
22 changes: 12 additions & 10 deletions drivers/isdn/mISDN/socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ mISDN_sock_sendmsg(struct kiocb *iocb, struct socket *sock,

if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
err = -EFAULT;
goto drop;
goto done;
}

memcpy(mISDN_HEAD_P(skb), skb->data, MISDN_HEADER_LEN);
Expand All @@ -230,19 +230,21 @@ mISDN_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
__func__, mISDN_HEAD_ID(skb));

err = -ENODEV;
if (!_pms(sk)->ch.peer ||
(err = _pms(sk)->ch.recv(_pms(sk)->ch.peer, skb)))
goto drop;

err = len;
if (!_pms(sk)->ch.peer)
goto done;
err = _pms(sk)->ch.recv(_pms(sk)->ch.peer, skb);
if (err)
goto done;
else {
skb = NULL;
err = len;
}

done:
if (skb)
kfree_skb(skb);
release_sock(sk);
return err;

drop:
kfree_skb(skb);
goto done;
}

static int
Expand Down

0 comments on commit 5df3b8b

Please sign in to comment.