From 9245bf1afe6767a0412212bc0040e606ee850e7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20B=C5=99ezina?= Date: Wed, 12 Sep 2018 13:21:11 +0200 Subject: [PATCH 41/83] sbus: read destination after sender is set dbus_message_set_sender may reallocate internal fields which will yield pointer obtained by dbus_message_get_* invalid. Reviewed-by: Jakub Hrozek --- src/sbus/server/sbus_server_handler.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/sbus/server/sbus_server_handler.c b/src/sbus/server/sbus_server_handler.c index c300d81..d4e4547 100644 --- a/src/sbus/server/sbus_server_handler.c +++ b/src/sbus/server/sbus_server_handler.c @@ -148,9 +148,6 @@ sbus_server_filter(DBusConnection *dbus_conn, return DBUS_HANDLER_RESULT_HANDLED; } - destination = dbus_message_get_destination(message); - type = dbus_message_get_type(message); - conn = dbus_connection_get_data(dbus_conn, server->data_slot); if (conn == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, "Unknown connection!\n"); @@ -173,6 +170,11 @@ sbus_server_filter(DBusConnection *dbus_conn, return DBUS_HANDLER_RESULT_HANDLED; } + /* Set sender may reallocate internal fields so this needs to be read + * after we call dbus_message_set_sender(). */ + destination = dbus_message_get_destination(message); + type = dbus_message_get_type(message); + if (type == DBUS_MESSAGE_TYPE_SIGNAL) { return sbus_server_route_signal(server, conn, message, destination); } -- 2.9.5