aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTyler Hicks <tyhicks@canonical.com>2012-06-12 11:17:01 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-07-16 08:47:50 -0700
commitad54262e86a5220e853f4aaf2cda51926e03f650 (patch)
tree54a58751752e91a2fb063a6fcfaa3dd867df074a
parent092c1927ef479124a34fcf0646cf5c403f9b16e5 (diff)
downloadkernel_samsung_smdk4412-ad54262e86a5220e853f4aaf2cda51926e03f650.zip
kernel_samsung_smdk4412-ad54262e86a5220e853f4aaf2cda51926e03f650.tar.gz
kernel_samsung_smdk4412-ad54262e86a5220e853f4aaf2cda51926e03f650.tar.bz2
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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--fs/ecryptfs/kthread.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/ecryptfs/kthread.c b/fs/ecryptfs/kthread.c
index 69f994a..0dbe58a 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;
}