]> git.karo-electronics.de Git - linux-beck.git/blobdiff - security/keys/key.c
KEYS: struct key_preparsed_payload should have two payload pointers
[linux-beck.git] / security / keys / key.c
index 2048a110e7f18f0bd1e78006a88dc7bc675c9994..03620a35a4dcd29020a736eb925ab8ff99562a34 100644 (file)
@@ -1023,6 +1023,38 @@ void key_invalidate(struct key *key)
 }
 EXPORT_SYMBOL(key_invalidate);
 
+/**
+ * generic_key_instantiate - Simple instantiation of a key from preparsed data
+ * @key: The key to be instantiated
+ * @prep: The preparsed data to load.
+ *
+ * Instantiate a key from preparsed data.  We assume we can just copy the data
+ * in directly and clear the old pointers.
+ *
+ * This can be pointed to directly by the key type instantiate op pointer.
+ */
+int generic_key_instantiate(struct key *key, struct key_preparsed_payload *prep)
+{
+       int ret;
+
+       pr_devel("==>%s()\n", __func__);
+
+       ret = key_payload_reserve(key, prep->quotalen);
+       if (ret == 0) {
+               key->type_data.p[0] = prep->type_data[0];
+               key->type_data.p[1] = prep->type_data[1];
+               rcu_assign_keypointer(key, prep->payload[0]);
+               key->payload.data2[1] = prep->payload[1];
+               prep->type_data[0] = NULL;
+               prep->type_data[1] = NULL;
+               prep->payload[0] = NULL;
+               prep->payload[1] = NULL;
+       }
+       pr_devel("<==%s() = %d\n", __func__, ret);
+       return ret;
+}
+EXPORT_SYMBOL(generic_key_instantiate);
+
 /**
  * register_key_type - Register a type of key.
  * @ktype: The new key type.