Reflect dm-verity status to update progress 45/246145/3
authorKichan Kwon <k_c.kwon@samsung.com>
Mon, 26 Oct 2020 01:56:56 +0000 (10:56 +0900)
committerKichan Kwon <k_c.kwon@samsung.com>
Mon, 26 Oct 2020 06:09:01 +0000 (15:09 +0900)
- With dm-verity : 20 ~ 80%
  - 80 ~ 100% is for hash remaking
- Without dm-verity : 20 ~ 100%

Change-Id: Icf9a65456eb40334f239f12ac407ddee22d7e6a9
Signed-off-by: Kichan Kwon <k_c.kwon@samsung.com>
src/ua.c
src/ua.h

index a8ae328..cc5a7d5 100755 (executable)
--- a/src/ua.c
+++ b/src/ua.c
@@ -45,6 +45,7 @@
 #define SYSTEM_LOG_DIR         "/opt/var/log"
 
 int ua_op_mode = UA_OP_MODE_FG;
+int dm_verity_status = DM_VERITY_DISABLED;
 
 static char fota_result[MAX_FILE_PATH];
 static char fota_cause[MAX_FILE_PATH];
@@ -155,7 +156,10 @@ void fota_gui_progress(void * pbUserData, unsigned long uPercent)
                percent = percent / 5;
        } else if ((ua_data->ua_operation == UI_OP_SCOUT_UPDATE)
                || (ua_data->ua_operation == UI_OP_UPDATE)) {
-               percent = 20 + percent * 4 / 5;
+               if (dm_verity_status == DM_VERITY_ENABLED)
+                       percent = 20 + percent * 3 / 5; /* 20 ~ 80 */
+               else
+                       percent = 20 + percent * 4 / 5; /* 20 ~ 100 */
        }
 
        if (ua_op_mode == UA_OP_MODE_FG)
@@ -951,6 +955,30 @@ int check_ua_op_mode(int argc, char **argv)
 }
 
 /*-----------------------------------------------------------------------------
+  check_dm_verity_status
+ ----------------------------------------------------------------------------*/
+int check_dm_verity_status(void)
+{
+       int ret = 0;
+
+       ret = access("/usr/bin/verityctl", F_OK);
+       if (ret == -1) {
+               if (errno == ENOENT) {
+                       LOG("dm-verity status : disabled\n");
+                       dm_verity_status = DM_VERITY_DISABLED;
+                       return 0;
+               } else {
+                       LOG("access failed with errno: %d\n", errno);
+                       return -errno;
+               }
+       }
+
+       LOG("dm-verity status : enabled\n");
+       dm_verity_status = DM_VERITY_ENABLED;
+       return 0;
+}
+
+/*-----------------------------------------------------------------------------
   remove_temp_files
  ----------------------------------------------------------------------------*/
 void remove_temp_files(void)
@@ -1203,6 +1231,12 @@ int main(int argc, char **argv)
        log_init();
        fota_cfg_str_load();
 
+       if (check_dm_verity_status() < 0) {
+               LOG("check_dm_verity_status fail\n");
+               ret = UPI_CONFIG_ERROR;
+               goto Results;
+       }
+
        /* Check fota folder path */
        if (check_existence(delta_folder) == 0) {
                ret = UPI_DELTA_PATH_ERROR;
index 288e15d..696e0ee 100755 (executable)
--- a/src/ua.h
+++ b/src/ua.h
@@ -80,6 +80,11 @@ enum {
        UA_OP_MODE_BG
 };
 
+enum {
+       DM_VERITY_DISABLED = 0,
+       DM_VERITY_ENABLED = 1
+};
+
 void log_deinit(void);
 
 #endif