allow O_TMPFILE to work with O_WRONLY
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 19 Jul 2013 23:11:32 +0000 (03:11 +0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 19 Jul 2013 23:11:32 +0000 (03:11 +0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/open.c
include/uapi/asm-generic/fcntl.h

index 9156cb050d0873b65e8083671ef0ffdbe1ff1a47..d53e29895082306747de0998c730159b73d08528 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -844,6 +844,8 @@ static inline int build_open_flags(int flags, umode_t mode, struct open_flags *o
                if ((flags & O_TMPFILE_MASK) != O_TMPFILE)
                        return -EINVAL;
                acc_mode = MAY_OPEN | ACC_MODE(flags);
+               if (!(acc_mode & MAY_WRITE))
+                       return -EINVAL;
        } else if (flags & O_PATH) {
                /*
                 * If we have O_PATH in the open flag. Then we
index 05ac354e124de3e4577667ebf292002f40f45579..95e46c8e05f90db319b2828eb53aa93bdca0629d 100644 (file)
@@ -89,8 +89,8 @@
 #endif
 
 /* a horrid kludge trying to make sure that this will fail on old kernels */
-#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY | O_RDWR)
-#define O_TMPFILE_MASK (__O_TMPFILE | O_DIRECTORY | O_CREAT | O_ACCMODE)      
+#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY)
+#define O_TMPFILE_MASK (__O_TMPFILE | O_DIRECTORY | O_CREAT)      
 
 #ifndef O_NDELAY
 #define O_NDELAY       O_NONBLOCK