diff options
Diffstat (limited to 'security/keys/request_key_auth.c')
| -rw-r--r-- | security/keys/request_key_auth.c | 31 | 
1 files changed, 13 insertions, 18 deletions
diff --git a/security/keys/request_key_auth.c b/security/keys/request_key_auth.c index 85730d5a5a5..7495a93b4b9 100644 --- a/security/keys/request_key_auth.c +++ b/security/keys/request_key_auth.c @@ -18,6 +18,7 @@  #include <linux/slab.h>  #include <asm/uaccess.h>  #include "internal.h" +#include <keys/user-type.h>  static int request_key_auth_instantiate(struct key *,  					struct key_preparsed_payload *); @@ -222,32 +223,26 @@ error_alloc:  }  /* - * See if an authorisation key is associated with a particular key. - */ -static int key_get_instantiation_authkey_match(const struct key *key, -					       const void *_id) -{ -	struct request_key_auth *rka = key->payload.data; -	key_serial_t id = (key_serial_t)(unsigned long) _id; - -	return rka->target_key->serial == id; -} - -/*   * Search the current process's keyrings for the authorisation key for   * instantiation of a key.   */  struct key *key_get_instantiation_authkey(key_serial_t target_id)  { -	const struct cred *cred = current_cred(); +	char description[16]; +	struct keyring_search_context ctx = { +		.index_key.type		= &key_type_request_key_auth, +		.index_key.description	= description, +		.cred			= current_cred(), +		.match			= user_match, +		.match_data		= description, +		.flags			= KEYRING_SEARCH_LOOKUP_DIRECT, +	};  	struct key *authkey;  	key_ref_t authkey_ref; -	authkey_ref = search_process_keyrings( -		&key_type_request_key_auth, -		(void *) (unsigned long) target_id, -		key_get_instantiation_authkey_match, -		cred); +	sprintf(description, "%x", target_id); + +	authkey_ref = search_process_keyrings(&ctx);  	if (IS_ERR(authkey_ref)) {  		authkey = ERR_CAST(authkey_ref);  | 
