aboutsummaryrefslogtreecommitdiffstats
path: root/fs/namei.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/namei.c')
-rw-r--r--fs/namei.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/namei.c b/fs/namei.c
index a4855af776a8..b20f83d1e065 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1503,7 +1503,7 @@ int may_open(struct path *path, int acc_mode, int flag)
1503 * An append-only file must be opened in append mode for writing. 1503 * An append-only file must be opened in append mode for writing.
1504 */ 1504 */
1505 if (IS_APPEND(inode)) { 1505 if (IS_APPEND(inode)) {
1506 if ((flag & FMODE_WRITE) && !(flag & O_APPEND)) 1506 if ((flag & O_ACCMODE) != O_RDONLY && !(flag & O_APPEND))
1507 return -EPERM; 1507 return -EPERM;
1508 if (flag & O_TRUNC) 1508 if (flag & O_TRUNC)
1509 return -EPERM; 1509 return -EPERM;
@@ -1547,7 +1547,7 @@ static int handle_truncate(struct path *path)
1547 * what get passed to sys_open(). 1547 * what get passed to sys_open().
1548 */ 1548 */
1549static int __open_namei_create(struct nameidata *nd, struct path *path, 1549static int __open_namei_create(struct nameidata *nd, struct path *path,
1550 int flag, int mode) 1550 int open_flag, int mode)
1551{ 1551{
1552 int error; 1552 int error;
1553 struct dentry *dir = nd->path.dentry; 1553 struct dentry *dir = nd->path.dentry;
@@ -1565,7 +1565,7 @@ out_unlock:
1565 if (error) 1565 if (error)
1566 return error; 1566 return error;
1567 /* Don't check for write permission, don't truncate */ 1567 /* Don't check for write permission, don't truncate */
1568 return may_open(&nd->path, 0, flag & ~O_TRUNC); 1568 return may_open(&nd->path, 0, open_flag & ~O_TRUNC);
1569} 1569}
1570 1570
1571/* 1571/*
@@ -1736,7 +1736,7 @@ do_last:
1736 error = mnt_want_write(nd.path.mnt); 1736 error = mnt_want_write(nd.path.mnt);
1737 if (error) 1737 if (error)
1738 goto exit_mutex_unlock; 1738 goto exit_mutex_unlock;
1739 error = __open_namei_create(&nd, &path, flag, mode); 1739 error = __open_namei_create(&nd, &path, open_flag, mode);
1740 if (error) { 1740 if (error) {
1741 mnt_drop_write(nd.path.mnt); 1741 mnt_drop_write(nd.path.mnt);
1742 goto exit; 1742 goto exit;
@@ -1798,7 +1798,7 @@ ok:
1798 if (error) 1798 if (error)
1799 goto exit; 1799 goto exit;
1800 } 1800 }
1801 error = may_open(&nd.path, acc_mode, flag); 1801 error = may_open(&nd.path, acc_mode, open_flag);
1802 if (error) { 1802 if (error) {
1803 if (will_truncate) 1803 if (will_truncate)
1804 mnt_drop_write(nd.path.mnt); 1804 mnt_drop_write(nd.path.mnt);