[maemo-commits] [maemo-commits] r14497 - in projects/haf/trunk/dbus/debian: . patches
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Thu Oct 18 11:21:44 EEST 2007
- Previous message: [maemo-commits] r14496 - projects/haf/trunk/osso-app-killer/debian
- Next message: [maemo-commits] r14498 - in projects/haf/trunk/dbus/debian: . patches
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: kihamala
Date: 2007-10-18 11:21:40 +0300 (Thu, 18 Oct 2007)
New Revision: 14497
Added:
projects/haf/trunk/dbus/debian/patches/20-double-free-fix.patch
Modified:
projects/haf/trunk/dbus/debian/changelog
Log:
double free patch
Modified: projects/haf/trunk/dbus/debian/changelog
===================================================================
--- projects/haf/trunk/dbus/debian/changelog 2007-10-18 07:55:41 UTC (rev 14496)
+++ projects/haf/trunk/dbus/debian/changelog 2007-10-18 08:21:40 UTC (rev 14497)
@@ -3,8 +3,11 @@
* Added dbus-dbg package. Fixes: NB#70750
* Fixed a possible segfault in dbus_connection_send_with_reply when the
connection has been disconnected.
+ * Fixed a double free which could have happened after calling
+ _dbus_connection_close_if_only_one_ref. Discovered by statical code
+ analysis.
- -- Kimmo Hämäläinen <kimmo.hamalainen at nokia.com> Thu, 27 Sep 2007 12:40:47 +0300
+ -- Kimmo Hämäläinen <kimmo.hamalainen at nokia.com> Thu, 18 Oct 2007 11:21:11 +0300
dbus (1.0.2-0osso12) experimental; urgency=low
Added: projects/haf/trunk/dbus/debian/patches/20-double-free-fix.patch
===================================================================
--- projects/haf/trunk/dbus/debian/patches/20-double-free-fix.patch 2007-10-18 07:55:41 UTC (rev 14496)
+++ projects/haf/trunk/dbus/debian/patches/20-double-free-fix.patch 2007-10-18 08:21:40 UTC (rev 14497)
@@ -0,0 +1,76 @@
+diff -pur dbus-1.0.2/dbus/dbus-connection-internal.h dbus-1.0.2.new/dbus/dbus-connection-internal.h
+--- dbus-1.0.2/dbus/dbus-connection-internal.h 2006-12-11 21:21:14.000000000 +0200
++++ dbus-1.0.2.new/dbus/dbus-connection-internal.h 2007-10-18 11:09:43.798712808 +0300
+@@ -78,7 +78,7 @@ void _dbus_connection_do_it
+ unsigned int flags,
+ int timeout_milliseconds);
+ void _dbus_connection_close_possibly_shared (DBusConnection *connection);
+-void _dbus_connection_close_if_only_one_ref (DBusConnection *connection);
++dbus_bool_t _dbus_connection_close_if_only_one_ref (DBusConnection *connection);
+
+ DBusPendingCall* _dbus_pending_call_new (DBusConnection *connection,
+ int timeout_milliseconds,
+diff -pur dbus-1.0.2/dbus/dbus-connection.c dbus-1.0.2.new/dbus/dbus-connection.c
+--- dbus-1.0.2/dbus/dbus-connection.c 2006-12-11 21:21:08.000000000 +0200
++++ dbus-1.0.2.new/dbus/dbus-connection.c 2007-10-18 11:12:57.012339872 +0300
+@@ -2008,8 +2008,9 @@ _dbus_connection_send_and_unlock (DBusCo
+ * though, we could screw this up.
+ *
+ * @param connection the connection
++ * @returns #TRUE if the connection was closed
+ */
+-void
++dbus_bool_t
+ _dbus_connection_close_if_only_one_ref (DBusConnection *connection)
+ {
+ CONNECTION_LOCK (connection);
+@@ -2017,9 +2018,15 @@ _dbus_connection_close_if_only_one_ref (
+ _dbus_assert (connection->refcount.value > 0);
+
+ if (connection->refcount.value == 1)
+- _dbus_connection_close_possibly_shared_and_unlock (connection);
++ {
++ _dbus_connection_close_possibly_shared_and_unlock (connection);
++ return TRUE;
++ }
+ else
+- CONNECTION_UNLOCK (connection);
++ {
++ CONNECTION_UNLOCK (connection);
++ return FALSE;
++ }
+ }
+
+
+diff -pur dbus-1.0.2/dbus/dbus-server-debug-pipe.c dbus-1.0.2.new/dbus/dbus-server-debug-pipe.c
+--- dbus-1.0.2/dbus/dbus-server-debug-pipe.c 2006-12-11 21:21:06.000000000 +0200
++++ dbus-1.0.2.new/dbus/dbus-server-debug-pipe.c 2007-10-18 11:14:44.798953816 +0300
+@@ -317,8 +317,10 @@ _dbus_transport_debug_pipe_new (const ch
+ /* If no one grabbed a reference, the connection will die,
+ * and the client transport will get an immediate disconnect
+ */
+- _dbus_connection_close_if_only_one_ref (connection);
+- dbus_connection_unref (connection);
++ if (!_dbus_connection_close_if_only_one_ref (connection))
++ {
++ dbus_connection_unref (connection);
++ }
+
+ return client_transport;
+ }
+diff -pur dbus-1.0.2/dbus/dbus-server-socket.c dbus-1.0.2.new/dbus/dbus-server-socket.c
+--- dbus-1.0.2/dbus/dbus-server-socket.c 2006-12-11 21:21:06.000000000 +0200
++++ dbus-1.0.2.new/dbus/dbus-server-socket.c 2007-10-18 11:09:04.203732160 +0300
+@@ -136,8 +136,10 @@ handle_new_client_fd_and_unlock (DBusSer
+ dbus_server_unref (server);
+
+ /* If no one grabbed a reference, the connection will die. */
+- _dbus_connection_close_if_only_one_ref (connection);
+- dbus_connection_unref (connection);
++ if (!_dbus_connection_close_if_only_one_ref (connection))
++ {
++ dbus_connection_unref (connection);
++ }
+
+ return TRUE;
+ }
- Previous message: [maemo-commits] r14496 - projects/haf/trunk/osso-app-killer/debian
- Next message: [maemo-commits] r14498 - in projects/haf/trunk/dbus/debian: . patches
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
