diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2013-07-20 03:11:32 +0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-07-20 03:11:32 +0400 |
commit | ba57ea64cb1820deb37637de0fdb107f0dc90089 (patch) | |
tree | dd8d302d4f16107e87b555aca3630ada6fcd472a | |
parent | c0d15cc7ee8c0d1970197d9eb1727503bcdd2471 (diff) | |
download | linux-ba57ea64cb1820deb37637de0fdb107f0dc90089.tar.xz |
allow O_TMPFILE to work with O_WRONLY
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | fs/open.c | 2 | ||||
-rw-r--r-- | include/uapi/asm-generic/fcntl.h | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/fs/open.c b/fs/open.c index 9156cb050d08..d53e29895082 100644 --- 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 diff --git a/include/uapi/asm-generic/fcntl.h b/include/uapi/asm-generic/fcntl.h index 05ac354e124d..95e46c8e05f9 100644 --- a/include/uapi/asm-generic/fcntl.h +++ b/include/uapi/asm-generic/fcntl.h @@ -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 |