Simplify exec_permission_lite(), part 3
[pandora-kernel.git] / fs / namei.c
index 8c35806..e645e30 100644 (file)
@@ -434,8 +434,12 @@ static int exec_permission_lite(struct inode *inode)
 {
        umode_t mode = inode->i_mode;
 
-       if (inode->i_op->permission)
-               return inode_permission(inode, MAY_EXEC);
+       if (inode->i_op->permission) {
+               int ret = inode->i_op->permission(inode, MAY_EXEC);
+               if (!ret)
+                       goto ok;
+               return ret;
+       }
 
        if (current_fsuid() == inode->i_uid)
                mode >>= 6;
@@ -445,13 +449,7 @@ static int exec_permission_lite(struct inode *inode)
        if (mode & MAY_EXEC)
                goto ok;
 
-       if ((inode->i_mode & S_IXUGO) && capable(CAP_DAC_OVERRIDE))
-               goto ok;
-
-       if (S_ISDIR(inode->i_mode) && capable(CAP_DAC_OVERRIDE))
-               goto ok;
-
-       if (S_ISDIR(inode->i_mode) && capable(CAP_DAC_READ_SEARCH))
+       if (capable(CAP_DAC_OVERRIDE) || capable(CAP_DAC_READ_SEARCH))
                goto ok;
 
        return -EACCES;