ovl: dilute permission checks on lower only if not special file
authorVivek Goyal <vgoyal@redhat.com>
Wed, 13 Jul 2016 15:00:14 +0000 (11:00 -0400)
committerMiklos Szeredi <mszeredi@redhat.com>
Fri, 29 Jul 2016 10:05:24 +0000 (12:05 +0200)
Right now if file is on lower/, we remove MAY_WRITE/MAY_APPEND bits from
mask as lower/ will never be written and file will be copied up. But this
is not true for special files. These files are not copied up and are opened
in place. So don't dilute the checks for these types of files.

Reported-by: Dan Walsh <dwalsh@redhat.com>
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/inode.c

index f7caf16f9bec60aed22b4aa78114bea57cd2d691..76cfe9d04e640f2860d21b096ab09e1d08cf02d9 100644 (file)
@@ -137,7 +137,7 @@ int ovl_permission(struct inode *inode, int mask)
                return err;
 
        old_cred = ovl_override_creds(inode->i_sb);
-       if (!is_upper)
+       if (!is_upper && !special_file(realinode->i_mode))
                mask &= ~(MAY_WRITE | MAY_APPEND);
        err = inode_permission(realinode, mask);
        revert_creds(old_cred);