aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ipc/kdbus/bus.c2
-rw-r--r--tools/testing/selftests/kdbus/test-message.c9
-rw-r--r--tools/testing/selftests/kdbus/test-policy-priv.c26
3 files changed, 27 insertions, 10 deletions
diff --git a/ipc/kdbus/bus.c b/ipc/kdbus/bus.c
index e7e17a7f7edd..a67f825bdeaf 100644
--- a/ipc/kdbus/bus.c
+++ b/ipc/kdbus/bus.c
@@ -263,8 +263,6 @@ void kdbus_bus_broadcast(struct kdbus_bus *bus,
down_read(&bus->conn_rwlock);
hash_for_each(bus->conn_hash, i, conn_dst, hentry) {
- if (conn_dst->id == staging->msg->src_id)
- continue;
if (!kdbus_conn_is_ordinary(conn_dst))
continue;
diff --git a/tools/testing/selftests/kdbus/test-message.c b/tools/testing/selftests/kdbus/test-message.c
index f1615dafb7f1..ddc1e0af877b 100644
--- a/tools/testing/selftests/kdbus/test-message.c
+++ b/tools/testing/selftests/kdbus/test-message.c
@@ -54,9 +54,12 @@ int kdbus_test_message_basic(struct kdbus_test_env *env)
KDBUS_DST_ID_BROADCAST);
ASSERT_RETURN(ret == 0);
- /* Make sure that we do not get our own broadcasts */
- ret = kdbus_msg_recv(sender, NULL, NULL);
- ASSERT_RETURN(ret == -EAGAIN);
+ /* Make sure that we do get our own broadcasts */
+ ret = kdbus_msg_recv(sender, &msg, &offset);
+ ASSERT_RETURN(ret == 0);
+ ASSERT_RETURN(msg->cookie == cookie);
+
+ kdbus_msg_free(msg);
/* ... and receive on the 2nd */
ret = kdbus_msg_recv_poll(conn, 100, &msg, &offset);
diff --git a/tools/testing/selftests/kdbus/test-policy-priv.c b/tools/testing/selftests/kdbus/test-policy-priv.c
index a318cccad0d5..0208638a7245 100644
--- a/tools/testing/selftests/kdbus/test-policy-priv.c
+++ b/tools/testing/selftests/kdbus/test-policy-priv.c
@@ -110,6 +110,12 @@ static int test_policy_priv_by_broadcast(const char *bus,
KDBUS_DST_ID_BROADCAST);
ASSERT_RETURN(ret == 0);
+ /* drop own broadcast */
+ ret = kdbus_msg_recv(child_2, &msg, NULL);
+ ASSERT_RETURN(ret == 0);
+ ASSERT_RETURN(msg->src_id == child_2->id);
+ kdbus_msg_free(msg);
+
/* Use a little bit high time */
ret = kdbus_msg_recv_poll(child_2, 1000,
&msg, NULL);
@@ -145,6 +151,12 @@ static int test_policy_priv_by_broadcast(const char *bus,
KDBUS_DST_ID_BROADCAST);
ASSERT_EXIT(ret == 0);
+ /* drop own broadcast */
+ ret = kdbus_msg_recv(child_2, &msg, NULL);
+ ASSERT_RETURN(ret == 0);
+ ASSERT_RETURN(msg->src_id == child_2->id);
+ kdbus_msg_free(msg);
+
/* Use a little bit high time */
ret = kdbus_msg_recv_poll(child_2, 1000,
&msg, NULL);
@@ -313,11 +325,6 @@ static int test_broadcast_after_policy_upload(struct kdbus_test_env *env)
* receiver is not able to TALK to that name.
*/
- ret = test_policy_priv_by_broadcast(env->buspath, owner_a,
- DO_NOT_DROP,
- -ETIMEDOUT, -ETIMEDOUT);
- ASSERT_RETURN(ret == 0);
-
/* Activate matching for a privileged connection */
ret = kdbus_add_match_empty(owner_a);
ASSERT_RETURN(ret == 0);
@@ -408,6 +415,15 @@ static int test_broadcast_after_policy_upload(struct kdbus_test_env *env)
0, 0, KDBUS_DST_ID_BROADCAST);
ASSERT_RETURN(ret == 0);
+ ret = kdbus_msg_recv_poll(owner_a, 100, &msg, NULL);
+ ASSERT_RETURN(ret == 0);
+ ASSERT_RETURN(msg->cookie == expected_cookie);
+
+ /* Check src ID */
+ ASSERT_RETURN(msg->src_id == owner_a->id);
+
+ kdbus_msg_free(msg);
+
ret = kdbus_msg_recv_poll(owner_b, 100, &msg, NULL);
ASSERT_RETURN(ret == 0);
ASSERT_RETURN(msg->cookie == expected_cookie);