[PATCH 1/3] selinux: call WARN_ONCE() instead of calling audit_log_start()

2013-12-04 Thread Richard Guy Briggs
Two of the conditions in selinux_audit_rule_match() should never happen and
the third indicates a race that should be retried.  Remove the calls to
audit_log() (which call audit_log_start()) and deal with the errors in the
caller, logging only once if the condition is met.  Calling audit_log_start()
in this location makes buffer allocation and locking more complicated in the
calling tree (audit_filter_user()).

Signed-off-by: Richard Guy Briggs 
---
 security/selinux/ss/services.c |   12 
 1 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
index b4feecc..f4dda05 100644
--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -2938,25 +2938,21 @@ int selinux_audit_rule_match(u32 sid, u32 field, u32 
op, void *vrule,
struct selinux_audit_rule *rule = vrule;
int match = 0;
 
-   if (!rule) {
-   audit_log(actx, GFP_ATOMIC, AUDIT_SELINUX_ERR,
- "selinux_audit_rule_match: missing rule\n");
+   if (unlikely(!rule)) {
+   WARN_ONCE(1, "selinux_audit_rule_match: missing rule\n");
return -ENOENT;
}
 
read_lock(_rwlock);
 
if (rule->au_seqno < latest_granting) {
-   audit_log(actx, GFP_ATOMIC, AUDIT_SELINUX_ERR,
- "selinux_audit_rule_match: stale rule\n");
match = -ESTALE;
goto out;
}
 
ctxt = sidtab_search(, sid);
-   if (!ctxt) {
-   audit_log(actx, GFP_ATOMIC, AUDIT_SELINUX_ERR,
- "selinux_audit_rule_match: unrecognized SID %d\n",
+   if (unlikely(!ctxt)) {
+   WARN_ONCE(1, "selinux_audit_rule_match: unrecognized SID %d\n",
  sid);
match = -ENOENT;
goto out;
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 1/3] selinux: call WARN_ONCE() instead of calling audit_log_start()

2013-12-04 Thread Richard Guy Briggs
Two of the conditions in selinux_audit_rule_match() should never happen and
the third indicates a race that should be retried.  Remove the calls to
audit_log() (which call audit_log_start()) and deal with the errors in the
caller, logging only once if the condition is met.  Calling audit_log_start()
in this location makes buffer allocation and locking more complicated in the
calling tree (audit_filter_user()).

Signed-off-by: Richard Guy Briggs r...@redhat.com
---
 security/selinux/ss/services.c |   12 
 1 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
index b4feecc..f4dda05 100644
--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -2938,25 +2938,21 @@ int selinux_audit_rule_match(u32 sid, u32 field, u32 
op, void *vrule,
struct selinux_audit_rule *rule = vrule;
int match = 0;
 
-   if (!rule) {
-   audit_log(actx, GFP_ATOMIC, AUDIT_SELINUX_ERR,
- selinux_audit_rule_match: missing rule\n);
+   if (unlikely(!rule)) {
+   WARN_ONCE(1, selinux_audit_rule_match: missing rule\n);
return -ENOENT;
}
 
read_lock(policy_rwlock);
 
if (rule-au_seqno  latest_granting) {
-   audit_log(actx, GFP_ATOMIC, AUDIT_SELINUX_ERR,
- selinux_audit_rule_match: stale rule\n);
match = -ESTALE;
goto out;
}
 
ctxt = sidtab_search(sidtab, sid);
-   if (!ctxt) {
-   audit_log(actx, GFP_ATOMIC, AUDIT_SELINUX_ERR,
- selinux_audit_rule_match: unrecognized SID %d\n,
+   if (unlikely(!ctxt)) {
+   WARN_ONCE(1, selinux_audit_rule_match: unrecognized SID %d\n,
  sid);
match = -ENOENT;
goto out;
-- 
1.7.1

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/