diff options
-rw-r--r-- | ipc/kdbus/bus.c | 2 | ||||
-rw-r--r-- | tools/testing/selftests/kdbus/test-message.c | 9 | ||||
-rw-r--r-- | tools/testing/selftests/kdbus/test-policy-priv.c | 26 |
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); |