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: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
4bdf0bc300
commit
d0a059cac6
@ -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,
|
|||||||
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)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user