[PATCH] upowerd: Fix cleanup in up_device_idevice_coldplug/finalize

Nikolay Martynov mar.kolya at gmail.com
Sat Oct 4 22:03:42 PDT 2014


Under certain conditions lockdownd_client_free was called
twice for same client. This caused SIGSEGV.

This patch addresses this issue

Signed-off-by: Nikolay Martynov <mar.kolya at gmail.com>
---
 src/linux/up-device-idevice.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/linux/up-device-idevice.c b/src/linux/up-device-idevice.c
index bf61a6f..699298c 100644
--- a/src/linux/up-device-idevice.c
+++ b/src/linux/up-device-idevice.c
@@ -138,10 +138,14 @@ up_device_idevice_coldplug (UpDevice *device)
 	return TRUE;
 
 out:
-	if (client != NULL)
+	if (client != NULL) {
 		lockdownd_client_free (client);
-	if (dev != NULL)
+		idevice->priv->client = NULL;
+	}
+	if (dev != NULL) {
 		idevice_free (dev);
+		idevice->priv->dev = NULL;
+	}
 	return FALSE;
 }
 
@@ -238,7 +242,9 @@ up_device_idevice_finalize (GObject *object)
 	up_daemon_stop_poll (object);
 	if (idevice->priv->client != NULL)
 		lockdownd_client_free (idevice->priv->client);
-	idevice_free (idevice->priv->dev);
+	if (idevice->priv->dev != NULL) {
+		idevice_free (idevice->priv->dev);
+	}
 
 	G_OBJECT_CLASS (up_device_idevice_parent_class)->finalize (object);
 }
-- 
1.9.1



More information about the devkit-devel mailing list