From 8b0d519c119a64887df868e7f821e8a714da3d71 Mon Sep 17 00:00:00 2001 From: Andy Whitcroft Date: Tue, 1 May 2012 16:17:52 +0100 Subject: [PATCH 12/13] ovl: switch to __inode_permission() Patch-mainline: not yet When checking permissions on an overlayfs inode we do not take into account either device cgroup restrictions nor security permissions. This allows a user to mount an overlayfs layer over a restricted device directory and by pass those permissions to open otherwise restricted files. Switch over to __inode_permissions. Signed-off-by: Andy Whitcroft Signed-off-by: Miklos Szeredi --- fs/overlayfs/inode.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) Index: linux-3.6-rc7-master/fs/overlayfs/inode.c =================================================================== --- linux-3.6-rc7-master.orig/fs/overlayfs/inode.c 2012-09-28 13:37:02.000000000 +0200 +++ linux-3.6-rc7-master/fs/overlayfs/inode.c 2012-09-28 13:37:08.000000000 +0200 @@ -100,19 +100,9 @@ int ovl_permission(struct inode *inode, if (is_upper && !IS_RDONLY(inode) && IS_RDONLY(realinode) && (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode))) goto out_dput; - - /* - * Nobody gets write access to an immutable file. - */ - err = -EACCES; - if (IS_IMMUTABLE(realinode)) - goto out_dput; } - if (realinode->i_op->permission) - err = realinode->i_op->permission(realinode, mask); - else - err = generic_permission(realinode, mask); + err = __inode_permission(realinode, mask); out_dput: dput(alias); return err;