All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC][PATCH] selinux: Report result in avc messages
@ 2014-04-29 23:54 Stephen Smalley
  2014-04-30  0:22 ` William Roberts
                   ` (2 more replies)
  0 siblings, 3 replies; 29+ messages in thread
From: Stephen Smalley @ 2014-04-29 23:54 UTC (permalink / raw)
  To: selinux, Eric Paris, Paul Moore

[-- Attachment #1: Type: text/plain, Size: 396 bytes --]

Requested for Android in order to distinguish denials that are not in
fact breaking anything yet due to permissive domains versus denials
that are being enforced, but seems generally useful.  result field was
already in the selinux audit data structure and was being passed to
avc_audit() but wasn't being used.  Seems to cause no harm to ausearch
or audit2allow to add it as a field.  Comments?

[-- Attachment #2: 0001-selinux-Report-result-in-avc-messages.patch --]
[-- Type: text/x-patch, Size: 3412 bytes --]

From 651008371f3bf8eb00eeea0e84eca4ba7383860c Mon Sep 17 00:00:00 2001
From: Stephen Smalley <sds@tycho.nsa.gov>
Date: Tue, 29 Apr 2014 11:29:04 -0700
Subject: [PATCH] selinux:  Report result in avc messages.

We cannot presently tell from an avc message whether access was in
fact denied or was allowed due to global or per-domain permissive mode.
Add a result= field to the avc message to reflect this information.

Signed-off-by: Stephen Smalley <sds@tycho.nsa.gov>
---
 security/selinux/avc.c         | 5 ++++-
 security/selinux/hooks.c       | 5 +++--
 security/selinux/include/avc.h | 4 ++--
 3 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/security/selinux/avc.c b/security/selinux/avc.c
index fc3e662..916b810 100644
--- a/security/selinux/avc.c
+++ b/security/selinux/avc.c
@@ -444,11 +444,13 @@ static void avc_audit_post_callback(struct audit_buffer *ab, void *a)
 	avc_dump_query(ab, ad->selinux_audit_data->ssid,
 			   ad->selinux_audit_data->tsid,
 			   ad->selinux_audit_data->tclass);
+	audit_log_format(ab, " result=%s",
+			 ad->selinux_audit_data->result ? "denied" : "allowed");
 }
 
 /* This is the slow part of avc audit with big stack footprint */
 noinline int slow_avc_audit(u32 ssid, u32 tsid, u16 tclass,
-		u32 requested, u32 audited, u32 denied,
+		u32 requested, u32 audited, u32 denied, int result,
 		struct common_audit_data *a,
 		unsigned flags)
 {
@@ -477,6 +479,7 @@ noinline int slow_avc_audit(u32 ssid, u32 tsid, u16 tclass,
 	sad.tsid = tsid;
 	sad.audited = audited;
 	sad.denied = denied;
+	sad.result = result;
 
 	a->selinux_audit_data = &sad;
 
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index b4beb77..e156b5f 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -2770,6 +2770,7 @@ static int selinux_inode_follow_link(struct dentry *dentry, struct nameidata *na
 
 static noinline int audit_inode_permission(struct inode *inode,
 					   u32 perms, u32 audited, u32 denied,
+					   int result,
 					   unsigned flags)
 {
 	struct common_audit_data ad;
@@ -2780,7 +2781,7 @@ static noinline int audit_inode_permission(struct inode *inode,
 	ad.u.inode = inode;
 
 	rc = slow_avc_audit(current_sid(), isec->sid, isec->sclass, perms,
-			    audited, denied, &ad, flags);
+			    audited, denied, result, &ad, flags);
 	if (rc)
 		return rc;
 	return 0;
@@ -2822,7 +2823,7 @@ static int selinux_inode_permission(struct inode *inode, int mask)
 	if (likely(!audited))
 		return rc;
 
-	rc2 = audit_inode_permission(inode, perms, audited, denied, flags);
+	rc2 = audit_inode_permission(inode, perms, audited, denied, rc, flags);
 	if (rc2)
 		return rc2;
 	return rc;
diff --git a/security/selinux/include/avc.h b/security/selinux/include/avc.h
index f53ee3c..ddf8eec 100644
--- a/security/selinux/include/avc.h
+++ b/security/selinux/include/avc.h
@@ -102,7 +102,7 @@ static inline u32 avc_audit_required(u32 requested,
 }
 
 int slow_avc_audit(u32 ssid, u32 tsid, u16 tclass,
-		   u32 requested, u32 audited, u32 denied,
+		   u32 requested, u32 audited, u32 denied, int result,
 		   struct common_audit_data *a,
 		   unsigned flags);
 
@@ -137,7 +137,7 @@ static inline int avc_audit(u32 ssid, u32 tsid,
 	if (likely(!audited))
 		return 0;
 	return slow_avc_audit(ssid, tsid, tclass,
-			      requested, audited, denied,
+			      requested, audited, denied, result,
 			      a, 0);
 }
 
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2014-05-02 19:47 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-29 23:54 [RFC][PATCH] selinux: Report result in avc messages Stephen Smalley
2014-04-30  0:22 ` William Roberts
2014-04-30  2:59 ` Eric Paris
2014-04-30  2:59   ` Eric Paris
2014-04-30 12:59   ` Daniel J Walsh
2014-04-30 12:59     ` Daniel J Walsh
2014-04-30 13:29     ` Steve Grubb
2014-04-30 13:29       ` Steve Grubb
2014-04-30 13:34       ` Daniel J Walsh
2014-04-30 13:34         ` Daniel J Walsh
2014-04-30 15:18         ` Stephen Smalley
2014-04-30 15:18           ` Stephen Smalley
2014-04-30 15:38           ` Stephen Smalley
2014-04-30 15:38             ` Stephen Smalley
2014-04-30 15:48             ` William Roberts
2014-04-30 15:48               ` William Roberts
2014-04-30 16:01               ` Steve Grubb
2014-04-30 16:08                 ` Stephen Smalley
2014-04-30 16:20                   ` William Roberts
2014-04-30 16:20                     ` William Roberts
2014-05-01 19:09                   ` Paul Moore
2014-05-01 19:09                     ` Paul Moore
2014-05-01 20:11                     ` Stephen Smalley
2014-05-01 20:11                       ` Stephen Smalley
2014-05-02 19:47                       ` Paul Moore
2014-05-02 19:47                         ` Paul Moore
2014-04-30 15:52             ` Eric Paris
2014-04-30 15:52               ` Eric Paris
2014-04-30 12:56 ` Daniel J Walsh

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.