[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