encrypted-keys: remove trusted-keys dependency
authorMimi Zohar <zohar@linux.vnet.ibm.com>
Sun, 28 Aug 2011 02:21:26 +0000 (22:21 -0400)
committerMimi Zohar <zohar@linux.vnet.ibm.com>
Wed, 14 Sep 2011 19:23:49 +0000 (15:23 -0400)
Encrypted keys are decrypted/encrypted using either a trusted-key or,
for those systems without a TPM, a user-defined key.  This patch
removes the trusted-keys and TCG_TPM dependencies.

Signed-off-by: Mimi Zohar <zohar@us.ibm.com>
security/Kconfig
security/keys/encrypted-keys/Makefile
security/keys/encrypted-keys/encrypted.c
security/keys/encrypted-keys/encrypted.h
security/keys/encrypted-keys/masterkey_trusted.c [new file with mode: 0644]

index 22847a8890813658890491cf4d835457202a2ec1..51bd5a0b69ae80440470b9aa9ed6eca0e38f66a6 100644 (file)
@@ -38,7 +38,9 @@ config TRUSTED_KEYS
 
 config ENCRYPTED_KEYS
        tristate "ENCRYPTED KEYS"
-       depends on KEYS && TRUSTED_KEYS
+       depends on KEYS
+       select CRYPTO
+       select CRYPTO_HMAC
        select CRYPTO_AES
        select CRYPTO_CBC
        select CRYPTO_SHA256
index cbd3f8de37bb807efc2dbde6037485c49d06813c..6bc7a86d1027cbf5f78b67804448f577e869d093 100644 (file)
@@ -3,3 +3,4 @@
 #
 
 obj-$(CONFIG_ENCRYPTED_KEYS) += encrypted.o ecryptfs_format.o
+obj-$(CONFIG_TRUSTED_KEYS) += masterkey_trusted.o
index e7eca9ec4c65ffdda866f1a7d713506818fd3c9c..3f577954b85adf46615ff8b3740924d553007428 100644 (file)
@@ -298,31 +298,6 @@ out:
        return ascii_buf;
 }
 
-/*
- * request_trusted_key - request the trusted key
- *
- * Trusted keys are sealed to PCRs and other metadata. Although userspace
- * manages both trusted/encrypted key-types, like the encrypted key type
- * data, trusted key type data is not visible decrypted from userspace.
- */
-static struct key *request_trusted_key(const char *trusted_desc,
-                                      u8 **master_key, size_t *master_keylen)
-{
-       struct trusted_key_payload *tpayload;
-       struct key *tkey;
-
-       tkey = request_key(&key_type_trusted, trusted_desc, NULL);
-       if (IS_ERR(tkey))
-               goto error;
-
-       down_read(&tkey->sem);
-       tpayload = rcu_dereference(tkey->payload.data);
-       *master_key = tpayload->key;
-       *master_keylen = tpayload->key_len;
-error:
-       return tkey;
-}
-
 /*
  * request_user_key - request the user key
  *
@@ -469,8 +444,14 @@ static struct key *request_master_key(struct encrypted_key_payload *epayload,
                goto out;
 
        if (IS_ERR(mkey)) {
-               pr_info("encrypted_key: key %s not found",
-                       epayload->master_desc);
+               int ret = PTR_ERR(epayload);
+
+               if (ret == -ENOTSUPP)
+                       pr_info("encrypted_key: key %s not supported",
+                               epayload->master_desc);
+               else
+                       pr_info("encrypted_key: key %s not found",
+                               epayload->master_desc);
                goto out;
        }
 
index cef5e2f2b7d1e977e66f975e58029cee8cea5859..b6ade8945250c0b3f13913c56ee5b9686a3f39d1 100644 (file)
@@ -2,6 +2,17 @@
 #define __ENCRYPTED_KEY_H
 
 #define ENCRYPTED_DEBUG 0
+#ifdef CONFIG_TRUSTED_KEYS
+extern struct key *request_trusted_key(const char *trusted_desc,
+                                      u8 **master_key, size_t *master_keylen);
+#else
+static inline struct key *request_trusted_key(const char *trusted_desc,
+                                             u8 **master_key,
+                                             size_t *master_keylen)
+{
+       return ERR_PTR(-EOPNOTSUPP);
+}
+#endif
 
 #if ENCRYPTED_DEBUG
 static inline void dump_master_key(const u8 *master_key, size_t master_keylen)
diff --git a/security/keys/encrypted-keys/masterkey_trusted.c b/security/keys/encrypted-keys/masterkey_trusted.c
new file mode 100644 (file)
index 0000000..a5da512
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2010 IBM Corporation
+ * Copyright (C) 2010 Politecnico di Torino, Italy
+ *                    TORSEC group -- http://security.polito.it
+ *
+ * Authors:
+ * Mimi Zohar <zohar@us.ibm.com>
+ * Roberto Sassu <roberto.sassu@polito.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 2 of the License.
+ *
+ * See Documentation/security/keys-trusted-encrypted.txt
+ */
+
+#include <linux/uaccess.h>
+#include <linux/module.h>
+#include <keys/trusted-type.h>
+
+/*
+ * request_trusted_key - request the trusted key
+ *
+ * Trusted keys are sealed to PCRs and other metadata. Although userspace
+ * manages both trusted/encrypted key-types, like the encrypted key type
+ * data, trusted key type data is not visible decrypted from userspace.
+ */
+struct key *request_trusted_key(const char *trusted_desc,
+                               u8 **master_key, size_t *master_keylen)
+{
+       struct trusted_key_payload *tpayload;
+       struct key *tkey;
+
+       tkey = request_key(&key_type_trusted, trusted_desc, NULL);
+       if (IS_ERR(tkey))
+               goto error;
+
+       down_read(&tkey->sem);
+       tpayload = rcu_dereference(tkey->payload.data);
+       *master_key = tpayload->key;
+       *master_keylen = tpayload->key_len;
+error:
+       return tkey;
+}