|
@@ -450,9 +450,10 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
|
|
|
copied = len;
|
|
|
}
|
|
|
err = skb_copy_datagram_msg(skb, 0, msg, copied);
|
|
|
- if (err)
|
|
|
- goto out_free_skb;
|
|
|
-
|
|
|
+ if (unlikely(err)) {
|
|
|
+ kfree_skb(skb);
|
|
|
+ return err;
|
|
|
+ }
|
|
|
sock_recv_timestamp(msg, sk, skb);
|
|
|
|
|
|
serr = SKB_EXT_ERR(skb);
|
|
@@ -509,8 +510,7 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
|
|
|
msg->msg_flags |= MSG_ERRQUEUE;
|
|
|
err = copied;
|
|
|
|
|
|
-out_free_skb:
|
|
|
- kfree_skb(skb);
|
|
|
+ consume_skb(skb);
|
|
|
out:
|
|
|
return err;
|
|
|
}
|