Zbigniew Jędrzejewski-Szmek 62fe94
From 94a2c2f64a1379ca5c9ce4dbbee45ce17250ab51 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 62fe94
From: Tom Gundersen <teg@jklm.no>
Zbigniew Jędrzejewski-Szmek 62fe94
Date: Thu, 25 Sep 2014 15:49:43 +0200
Zbigniew Jędrzejewski-Szmek 62fe94
Subject: [PATCH] bus-proxyd: add some asserts
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
Both as documentation, and to make Coverity happy.
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
Fixes CID #1241495 and #1241496.
Zbigniew Jędrzejewski-Szmek 62fe94
---
Zbigniew Jędrzejewski-Szmek 62fe94
 src/bus-proxyd/bus-policy.c | 19 +++++++++++++++++++
Zbigniew Jędrzejewski-Szmek 62fe94
 src/bus-proxyd/bus-proxyd.c |  8 ++++++++
Zbigniew Jędrzejewski-Szmek 62fe94
 2 files changed, 27 insertions(+)
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/bus-proxyd/bus-policy.c b/src/bus-proxyd/bus-policy.c
Zbigniew Jędrzejewski-Szmek 62fe94
index 165e763f57..0de7680d4b 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/bus-proxyd/bus-policy.c
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/bus-proxyd/bus-policy.c
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -611,11 +611,16 @@ struct policy_check_filter {
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 static int is_permissive(PolicyItem *i) {
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert(i);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
         return (i->type == POLICY_ITEM_ALLOW) ? ALLOW : DENY;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 static int check_policy_item(PolicyItem *i, const struct policy_check_filter *filter) {
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert(i);
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert(filter);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
         switch (i->class) {
Zbigniew Jędrzejewski-Szmek 62fe94
         case POLICY_ITEM_SEND:
Zbigniew Jędrzejewski-Szmek 62fe94
         case POLICY_ITEM_RECV:
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -643,21 +648,29 @@ static int check_policy_item(PolicyItem *i, const struct policy_check_filter *fi
Zbigniew Jędrzejewski-Szmek 62fe94
                 return is_permissive(i);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         case POLICY_ITEM_OWN:
Zbigniew Jędrzejewski-Szmek 62fe94
+                assert(filter->member);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
                 if (streq(i->name, filter->member))
Zbigniew Jędrzejewski-Szmek 62fe94
                         return is_permissive(i);
Zbigniew Jędrzejewski-Szmek 62fe94
                 break;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         case POLICY_ITEM_OWN_PREFIX:
Zbigniew Jędrzejewski-Szmek 62fe94
+                assert(filter->member);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
                 if (startswith(i->name, filter->member))
Zbigniew Jędrzejewski-Szmek 62fe94
                         return is_permissive(i);
Zbigniew Jędrzejewski-Szmek 62fe94
                 break;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         case POLICY_ITEM_USER:
Zbigniew Jędrzejewski-Szmek 62fe94
+                assert(filter->ucred);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
                 if ((streq_ptr(i->name, "*") || (i->uid_valid && i->uid == filter->ucred->uid)))
Zbigniew Jędrzejewski-Szmek 62fe94
                         return is_permissive(i);
Zbigniew Jędrzejewski-Szmek 62fe94
                 break;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         case POLICY_ITEM_GROUP:
Zbigniew Jędrzejewski-Szmek 62fe94
+                assert(filter->ucred);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
                 if ((streq_ptr(i->name, "*") || (i->gid_valid && i->gid == filter->ucred->gid)))
Zbigniew Jędrzejewski-Szmek 62fe94
                         return is_permissive(i);
Zbigniew Jędrzejewski-Szmek 62fe94
                 break;
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -675,6 +688,9 @@ static int check_policy_items(PolicyItem *items, const struct policy_check_filte
Zbigniew Jędrzejewski-Szmek 62fe94
         PolicyItem *i;
Zbigniew Jędrzejewski-Szmek 62fe94
         int r, ret = DUNNO;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert(items);
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert(filter);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
         /* Check all policies in a set - a broader one might be followed by a more specific one,
Zbigniew Jędrzejewski-Szmek 62fe94
          * and the order of rules in policy definitions matters */
Zbigniew Jędrzejewski-Szmek 62fe94
         LIST_FOREACH(items, i, items) {
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -694,6 +710,9 @@ static int policy_check(Policy *p, const struct policy_check_filter *filter) {
Zbigniew Jędrzejewski-Szmek 62fe94
         PolicyItem *items;
Zbigniew Jędrzejewski-Szmek 62fe94
         int r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert(p);
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert(filter);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
         /*
Zbigniew Jędrzejewski-Szmek 62fe94
          * The policy check is implemented by the following logic:
Zbigniew Jędrzejewski-Szmek 62fe94
          *
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/bus-proxyd/bus-proxyd.c b/src/bus-proxyd/bus-proxyd.c
Zbigniew Jędrzejewski-Szmek 62fe94
index a5387bb234..6a0fc7edfb 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/bus-proxyd/bus-proxyd.c
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/bus-proxyd/bus-proxyd.c
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -373,6 +373,8 @@ static int synthetic_reply_method_error(sd_bus_message *call, const sd_bus_error
Zbigniew Jędrzejewski-Szmek 62fe94
         _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
Zbigniew Jędrzejewski-Szmek 62fe94
         int r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert(call);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
         if (call->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -387,6 +389,8 @@ static int synthetic_reply_method_errno(sd_bus_message *call, int error, const s
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         _cleanup_bus_error_free_ sd_bus_error berror = SD_BUS_ERROR_NULL;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert(call);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
         if (call->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -402,6 +406,8 @@ static int synthetic_reply_method_return(sd_bus_message *call, const char *types
Zbigniew Jędrzejewski-Szmek 62fe94
         _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
Zbigniew Jędrzejewski-Szmek 62fe94
         int r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert(call);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
         if (call->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -426,6 +432,8 @@ static int synthetic_reply_return_strv(sd_bus_message *call, char **l) {
Zbigniew Jędrzejewski-Szmek 62fe94
         _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
Zbigniew Jędrzejewski-Szmek 62fe94
         int r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert(call);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
         r = sd_bus_message_new_method_return(call, &m);
Zbigniew Jędrzejewski-Szmek 62fe94
         if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return synthetic_reply_method_errno(call, r, NULL);