Commit d0a059ca authored by David Howells's avatar David Howells

KEYS: Search for auth-key by name rather than target key ID

Search for auth-key by name rather than by target key ID as, in a future
patch, we'll by searching directly by index key in preference to iteration
over all keys.
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
parent 4bdf0bc3
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include "internal.h" #include "internal.h"
#include <keys/user-type.h>
static int request_key_auth_instantiate(struct key *, static int request_key_auth_instantiate(struct key *,
struct key_preparsed_payload *); struct key_preparsed_payload *);
...@@ -221,34 +222,26 @@ struct key *request_key_auth_new(struct key *target, const void *callout_info, ...@@ -221,34 +222,26 @@ struct key *request_key_auth_new(struct key *target, const void *callout_info,
return ERR_PTR(ret); return ERR_PTR(ret);
} }
/*
* 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 * Search the current process's keyrings for the authorisation key for
* instantiation of a key. * instantiation of a key.
*/ */
struct key *key_get_instantiation_authkey(key_serial_t target_id) struct key *key_get_instantiation_authkey(key_serial_t target_id)
{ {
char description[16];
struct keyring_search_context ctx = { struct keyring_search_context ctx = {
.index_key.type = &key_type_request_key_auth, .index_key.type = &key_type_request_key_auth,
.index_key.description = description,
.cred = current_cred(), .cred = current_cred(),
.match = key_get_instantiation_authkey_match, .match = user_match,
.match_data = (void *)(unsigned long)target_id, .match_data = description,
.flags = KEYRING_SEARCH_LOOKUP_DIRECT, .flags = KEYRING_SEARCH_LOOKUP_DIRECT,
}; };
struct key *authkey; struct key *authkey;
key_ref_t authkey_ref; key_ref_t authkey_ref;
sprintf(description, "%x", target_id);
authkey_ref = search_process_keyrings(&ctx); authkey_ref = search_process_keyrings(&ctx);
if (IS_ERR(authkey_ref)) { if (IS_ERR(authkey_ref)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment