Commit fc7c70e0 authored by David Howells's avatar David Howells

KEYS: struct key_preparsed_payload should have two payload pointers

struct key_preparsed_payload should have two payload pointers to correspond
with those in struct key.
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Acked-by: default avatarSteve Dickson <steved@redhat.com>
Acked-by: default avatarJeff Layton <jlayton@primarydata.com>
Reviewed-by: default avatarSage Weil <sage@redhat.com>
parent 6a09d17b
...@@ -156,7 +156,7 @@ static void asymmetric_key_free_preparse(struct key_preparsed_payload *prep) ...@@ -156,7 +156,7 @@ static void asymmetric_key_free_preparse(struct key_preparsed_payload *prep)
pr_devel("==>%s()\n", __func__); pr_devel("==>%s()\n", __func__);
if (subtype) { if (subtype) {
subtype->destroy(prep->payload); subtype->destroy(prep->payload[0]);
module_put(subtype->owner); module_put(subtype->owner);
} }
kfree(prep->type_data[1]); kfree(prep->type_data[1]);
......
...@@ -177,7 +177,7 @@ static int x509_key_preparse(struct key_preparsed_payload *prep) ...@@ -177,7 +177,7 @@ static int x509_key_preparse(struct key_preparsed_payload *prep)
__module_get(public_key_subtype.owner); __module_get(public_key_subtype.owner);
prep->type_data[0] = &public_key_subtype; prep->type_data[0] = &public_key_subtype;
prep->type_data[1] = cert->fingerprint; prep->type_data[1] = cert->fingerprint;
prep->payload = cert->pub; prep->payload[0] = cert->pub;
prep->description = desc; prep->description = desc;
prep->quotalen = 100; prep->quotalen = 100;
......
...@@ -41,7 +41,7 @@ struct key_construction { ...@@ -41,7 +41,7 @@ struct key_construction {
struct key_preparsed_payload { struct key_preparsed_payload {
char *description; /* Proposed key description (or NULL) */ char *description; /* Proposed key description (or NULL) */
void *type_data[2]; /* Private key-type data */ void *type_data[2]; /* Private key-type data */
void *payload; /* Proposed payload */ void *payload[2]; /* Proposed payload */
const void *data; /* Raw data */ const void *data; /* Raw data */
size_t datalen; /* Raw datalen */ size_t datalen; /* Raw datalen */
size_t quotalen; /* Quota length for proposed payload */ size_t quotalen; /* Quota length for proposed payload */
......
...@@ -811,7 +811,7 @@ static int encrypted_instantiate(struct key *key, ...@@ -811,7 +811,7 @@ static int encrypted_instantiate(struct key *key,
goto out; goto out;
} }
rcu_assign_keypointer(key, epayload); prep->payload[0] = epayload;
out: out:
kfree(datablob); kfree(datablob);
return ret; return ret;
......
...@@ -1043,10 +1043,12 @@ int generic_key_instantiate(struct key *key, struct key_preparsed_payload *prep) ...@@ -1043,10 +1043,12 @@ int generic_key_instantiate(struct key *key, struct key_preparsed_payload *prep)
if (ret == 0) { if (ret == 0) {
key->type_data.p[0] = prep->type_data[0]; key->type_data.p[0] = prep->type_data[0];
key->type_data.p[1] = prep->type_data[1]; key->type_data.p[1] = prep->type_data[1];
rcu_assign_keypointer(key, prep->payload); rcu_assign_keypointer(key, prep->payload[0]);
key->payload.data2[1] = prep->payload[1];
prep->type_data[0] = NULL; prep->type_data[0] = NULL;
prep->type_data[1] = NULL; prep->type_data[1] = NULL;
prep->payload = NULL; prep->payload[0] = NULL;
prep->payload[1] = NULL;
} }
pr_devel("<==%s() = %d\n", __func__, ret); pr_devel("<==%s() = %d\n", __func__, ret);
return ret; return ret;
......
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