aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ecryptfs/inode.c
diff options
context:
space:
mode:
authorcodeworkx <daniel.hillenbrand@codeworkx.de>2012-06-02 13:09:29 +0200
committercodeworkx <daniel.hillenbrand@codeworkx.de>2012-06-02 13:09:29 +0200
commitc6da2cfeb05178a11c6d062a06f8078150ee492f (patch)
treef3b4021d252c52d6463a9b3c1bb7245e399b009c /fs/ecryptfs/inode.c
parentc6d7c4dbff353eac7919342ae6b3299a378160a6 (diff)
downloadkernel_samsung_smdk4412-c6da2cfeb05178a11c6d062a06f8078150ee492f.zip
kernel_samsung_smdk4412-c6da2cfeb05178a11c6d062a06f8078150ee492f.tar.gz
kernel_samsung_smdk4412-c6da2cfeb05178a11c6d062a06f8078150ee492f.tar.bz2
samsung update 1
Diffstat (limited to 'fs/ecryptfs/inode.c')
-rw-r--r--fs/ecryptfs/inode.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
index 4a4fad7..876b25c 100644
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
@@ -269,10 +269,43 @@ static int ecryptfs_initialize_file(struct dentry *ecryptfs_dentry)
ecryptfs_dentry->d_name.name, rc);
goto out;
}
+#ifdef CONFIG_WTL_ENCRYPTION_FILTER
+ mutex_lock(&crypt_stat->cs_mutex);
+ if (crypt_stat->flags & ECRYPTFS_ENCRYPTED) {
+ struct dentry *fp_dentry =
+ ecryptfs_inode_to_private(ecryptfs_dentry->d_inode)
+ ->lower_file->f_dentry;
+ struct ecryptfs_mount_crypt_stat *mount_crypt_stat =
+ &ecryptfs_superblock_to_private(ecryptfs_dentry->d_sb)
+ ->mount_crypt_stat;
+ char filename[NAME_MAX+1] = {0};
+ if (fp_dentry->d_name.len <= NAME_MAX)
+ memcpy(filename, fp_dentry->d_name.name,
+ fp_dentry->d_name.len + 1);
+
+ if ((mount_crypt_stat->flags & ECRYPTFS_ENABLE_NEW_PASSTHROUGH)
+ || ((mount_crypt_stat->flags & ECRYPTFS_ENABLE_FILTERING) &&
+ (is_file_name_match(mount_crypt_stat, fp_dentry) ||
+ is_file_ext_match(mount_crypt_stat, filename)))) {
+ crypt_stat->flags &= ~(ECRYPTFS_I_SIZE_INITIALIZED
+ | ECRYPTFS_ENCRYPTED);
+ ecryptfs_put_lower_file(ecryptfs_dentry->d_inode);
+ } else {
+ rc = ecryptfs_write_metadata(ecryptfs_dentry);
+ if (rc)
+ printk(
+ KERN_ERR "Error writing headers; rc = [%d]\n"
+ , rc);
+ ecryptfs_put_lower_file(ecryptfs_dentry->d_inode);
+ }
+ }
+ mutex_unlock(&crypt_stat->cs_mutex);
+#else
rc = ecryptfs_write_metadata(ecryptfs_dentry);
if (rc)
printk(KERN_ERR "Error writing headers; rc = [%d]\n", rc);
ecryptfs_put_lower_file(ecryptfs_dentry->d_inode);
+#endif
out:
return rc;
}