aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/sock.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/sock.h')
-rw-r--r--include/net/sock.h13
1 files changed, 8 insertions, 5 deletions
diff --git a/include/net/sock.h b/include/net/sock.h
index aed16eb9db4b..5697caf8cc76 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -600,12 +600,15 @@ static inline int sk_stream_memory_free(struct sock *sk)
600/* OOB backlog add */ 600/* OOB backlog add */
601static inline void __sk_add_backlog(struct sock *sk, struct sk_buff *skb) 601static inline void __sk_add_backlog(struct sock *sk, struct sk_buff *skb)
602{ 602{
603 if (!sk->sk_backlog.tail) { 603 /* dont let skb dst not refcounted, we are going to leave rcu lock */
604 sk->sk_backlog.head = sk->sk_backlog.tail = skb; 604 skb_dst_force(skb);
605 } else { 605
606 if (!sk->sk_backlog.tail)
607 sk->sk_backlog.head = skb;
608 else
606 sk->sk_backlog.tail->next = skb; 609 sk->sk_backlog.tail->next = skb;
607 sk->sk_backlog.tail = skb; 610
608 } 611 sk->sk_backlog.tail = skb;
609 skb->next = NULL; 612 skb->next = NULL;
610} 613}
611 614