mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-08 10:18:01 +02:00
DBusConnection: implements _dbus_connection_get_pending_fds_count
This is one of four commits needed to address CVE-2014-3637. This will allow the bus to know whether there are pending file descriptors in a DBusConnection's DBusMessageLoader. https://bugs.freedesktop.org/show_bug.cgi?id=80559 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk> [fix compilation on platforms that do not HAVE_UNIX_FD_PASSING -smcv] Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
This commit is contained in:
parent
bbf11cd5f9
commit
995734750c
6 changed files with 40 additions and 0 deletions
|
|
@ -100,6 +100,7 @@ void _dbus_connection_test_get_locks (DBusConnectio
|
|||
DBusMutex **io_path_mutex_loc,
|
||||
DBusCondVar **dispatch_cond_loc,
|
||||
DBusCondVar **io_path_cond_loc);
|
||||
int _dbus_connection_get_pending_fds_count (DBusConnection *connection);
|
||||
|
||||
/* if DBUS_ENABLE_STATS */
|
||||
void _dbus_connection_get_stats (DBusConnection *connection,
|
||||
|
|
|
|||
|
|
@ -2549,6 +2549,17 @@ _dbus_connection_block_pending_call (DBusPendingCall *pending)
|
|||
dbus_pending_call_unref (pending);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return how many file descriptors are pending in the loader
|
||||
*
|
||||
* @param connection the connection
|
||||
*/
|
||||
int
|
||||
_dbus_connection_get_pending_fds_count (DBusConnection *connection)
|
||||
{
|
||||
return _dbus_transport_get_pending_fds_count (connection->transport);
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ long _dbus_message_loader_get_max_message_size (DBusMessageLoader
|
|||
void _dbus_message_loader_set_max_message_unix_fds(DBusMessageLoader *loader,
|
||||
long n);
|
||||
long _dbus_message_loader_get_max_message_unix_fds(DBusMessageLoader *loader);
|
||||
int _dbus_message_loader_get_pending_fds_count (DBusMessageLoader *loader);
|
||||
|
||||
typedef struct DBusInitialFDs DBusInitialFDs;
|
||||
DBusInitialFDs *_dbus_check_fdleaks_enter (void);
|
||||
|
|
|
|||
|
|
@ -4499,6 +4499,21 @@ _dbus_message_loader_get_max_message_unix_fds (DBusMessageLoader *loader)
|
|||
return loader->max_message_unix_fds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return how many file descriptors are pending in the loader
|
||||
*
|
||||
* @param loader the loader
|
||||
*/
|
||||
int
|
||||
_dbus_message_loader_get_pending_fds_count (DBusMessageLoader *loader)
|
||||
{
|
||||
#ifdef HAVE_UNIX_FD_PASSING
|
||||
return loader->n_unix_fds;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static DBusDataSlotAllocator slot_allocator =
|
||||
_DBUS_DATA_SLOT_ALLOCATOR_INIT (_DBUS_LOCK_NAME (message_slots));
|
||||
|
||||
|
|
|
|||
|
|
@ -1512,6 +1512,17 @@ _dbus_transport_set_allow_anonymous (DBusTransport *transport,
|
|||
transport->allow_anonymous = value != FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return how many file descriptors are pending in the loader
|
||||
*
|
||||
* @param transport the transport
|
||||
*/
|
||||
int
|
||||
_dbus_transport_get_pending_fds_count (DBusTransport *transport)
|
||||
{
|
||||
return _dbus_message_loader_get_pending_fds_count (transport->loader);
|
||||
}
|
||||
|
||||
#ifdef DBUS_ENABLE_STATS
|
||||
void
|
||||
_dbus_transport_get_stats (DBusTransport *transport,
|
||||
|
|
|
|||
|
|
@ -97,6 +97,7 @@ dbus_bool_t _dbus_transport_set_auth_mechanisms (DBusTransport
|
|||
const char **mechanisms);
|
||||
void _dbus_transport_set_allow_anonymous (DBusTransport *transport,
|
||||
dbus_bool_t value);
|
||||
int _dbus_transport_get_pending_fds_count (DBusTransport *transport);
|
||||
|
||||
/* if DBUS_ENABLE_STATS */
|
||||
void _dbus_transport_get_stats (DBusTransport *transport,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue