diff options
Diffstat (limited to 'net/core/skbuff.c')
-rw-r--r-- | net/core/skbuff.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 960ea899c864..46cbd28f40f9 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -2994,6 +2994,9 @@ int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb) | |||
2994 | skb->destructor = sock_rmem_free; | 2994 | skb->destructor = sock_rmem_free; |
2995 | atomic_add(skb->truesize, &sk->sk_rmem_alloc); | 2995 | atomic_add(skb->truesize, &sk->sk_rmem_alloc); |
2996 | 2996 | ||
2997 | /* before exiting rcu section, make sure dst is refcounted */ | ||
2998 | skb_dst_force(skb); | ||
2999 | |||
2997 | skb_queue_tail(&sk->sk_error_queue, skb); | 3000 | skb_queue_tail(&sk->sk_error_queue, skb); |
2998 | if (!sock_flag(sk, SOCK_DEAD)) | 3001 | if (!sock_flag(sk, SOCK_DEAD)) |
2999 | sk->sk_data_ready(sk, skb->len); | 3002 | sk->sk_data_ready(sk, skb->len); |