diff options
Diffstat (limited to 'net/tipc')
| -rw-r--r-- | net/tipc/Makefile | 1 | ||||
| -rw-r--r-- | net/tipc/bcast.c | 4 | ||||
| -rw-r--r-- | net/tipc/msg.c | 10 | 
3 files changed, 12 insertions, 3 deletions
| diff --git a/net/tipc/Makefile b/net/tipc/Makefile index 31b9f9c52974..2bfaa9d4b403 100644 --- a/net/tipc/Makefile +++ b/net/tipc/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  #  # Makefile for the Linux TIPC layer  # diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c index 7d99029df342..a140dd4a84af 100644 --- a/net/tipc/bcast.c +++ b/net/tipc/bcast.c @@ -233,7 +233,7 @@ static int tipc_bcast_xmit(struct net *net, struct sk_buff_head *pkts,  	struct sk_buff_head xmitq;  	int rc = 0; -	__skb_queue_head_init(&xmitq); +	skb_queue_head_init(&xmitq);  	tipc_bcast_lock(net);  	if (tipc_link_bc_peers(l))  		rc = tipc_link_xmit(l, pkts, &xmitq); @@ -263,7 +263,7 @@ static int tipc_rcast_xmit(struct net *net, struct sk_buff_head *pkts,  	u32 dst, selector;  	selector = msg_link_selector(buf_msg(skb_peek(pkts))); -	__skb_queue_head_init(&_pkts); +	skb_queue_head_init(&_pkts);  	list_for_each_entry_safe(n, tmp, &dests->list, list) {  		dst = n->value; diff --git a/net/tipc/msg.c b/net/tipc/msg.c index 6ef379f004ac..17146c16ee2d 100644 --- a/net/tipc/msg.c +++ b/net/tipc/msg.c @@ -551,7 +551,7 @@ bool tipc_msg_lookup_dest(struct net *net, struct sk_buff *skb, int *err)  		return false;  	if (msg_errcode(msg))  		return false; -	*err = -TIPC_ERR_NO_NAME; +	*err = TIPC_ERR_NO_NAME;  	if (skb_linearize(skb))  		return false;  	msg = buf_msg(skb); @@ -568,6 +568,14 @@ bool tipc_msg_lookup_dest(struct net *net, struct sk_buff *skb, int *err)  	msg_set_destnode(msg, dnode);  	msg_set_destport(msg, dport);  	*err = TIPC_OK; + +	if (!skb_cloned(skb)) +		return true; + +	/* Unclone buffer in case it was bundled */ +	if (pskb_expand_head(skb, BUF_HEADROOM, BUF_TAILROOM, GFP_ATOMIC)) +		return false; +  	return true;  } |