Merge branches 'release', 'asus', 'sony-laptop' and 'thinkpad' into release
[pandora-kernel.git] / fs / ecryptfs / main.c
index 6ded37b..778c420 100644 (file)
@@ -117,7 +117,7 @@ void __ecryptfs_printk(const char *fmt, ...)
  *
  * Returns zero on success; non-zero otherwise
  */
-int ecryptfs_init_persistent_file(struct dentry *ecryptfs_dentry)
+static int ecryptfs_init_persistent_file(struct dentry *ecryptfs_dentry)
 {
        struct ecryptfs_inode_info *inode_info =
                ecryptfs_inode_to_private(ecryptfs_dentry->d_inode);
@@ -226,17 +226,15 @@ out:
        return rc;
 }
 
-enum { ecryptfs_opt_sig, ecryptfs_opt_ecryptfs_sig, ecryptfs_opt_debug,
-       ecryptfs_opt_ecryptfs_debug, ecryptfs_opt_cipher,
-       ecryptfs_opt_ecryptfs_cipher, ecryptfs_opt_ecryptfs_key_bytes,
+enum { ecryptfs_opt_sig, ecryptfs_opt_ecryptfs_sig,
+       ecryptfs_opt_cipher, ecryptfs_opt_ecryptfs_cipher,
+       ecryptfs_opt_ecryptfs_key_bytes,
        ecryptfs_opt_passthrough, ecryptfs_opt_xattr_metadata,
        ecryptfs_opt_encrypted_view, ecryptfs_opt_err };
 
 static match_table_t tokens = {
        {ecryptfs_opt_sig, "sig=%s"},
        {ecryptfs_opt_ecryptfs_sig, "ecryptfs_sig=%s"},
-       {ecryptfs_opt_debug, "debug=%u"},
-       {ecryptfs_opt_ecryptfs_debug, "ecryptfs_debug=%u"},
        {ecryptfs_opt_cipher, "cipher=%s"},
        {ecryptfs_opt_ecryptfs_cipher, "ecryptfs_cipher=%s"},
        {ecryptfs_opt_ecryptfs_key_bytes, "ecryptfs_key_bytes=%u"},
@@ -313,7 +311,6 @@ static int ecryptfs_parse_options(struct super_block *sb, char *options)
        substring_t args[MAX_OPT_ARGS];
        int token;
        char *sig_src;
-       char *debug_src;
        char *cipher_name_dst;
        char *cipher_name_src;
        char *cipher_key_bytes_src;
@@ -341,16 +338,6 @@ static int ecryptfs_parse_options(struct super_block *sb, char *options)
                        }
                        sig_set = 1;
                        break;
-               case ecryptfs_opt_debug:
-               case ecryptfs_opt_ecryptfs_debug:
-                       debug_src = args[0].from;
-                       ecryptfs_verbosity =
-                               (int)simple_strtol(debug_src, &debug_src,
-                                                  0);
-                       ecryptfs_printk(KERN_DEBUG,
-                                       "Verbosity set to [%d]" "\n",
-                                       ecryptfs_verbosity);
-                       break;
                case ecryptfs_opt_cipher:
                case ecryptfs_opt_ecryptfs_cipher:
                        cipher_name_src = args[0].from;
@@ -423,9 +410,13 @@ static int ecryptfs_parse_options(struct super_block *sb, char *options)
        if (!cipher_key_bytes_set) {
                mount_crypt_stat->global_default_cipher_key_size = 0;
        }
-       rc = ecryptfs_add_new_key_tfm(
-               NULL, mount_crypt_stat->global_default_cipher_name,
-               mount_crypt_stat->global_default_cipher_key_size);
+       mutex_lock(&key_tfm_list_mutex);
+       if (!ecryptfs_tfm_exists(mount_crypt_stat->global_default_cipher_name,
+                                NULL))
+               rc = ecryptfs_add_new_key_tfm(
+                       NULL, mount_crypt_stat->global_default_cipher_name,
+                       mount_crypt_stat->global_default_cipher_key_size);
+       mutex_unlock(&key_tfm_list_mutex);
        if (rc) {
                printk(KERN_ERR "Error attempting to initialize cipher with "
                       "name = [%s] and key size = [%td]; rc = [%d]\n",
@@ -653,11 +644,6 @@ static struct ecryptfs_cache_info {
                .name = "ecryptfs_sb_cache",
                .size = sizeof(struct ecryptfs_sb_info),
        },
-       {
-               .cache = &ecryptfs_header_cache_0,
-               .name = "ecryptfs_headers_0",
-               .size = PAGE_CACHE_SIZE,
-       },
        {
                .cache = &ecryptfs_header_cache_1,
                .name = "ecryptfs_headers_1",
@@ -734,7 +720,7 @@ static int ecryptfs_init_kmem_caches(void)
        return 0;
 }
 
-static struct kset *ecryptfs_kset;
+static struct kobject *ecryptfs_kobj;
 
 static ssize_t version_show(struct kobject *kobj,
                            struct kobj_attribute *attr, char *buff)
@@ -744,51 +730,8 @@ static ssize_t version_show(struct kobject *kobj,
 
 static struct kobj_attribute version_attr = __ATTR_RO(version);
 
-static struct ecryptfs_version_str_map_elem {
-       u32 flag;
-       char *str;
-} ecryptfs_version_str_map[] = {
-       {ECRYPTFS_VERSIONING_PASSPHRASE, "passphrase"},
-       {ECRYPTFS_VERSIONING_PUBKEY, "pubkey"},
-       {ECRYPTFS_VERSIONING_PLAINTEXT_PASSTHROUGH, "plaintext passthrough"},
-       {ECRYPTFS_VERSIONING_POLICY, "policy"},
-       {ECRYPTFS_VERSIONING_XATTR, "metadata in extended attribute"},
-       {ECRYPTFS_VERSIONING_MULTKEY, "multiple keys per file"}
-};
-
-static ssize_t version_str_show(struct kobject *kobj,
-                               struct kobj_attribute *attr, char *buff)
-{
-       int i;
-       int remaining = PAGE_SIZE;
-       int total_written = 0;
-
-       buff[0] = '\0';
-       for (i = 0; i < ARRAY_SIZE(ecryptfs_version_str_map); i++) {
-               int entry_size;
-
-               if (!(ECRYPTFS_VERSIONING_MASK
-                     & ecryptfs_version_str_map[i].flag))
-                       continue;
-               entry_size = strlen(ecryptfs_version_str_map[i].str);
-               if ((entry_size + 2) > remaining)
-                       goto out;
-               memcpy(buff, ecryptfs_version_str_map[i].str, entry_size);
-               buff[entry_size++] = '\n';
-               buff[entry_size] = '\0';
-               buff += entry_size;
-               total_written += entry_size;
-               remaining -= entry_size;
-       }
-out:
-       return total_written;
-}
-
-static struct kobj_attribute version_attr_str = __ATTR_RO(version_str);
-
 static struct attribute *attributes[] = {
        &version_attr.attr,
-       &version_attr_str.attr,
        NULL,
 };
 
@@ -800,17 +743,17 @@ static int do_sysfs_registration(void)
 {
        int rc;
 
-       ecryptfs_kset = kset_create_and_add("ecryptfs", NULL, fs_kobj);
-       if (!ecryptfs_kset) {
+       ecryptfs_kobj = kobject_create_and_add("ecryptfs", fs_kobj);
+       if (!ecryptfs_kobj) {
                printk(KERN_ERR "Unable to create ecryptfs kset\n");
                rc = -ENOMEM;
                goto out;
        }
-       rc = sysfs_create_group(&ecryptfs_kset->kobj, &attr_group);
+       rc = sysfs_create_group(ecryptfs_kobj, &attr_group);
        if (rc) {
                printk(KERN_ERR
                       "Unable to create ecryptfs version attributes\n");
-               kset_unregister(ecryptfs_kset);
+               kobject_put(ecryptfs_kobj);
        }
 out:
        return rc;
@@ -818,8 +761,8 @@ out:
 
 static void do_sysfs_unregistration(void)
 {
-       sysfs_remove_group(&ecryptfs_kset->kobj, &attr_group);
-       kset_unregister(ecryptfs_kset);
+       sysfs_remove_group(ecryptfs_kobj, &attr_group);
+       kobject_put(ecryptfs_kobj);
 }
 
 static int __init ecryptfs_init(void)
@@ -864,6 +807,10 @@ static int __init ecryptfs_init(void)
                       "rc = [%d]\n", rc);
                goto out_release_messaging;
        }
+       if (ecryptfs_verbosity > 0)
+               printk(KERN_CRIT "eCryptfs verbosity set to %d. Secret values "
+                       "will be written to the syslog!\n", ecryptfs_verbosity);
+
        goto out;
 out_release_messaging:
        ecryptfs_release_messaging(ecryptfs_transport);