--- x/net/tipc/socket.c +++ y/net/tipc/socket.c @@ -2489,7 +2489,10 @@ void tipc_sk_rcv(struct net *net, struct struct tipc_sock *tsk; struct sock *sk; struct sk_buff *skb; + static int nogo = 0; + if (nogo) + return; __skb_queue_head_init(&xmitq); while (skb_queue_len(inputq)) { dport = tipc_skb_peek_port(inputq, dport); @@ -2498,7 +2501,9 @@ void tipc_sk_rcv(struct net *net, struct if (likely(tsk)) { sk = &tsk->sk; if (likely(spin_trylock_bh(&sk->sk_lock.slock))) { + nogo = 1; tipc_sk_enqueue(inputq, sk, dport, &xmitq); + nogo = 0; spin_unlock_bh(&sk->sk_lock.slock); } /* Send pending response/rejected messages, if any */