bus: Assign a serial number for messages from the driver 30/299630/2 accepted/tizen/unified/20231011.153130 accepted/tizen/unified/dev/20240620.010635
authorhongjinghao <q1204531485@163.com>
Mon, 5 Jun 2023 17:17:06 +0000 (18:17 +0100)
committerKarol Lewandowski <k.lewandowsk@samsung.com>
Thu, 5 Oct 2023 20:07:47 +0000 (22:07 +0200)
commit5c4fb289437d1d80991ae74f689e34fcebb27b31
treee93ab6f8e44171653efe77f7e2acdcd613a7b82a
parent9aca6d45fb390318a8795e6c965f07143d051068
bus: Assign a serial number for messages from the driver

Normally, it's enough to rely on a message being given a serial number
by the DBusConnection just before it is actually sent. However, in the
rare case where the policy blocks the driver from sending a message
(due to a deny rule or the outgoing message quota being full), we need
to get a valid serial number sooner, so that we can copy it into the
DBUS_HEADER_FIELD_REPLY_SERIAL field (which is mandatory) in the error
message sent to monitors. Otherwise, the dbus-daemon will crash with
an assertion failure if at least one Monitoring client is attached,
because zero is not a valid serial number to copy.

This fixes a denial-of-service vulnerability: if a privileged user is
monitoring the well-known system bus using a Monitoring client like
dbus-monitor or `busctl monitor`, then an unprivileged user can cause
denial-of-service by triggering this crash. A mitigation for this
vulnerability is to avoid attaching Monitoring clients to the system
bus when they are not needed. If there are no Monitoring clients, then
the vulnerable code is not reached.

Co-authored-by: Simon McVittie <smcv@collabora.com>
Resolves: dbus/dbus#457
(cherry picked from commit b159849e031000d1dbc1ab876b5fc78a3ce9b534)
[ cherry picked to tizen branch, fixes CVE-2023-34969 ]
Change-Id: Iee520329acc1d4a93d3a873a5fded056cb293d5b
Signed-off-by: Karol Lewandowski <k.lewandowsk@samsung.com>
bus/connection.c
dbus/dbus-connection-internal.h
dbus/dbus-connection.c