X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=fs%2Fopen.c;h=d53e29895082306747de0998c730159b73d08528;hb=f7f7bac9cb1c50783f15937a11743655a5756a36;hp=fca72c4d3f17ac13758ac5315e413d749bf7667b;hpb=8d10aae2741ec9ffd53c8d214f7ada6d543b3a46;p=~andy%2Flinux diff --git a/fs/open.c b/fs/open.c index fca72c4d3f1..d53e2989508 100644 --- a/fs/open.c +++ b/fs/open.c @@ -840,10 +840,12 @@ static inline int build_open_flags(int flags, umode_t mode, struct open_flags *o if (flags & __O_SYNC) flags |= O_DSYNC; - if (flags & O_TMPFILE) { - if (!(flags & O_CREAT)) + if (flags & __O_TMPFILE) { + 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