|
@@ -181,7 +181,7 @@ static int acl_permission_check(struct inode *inode, int mask, unsigned int flag
|
|
int (*check_acl)(struct inode *inode, int mask, unsigned int flags);
|
|
int (*check_acl)(struct inode *inode, int mask, unsigned int flags);
|
|
unsigned int mode = inode->i_mode;
|
|
unsigned int mode = inode->i_mode;
|
|
|
|
|
|
- mask &= MAY_READ | MAY_WRITE | MAY_EXEC;
|
|
|
|
|
|
+ mask &= MAY_READ | MAY_WRITE | MAY_EXEC | MAY_NOT_BLOCK;
|
|
|
|
|
|
if (current_user_ns() != inode_userns(inode))
|
|
if (current_user_ns() != inode_userns(inode))
|
|
goto other_perms;
|
|
goto other_perms;
|
|
@@ -204,7 +204,7 @@ other_perms:
|
|
/*
|
|
/*
|
|
* If the DACs are ok we don't need any capability check.
|
|
* If the DACs are ok we don't need any capability check.
|
|
*/
|
|
*/
|
|
- if ((mask & ~mode) == 0)
|
|
|
|
|
|
+ if ((mask & ~mode & (MAY_READ | MAY_WRITE | MAY_EXEC)) == 0)
|
|
return 0;
|
|
return 0;
|
|
return -EACCES;
|
|
return -EACCES;
|
|
}
|
|
}
|