diff options
Diffstat (limited to 'net/tipc/node.c')
| -rw-r--r-- | net/tipc/node.c | 4 | 
1 files changed, 3 insertions, 1 deletions
| diff --git a/net/tipc/node.c b/net/tipc/node.c index 10292c942384..803a3a6d0f50 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c @@ -2038,6 +2038,7 @@ void tipc_rcv(struct net *net, struct sk_buff *skb, struct tipc_bearer *b)  		n = tipc_node_find_by_id(net, ehdr->id);  	}  	tipc_crypto_rcv(net, (n) ? n->crypto_rx : NULL, &skb, b); +	tipc_node_put(n);  	if (!skb)  		return; @@ -2090,7 +2091,7 @@ rcv:  	/* Check/update node state before receiving */  	if (unlikely(skb)) {  		if (unlikely(skb_linearize(skb))) -			goto discard; +			goto out_node_put;  		tipc_node_write_lock(n);  		if (tipc_node_check_state(n, skb, bearer_id, &xmitq)) {  			if (le->link) { @@ -2119,6 +2120,7 @@ rcv:  	if (!skb_queue_empty(&xmitq))  		tipc_bearer_xmit(net, bearer_id, &xmitq, &le->maddr, n); +out_node_put:  	tipc_node_put(n);  discard:  	kfree_skb(skb); |