diff options
Diffstat (limited to 'security/smack/smack_access.c')
| -rw-r--r-- | security/smack/smack_access.c | 17 | 
1 files changed, 8 insertions, 9 deletions
| diff --git a/security/smack/smack_access.c b/security/smack/smack_access.c index 0df316c62005..84f38b694242 100644 --- a/security/smack/smack_access.c +++ b/security/smack/smack_access.c @@ -90,23 +90,22 @@ int log_policy = SMACK_AUDIT_DENIED;  int smk_access_entry(char *subject_label, char *object_label,  			struct list_head *rule_list)  { -	int may = -ENOENT;  	struct smack_rule *srp;  	list_for_each_entry_rcu(srp, rule_list, list) {  		if (srp->smk_object->smk_known == object_label &&  		    srp->smk_subject->smk_known == subject_label) { -			may = srp->smk_access; -			break; +			int may = srp->smk_access; +			/* +			 * MAY_WRITE implies MAY_LOCK. +			 */ +			if ((may & MAY_WRITE) == MAY_WRITE) +				may |= MAY_LOCK; +			return may;  		}  	} -	/* -	 * MAY_WRITE implies MAY_LOCK. -	 */ -	if ((may & MAY_WRITE) == MAY_WRITE) -		may |= MAY_LOCK; -	return may; +	return -ENOENT;  }  /** | 
