Make sure that the credentials of the connection at creation time will last so the kdbus_policy_check_own_access() will work as expected.
Signed-off-by: Djalal Harouni <tix...@opendz.org> --- connection.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/connection.c b/connection.c index e8e9c78..3f27889 100644 --- a/connection.c +++ b/connection.c @@ -1553,6 +1553,7 @@ static void __kdbus_conn_free(struct kref *kref) kdbus_pool_free(conn->pool); kdbus_ep_unref(conn->ep); kdbus_bus_unref(conn->bus); + put_cred(conn->cred); kfree(conn->name); kfree(conn); } @@ -1958,7 +1959,7 @@ int kdbus_conn_new(struct kdbus_ep *ep, INIT_LIST_HEAD(&conn->reply_list); atomic_set(&conn->reply_count, 0); INIT_DELAYED_WORK(&conn->work, kdbus_conn_work); - conn->cred = current_cred(); + conn->cred = get_current_cred(); init_waitqueue_head(&conn->wait); /* init entry, so we can unconditionally remove it */ @@ -1966,7 +1967,7 @@ int kdbus_conn_new(struct kdbus_ep *ep, ret = kdbus_pool_new(conn->name, &conn->pool, hello->pool_size); if (ret < 0) - goto exit_free_conn; + goto exit_unref_cred; ret = kdbus_match_db_new(&conn->match_db); if (ret < 0) @@ -2094,6 +2095,8 @@ exit_unref_ep: kdbus_match_db_free(conn->match_db); exit_free_pool: kdbus_pool_free(conn->pool); +exit_unref_cred: + put_cred(conn->cred); exit_free_conn: kfree(conn->name); kfree(conn); -- 1.9.0 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel