Re: avc: granted null messages

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2007-12-20 at 17:20 -0500, Eamon Walsh wrote:
> Stephen Smalley wrote:
> > On Wed, 2007-12-19 at 11:15 -0500, Stephen Smalley wrote:
> >   
> >> On Wed, 2007-12-19 at 11:09 +1100, James Morris wrote:
> >>     
> >>> On Tue, 18 Dec 2007, Eamon Walsh wrote:
> >>>
> >>>       
> >>>> Stephen Smalley wrote:
> >>>>         
> >>>>> If a (buggy) caller passes a requested permission value of zero to
> >>>>> avc_has_perm, it correctly returns a permission denial (if enforcing),
> >>>>>   
> >>>>>           
> >>>> Now I'm questioning why we don't just return success.  Doesn't everyone have
> >>>> permission to do nothing?  It seems odd to think that a process could receive
> >>>> "granted" for a set of permissions A, but "denied" for a subset of A.
> >>>>         
> >>> Given that the caller is buggy, we don't really know what it's trying to 
> >>> do, so denying access seems prudent.
> >>>
> >>> Can we get the audit log to produce something unparseable by audit2allow, 
> >>> as we don't _want_ policy being generated in response to a buggy caller ?
> >>>       
> >> At present, it generates no avc message in permissive (avc_audit entered
> >> with requested == 0 and result == 0) and a misleading avc message in
> >> enforcing (avc_audit entered with requested == 0 and result < 0),
> >> neither of which will generate any policy.
> >>
> >> If we change it to consistently generate an:
> >> 	avc:  denied null for scontext=...
> >> then audit2allow would try to create an allow rule like:
> >> 	allow a_t b_t:class null;
> >> which would compile but fail when one tries to insert the module, since
> >> null is not a defined permission in the base policy.
> >>
> >> I don't think we want to generate an unparseable avc message, whatever
> >> that might mean, as that too could potentially break audit2allow and in
> >> a less understandable way, and we want these failures to be noticeable,
> >> just not immediately fatal to the system (ala BUG_ON or assert).
> >>     
> >
> > Oh, the other reason to keep it in the existing format is to ensure that
> > setroubleshoot picks up on it, since users are now trained to look for
> > its alerts rather than inspecting the audit log for SELinux denials.
> >   
> 
> How about the following:
> 
> Index: libselinux/src/avc.c
> ===================================================================
> --- libselinux/src/avc.c	(revision 2708)
> +++ libselinux/src/avc.c	(working copy)
> @@ -756,12 +756,19 @@
>  
>  	denied = requested & ~avd->allowed;
>  	if (denied) {
> +		/* Permissions were denied */
>  		audited = denied;
>  		if (!(audited & avd->auditdeny))
>  			return;
> +	} else if (!requested) {
> +		/* Request was made with "null" permission vector */
> +		audited = requested;
> +		denied = 1;

That will yield a denied <randompermissionatbit1> message, since denied
is the actual access vector of denied permissions rather than a boolean.

>  	} else if (result) {
> +		/* Another error besides a denial occurred */
>  		audited = denied = requested;
>  	} else {
> +		/* Permissions were granted */
>  		audited = requested;
>  		if (!(audited & avd->auditallow))
>  			return;
> 

Possibly the following patch instead.
It should yield "avc:  denied null" in both permissive and enforcing
mode, I believe.

Index: libselinux/src/avc.c
===================================================================
--- libselinux/src/avc.c	(revision 2708)
+++ libselinux/src/avc.c	(working copy)
@@ -759,7 +759,7 @@
 		audited = denied;
 		if (!(audited & avd->auditdeny))
 			return;
-	} else if (result) {
+	} else if (!requested || result) {
 		audited = denied = requested;
 	} else {
 		audited = requested;
@@ -773,7 +773,7 @@
 	/* prevent overlapping buffer writes */
 	avc_get_lock(avc_log_lock);
 	snprintf(avc_audit_buf, AVC_AUDIT_BUFSIZE,
-		 "%s:  %s ", avc_prefix, denied ? "denied" : "granted");
+		 "%s:  %s ", avc_prefix, (denied || !requested) ? "denied" : "granted");
 	avc_dump_av(tclass, audited);
 	log_append(avc_audit_buf, " for ");
 

-- 
Stephen Smalley
National Security Agency


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.

[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux