summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Martin Szulecki2013-11-17 02:40:48 +0100
committerGravatar Martin Szulecki2013-11-30 20:13:59 +0100
commit868e336f8337e14e0288ac1d3c9fd89bee6d1961 (patch)
treed4ca282bc122791f61709afbd2445870426c4045
parent5d429dddc5ed442ae4699ab34c21b35bacef456b (diff)
downloadlibimobiledevice-868e336f8337e14e0288ac1d3c9fd89bee6d1961.tar.gz
libimobiledevice-868e336f8337e14e0288ac1d3c9fd89bee6d1961.tar.bz2
Fix possible memory corruption by ensuring client pointers NULL'd after free
-rw-r--r--src/idevice.c2
-rw-r--r--src/lockdown.c1
-rw-r--r--src/property_list_service.c3
-rw-r--r--src/service.c3
4 files changed, 9 insertions, 0 deletions
diff --git a/src/idevice.c b/src/idevice.c
index 3ed2e9f..428f359 100644
--- a/src/idevice.c
+++ b/src/idevice.c
@@ -267,6 +267,7 @@ idevice_error_t idevice_disconnect(idevice_connection_t connection)
idevice_error_t result = IDEVICE_E_UNKNOWN_ERROR;
if (connection->type == CONNECTION_USBMUXD) {
usbmuxd_disconnect((int)(long)connection->data);
+ connection->data = NULL;
result = IDEVICE_E_SUCCESS;
} else {
debug_info("Unknown connection type %d", connection->type);
@@ -276,6 +277,7 @@ idevice_error_t idevice_disconnect(idevice_connection_t connection)
free(connection->udid);
free(connection);
+ connection = NULL;
return result;
}
diff --git a/src/lockdown.c b/src/lockdown.c
index c2e3654..60fbf0c 100644
--- a/src/lockdown.c
+++ b/src/lockdown.c
@@ -241,6 +241,7 @@ static lockdownd_error_t lockdownd_client_free_simple(lockdownd_client_t client)
}
free(client);
+ client = NULL;
return ret;
}
diff --git a/src/property_list_service.c b/src/property_list_service.c
index b8d4b93..3f2e6c3 100644
--- a/src/property_list_service.c
+++ b/src/property_list_service.c
@@ -101,7 +101,10 @@ property_list_service_error_t property_list_service_client_free(property_list_se
return PROPERTY_LIST_SERVICE_E_INVALID_ARG;
property_list_service_error_t err = service_to_property_list_service_error(service_client_free(client->parent));
+
free(client);
+ client = NULL;
+
return err;
}
diff --git a/src/service.c b/src/service.c
index 5bc7aea..e8444b8 100644
--- a/src/service.c
+++ b/src/service.c
@@ -157,7 +157,10 @@ service_error_t service_client_free(service_client_t client)
return SERVICE_E_INVALID_ARG;
service_error_t err = idevice_to_service_error(idevice_disconnect(client->connection));
+
free(client);
+ client = NULL;
+
return err;
}