diff options
| author | 2013-10-09 17:03:20 +0200 | |
|---|---|---|
| committer | 2013-10-09 17:03:20 +0200 | |
| commit | 708a866e103539384a3a789cee7a4d6753b4c277 (patch) | |
| tree | 199586d1a07990459f9a53c6aeffb852f5d26f4a /src/lockdown.c | |
| parent | cece6edafe89bf2fee7d6f63c55765400d97765d (diff) | |
| download | libimobiledevice-708a866e103539384a3a789cee7a4d6753b4c277.tar.gz libimobiledevice-708a866e103539384a3a789cee7a4d6753b4c277.tar.bz2 | |
lockdown: Plug few possible memory leaks in generate_pair_record_plist()
Diffstat (limited to 'src/lockdown.c')
| -rw-r--r-- | src/lockdown.c | 22 |
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 | ||
| 881 | leave: | ||
| 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) |
