|
@@ -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 *);
|
|
@@ -221,34 +222,26 @@ error_alloc:
|
|
|
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
|
|
|
* instantiation of a key.
|
|
|
*/
|
|
|
struct key *key_get_instantiation_authkey(key_serial_t target_id)
|
|
|
{
|
|
|
+ char description[16];
|
|
|
struct keyring_search_context ctx = {
|
|
|
.index_key.type = &key_type_request_key_auth,
|
|
|
+ .index_key.description = description,
|
|
|
.cred = current_cred(),
|
|
|
- .match = key_get_instantiation_authkey_match,
|
|
|
- .match_data = (void *)(unsigned long)target_id,
|
|
|
+ .match = user_match,
|
|
|
+ .match_data = description,
|
|
|
.flags = KEYRING_SEARCH_LOOKUP_DIRECT,
|
|
|
};
|
|
|
struct key *authkey;
|
|
|
key_ref_t authkey_ref;
|
|
|
|
|
|
+ sprintf(description, "%x", target_id);
|
|
|
+
|
|
|
authkey_ref = search_process_keyrings(&ctx);
|
|
|
|
|
|
if (IS_ERR(authkey_ref)) {
|