ovl: fix error handling in ovl_verify_set_fh()
authorAmir Goldstein <amir73il@gmail.com>
Wed, 10 Oct 2018 16:10:06 +0000 (19:10 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 21 Nov 2018 08:19:12 +0000 (09:19 +0100)
commit babf4770be0adc69e6d2de150f4040f175e24beb upstream.

We hit a BUG on kfree of an ERR_PTR()...

Reported-by: syzbot+ff03fe05c717b82502d0@syzkaller.appspotmail.com
Fixes: 8b88a2e64036 ("ovl: verify upper root dir matches lower root dir")
Cc: <stable@vger.kernel.org> # v4.13
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/overlayfs/namei.c

index 9c0ca6a..efd3723 100644 (file)
@@ -422,8 +422,10 @@ int ovl_verify_set_fh(struct dentry *dentry, const char *name,
 
        fh = ovl_encode_real_fh(real, is_upper);
        err = PTR_ERR(fh);
-       if (IS_ERR(fh))
+       if (IS_ERR(fh)) {
+               fh = NULL;
                goto fail;
+       }
 
        err = ovl_verify_fh(dentry, name, fh);
        if (set && err == -ENODATA)