OSDN Git Service

make sure do_dentry_open() won't return positive as an error
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 9 Jul 2018 01:45:07 +0000 (21:45 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 11 Jul 2018 03:29:03 +0000 (23:29 -0400)
An ->open() instances really, really should not be doing that.  There's
a lot of places e.g. around atomic_open() that could be confused by that,
so let's catch that early.

Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/open.c

index 76c5696..530da96 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -812,6 +812,8 @@ static int do_dentry_open(struct file *f,
        return 0;
 
 cleanup_all:
+       if (WARN_ON_ONCE(error > 0))
+               error = -EINVAL;
        fops_put(f->f_op);
        if (f->f_mode & FMODE_WRITER) {
                put_write_access(inode);