diff options
author | codeworkx <daniel.hillenbrand@codeworkx.de> | 2012-06-02 13:09:29 +0200 |
---|---|---|
committer | codeworkx <daniel.hillenbrand@codeworkx.de> | 2012-06-02 13:09:29 +0200 |
commit | c6da2cfeb05178a11c6d062a06f8078150ee492f (patch) | |
tree | f3b4021d252c52d6463a9b3c1bb7245e399b009c /fs/ecryptfs/inode.c | |
parent | c6d7c4dbff353eac7919342ae6b3299a378160a6 (diff) | |
download | kernel_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.c | 33 |
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; } |