summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2014-03-24 02:30:05 +0100
committerGravatar Nikias Bassen2014-03-24 02:30:05 +0100
commit79e45062502eec95526b50135d2bce95523c1794 (patch)
treeca80d0cba5955b1751128756e0078dca97b7946f
parenta3bc066c5a40141e548e9ab08f0602b6b3cc5d8f (diff)
downloadlibimobiledevice-79e45062502eec95526b50135d2bce95523c1794.tar.gz
libimobiledevice-79e45062502eec95526b50135d2bce95523c1794.tar.bz2
lockdown: Prevent libplist assertion by checking result of userpref_read_pair_record()
-rw-r--r--src/lockdown.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/lockdown.c b/src/lockdown.c
index 9b91dff..99bcbb5 100644
--- a/src/lockdown.c
+++ b/src/lockdown.c
@@ -752,8 +752,9 @@ lockdownd_error_t lockdownd_client_new_with_handshake(idevice_t device, lockdown
752 752
753 plist_t pair_record = NULL; 753 plist_t pair_record = NULL;
754 userpref_read_pair_record(client_loc->udid, &pair_record); 754 userpref_read_pair_record(client_loc->udid, &pair_record);
755 755 if (pair_record) {
756 pair_record_get_host_id(pair_record, &host_id); 756 pair_record_get_host_id(pair_record, &host_id);
757 }
757 if (LOCKDOWN_E_SUCCESS == ret && !host_id) { 758 if (LOCKDOWN_E_SUCCESS == ret && !host_id) {
758 ret = LOCKDOWN_E_INVALID_CONF; 759 ret = LOCKDOWN_E_INVALID_CONF;
759 } 760 }
@@ -783,8 +784,10 @@ lockdownd_error_t lockdownd_client_new_with_handshake(idevice_t device, lockdown
783 if (LOCKDOWN_E_SUCCESS == ret) { 784 if (LOCKDOWN_E_SUCCESS == ret) {
784 if (!host_id) { 785 if (!host_id) {
785 userpref_read_pair_record(client_loc->udid, &pair_record); 786 userpref_read_pair_record(client_loc->udid, &pair_record);
786 pair_record_get_host_id(pair_record, &host_id); 787 if (pair_record) {
787 plist_free(pair_record); 788 pair_record_get_host_id(pair_record, &host_id);
789 plist_free(pair_record);
790 }
788 } 791 }
789 792
790 ret = lockdownd_start_session(client_loc, host_id, NULL, NULL); 793 ret = lockdownd_start_session(client_loc, host_id, NULL, NULL);
@@ -950,6 +953,9 @@ static lockdownd_error_t lockdownd_do_pair(lockdownd_client_t client, lockdownd_
950 /* use existing pair record */ 953 /* use existing pair record */
951 if (userpref_has_pair_record(client->udid)) { 954 if (userpref_has_pair_record(client->udid)) {
952 userpref_read_pair_record(client->udid, &pair_record_plist); 955 userpref_read_pair_record(client->udid, &pair_record_plist);
956 if (!pair_record_plist) {
957 return LOCKDOWN_E_INVALID_CONF;
958 }
953 } else { 959 } else {
954 return LOCKDOWN_E_INVALID_HOST_ID; 960 return LOCKDOWN_E_INVALID_HOST_ID;
955 } 961 }