| From 8fe168a4ec53ab230bb1f28ecee05a05eaa94dc9 Mon Sep 17 00:00:00 2001 |
| From: Tyler Hicks <tyhicks@canonical.com> |
| Date: Tue, 12 Jun 2012 11:17:01 -0700 |
| Subject: [PATCH] eCryptfs: Properly check for O_RDONLY flag before doing |
| privileged open |
| |
| commit 9fe79d7600497ed8a95c3981cbe5b73ab98222f0 upstream. |
| |
| If the first attempt at opening the lower file read/write fails, |
| eCryptfs will retry using a privileged kthread. However, the privileged |
| retry should not happen if the lower file's inode is read-only because a |
| read/write open will still be unsuccessful. |
| |
| The check for determining if the open should be retried was intended to |
| be based on the access mode of the lower file's open flags being |
| O_RDONLY, but the check was incorrectly performed. This would cause the |
| open to be retried by the privileged kthread, resulting in a second |
| failed open of the lower file. This patch corrects the check to |
| determine if the open request should be handled by the privileged |
| kthread. |
| |
| Signed-off-by: Tyler Hicks <tyhicks@canonical.com> |
| Reported-by: Dan Carpenter <dan.carpenter@oracle.com> |
| Acked-by: Dan Carpenter <dan.carpenter@oracle.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| --- |
| fs/ecryptfs/kthread.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/fs/ecryptfs/kthread.c b/fs/ecryptfs/kthread.c |
| index d8c3a373aafa..920d5d9a0cdb 100644 |
| --- a/fs/ecryptfs/kthread.c |
| +++ b/fs/ecryptfs/kthread.c |
| @@ -149,7 +149,7 @@ int ecryptfs_privileged_open(struct file **lower_file, |
| (*lower_file) = dentry_open(lower_dentry, lower_mnt, flags, cred); |
| if (!IS_ERR(*lower_file)) |
| goto out; |
| - if (flags & O_RDONLY) { |
| + if ((flags & O_ACCMODE) == O_RDONLY) { |
| rc = PTR_ERR((*lower_file)); |
| goto out; |
| } |
| -- |
| 1.8.5.2 |
| |