diff options
Diffstat (limited to 'net/tipc')
| -rw-r--r-- | net/tipc/bearer.h | 6 | ||||
| -rw-r--r-- | net/tipc/crypto.c | 3 | ||||
| -rw-r--r-- | net/tipc/net.c | 2 | ||||
| -rw-r--r-- | net/tipc/node.c | 13 | ||||
| -rw-r--r-- | net/tipc/socket.c | 2 | 
5 files changed, 16 insertions, 10 deletions
| diff --git a/net/tipc/bearer.h b/net/tipc/bearer.h index 6bf4550aa1ac..57c6a1a719e2 100644 --- a/net/tipc/bearer.h +++ b/net/tipc/bearer.h @@ -154,9 +154,9 @@ struct tipc_media {   * care of initializing all other fields.   */  struct tipc_bearer { -	void __rcu *media_ptr;			/* initalized by media */ -	u32 mtu;				/* initalized by media */ -	struct tipc_media_addr addr;		/* initalized by media */ +	void __rcu *media_ptr;			/* initialized by media */ +	u32 mtu;				/* initialized by media */ +	struct tipc_media_addr addr;		/* initialized by media */  	char name[TIPC_MAX_BEARER_NAME];  	struct tipc_media *media;  	struct tipc_media_addr bcast_addr; diff --git a/net/tipc/crypto.c b/net/tipc/crypto.c index f4fca8f7f63f..97710ce36047 100644 --- a/net/tipc/crypto.c +++ b/net/tipc/crypto.c @@ -1941,12 +1941,13 @@ static void tipc_crypto_rcv_complete(struct net *net, struct tipc_aead *aead,  			goto rcv;  		if (tipc_aead_clone(&tmp, aead) < 0)  			goto rcv; +		WARN_ON(!refcount_inc_not_zero(&tmp->refcnt));  		if (tipc_crypto_key_attach(rx, tmp, ehdr->tx_key, false) < 0) {  			tipc_aead_free(&tmp->rcu);  			goto rcv;  		}  		tipc_aead_put(aead); -		aead = tipc_aead_get(tmp); +		aead = tmp;  	}  	if (unlikely(err)) { diff --git a/net/tipc/net.c b/net/tipc/net.c index a129f661bee3..faf6bf554514 100644 --- a/net/tipc/net.c +++ b/net/tipc/net.c @@ -89,7 +89,7 @@   *     - A spin lock to protect the registry of kernel/driver users (reg.c)   *     - A global spin_lock (tipc_port_lock), which only task is to ensure   *       consistency where more than one port is involved in an operation, - *       i.e., whe a port is part of a linked list of ports. + *       i.e., when a port is part of a linked list of ports.   *       There are two such lists; 'port_list', which is used for management,   *       and 'wait_list', which is used to queue ports during congestion.   * diff --git a/net/tipc/node.c b/net/tipc/node.c index 008670d1f43e..e0ee83263a39 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c @@ -1734,7 +1734,7 @@ int tipc_node_xmit(struct net *net, struct sk_buff_head *list,  }  /* tipc_node_xmit_skb(): send single buffer to destination - * Buffers sent via this functon are generally TIPC_SYSTEM_IMPORTANCE + * Buffers sent via this function are generally TIPC_SYSTEM_IMPORTANCE   * messages, which will not be rejected   * The only exception is datagram messages rerouted after secondary   * lookup, which are rare and safe to dispose of anyway. @@ -2895,17 +2895,22 @@ int tipc_nl_node_dump_monitor_peer(struct sk_buff *skb,  #ifdef CONFIG_TIPC_CRYPTO  static int tipc_nl_retrieve_key(struct nlattr **attrs, -				struct tipc_aead_key **key) +				struct tipc_aead_key **pkey)  {  	struct nlattr *attr = attrs[TIPC_NLA_NODE_KEY]; +	struct tipc_aead_key *key;  	if (!attr)  		return -ENODATA; -	*key = (struct tipc_aead_key *)nla_data(attr); -	if (nla_len(attr) < tipc_aead_key_size(*key)) +	if (nla_len(attr) < sizeof(*key)) +		return -EINVAL; +	key = (struct tipc_aead_key *)nla_data(attr); +	if (key->keylen > TIPC_AEAD_KEYLEN_MAX || +	    nla_len(attr) < tipc_aead_key_size(key))  		return -EINVAL; +	*pkey = key;  	return 0;  } diff --git a/net/tipc/socket.c b/net/tipc/socket.c index cebcc104dc70..022999e0202d 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c @@ -1265,7 +1265,7 @@ void tipc_sk_mcast_rcv(struct net *net, struct sk_buff_head *arrvq,  		spin_lock_bh(&inputq->lock);  		if (skb_peek(arrvq) == skb) {  			skb_queue_splice_tail_init(&tmpq, inputq); -			kfree_skb(__skb_dequeue(arrvq)); +			__skb_dequeue(arrvq);  		}  		spin_unlock_bh(&inputq->lock);  		__skb_queue_purge(&tmpq); |