From d6daef0e80f18d2ea9c82397662964ec2d39fcfa Mon Sep 17 00:00:00 2001 From: Antoni Adaszkiewicz Date: Mon, 10 Oct 2022 20:17:59 +0200 Subject: [PATCH] upgrade-apply-deltafs: Fix delta folder bug - if the given path to delta archive wasn't absolute, in some instances it would cause this program to create an additional directory in currently upgraded partition (with the same name as the directory the delta was in) Change-Id: I8648504fa533f1f121f85af31aa40f2f75bf6cb6 --- src/upgrade-apply-deltafs/ua.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/upgrade-apply-deltafs/ua.c b/src/upgrade-apply-deltafs/ua.c index 44f0114..218f3a4 100755 --- a/src/upgrade-apply-deltafs/ua.c +++ b/src/upgrade-apply-deltafs/ua.c @@ -650,16 +650,16 @@ int check_dm_verity_status(void) ----------------------------------------------------------------------------*/ int set_delta_folder(void) { - char *pos = strrchr(delta_path, '/'); + char *pos = strrchr(s_update_data.ua_delta_path, '/'); if (pos == NULL) { snprintf(delta_folder, MAX_FOLDER_PATH, "."); // if no "/" in delta path, assume current directory as delta folder return 0; } - if ((pos - delta_path + 1) == strlen(delta_path)) { + if ((pos - s_update_data.ua_delta_path + 1) == strlen(s_update_data.ua_delta_path)) { print_usage("Invalid delta path"); return -1; } - if (snprintf(delta_folder, (pos - delta_path) + 1, "%s", delta_path) < 0) { + if (snprintf(delta_folder, (pos - s_update_data.ua_delta_path) + 1, "%s", s_update_data.ua_delta_path) < 0) { LOGE("unexpected snprintf() error\n"); } return 0; @@ -774,12 +774,17 @@ int main(int argc, char **argv) #endif snprintf(delta_path, sizeof(delta_folder)-1, "%s", my_opt.archive); + s_update_data.ua_delta_path = realpath(delta_path, NULL); + if (s_update_data.ua_delta_path == NULL) { + LOG("provided delta path does not exist!\n"); + ret = UPI_INVALID_PARAM_ERROR; + goto Results; + } if (set_delta_folder() < 0) { ret = UPI_INVALID_PARAM_ERROR; goto Results; } s_update_data.ua_delta_folder = strdup(delta_folder); - s_update_data.ua_delta_path = strdup(delta_path); snprintf(mnt_point, sizeof(mnt_point)-1, "%s", my_opt.dest); snprintf(fota_result, sizeof(fota_result), "%s/%s", result_folder, "result"); @@ -832,6 +837,12 @@ int main(int argc, char **argv) save_result(ret); if (ret != SUCCESS) print_error_code(ret); + + if (s_update_data.ua_delta_path) + free(s_update_data.ua_delta_path); + if (s_part_info.ua_parti_name) + free(s_part_info.ua_parti_name); + switch (ret) { /* Before initialize fota path */ case UPI_INVALID_PARAM_ERROR: @@ -863,9 +874,6 @@ int main(int argc, char **argv) LOG("!!! Not expected ret (= %d)\n", ret); } - if(s_part_info.ua_parti_name) free(s_part_info.ua_parti_name); - if(s_part_info.ua_subject_name) free(s_part_info.ua_subject_name); - _exit_stdio(); return -1; -} \ No newline at end of file +} -- 2.34.1