X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=net%2Fcore%2Fskbuff.c;h=46cbd28f40f9698bfbfad886047223c4bba16df2;hb=4b382d0643603819e8b48da58efc254cabc22574;hp=7ebeed0a877cf4bb244d488346e745d45da93959;hpb=e6d28318344535331d9473548b210dd267fe7b7e;p=~andy%2Flinux diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 7ebeed0a877..46cbd28f40f 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -57,6 +57,7 @@ #include #include #include +#include #include #include @@ -2993,6 +2994,9 @@ int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb) skb->destructor = sock_rmem_free; atomic_add(skb->truesize, &sk->sk_rmem_alloc); + /* before exiting rcu section, make sure dst is refcounted */ + skb_dst_force(skb); + skb_queue_tail(&sk->sk_error_queue, skb); if (!sock_flag(sk, SOCK_DEAD)) sk->sk_data_ready(sk, skb->len);