diff options
Diffstat (limited to 'net/tipc/crypto.c')
| -rw-r--r-- | net/tipc/crypto.c | 12 | 
1 files changed, 7 insertions, 5 deletions
diff --git a/net/tipc/crypto.c b/net/tipc/crypto.c index 97710ce36047..e5c43d4d5a75 100644 --- a/net/tipc/crypto.c +++ b/net/tipc/crypto.c @@ -317,7 +317,7 @@ static int tipc_aead_key_generate(struct tipc_aead_key *skey);  #define tipc_aead_rcu_replace(rcu_ptr, ptr, lock)			\  do {									\ -	typeof(rcu_ptr) __tmp = rcu_dereference_protected((rcu_ptr),	\ +	struct tipc_aead *__tmp = rcu_dereference_protected((rcu_ptr),	\  						lockdep_is_held(lock));	\  	rcu_assign_pointer((rcu_ptr), (ptr));				\  	tipc_aead_put(__tmp);						\ @@ -798,7 +798,7 @@ static int tipc_aead_encrypt(struct tipc_aead *aead, struct sk_buff *skb,  	ehdr = (struct tipc_ehdr *)skb->data;  	salt = aead->salt;  	if (aead->mode == CLUSTER_KEY) -		salt ^= ehdr->addr; /* __be32 */ +		salt ^= __be32_to_cpu(ehdr->addr);  	else if (__dnode)  		salt ^= tipc_node_get_addr(__dnode);  	memcpy(iv, &salt, 4); @@ -929,7 +929,7 @@ static int tipc_aead_decrypt(struct net *net, struct tipc_aead *aead,  	ehdr = (struct tipc_ehdr *)skb->data;  	salt = aead->salt;  	if (aead->mode == CLUSTER_KEY) -		salt ^= ehdr->addr; /* __be32 */ +		salt ^= __be32_to_cpu(ehdr->addr);  	else if (ehdr->destined)  		salt ^= tipc_own_addr(net);  	memcpy(iv, &salt, 4); @@ -1492,6 +1492,8 @@ int tipc_crypto_start(struct tipc_crypto **crypto, struct net *net,  	/* Allocate statistic structure */  	c->stats = alloc_percpu_gfp(struct tipc_crypto_stats, GFP_ATOMIC);  	if (!c->stats) { +		if (c->wq) +			destroy_workqueue(c->wq);  		kfree_sensitive(c);  		return -ENOMEM;  	} @@ -1951,12 +1953,12 @@ static void tipc_crypto_rcv_complete(struct net *net, struct tipc_aead *aead,  	}  	if (unlikely(err)) { -		tipc_aead_users_dec(aead, INT_MIN); +		tipc_aead_users_dec((struct tipc_aead __force __rcu *)aead, INT_MIN);  		goto free_skb;  	}  	/* Set the RX key's user */ -	tipc_aead_users_set(aead, 1); +	tipc_aead_users_set((struct tipc_aead __force __rcu *)aead, 1);  	/* Mark this point, RX works */  	rx->timer1 = jiffies;  |