|
@@ -686,7 +686,7 @@ static int smack_inode_rename(struct inode *old_inode,
|
|
|
*
|
|
|
* Returns 0 if access is permitted, -EACCES otherwise
|
|
|
*/
|
|
|
-static int smack_inode_permission(struct inode *inode, int mask)
|
|
|
+static int smack_inode_permission(struct inode *inode, int mask, unsigned flags)
|
|
|
{
|
|
|
struct smk_audit_info ad;
|
|
|
|
|
@@ -696,6 +696,10 @@ static int smack_inode_permission(struct inode *inode, int mask)
|
|
|
*/
|
|
|
if (mask == 0)
|
|
|
return 0;
|
|
|
+
|
|
|
+ /* May be droppable after audit */
|
|
|
+ if (flags & IPERM_FLAG_RCU)
|
|
|
+ return -ECHILD;
|
|
|
smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_FS);
|
|
|
smk_ad_setfield_u_fs_inode(&ad, inode);
|
|
|
return smk_curacc(smk_of_inode(inode), mask, &ad);
|