summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Martin Szulecki2013-10-09 17:03:20 +0200
committerGravatar Martin Szulecki2013-10-09 17:03:20 +0200
commit708a866e103539384a3a789cee7a4d6753b4c277 (patch)
tree199586d1a07990459f9a53c6aeffb852f5d26f4a /src
parentcece6edafe89bf2fee7d6f63c55765400d97765d (diff)
downloadlibimobiledevice-708a866e103539384a3a789cee7a4d6753b4c277.tar.gz
libimobiledevice-708a866e103539384a3a789cee7a4d6753b4c277.tar.bz2
lockdown: Plug few possible memory leaks in generate_pair_record_plist()
Diffstat (limited to 'src')
-rw-r--r--src/lockdown.c22
1 files changed, 6 insertions, 16 deletions
diff --git a/src/lockdown.c b/src/lockdown.c
index a8f5307..c8341e4 100644
--- a/src/lockdown.c
+++ b/src/lockdown.c
@@ -836,8 +836,8 @@ static lockdownd_error_t generate_pair_record_plist(lockdownd_client_t client, p
836 836
837 char* host_id = NULL; 837 char* host_id = NULL;
838 char* system_buid = NULL; 838 char* system_buid = NULL;
839 key_data_t public_key = { NULL, 0 };
840 839
840 key_data_t public_key = { NULL, 0 };
841 key_data_t device_cert = { NULL, 0 }; 841 key_data_t device_cert = { NULL, 0 };
842 key_data_t host_cert = { NULL, 0 }; 842 key_data_t host_cert = { NULL, 0 };
843 key_data_t root_cert = { NULL, 0 }; 843 key_data_t root_cert = { NULL, 0 };
@@ -856,31 +856,18 @@ static lockdownd_error_t generate_pair_record_plist(lockdownd_client_t client, p
856 if (ret != LOCKDOWN_E_SUCCESS) { 856 if (ret != LOCKDOWN_E_SUCCESS) {
857 ret = lockdownd_get_device_public_key(client, &public_key); 857 ret = lockdownd_get_device_public_key(client, &public_key);
858 if (ret != LOCKDOWN_E_SUCCESS) { 858 if (ret != LOCKDOWN_E_SUCCESS) {
859 if (public_key.data)
860 free(public_key.data);
861 if (host_id)
862 free(host_id);
863 if (system_buid)
864 free(system_buid);
865 debug_info("device refused to send public key."); 859 debug_info("device refused to send public key.");
866 return ret; 860 goto leave;
867 } 861 }
868 debug_info("device public key follows:\n%.*s", public_key.size, public_key.data); 862 debug_info("device public key follows:\n%.*s", public_key.size, public_key.data);
869 863
870 userpref_device_record_set_value(client->udid, USERPREF_SYSTEM_BUID_KEY, plist_new_string(system_buid)); 864 userpref_device_record_set_value(client->udid, USERPREF_SYSTEM_BUID_KEY, plist_new_string(system_buid));
871 865
872 ret = lockdownd_gen_pair_cert_for_udid(client->udid, public_key, &device_cert, &host_cert, &root_cert); 866 ret = lockdownd_gen_pair_cert_for_udid(client->udid, public_key, &device_cert, &host_cert, &root_cert);
873
874 if (public_key.data)
875 free(public_key.data);
876 } 867 }
877 868
878 if (ret != LOCKDOWN_E_SUCCESS) { 869 if (ret != LOCKDOWN_E_SUCCESS) {
879 if (host_id) 870 goto leave;
880 free(host_id);
881 if (system_buid)
882 free(system_buid);
883 return ret;
884 } 871 }
885 872
886 /* setup request plist */ 873 /* setup request plist */
@@ -891,10 +878,13 @@ static lockdownd_error_t generate_pair_record_plist(lockdownd_client_t client, p
891 plist_dict_insert_item(*pair_record_plist, "RootCertificate", plist_new_data((const char*)root_cert.data, root_cert.size)); 878 plist_dict_insert_item(*pair_record_plist, "RootCertificate", plist_new_data((const char*)root_cert.data, root_cert.size));
892 plist_dict_insert_item(*pair_record_plist, "SystemBUID", plist_new_string(system_buid)); 879 plist_dict_insert_item(*pair_record_plist, "SystemBUID", plist_new_string(system_buid));
893 880
881leave:
894 if (host_id) 882 if (host_id)
895 free(host_id); 883 free(host_id);
896 if (system_buid) 884 if (system_buid)
897 free(system_buid); 885 free(system_buid);
886 if (public_key.data)
887 free(public_key.data);
898 if (device_cert.data) 888 if (device_cert.data)
899 free(device_cert.data); 889 free(device_cert.data);
900 if (host_cert.data) 890 if (host_cert.data)