From cfe3733a91f2c7743849303095162e908a588990 Mon Sep 17 00:00:00 2001 From: Nikolay Martynov Date: Sun, 5 Oct 2014 00:58:45 -0400 Subject: [PATCH] upowerd: Fix cleanup in up_device_idevice_coldplug/finalize 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 --- 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