diff options
Diffstat (limited to 'fs/ecryptfs/file.c')
-rw-r--r-- | fs/ecryptfs/file.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c index 652ed772a9be..bd969adf70d7 100644 --- a/fs/ecryptfs/file.c +++ b/fs/ecryptfs/file.c | |||
@@ -273,11 +273,11 @@ static int ecryptfs_open(struct inode *inode, struct file *file) | |||
273 | lower_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry); | 273 | lower_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry); |
274 | crypt_stat = &ecryptfs_inode_to_private(inode)->crypt_stat; | 274 | crypt_stat = &ecryptfs_inode_to_private(inode)->crypt_stat; |
275 | mutex_lock(&crypt_stat->cs_mutex); | 275 | mutex_lock(&crypt_stat->cs_mutex); |
276 | if (!ECRYPTFS_CHECK_FLAG(crypt_stat->flags, ECRYPTFS_POLICY_APPLIED)) { | 276 | if (!(crypt_stat->flags & ECRYPTFS_POLICY_APPLIED)) { |
277 | ecryptfs_printk(KERN_DEBUG, "Setting flags for stat...\n"); | 277 | ecryptfs_printk(KERN_DEBUG, "Setting flags for stat...\n"); |
278 | /* Policy code enabled in future release */ | 278 | /* Policy code enabled in future release */ |
279 | ECRYPTFS_SET_FLAG(crypt_stat->flags, ECRYPTFS_POLICY_APPLIED); | 279 | crypt_stat->flags |= ECRYPTFS_POLICY_APPLIED; |
280 | ECRYPTFS_SET_FLAG(crypt_stat->flags, ECRYPTFS_ENCRYPTED); | 280 | crypt_stat->flags |= ECRYPTFS_ENCRYPTED; |
281 | } | 281 | } |
282 | mutex_unlock(&crypt_stat->cs_mutex); | 282 | mutex_unlock(&crypt_stat->cs_mutex); |
283 | lower_flags = file->f_flags; | 283 | lower_flags = file->f_flags; |
@@ -297,15 +297,13 @@ static int ecryptfs_open(struct inode *inode, struct file *file) | |||
297 | lower_inode = lower_dentry->d_inode; | 297 | lower_inode = lower_dentry->d_inode; |
298 | if (S_ISDIR(ecryptfs_dentry->d_inode->i_mode)) { | 298 | if (S_ISDIR(ecryptfs_dentry->d_inode->i_mode)) { |
299 | ecryptfs_printk(KERN_DEBUG, "This is a directory\n"); | 299 | ecryptfs_printk(KERN_DEBUG, "This is a directory\n"); |
300 | ECRYPTFS_CLEAR_FLAG(crypt_stat->flags, ECRYPTFS_ENCRYPTED); | 300 | crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED); |
301 | rc = 0; | 301 | rc = 0; |
302 | goto out; | 302 | goto out; |
303 | } | 303 | } |
304 | mutex_lock(&crypt_stat->cs_mutex); | 304 | mutex_lock(&crypt_stat->cs_mutex); |
305 | if (!ECRYPTFS_CHECK_FLAG(crypt_stat->flags, | 305 | if (!(crypt_stat->flags & ECRYPTFS_POLICY_APPLIED) |
306 | ECRYPTFS_POLICY_APPLIED) | 306 | || !(crypt_stat->flags & ECRYPTFS_KEY_VALID)) { |
307 | || !ECRYPTFS_CHECK_FLAG(crypt_stat->flags, | ||
308 | ECRYPTFS_KEY_VALID)) { | ||
309 | rc = ecryptfs_read_metadata(ecryptfs_dentry, lower_file); | 307 | rc = ecryptfs_read_metadata(ecryptfs_dentry, lower_file); |
310 | if (rc) { | 308 | if (rc) { |
311 | ecryptfs_printk(KERN_DEBUG, | 309 | ecryptfs_printk(KERN_DEBUG, |
@@ -320,9 +318,8 @@ static int ecryptfs_open(struct inode *inode, struct file *file) | |||
320 | mutex_unlock(&crypt_stat->cs_mutex); | 318 | mutex_unlock(&crypt_stat->cs_mutex); |
321 | goto out_puts; | 319 | goto out_puts; |
322 | } | 320 | } |
323 | ECRYPTFS_CLEAR_FLAG(crypt_stat->flags, | ||
324 | ECRYPTFS_ENCRYPTED); | ||
325 | rc = 0; | 321 | rc = 0; |
322 | crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED); | ||
326 | mutex_unlock(&crypt_stat->cs_mutex); | 323 | mutex_unlock(&crypt_stat->cs_mutex); |
327 | goto out; | 324 | goto out; |
328 | } | 325 | } |