diff options
| -rw-r--r-- | include/linux/key.h | 3 | ||||
| -rw-r--r-- | security/keys/encrypted-keys/encrypted.c | 4 | ||||
| -rw-r--r-- | security/keys/encrypted-keys/masterkey_trusted.c | 2 | ||||
| -rw-r--r-- | security/keys/trusted.c | 4 | 
4 files changed, 9 insertions, 4 deletions
| diff --git a/include/linux/key.h b/include/linux/key.h index 183a6af7715d..bfc014c57351 100644 --- a/include/linux/key.h +++ b/include/linux/key.h @@ -293,6 +293,9 @@ static inline bool key_is_instantiated(const struct key *key)  	(rcu_dereference_protected((KEY)->payload.rcudata,		\  				   rwsem_is_locked(&((struct key *)(KEY))->sem))) +#define rcu_assign_keypointer(KEY, PAYLOAD)				\ +	(rcu_assign_pointer((KEY)->payload.rcudata, PAYLOAD)) +  #ifdef CONFIG_SYSCTL  extern ctl_table key_sysctls[];  #endif diff --git a/security/keys/encrypted-keys/encrypted.c b/security/keys/encrypted-keys/encrypted.c index 41144f71d615..d91efb6901e9 100644 --- a/security/keys/encrypted-keys/encrypted.c +++ b/security/keys/encrypted-keys/encrypted.c @@ -810,7 +810,7 @@ static int encrypted_instantiate(struct key *key, const void *data,  		goto out;  	} -	rcu_assign_pointer(key->payload.data, epayload); +	rcu_assign_keypointer(key, epayload);  out:  	kfree(datablob);  	return ret; @@ -874,7 +874,7 @@ static int encrypted_update(struct key *key, const void *data, size_t datalen)  	memcpy(new_epayload->payload_data, epayload->payload_data,  	       epayload->payload_datalen); -	rcu_assign_pointer(key->payload.data, new_epayload); +	rcu_assign_keypointer(key, new_epayload);  	call_rcu(&epayload->rcu, encrypted_rcu_free);  out:  	kfree(buf); diff --git a/security/keys/encrypted-keys/masterkey_trusted.c b/security/keys/encrypted-keys/masterkey_trusted.c index df87272e3f51..8c16c3e472e7 100644 --- a/security/keys/encrypted-keys/masterkey_trusted.c +++ b/security/keys/encrypted-keys/masterkey_trusted.c @@ -18,6 +18,8 @@  #include <linux/module.h>  #include <linux/err.h>  #include <keys/trusted-type.h> +#include <keys/encrypted-type.h> +#include "encrypted.h"  /*   * request_trusted_key - request the trusted key diff --git a/security/keys/trusted.c b/security/keys/trusted.c index 0ed5fdf238a2..2d5d041f2049 100644 --- a/security/keys/trusted.c +++ b/security/keys/trusted.c @@ -993,7 +993,7 @@ out:  	kfree(datablob);  	kfree(options);  	if (!ret) -		rcu_assign_pointer(key->payload.data, payload); +		rcu_assign_keypointer(key, payload);  	else  		kfree(payload);  	return ret; @@ -1067,7 +1067,7 @@ static int trusted_update(struct key *key, const void *data, size_t datalen)  			goto out;  		}  	} -	rcu_assign_pointer(key->payload.data, new_p); +	rcu_assign_keypointer(key, new_p);  	call_rcu(&p->rcu, trusted_rcu_free);  out:  	kfree(datablob); | 
