Re: [PATCH 1/2] gdbus: Check for NULL DBusPendingCall in g_dbus_send_message_with_reply

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Szymon,

On Mon, Oct 14, 2013 at 11:12 AM, Szymon Janc <szymon.janc@xxxxxxxxx> wrote:
>
>> From D-Bus documentation for dbus_connection_send_with_reply():
>> "Warning: if the connection is disconnected or you try to send Unix file
>> descriptors on a connection that does not support them, the
>> DBusPendingCall will be set to NULL, so be careful with this."
>>
>> Check this in g_dbus_send_message_with_reply so that callers don't need
>> to double check for NULL if g_dbus_send_message_with_reply returned
>> TRUE.
>>
>> This also fix crash if passing FD over D-Bus is blocked e.g. by SELinux
>> policy.
>>
>> bluetoothd[1894]: profiles/audio/avdtp.c:session_cb()
>> bluetoothd[1894]: profiles/audio/avdtp.c:avdtp_parse_cmd() Received
>>     SET_CONFIGURATION_CMD
>> bluetoothd[1894]: profiles/audio/a2dp.c:endpoint_setconf_ind() Source
>>     0x6c5000: Set_Configuration_Ind
>> bluetoothd[1894]: profiles/audio/avdtp.c:avdtp_ref() 0x6df360: ref=1
>> bluetoothd[1894]: profiles/audio/a2dp.c:setup_ref() 0x6d32b0: ref=1
>> process 1894: arguments to dbus_pending_call_set_notify() were incorrect,
>>      assertion "pending != NULL" failed in file dbus-pending-call.c line
>>      636.
>> This is normally a bug in some application using the D-Bus library.
>> ---
>>  gdbus/object.c | 11 ++++++++++-
>>  1 file changed, 10 insertions(+), 1 deletion(-)
>>
>> diff --git a/gdbus/object.c b/gdbus/object.c
>> index 0822fe8..268fed5 100644
>> --- a/gdbus/object.c
>> +++ b/gdbus/object.c
>> @@ -1510,11 +1510,20 @@ gboolean g_dbus_send_message_with_reply(DBusConnection *connection,
>>                                       DBusMessage *message,
>>                                       DBusPendingCall **call, int timeout)
>>  {
>> +     dbus_bool_t ret;
>> +
>>       /* Flush pending signal to guarantee message order */
>>       g_dbus_flush(connection);
>>
>> -     return dbus_connection_send_with_reply(connection, message, call,
>> +     ret = dbus_connection_send_with_reply(connection, message, call,
>>                                                               timeout);
>> +
>> +     if (ret == TRUE && call != NULL && *call == NULL) {
>> +             error("Unable to send message (passing fd blocked?)");
>> +             return FALSE;
>> +     }
>> +
>> +     return ret;
>>  }
>>
>>  gboolean g_dbus_send_error_valist(DBusConnection *connection,
>>
>
> ping

Applied, thanks.


-- 
Luiz Augusto von Dentz
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux