Skip to content

Commit

Permalink
caif: Bugfix double kfree_skb upon xmit failure
Browse files Browse the repository at this point in the history
SKB is freed twice upon send error. The Network stack consumes SKB even
when it returns error code.

Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Dmitry Tarnyagin authored and David S. Miller committed Feb 2, 2012
1 parent b01377a commit ba76057
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions net/caif/caif_socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -539,8 +539,10 @@ static int transmit_skb(struct sk_buff *skb, struct caifsock *cf_sk,
pkt = cfpkt_fromnative(CAIF_DIR_OUT, skb);
memset(skb->cb, 0, sizeof(struct caif_payload_info));

if (cf_sk->layer.dn == NULL)
if (cf_sk->layer.dn == NULL) {
kfree_skb(skb);
return -EINVAL;
}

return cf_sk->layer.dn->transmit(cf_sk->layer.dn, pkt);
}
Expand Down Expand Up @@ -683,10 +685,10 @@ static int caif_stream_sendmsg(struct kiocb *kiocb, struct socket *sock,
}
err = transmit_skb(skb, cf_sk,
msg->msg_flags&MSG_DONTWAIT, timeo);
if (err < 0) {
kfree_skb(skb);
if (err < 0)
/* skb is already freed */
goto pipe_err;
}

sent += size;
}

Expand Down

0 comments on commit ba76057

Please sign in to comment.