diff options
Diffstat (limited to 'net/tipc/node.c')
| -rw-r--r-- | net/tipc/node.c | 13 | 
1 files changed, 9 insertions, 4 deletions
| 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;  } |