From 96af331048a2ce9950478793ce77eb7699268906 Mon Sep 17 00:00:00 2001 From: wangjiadong Date: Mon, 25 Nov 2024 14:28:11 +0800 Subject: [PATCH 01/41] Signed-off-by: wangjiadong add dadian --- services/package/pkg_verify/pkg_verify_util.cpp | 3 +++ services/updater.cpp | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/services/package/pkg_verify/pkg_verify_util.cpp b/services/package/pkg_verify/pkg_verify_util.cpp index 7e28cfd8..0af68631 100644 --- a/services/package/pkg_verify/pkg_verify_util.cpp +++ b/services/package/pkg_verify/pkg_verify_util.cpp @@ -125,6 +125,9 @@ int32_t PkgVerifyUtil::VerifyPackageSign(const PkgStreamPtr pkgStream, const std srcDataLen = pkgStream->GetFileLength() - signatureSize - ZIP_EOCD_FIXED_PART_LEN; ret = HashCheck(pkgStream, srcDataLen, hash, path); } + if (ret == PKG_SUCCESS) { + UPDATER_LAST_WORD("hash check success"); + } PKG_LOGI("verify package signature %s", ret == PKG_SUCCESS ? "successfull" : "failed"); return ret; } diff --git a/services/updater.cpp b/services/updater.cpp index 3644eace..20aa3aba 100644 --- a/services/updater.cpp +++ b/services/updater.cpp @@ -294,10 +294,12 @@ UpdaterStatus DoInstallUpdaterPackage(PkgManager::PkgManagerPtr pkgManager, Upda int ret = GetUpdatePackageInfo(pkgManager, upParams.updatePackage[upParams.pkgLocation]); if (ret != 0) { LOG(ERROR) << "get update package info fail"; + UPDATER_LAST_WORD(UPDATE_CORRUPT, "GetUpdatePackageInfo failed"); return UPDATE_CORRUPT; } if (!PreStartBinaryEntry(upParams.updatePackage[upParams.pkgLocation])) { LOG(ERROR) << "pre binary process failed"; + UPDATER_LAST_WORD(UPDATE_ERROR, "PreStartBinaryEntry failed"); return UPDATE_ERROR; } @@ -305,6 +307,7 @@ UpdaterStatus DoInstallUpdaterPackage(PkgManager::PkgManagerPtr pkgManager, Upda UpdaterStatus updateRet = StartUpdaterProc(pkgManager, upParams); if (updateRet != UPDATE_SUCCESS) { UPDATER_UI_INSTANCE.ShowUpdInfo(TR(UPD_INSTALL_FAIL)); + UPDATER_LAST_WORD(updateRet, "StartUpdaterProc failed"); LOG(ERROR) << "Install package failed."; } if (WriteResult(upParams.updatePackage[upParams.pkgLocation], @@ -467,7 +470,7 @@ UpdaterStatus StartUpdaterProc(PkgManager::PkgManagerPtr pkgManager, UpdaterPara int pfd[DEFAULT_PIPE_NUM]; /* communication between parent and child */ if (pipe(pfd) < 0) { LOG(ERROR) << "Create pipe failed: "; - UPDATER_LAST_WORD(UPDATE_ERROR); + UPDATER_LAST_WORD(UPDATE_ERROR, "Create pipe failed"); return UPDATE_ERROR; } if (pkgManager == nullptr) { @@ -501,7 +504,7 @@ UpdaterStatus StartUpdaterProc(PkgManager::PkgManagerPtr pkgManager, UpdaterPara pid_t pid = fork(); if (pid < 0) { ERROR_CODE(CODE_FORK_FAIL); - UPDATER_LAST_WORD(UPDATE_ERROR); + UPDATER_LAST_WORD(UPDATE_ERROR, "fork failed"); return UPDATE_ERROR; } @@ -516,6 +519,7 @@ UpdaterStatus StartUpdaterProc(PkgManager::PkgManagerPtr pkgManager, UpdaterPara close(pipeWrite); // close write endpoint bool retryUpdate = false; if (HandlePipeMsg(upParams, pipeRead, retryUpdate) != UPDATE_SUCCESS) { + UPDATER_LAST_WORD(UPDATE_ERROR, "HandlePipeMsg failed"); return UPDATE_ERROR; } -- Gitee From db7ac43ebc4a97b544617ece297d68942d3434ca Mon Sep 17 00:00:00 2001 From: wangjiadong Date: Tue, 26 Nov 2024 11:56:13 +0800 Subject: [PATCH 02/41] Signed-off-by: wangjiadong fix --- .../package/pkg_verify/pkg_verify_util.cpp | 2 +- services/updater.cpp | 38 +++++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/services/package/pkg_verify/pkg_verify_util.cpp b/services/package/pkg_verify/pkg_verify_util.cpp index 0af68631..adaf844e 100644 --- a/services/package/pkg_verify/pkg_verify_util.cpp +++ b/services/package/pkg_verify/pkg_verify_util.cpp @@ -120,7 +120,7 @@ int32_t PkgVerifyUtil::VerifyPackageSign(const PkgStreamPtr pkgStream, const std } size_t srcDataLen = pkgStream->GetFileLength() - commentTotalLenAll - 2; - ret = HashCheck(pkgStream, srcDataLen, hash, path); + ret = HashCheck(pkgStream, srcDataLen, hash, path); if (ret != PKG_SUCCESS) { srcDataLen = pkgStream->GetFileLength() - signatureSize - ZIP_EOCD_FIXED_PART_LEN; ret = HashCheck(pkgStream, srcDataLen, hash, path); diff --git a/services/updater.cpp b/services/updater.cpp index 20aa3aba..11803cc1 100644 --- a/services/updater.cpp +++ b/services/updater.cpp @@ -464,23 +464,8 @@ UpdaterStatus CheckProcStatus(pid_t pid, bool retryUpdate) return UPDATE_SUCCESS; } -UpdaterStatus StartUpdaterProc(PkgManager::PkgManagerPtr pkgManager, UpdaterParams &upParams) +static std::string GetBinaryPath(PkgManager::PkgManagerPtr pkgManager, UpdaterParams &upParams) { - UPDATER_INIT_RECORD; - int pfd[DEFAULT_PIPE_NUM]; /* communication between parent and child */ - if (pipe(pfd) < 0) { - LOG(ERROR) << "Create pipe failed: "; - UPDATER_LAST_WORD(UPDATE_ERROR, "Create pipe failed"); - return UPDATE_ERROR; - } - if (pkgManager == nullptr) { - LOG(ERROR) << "pkgManager is nullptr"; - UPDATER_LAST_WORD(UPDATE_CORRUPT); - return UPDATE_CORRUPT; - } - - int pipeRead = pfd[0]; - int pipeWrite = pfd[1]; std::string fullPath = GetWorkPath() + std::string(UPDATER_BINARY); (void)Utils::DeleteFile(fullPath); @@ -500,6 +485,27 @@ UpdaterStatus StartUpdaterProc(PkgManager::PkgManagerPtr pkgManager, UpdaterPara #ifdef WITH_SELINUX Restorecon(fullPath.c_str()); #endif // WITH_SELINUX + return fullPath; +} + +UpdaterStatus StartUpdaterProc(PkgManager::PkgManagerPtr pkgManager, UpdaterParams &upParams) +{ + UPDATER_INIT_RECORD; + int pfd[DEFAULT_PIPE_NUM]; /* communication between parent and child */ + if (pipe(pfd) < 0) { + LOG(ERROR) << "Create pipe failed: "; + UPDATER_LAST_WORD(UPDATE_ERROR, "Create pipe failed"); + return UPDATE_ERROR; + } + if (pkgManager == nullptr) { + LOG(ERROR) << "pkgManager is nullptr"; + UPDATER_LAST_WORD(UPDATE_CORRUPT); + return UPDATE_CORRUPT; + } + + int pipeRead = pfd[0]; + int pipeWrite = pfd[1]; + std::string fullPath = GetBinaryPath(pkgManager, upParams); pid_t pid = fork(); if (pid < 0) { -- Gitee From 00da026457c1d0adb1dd5aa2c8480c3664aeb753 Mon Sep 17 00:00:00 2001 From: wangjiadong Date: Tue, 26 Nov 2024 12:21:55 +0800 Subject: [PATCH 03/41] Signed-off-by: wangjiadong fix --- services/updater.cpp | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/services/updater.cpp b/services/updater.cpp index 11803cc1..ce59f33f 100644 --- a/services/updater.cpp +++ b/services/updater.cpp @@ -421,6 +421,7 @@ UpdaterStatus HandlePipeMsg(UpdaterParams &upParams, int pipeRead, bool &retryUp FILE* fromChild = fdopen(pipeRead, "r"); if (fromChild == nullptr) { LOG(ERROR) << "fdopen pipeRead failed"; + UPDATER_LAST_WORD(UPDATE_ERROR); return UPDATE_ERROR; } while (fgets(buffer, MAX_BUFFER_SIZE - 1, fromChild) != nullptr) { @@ -464,8 +465,23 @@ UpdaterStatus CheckProcStatus(pid_t pid, bool retryUpdate) return UPDATE_SUCCESS; } -static std::string GetBinaryPath(PkgManager::PkgManagerPtr pkgManager, UpdaterParams &upParams) +UpdaterStatus StartUpdaterProc(PkgManager::PkgManagerPtr pkgManager, UpdaterParams &upParams) { + UPDATER_INIT_RECORD; + int pfd[DEFAULT_PIPE_NUM]; /* communication between parent and child */ + if (pipe(pfd) < 0) { + LOG(ERROR) << "Create pipe failed: "; + UPDATER_LAST_WORD(UPDATE_ERROR); + return UPDATE_ERROR; + } + if (pkgManager == nullptr) { + LOG(ERROR) << "pkgManager is nullptr"; + UPDATER_LAST_WORD(UPDATE_CORRUPT); + return UPDATE_CORRUPT; + } + + int pipeRead = pfd[0]; + int pipeWrite = pfd[1]; std::string fullPath = GetWorkPath() + std::string(UPDATER_BINARY); (void)Utils::DeleteFile(fullPath); @@ -485,27 +501,6 @@ static std::string GetBinaryPath(PkgManager::PkgManagerPtr pkgManager, UpdaterPa #ifdef WITH_SELINUX Restorecon(fullPath.c_str()); #endif // WITH_SELINUX - return fullPath; -} - -UpdaterStatus StartUpdaterProc(PkgManager::PkgManagerPtr pkgManager, UpdaterParams &upParams) -{ - UPDATER_INIT_RECORD; - int pfd[DEFAULT_PIPE_NUM]; /* communication between parent and child */ - if (pipe(pfd) < 0) { - LOG(ERROR) << "Create pipe failed: "; - UPDATER_LAST_WORD(UPDATE_ERROR, "Create pipe failed"); - return UPDATE_ERROR; - } - if (pkgManager == nullptr) { - LOG(ERROR) << "pkgManager is nullptr"; - UPDATER_LAST_WORD(UPDATE_CORRUPT); - return UPDATE_CORRUPT; - } - - int pipeRead = pfd[0]; - int pipeWrite = pfd[1]; - std::string fullPath = GetBinaryPath(pkgManager, upParams); pid_t pid = fork(); if (pid < 0) { @@ -525,7 +520,6 @@ UpdaterStatus StartUpdaterProc(PkgManager::PkgManagerPtr pkgManager, UpdaterPara close(pipeWrite); // close write endpoint bool retryUpdate = false; if (HandlePipeMsg(upParams, pipeRead, retryUpdate) != UPDATE_SUCCESS) { - UPDATER_LAST_WORD(UPDATE_ERROR, "HandlePipeMsg failed"); return UPDATE_ERROR; } -- Gitee From 0e4b7ca562cfb14895d9232c7c2684bc80918a26 Mon Sep 17 00:00:00 2001 From: wangjiadong Date: Tue, 26 Nov 2024 15:07:26 +0800 Subject: [PATCH 04/41] Signed-off-by: wangjiadong fix --- services/package/pkg_verify/pkg_verify_util.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/services/package/pkg_verify/pkg_verify_util.cpp b/services/package/pkg_verify/pkg_verify_util.cpp index adaf844e..53fe2215 100644 --- a/services/package/pkg_verify/pkg_verify_util.cpp +++ b/services/package/pkg_verify/pkg_verify_util.cpp @@ -125,9 +125,6 @@ int32_t PkgVerifyUtil::VerifyPackageSign(const PkgStreamPtr pkgStream, const std srcDataLen = pkgStream->GetFileLength() - signatureSize - ZIP_EOCD_FIXED_PART_LEN; ret = HashCheck(pkgStream, srcDataLen, hash, path); } - if (ret == PKG_SUCCESS) { - UPDATER_LAST_WORD("hash check success"); - } PKG_LOGI("verify package signature %s", ret == PKG_SUCCESS ? "successfull" : "failed"); return ret; } @@ -228,6 +225,7 @@ int32_t PkgVerifyUtil::HashCheck(const PkgStreamPtr srcData, const size_t dataLe ConvertShaHex(sourceDigest).substr(0, INTERCEPT_HASH_LENGTH), fileInfo); return PKG_INVALID_DIGEST; } + UPDATER_LAST_WORD("hash check success"); return PKG_SUCCESS; } -- Gitee From 98cd9267cc0c25fb4c547ff80cd962b756bf57b1 Mon Sep 17 00:00:00 2001 From: jiangdi Date: Tue, 26 Nov 2024 12:38:22 +0000 Subject: [PATCH 05/41] =?UTF-8?q?=E7=89=B9=E6=AE=8A=E5=9C=BA=E6=99=AF?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E5=A4=B1=E8=B4=A5=EF=BC=8C=E4=B8=8D=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E8=87=AA=E5=8A=A8=E9=87=8D=E5=90=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jiangdi --- services/hwfault_retry/hwfault_retry.cpp | 9 +++++++++ services/include/updater/hwfault_retry.h | 2 ++ test/unittest/updater_test/hwfault_retry_unittest.cpp | 10 ++++++++++ 3 files changed, 21 insertions(+) diff --git a/services/hwfault_retry/hwfault_retry.cpp b/services/hwfault_retry/hwfault_retry.cpp index 433af9c5..ada395b7 100644 --- a/services/hwfault_retry/hwfault_retry.cpp +++ b/services/hwfault_retry/hwfault_retry.cpp @@ -66,8 +66,17 @@ void HwFaultRetry::SetRetryCount(const uint32_t count) retryCount_ = count; } +void HwFaultRetry::SetEffectiveValue(bool value) +{ + effective_ = value; +} + void HwFaultRetry::RebootRetry() { + if (!effective_) { + LOG(WARNING) << "Special scenarios do not take effect, not need retry."; + return; + } if (retryCount_ >= MAX_RETRY_COUNT) { LOG(INFO) << "retry more than 3 times, no need retry"; return; diff --git a/services/include/updater/hwfault_retry.h b/services/include/updater/hwfault_retry.h index 2927b6a5..b0711dda 100644 --- a/services/include/updater/hwfault_retry.h +++ b/services/include/updater/hwfault_retry.h @@ -33,6 +33,7 @@ public: void RegisterFunc(const std::string &faultInfo, RetryFunc func); void SetFaultInfo(const std::string &faultInfo); void SetRetryCount(const uint32_t count); + void SetEffectiveValue(bool value); private: void RebootRetry(); @@ -40,6 +41,7 @@ private: std::unordered_map retryMap_; std::string faultInfo_; uint32_t retryCount_ {}; + bool effective_ = true; }; } // Updater #endif // UPDATER_HWFAULT_RETRY_H diff --git a/test/unittest/updater_test/hwfault_retry_unittest.cpp b/test/unittest/updater_test/hwfault_retry_unittest.cpp index aca888c0..b65e82df 100644 --- a/test/unittest/updater_test/hwfault_retry_unittest.cpp +++ b/test/unittest/updater_test/hwfault_retry_unittest.cpp @@ -76,4 +76,14 @@ HWTEST_F(HwfaultRetryUnitTest, RetryMoreThanMax, TestSize.Level1) bool ret = Utils::CheckFaultInfo(IO_FAILED_REBOOT); EXPECT_EQ(ret, false); } + +HWTEST_F(HwfaultRetryUnitTest, SetEffectiveValueTest, TestSize.Level1) +{ + HwFaultRetry::GetInstance().SetEffectiveValue(false); + HwFaultRetry::GetInstance().SetFaultInfo(VERIFY_FAILED_REBOOT); + HwFaultRetry::GetInstance().SetRetryCount(0); + HwFaultRetry::GetInstance().DoRetryAction(); + + EXPECT_FALSE(Utils::CheckFaultInfo(VERIFY_FAILED_REBOOT)); +} } \ No newline at end of file -- Gitee From ef4c076a1423aae91bb8c3d32e178642f9121374 Mon Sep 17 00:00:00 2001 From: wangjiadong Date: Tue, 26 Nov 2024 20:50:55 +0800 Subject: [PATCH 06/41] Signed-off-by: wangjiadong fix --- services/include/log/dump.h | 11 +++++++++++ services/package/pkg_verify/pkg_verify_util.cpp | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/services/include/log/dump.h b/services/include/log/dump.h index cc200e5f..a8431915 100644 --- a/services/include/log/dump.h +++ b/services/include/log/dump.h @@ -29,11 +29,13 @@ #define UPDATER_LAST_WORD Updater::Dump::GetInstance().DumpInfo #define UPDATER_INIT_RECORD DumpStageHelper stageHelper(__FUNCTION__) +#define UPDATER_CLEAR_RECORD Updater::Dump::GetInstance().ClearDump namespace Updater { class DumpHelper { public: virtual void RecordDump(const std::string &str) = 0; + virtual void ClearDump(void) = 0; virtual ~DumpHelper() {} }; @@ -43,6 +45,7 @@ public: { LOG(ERROR) << str; } + void ClearDump(void) override {} ~DumpHelperLog() override {} }; @@ -68,6 +71,14 @@ public: } } } + void ClearDump(void) + { + for (const auto &[key, value] : helpers_) { + if (value != nullptr) { + value->ClearDump(str); + } + } + } private: Dump() {} diff --git a/services/package/pkg_verify/pkg_verify_util.cpp b/services/package/pkg_verify/pkg_verify_util.cpp index 53fe2215..2ed92503 100644 --- a/services/package/pkg_verify/pkg_verify_util.cpp +++ b/services/package/pkg_verify/pkg_verify_util.cpp @@ -125,6 +125,7 @@ int32_t PkgVerifyUtil::VerifyPackageSign(const PkgStreamPtr pkgStream, const std srcDataLen = pkgStream->GetFileLength() - signatureSize - ZIP_EOCD_FIXED_PART_LEN; ret = HashCheck(pkgStream, srcDataLen, hash, path); } + UPDATER_CLEAR_RECORD(); PKG_LOGI("verify package signature %s", ret == PKG_SUCCESS ? "successfull" : "failed"); return ret; } @@ -225,7 +226,6 @@ int32_t PkgVerifyUtil::HashCheck(const PkgStreamPtr srcData, const size_t dataLe ConvertShaHex(sourceDigest).substr(0, INTERCEPT_HASH_LENGTH), fileInfo); return PKG_INVALID_DIGEST; } - UPDATER_LAST_WORD("hash check success"); return PKG_SUCCESS; } -- Gitee From 6529b6d79ca3b94f87c29d69ee24c177ab4d23c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=BD=B3=E6=A0=8B?= Date: Tue, 26 Nov 2024 13:30:22 +0000 Subject: [PATCH 07/41] update services/include/log/dump.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 王佳栋 --- services/include/log/dump.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/include/log/dump.h b/services/include/log/dump.h index a8431915..3843e0b5 100644 --- a/services/include/log/dump.h +++ b/services/include/log/dump.h @@ -75,7 +75,7 @@ public: { for (const auto &[key, value] : helpers_) { if (value != nullptr) { - value->ClearDump(str); + value->ClearDump(); } } } -- Gitee From 1915469adccbb559a2ab62fd920d2cc523ff6c41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=BD=B3=E6=A0=8B?= Date: Tue, 26 Nov 2024 14:31:48 +0000 Subject: [PATCH 08/41] update services/include/log/dump.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 王佳栋 --- services/include/log/dump.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/include/log/dump.h b/services/include/log/dump.h index 3843e0b5..67bb2570 100644 --- a/services/include/log/dump.h +++ b/services/include/log/dump.h @@ -29,7 +29,7 @@ #define UPDATER_LAST_WORD Updater::Dump::GetInstance().DumpInfo #define UPDATER_INIT_RECORD DumpStageHelper stageHelper(__FUNCTION__) -#define UPDATER_CLEAR_RECORD Updater::Dump::GetInstance().ClearDump +#define UPDATER_CLEAR_RECORD Updater::Dump::GetInstance().ClearDump() namespace Updater { class DumpHelper { -- Gitee From b11f437323fc831a4d67b5b0427dc1fe122d8186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=BD=B3=E6=A0=8B?= Date: Tue, 26 Nov 2024 14:32:39 +0000 Subject: [PATCH 09/41] update services/package/pkg_verify/pkg_verify_util.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 王佳栋 --- services/package/pkg_verify/pkg_verify_util.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/package/pkg_verify/pkg_verify_util.cpp b/services/package/pkg_verify/pkg_verify_util.cpp index 2ed92503..78fe97c1 100644 --- a/services/package/pkg_verify/pkg_verify_util.cpp +++ b/services/package/pkg_verify/pkg_verify_util.cpp @@ -125,7 +125,7 @@ int32_t PkgVerifyUtil::VerifyPackageSign(const PkgStreamPtr pkgStream, const std srcDataLen = pkgStream->GetFileLength() - signatureSize - ZIP_EOCD_FIXED_PART_LEN; ret = HashCheck(pkgStream, srcDataLen, hash, path); } - UPDATER_CLEAR_RECORD(); + UPDATER_CLEAR_RECORD; PKG_LOGI("verify package signature %s", ret == PKG_SUCCESS ? "successfull" : "failed"); return ret; } -- Gitee From fc28801f9d5ef48bb0e10df1cfee7bfe22e8272b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=BD=B3=E6=A0=8B?= Date: Wed, 27 Nov 2024 07:03:50 +0000 Subject: [PATCH 10/41] update services/package/pkg_verify/pkg_verify_util.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 王佳栋 --- services/package/pkg_verify/pkg_verify_util.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/package/pkg_verify/pkg_verify_util.cpp b/services/package/pkg_verify/pkg_verify_util.cpp index 78fe97c1..596c7bc4 100644 --- a/services/package/pkg_verify/pkg_verify_util.cpp +++ b/services/package/pkg_verify/pkg_verify_util.cpp @@ -125,7 +125,9 @@ int32_t PkgVerifyUtil::VerifyPackageSign(const PkgStreamPtr pkgStream, const std srcDataLen = pkgStream->GetFileLength() - signatureSize - ZIP_EOCD_FIXED_PART_LEN; ret = HashCheck(pkgStream, srcDataLen, hash, path); } - UPDATER_CLEAR_RECORD; + if (ret == PKG_SUCCESS) { + UPDATER_CLEAR_RECORD; + } PKG_LOGI("verify package signature %s", ret == PKG_SUCCESS ? "successfull" : "failed"); return ret; } -- Gitee From 379ca81ff98d3f039dd3cf504d75709f06e93548 Mon Sep 17 00:00:00 2001 From: lizhao Date: Wed, 27 Nov 2024 17:04:36 +0800 Subject: [PATCH 11/41] retry when block update fail Signed-off-by: lizhao --- services/applypatch/transfer_manager.cpp | 10 +++++++++- services/hwfault_retry/hwfault_retry.cpp | 1 + services/include/updater/updater_const.h | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/services/applypatch/transfer_manager.cpp b/services/applypatch/transfer_manager.cpp index 3810cca3..1f0ad87b 100644 --- a/services/applypatch/transfer_manager.cpp +++ b/services/applypatch/transfer_manager.cpp @@ -42,6 +42,9 @@ bool TransferManager::CommandsExecute(int fd, Command &cmd) return false; } CommandResult ret = cf->Execute(cmd); + if (!params.GetTransferParams()->canWrite) { + return ret == SUCCESS; + } if (!CheckResult(ret, cmd.GetCommandLine(), cmd.GetCommandType())) { return false; } @@ -188,12 +191,17 @@ bool TransferManager::CheckResult(const CommandResult result, const std::string } break; case NEED_RETRY: - LOG(INFO) << "Running command need retry!"; + LOG(INFO) << "IO failed. Running command need retry!"; if (transferParams_->env != nullptr) { transferParams_->env->PostMessage("retry_update", IO_FAILED_REBOOT); } return false; case FAILED: + LOG(INFO) << "Block update failed. Running command need retry!"; + if (transferParams_->env != nullptr) { + transferParams_->env->PostMessage("retry_update", BLOCK_UPDATE_FAILED_REBOOT); + } + return false; default: LOG(ERROR) << "Running command failed"; return false; diff --git a/services/hwfault_retry/hwfault_retry.cpp b/services/hwfault_retry/hwfault_retry.cpp index ada395b7..2b67adbc 100644 --- a/services/hwfault_retry/hwfault_retry.cpp +++ b/services/hwfault_retry/hwfault_retry.cpp @@ -37,6 +37,7 @@ HwFaultRetry::HwFaultRetry() }; RegisterFunc(VERIFY_FAILED_REBOOT, rebootFunc); RegisterFunc(IO_FAILED_REBOOT, rebootFunc); + RegisterFunc(BLOCK_UPDATE_FAILED_REBOOT, rebootFunc); } void HwFaultRetry::RegisterFunc(const std::string &faultInfo, RetryFunc func) diff --git a/services/include/updater/updater_const.h b/services/include/updater/updater_const.h index ad6a29e7..2496e4bc 100644 --- a/services/include/updater/updater_const.h +++ b/services/include/updater/updater_const.h @@ -82,6 +82,7 @@ constexpr const char *MMC_SIZE_FILE = "/data/class/block/mmcblk0/size"; constexpr const char *UPDATER_RETRY_TAG = "retry_update"; constexpr const char *VERIFY_FAILED_REBOOT = "reboot_verify_failed"; constexpr const char *IO_FAILED_REBOOT = "reboot_IO_failed"; +constexpr const char *BLOCK_UPDATE_FAILED_REBOOT = "reboot_block_update_failed"; constexpr int MAX_RETRY_COUNT = 3; constexpr int MINIMAL_ARGC_LIMIT = 2; -- Gitee From 557c553d0cec13364d18229b2d378a05fe3b5540 Mon Sep 17 00:00:00 2001 From: lizhao Date: Wed, 27 Nov 2024 18:43:10 +0800 Subject: [PATCH 12/41] fix Signed-off-by: lizhao --- services/applypatch/transfer_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/applypatch/transfer_manager.cpp b/services/applypatch/transfer_manager.cpp index 1f0ad87b..3b4ed3cc 100644 --- a/services/applypatch/transfer_manager.cpp +++ b/services/applypatch/transfer_manager.cpp @@ -42,7 +42,7 @@ bool TransferManager::CommandsExecute(int fd, Command &cmd) return false; } CommandResult ret = cf->Execute(cmd); - if (!params.GetTransferParams()->canWrite) { + if (!cmd.GetTransferParams()->canWrite) { return ret == SUCCESS; } if (!CheckResult(ret, cmd.GetCommandLine(), cmd.GetCommandType())) { -- Gitee From c22dff8da0983fe167f798523149d9d16aa32fba Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 28 Nov 2024 19:55:56 +0800 Subject: [PATCH 13/41] codex Signed-off-by: unknown --- services/script/script_interpreter/script_interpreter.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/script/script_interpreter/script_interpreter.cpp b/services/script/script_interpreter/script_interpreter.cpp index 5eb73309..edb3a2e3 100644 --- a/services/script/script_interpreter/script_interpreter.cpp +++ b/services/script/script_interpreter/script_interpreter.cpp @@ -42,6 +42,8 @@ int32_t ScriptInterpreter::ExecuteScript(ScriptManagerImpl *manager, Hpackage::P } int32_t ret = inter->LoadScript(pkgStream); if (ret != USCRIPT_SUCCESS) { + delete inter; + inter = nullptr; USCRIPT_LOGE("Fail to loadScript script %s", pkgStream->GetFileName().c_str()); UPDATER_LAST_WORD(USCRIPT_ERROR_CREATE_OBJ); return ret; -- Gitee From 6b2147db15ef04490cbb31e43a4a199a6853da36 Mon Sep 17 00:00:00 2001 From: Rayllll Date: Fri, 29 Nov 2024 12:38:15 +0800 Subject: [PATCH 14/41] Signed-off-by: Rayllll extract fail situation --- interfaces/kits/packages/package.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/packages/package.cpp b/interfaces/kits/packages/package.cpp index ea618a6c..c61dd543 100755 --- a/interfaces/kits/packages/package.cpp +++ b/interfaces/kits/packages/package.cpp @@ -301,8 +301,13 @@ int32_t ExtraPackageFile(const char *packagePath, [[maybe_unused]] const char *k PkgManager::ReleasePackageInstance(manager); return PKG_INVALID_STREAM; } - manager->ExtractFile(file, outStream); - + ret = manager->ExtractFile(file, outStream); + if (ret != PKG_SUCCESS) { + LOG(ERROR) << "extract file failed" << file; + manager->ClosePkgStream(outStream); + PkgManager::ReleasePackageInstance(manager); + return PKG_INVALID_FILE; + } manager->ClosePkgStream(outStream); PkgManager::ReleasePackageInstance(manager); return PKG_SUCCESS; -- Gitee From f7f32c515e7dfd4e42cb2f6a44c79c25c10fc4b5 Mon Sep 17 00:00:00 2001 From: zhangcan42 Date: Mon, 2 Dec 2024 11:57:37 +0000 Subject: [PATCH 15/41] update test/unittest/flashd_test/BUILD.gn. Signed-off-by: zhangcan42 --- test/unittest/flashd_test/BUILD.gn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unittest/flashd_test/BUILD.gn b/test/unittest/flashd_test/BUILD.gn index 49a51a14..9a9922eb 100644 --- a/test/unittest/flashd_test/BUILD.gn +++ b/test/unittest/flashd_test/BUILD.gn @@ -111,12 +111,12 @@ ohos_unittest("flashd_unittest") { "//third_party/libuv:uv", "//third_party/lz4:liblz4_static", "//third_party/openssl:libcrypto_shared", - "//third_party/zlib:libz", ] external_deps = [ "hilog:libhilog", "init:libbegetutil_static", + "zlib:libz", ] configs = [ "${updater_path}/test/unittest:utest_config" ] install_enable = true -- Gitee From 639f86a528628b0d875c545d2f117266e371972a Mon Sep 17 00:00:00 2001 From: zhangcan42 Date: Tue, 3 Dec 2024 01:37:37 +0000 Subject: [PATCH 16/41] add updater_optional_deps Signed-off-by: zhangcan42 --- updater_default_cfg.gni | 1 + 1 file changed, 1 insertion(+) diff --git a/updater_default_cfg.gni b/updater_default_cfg.gni index 2f8f2101..01d8bc1e 100644 --- a/updater_default_cfg.gni +++ b/updater_default_cfg.gni @@ -24,6 +24,7 @@ declare_args() { updater_absolutely_path = "//base/update/updater" hdc_base = "//developtools/hdc" updater_sign_on_server = false + updater_optional_deps = true } if (updater_cfg_file != "") { -- Gitee From a11540bab2f97c93ce4d3648dd1d19d67b84a430 Mon Sep 17 00:00:00 2001 From: zhangcan42 Date: Tue, 3 Dec 2024 01:42:02 +0000 Subject: [PATCH 17/41] add zlib optional deps Signed-off-by: zhangcan42 --- test/unittest/flashd_test/BUILD.gn | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/unittest/flashd_test/BUILD.gn b/test/unittest/flashd_test/BUILD.gn index 9a9922eb..f3ce31f2 100644 --- a/test/unittest/flashd_test/BUILD.gn +++ b/test/unittest/flashd_test/BUILD.gn @@ -116,8 +116,10 @@ ohos_unittest("flashd_unittest") { external_deps = [ "hilog:libhilog", "init:libbegetutil_static", - "zlib:libz", ] + if (updater_optional_deps) { + external_deps += [ "zlib:libz" ] + } configs = [ "${updater_path}/test/unittest:utest_config" ] install_enable = true part_name = "updater" -- Gitee From 3a094b2cc9f5389fc169ecdd61a0f300cd32bdbe Mon Sep 17 00:00:00 2001 From: zhangcan42 Date: Tue, 3 Dec 2024 03:36:50 +0000 Subject: [PATCH 18/41] add updater_zlib_enable Signed-off-by: zhangcan42 --- updater_default_cfg.gni | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/updater_default_cfg.gni b/updater_default_cfg.gni index 01d8bc1e..4f84e9f2 100644 --- a/updater_default_cfg.gni +++ b/updater_default_cfg.gni @@ -24,7 +24,12 @@ declare_args() { updater_absolutely_path = "//base/update/updater" hdc_base = "//developtools/hdc" updater_sign_on_server = false - updater_optional_deps = true + updater_zlib_enable = true + + if (defined(global_parts_info) && + !defined(global_parts_info.third_party_zlib)) { + updater_zlib_enable = false + } } if (updater_cfg_file != "") { -- Gitee From f7faad51986a9a04f405b9319a980d0dabf8ff12 Mon Sep 17 00:00:00 2001 From: zhangcan42 Date: Tue, 3 Dec 2024 03:39:03 +0000 Subject: [PATCH 19/41] add zlib optional deps Signed-off-by: zhangcan42 --- test/unittest/flashd_test/BUILD.gn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unittest/flashd_test/BUILD.gn b/test/unittest/flashd_test/BUILD.gn index f3ce31f2..ee867d2a 100644 --- a/test/unittest/flashd_test/BUILD.gn +++ b/test/unittest/flashd_test/BUILD.gn @@ -117,7 +117,7 @@ ohos_unittest("flashd_unittest") { "hilog:libhilog", "init:libbegetutil_static", ] - if (updater_optional_deps) { + if (updater_zlib_enable) { external_deps += [ "zlib:libz" ] } configs = [ "${updater_path}/test/unittest:utest_config" ] -- Gitee From 253a3cb1a0f2b684bedd1d940c91f7d9eb430784 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 9 Dec 2024 14:45:09 +0800 Subject: [PATCH 20/41] add usb path judge Signed-off-by: unknown --- services/ptable_parse/ufs_ptable.cpp | 15 ++++++++++++++- services/ptable_parse/ufs_ptable.h | 2 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/services/ptable_parse/ufs_ptable.cpp b/services/ptable_parse/ufs_ptable.cpp index cfda373b..ea6a59e6 100644 --- a/services/ptable_parse/ufs_ptable.cpp +++ b/services/ptable_parse/ufs_ptable.cpp @@ -45,6 +45,19 @@ uint32_t UfsPtable::GetPtableExtraOffset(void) } // avoid u disk being recognized as a valid gpt lun device +bool UfsPtable::IsUsbPath(const char* filePath) +{ + const char* targetUsbString = "usb"; + const char* targetXhciString = "xhci"; + char linkBuf[READ_LINK_BUFFER_LENTH] = {0}; + sszie_t retSize = readlink(filePath, linkBuf, READ_LINK_BUFFER_LENTH - 1); + LOG(INFO) << "readlibk " << filePath << " retSzie " << retSize << ", linkBuf is: " << linkBuf; + if (retSize > 0 && (strstr(linkBuf, targetUsbString) != nullptr || strstr(linkBuf,targetXhciString) != nullptr)) { + return true; + } + return false; +} + bool UfsPtable::CheckDeviceLunRemoveable(const uint32_t lunIndex) { constexpr uint32_t minRemoveableStartIdx = 3; @@ -88,7 +101,7 @@ void UfsPtable::SetDeviceLunNum() break; } #ifndef UPDATER_UT - if (CheckDeviceLunRemoveable(lunIndex)) { + if (CheckDeviceLunRemoveable(lunIndex) || IsUsbPath(ufsNode.c_str())) { LOG(ERROR) << "device " << ufsNode << " is removable, may be a u disk"; break; } diff --git a/services/ptable_parse/ufs_ptable.h b/services/ptable_parse/ufs_ptable.h index b0180f91..99e5f4b1 100644 --- a/services/ptable_parse/ufs_ptable.h +++ b/services/ptable_parse/ufs_ptable.h @@ -41,6 +41,7 @@ public: static constexpr uint32_t MAX_LUN_NUMBERS = 26; static constexpr uint32_t MIN_UFS_WRITE_SIZE = 4096; static constexpr uint32_t GPT_PTABLE_BACKUP_SIZE = 33; // back ptable at the end of lun + static constexpr uint32_t READ_LINK_BUFFER_LENTH = 1024; struct UfsPartitionDataInfo { bool isGptVaild; @@ -77,6 +78,7 @@ public: uint8_t *GetPtableImageUfsLunPmbrStart(uint8_t *imageBuf, const uint32_t lunIndex); uint8_t *GetPtableImageUfsLunGptHeaderStart(uint8_t *imageBuf, const uint32_t lunIndex); uint8_t *GetPtableImageUfsLunEntryStart(uint8_t *imageBuf, const uint32_t lunIndex); + bool IsUsbPath(const char* filePath); }; } // namespace Updater #endif // UPDATER_UFS_PTABLE_H \ No newline at end of file -- Gitee From 006e200dc997f139b9009550fe84dcc819a8d15b Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 9 Dec 2024 15:23:52 +0800 Subject: [PATCH 21/41] fix Signed-off-by: unknown --- services/ptable_parse/ufs_ptable.cpp | 2 +- services/ptable_parse/ufs_ptable.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/ptable_parse/ufs_ptable.cpp b/services/ptable_parse/ufs_ptable.cpp index ea6a59e6..93ee0c32 100644 --- a/services/ptable_parse/ufs_ptable.cpp +++ b/services/ptable_parse/ufs_ptable.cpp @@ -50,7 +50,7 @@ bool UfsPtable::IsUsbPath(const char* filePath) const char* targetUsbString = "usb"; const char* targetXhciString = "xhci"; char linkBuf[READ_LINK_BUFFER_LENTH] = {0}; - sszie_t retSize = readlink(filePath, linkBuf, READ_LINK_BUFFER_LENTH - 1); + ssize_t retSize = readlink(filePath, linkBuf, READ_LINK_BUFFER_LENTH - 1); LOG(INFO) << "readlibk " << filePath << " retSzie " << retSize << ", linkBuf is: " << linkBuf; if (retSize > 0 && (strstr(linkBuf, targetUsbString) != nullptr || strstr(linkBuf,targetXhciString) != nullptr)) { return true; diff --git a/services/ptable_parse/ufs_ptable.h b/services/ptable_parse/ufs_ptable.h index 99e5f4b1..96ae8fe7 100644 --- a/services/ptable_parse/ufs_ptable.h +++ b/services/ptable_parse/ufs_ptable.h @@ -41,7 +41,7 @@ public: static constexpr uint32_t MAX_LUN_NUMBERS = 26; static constexpr uint32_t MIN_UFS_WRITE_SIZE = 4096; static constexpr uint32_t GPT_PTABLE_BACKUP_SIZE = 33; // back ptable at the end of lun - static constexpr uint32_t READ_LINK_BUFFER_LENTH = 1024; + static constexpr uint32_t READ_LINK_BUFFER_LENTH = 1024; // readlink buffer size struct UfsPartitionDataInfo { bool isGptVaild; -- Gitee From 057e30d19059fe68160075411cae04263b2b42d4 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 9 Dec 2024 15:23:52 +0800 Subject: [PATCH 22/41] fix Signed-off-by: unknown --- services/ptable_parse/ufs_ptable.cpp | 4 ++-- services/ptable_parse/ufs_ptable.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/ptable_parse/ufs_ptable.cpp b/services/ptable_parse/ufs_ptable.cpp index ea6a59e6..b4cee23a 100644 --- a/services/ptable_parse/ufs_ptable.cpp +++ b/services/ptable_parse/ufs_ptable.cpp @@ -50,9 +50,9 @@ bool UfsPtable::IsUsbPath(const char* filePath) const char* targetUsbString = "usb"; const char* targetXhciString = "xhci"; char linkBuf[READ_LINK_BUFFER_LENTH] = {0}; - sszie_t retSize = readlink(filePath, linkBuf, READ_LINK_BUFFER_LENTH - 1); + ssize_t retSize = readlink(filePath, linkBuf, READ_LINK_BUFFER_LENTH - 1); LOG(INFO) << "readlibk " << filePath << " retSzie " << retSize << ", linkBuf is: " << linkBuf; - if (retSize > 0 && (strstr(linkBuf, targetUsbString) != nullptr || strstr(linkBuf,targetXhciString) != nullptr)) { + if (retSize > 0 && (strstr(linkBuf, targetUsbString) != nullptr || strstr(linkBuf, targetXhciString) != nullptr)) { return true; } return false; diff --git a/services/ptable_parse/ufs_ptable.h b/services/ptable_parse/ufs_ptable.h index 99e5f4b1..96ae8fe7 100644 --- a/services/ptable_parse/ufs_ptable.h +++ b/services/ptable_parse/ufs_ptable.h @@ -41,7 +41,7 @@ public: static constexpr uint32_t MAX_LUN_NUMBERS = 26; static constexpr uint32_t MIN_UFS_WRITE_SIZE = 4096; static constexpr uint32_t GPT_PTABLE_BACKUP_SIZE = 33; // back ptable at the end of lun - static constexpr uint32_t READ_LINK_BUFFER_LENTH = 1024; + static constexpr uint32_t READ_LINK_BUFFER_LENTH = 1024; // readlink buffer size struct UfsPartitionDataInfo { bool isGptVaild; -- Gitee From fecef00c535717518a32a8ae0f2c1cb8244e012e Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 10 Dec 2024 10:38:01 +0800 Subject: [PATCH 23/41] fix ut Signed-off-by: unknown --- test/unittest/package/pkg_verify_unittest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unittest/package/pkg_verify_unittest.cpp b/test/unittest/package/pkg_verify_unittest.cpp index 643b6e4b..7ed92ef8 100644 --- a/test/unittest/package/pkg_verify_unittest.cpp +++ b/test/unittest/package/pkg_verify_unittest.cpp @@ -66,7 +66,7 @@ public: keyPath = "/data/updater/src/signing_cert.crt"; file = "updater.bin"; ret = ExtraPackageFile(packagePath.c_str(), keyPath.c_str(), file.c_str(), testPackagePath.c_str()); - EXPECT_EQ(ret, PKG_SUCCESS); + EXPECT_EQ(ret, PKG_INVALID_FILE); return 0; } -- Gitee From 7ab1f856f0f8888b0c9ef41fc7b16e2a6adbaa78 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 10 Dec 2024 10:38:01 +0800 Subject: [PATCH 24/41] fix ut Signed-off-by: unknown --- test/unittest/package/pkg_verify_unittest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unittest/package/pkg_verify_unittest.cpp b/test/unittest/package/pkg_verify_unittest.cpp index 643b6e4b..20042104 100644 --- a/test/unittest/package/pkg_verify_unittest.cpp +++ b/test/unittest/package/pkg_verify_unittest.cpp @@ -64,7 +64,7 @@ public: packagePath = testPackagePath + "test_package.zip"; keyPath = "/data/updater/src/signing_cert.crt"; - file = "updater.bin"; + file = "update.bin"; ret = ExtraPackageFile(packagePath.c_str(), keyPath.c_str(), file.c_str(), testPackagePath.c_str()); EXPECT_EQ(ret, PKG_SUCCESS); return 0; -- Gitee From 14ff2e7adbbf1645546a2d8b583a4d6d9ffe70fd Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 10 Dec 2024 15:59:35 +0800 Subject: [PATCH 25/41] fix Signed-off-by: unknown --- test/unittest/package/pkg_verify_unittest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unittest/package/pkg_verify_unittest.cpp b/test/unittest/package/pkg_verify_unittest.cpp index 94b8b7fa..20042104 100644 --- a/test/unittest/package/pkg_verify_unittest.cpp +++ b/test/unittest/package/pkg_verify_unittest.cpp @@ -66,7 +66,7 @@ public: keyPath = "/data/updater/src/signing_cert.crt"; file = "update.bin"; ret = ExtraPackageFile(packagePath.c_str(), keyPath.c_str(), file.c_str(), testPackagePath.c_str()); - EXPECT_EQ(ret, PKG_INVALID_FILE); + EXPECT_EQ(ret, PKG_SUCCESS); return 0; } -- Gitee From d2a794c319973f9138cd979603ac2310c4a52315 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=BD=B3=E6=A0=8B?= Date: Wed, 11 Dec 2024 06:06:54 +0000 Subject: [PATCH 26/41] update services/package/pkg_verify/openssl_util.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 王佳栋 --- services/package/pkg_verify/openssl_util.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/services/package/pkg_verify/openssl_util.cpp b/services/package/pkg_verify/openssl_util.cpp index e73d4f1c..9f3d6bd7 100644 --- a/services/package/pkg_verify/openssl_util.cpp +++ b/services/package/pkg_verify/openssl_util.cpp @@ -218,11 +218,11 @@ int32_t CalcSha256Digest(const PkgStreamPtr srcData, const size_t dataLen, std:: UPDATER_LAST_WORD(-1); return -1; } - SHA256_Update(&ctx, buffer.buffer, blockLen); + SHA256_Update(&ctx, buffer.buffer, readLen); offset += readLen; remainLen -= readLen; } - if (remainLen > 0) { + while (remainLen > 0) { ret = srcData->Read(buffer, offset, remainLen, readLen); if (ret != 0) { PKG_LOGE("Fail read data"); @@ -230,6 +230,9 @@ int32_t CalcSha256Digest(const PkgStreamPtr srcData, const size_t dataLen, std:: return -1; } SHA256_Update(&ctx, buffer.buffer, readLen); + offset += readLen; + PKG_LOGE("use new remainLen"); + remainLen -= readLen; } if (SHA256_Final(result.data(), &ctx) != 1) { -- Gitee From 62e60b35d030d2380fc9fe498848bac3d6d67df8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=BD=B3=E6=A0=8B?= Date: Wed, 11 Dec 2024 06:09:21 +0000 Subject: [PATCH 27/41] update services/package/pkg_verify/openssl_util.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 王佳栋 --- services/package/pkg_verify/openssl_util.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/package/pkg_verify/openssl_util.cpp b/services/package/pkg_verify/openssl_util.cpp index 9f3d6bd7..a2ed3711 100644 --- a/services/package/pkg_verify/openssl_util.cpp +++ b/services/package/pkg_verify/openssl_util.cpp @@ -231,7 +231,7 @@ int32_t CalcSha256Digest(const PkgStreamPtr srcData, const size_t dataLen, std:: } SHA256_Update(&ctx, buffer.buffer, readLen); offset += readLen; - PKG_LOGE("use new remainLen"); + PKG_LOGI("use new remainLen"); remainLen -= readLen; } -- Gitee From 35aa5c305381e4d637dd80204995501bc5f9bb51 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 11 Dec 2024 15:00:43 +0800 Subject: [PATCH 28/41] fix readlink path Signed-off-by: unknown --- services/ptable_parse/ufs_ptable.cpp | 10 ++++++---- services/ptable_parse/ufs_ptable.h | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/services/ptable_parse/ufs_ptable.cpp b/services/ptable_parse/ufs_ptable.cpp index b4cee23a..0c6e7e01 100644 --- a/services/ptable_parse/ufs_ptable.cpp +++ b/services/ptable_parse/ufs_ptable.cpp @@ -45,13 +45,15 @@ uint32_t UfsPtable::GetPtableExtraOffset(void) } // avoid u disk being recognized as a valid gpt lun device -bool UfsPtable::IsUsbPath(const char* filePath) +bool UfsPtable::IsUsbPath(const uint32_t lunIndex) { + char lunIndexName = 'a' + lunIndex; const char* targetUsbString = "usb"; const char* targetXhciString = "xhci"; char linkBuf[READ_LINK_BUFFER_LENTH] = {0}; - ssize_t retSize = readlink(filePath, linkBuf, READ_LINK_BUFFER_LENTH - 1); - LOG(INFO) << "readlibk " << filePath << " retSzie " << retSize << ", linkBuf is: " << linkBuf; + std::string filePath = std::string(PREFIX_SYS_CLASS_BLOCK) + lunIndexName; + ssize_t retSize = readlink(filePath.c_str(), linkBuf, READ_LINK_BUFFER_LENTH - 1); + LOG(INFO) << "readlink " << filePath << " retSzie " << retSize << ", linkBuf is: " << linkBuf; if (retSize > 0 && (strstr(linkBuf, targetUsbString) != nullptr || strstr(linkBuf, targetXhciString) != nullptr)) { return true; } @@ -101,7 +103,7 @@ void UfsPtable::SetDeviceLunNum() break; } #ifndef UPDATER_UT - if (CheckDeviceLunRemoveable(lunIndex) || IsUsbPath(ufsNode.c_str())) { + if (CheckDeviceLunRemoveable(lunIndex) || IsUsbPath(lunIndex)) { LOG(ERROR) << "device " << ufsNode << " is removable, may be a u disk"; break; } diff --git a/services/ptable_parse/ufs_ptable.h b/services/ptable_parse/ufs_ptable.h index 96ae8fe7..f6ee7809 100644 --- a/services/ptable_parse/ufs_ptable.h +++ b/services/ptable_parse/ufs_ptable.h @@ -78,7 +78,7 @@ public: uint8_t *GetPtableImageUfsLunPmbrStart(uint8_t *imageBuf, const uint32_t lunIndex); uint8_t *GetPtableImageUfsLunGptHeaderStart(uint8_t *imageBuf, const uint32_t lunIndex); uint8_t *GetPtableImageUfsLunEntryStart(uint8_t *imageBuf, const uint32_t lunIndex); - bool IsUsbPath(const char* filePath); + bool IsUsbPath(const uint32_t lunIndex); }; } // namespace Updater #endif // UPDATER_UFS_PTABLE_H \ No newline at end of file -- Gitee From 0e8a90d028bb4649ca22046917964ae5e75b434a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=87=AF?= Date: Wed, 11 Dec 2024 07:50:29 +0000 Subject: [PATCH 29/41] update services/updater_main.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈凯 --- services/updater_main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/services/updater_main.cpp b/services/updater_main.cpp index 8abf00a4..15246514 100644 --- a/services/updater_main.cpp +++ b/services/updater_main.cpp @@ -707,6 +707,7 @@ std::unordered_map> InitOptionsFuncTab(char* {"sdcard_update", [&]() -> void { upParams.updateMode = SDCARD_UPDATE; + upParams.sdExtMode = SDCARD_NORMAL_UPDATE; }}, {"UPDATE:MAINIMG", [&]() -> void { -- Gitee From 9f6cb0d6514d81cc247284ac2f812069c5c08f3f Mon Sep 17 00:00:00 2001 From: richard Date: Wed, 11 Dec 2024 08:30:00 +0000 Subject: [PATCH 30/41] bug fix Signed-off-by: richard --- test/unittest/flashd_test/BUILD.gn | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/test/unittest/flashd_test/BUILD.gn b/test/unittest/flashd_test/BUILD.gn index ee867d2a..66d5a1dd 100644 --- a/test/unittest/flashd_test/BUILD.gn +++ b/test/unittest/flashd_test/BUILD.gn @@ -83,11 +83,6 @@ ohos_unittest("flashd_unittest") { "${updater_path}/services/ptable_parse", "${updater_path}/utils/include", "${updater_path}/utils/json", - "//base/startup/init/services/include/param", - "//third_party/bounds_checking_function/include", - "//third_party/cJSON", - "//third_party/lz4/lib", - "//third_party/libuv", ] deps = [ @@ -103,20 +98,20 @@ ohos_unittest("flashd_unittest") { "${updater_path}/services/package:libupdaterpackage", "${updater_path}/services/script:libupdaterscript", "${updater_path}/utils:libutils", - "//third_party/bounds_checking_function:libsec_static", - "//third_party/bzip2:libbz2", - "//third_party/cJSON:cjson", - "//third_party/googletest:gmock_main", - "//third_party/googletest:gtest_main", - "//third_party/libuv:uv", - "//third_party/lz4:liblz4_static", - "//third_party/openssl:libcrypto_shared", ] external_deps = [ "hilog:libhilog", "init:libbegetutil_static", - ] + "bounds_checking_function:libsec_static", + "bzip2:libbz2", + "cJSON:cjson", + "googletest:gmock_main", + "googletest:gtest_main", + "libuv:uv", + "lz4:liblz4_static", + "openssl:libcrypto_shared", +] if (updater_zlib_enable) { external_deps += [ "zlib:libz" ] } @@ -141,7 +136,6 @@ ohos_unittest("flashd_utils_unittest") { "${updater_path}/services/include", "${updater_path}/utils/include", "${updater_path}/services/flashd", - "//third_party/libuv", "${updater_path}/interfaces/kits/include", "${updater_path}/services/common", "${updater_path}/services/flashd/common", @@ -151,8 +145,8 @@ ohos_unittest("flashd_utils_unittest") { "c_utils:utils", "hilog:libhilog", "init:libbegetutil_static", + "libuv:uv", ] - deps = [ "//third_party/libuv:uv" ] configs = [ "${updater_path}/test/unittest:utest_config" ] install_enable = true part_name = "updater" -- Gitee From 489b883b354353662ebb19c40c0f3816240d7ca3 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 11 Dec 2024 16:46:46 +0800 Subject: [PATCH 31/41] add mount.exfat Signed-off-by: unknown --- services/fs_manager/mount.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/services/fs_manager/mount.cpp b/services/fs_manager/mount.cpp index 0252db64..f1897f0f 100644 --- a/services/fs_manager/mount.cpp +++ b/services/fs_manager/mount.cpp @@ -122,11 +122,8 @@ int UmountForPath(const std::string& path) } return 0; } - -static int MountNtfsWithRetry(std::string source, std::string target) +static int LoopToMount(char *argv[], std::string source, std::string target) { - char *argv[] = {const_cast("system/bin/mount.ntfs"), - const_cast(source.c_str()), const_cast(target.c_str()), nullptr}; int num = 0; do { pid_t child = fork(); @@ -163,6 +160,20 @@ static int MountNtfsWithRetry(std::string source, std::string target) return -1; } +static int MountNtfsWithRetry(std::string source, std::string target) +{ + char *argv[] = {const_cast("system/bin/mount.ntfs"), + const_cast(source.c_str()), const_cast(target.c_str()), nullptr}; + return LoopToMount(argv, source, target); +} + +static int MountExfatWithRetry(std::string source, std::string target) +{ + char *argv[] = {const_cast("system/bin/mount.exfat"), + const_cast(source.c_str()), const_cast(target.c_str()), nullptr}; + return LoopToMount(argv, source, target); +} + int MountSdcard(std::string &path, std::string &mountPoint) { if (path.empty() || mountPoint.empty()) { @@ -187,6 +198,10 @@ int MountSdcard(std::string &path, std::string &mountPoint) LOG(INFO) << "mount success, sdcard type is ntfs"; return 0; } + if (MountExfatWithRetry(path, mountPoint) == 0) { + LOG(INFO) << "mount success, sdcard type is exfat"; + return 0; + } return -1; } -- Gitee From 4dc352ee4579500cc4888fe3758227ed9a13acf3 Mon Sep 17 00:00:00 2001 From: richard Date: Thu, 12 Dec 2024 07:38:16 +0000 Subject: [PATCH 32/41] add Signed-off-by: richard --- test/unittest/flashd_test/BUILD.gn | 1 + 1 file changed, 1 insertion(+) diff --git a/test/unittest/flashd_test/BUILD.gn b/test/unittest/flashd_test/BUILD.gn index 66d5a1dd..8c2cb812 100644 --- a/test/unittest/flashd_test/BUILD.gn +++ b/test/unittest/flashd_test/BUILD.gn @@ -147,6 +147,7 @@ ohos_unittest("flashd_utils_unittest") { "init:libbegetutil_static", "libuv:uv", ] + deps = [] configs = [ "${updater_path}/test/unittest:utest_config" ] install_enable = true part_name = "updater" -- Gitee From 44c1fd1394aa5039087e558034dc5d832b515132 Mon Sep 17 00:00:00 2001 From: richard Date: Thu, 12 Dec 2024 10:04:35 +0000 Subject: [PATCH 33/41] add Signed-off-by: richard --- test/unittest/flashd_test/BUILD.gn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unittest/flashd_test/BUILD.gn b/test/unittest/flashd_test/BUILD.gn index 8c2cb812..114861aa 100644 --- a/test/unittest/flashd_test/BUILD.gn +++ b/test/unittest/flashd_test/BUILD.gn @@ -111,7 +111,7 @@ ohos_unittest("flashd_unittest") { "libuv:uv", "lz4:liblz4_static", "openssl:libcrypto_shared", -] + ] if (updater_zlib_enable) { external_deps += [ "zlib:libz" ] } -- Gitee From 4e65e61b06473b31a311e7727e62486e909bf484 Mon Sep 17 00:00:00 2001 From: richard Date: Fri, 13 Dec 2024 03:41:16 +0000 Subject: [PATCH 34/41] add Signed-off-by: richard --- test/unittest/flashd_test/BUILD.gn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/unittest/flashd_test/BUILD.gn b/test/unittest/flashd_test/BUILD.gn index 114861aa..6fb16a94 100644 --- a/test/unittest/flashd_test/BUILD.gn +++ b/test/unittest/flashd_test/BUILD.gn @@ -101,13 +101,13 @@ ohos_unittest("flashd_unittest") { ] external_deps = [ - "hilog:libhilog", - "init:libbegetutil_static", "bounds_checking_function:libsec_static", "bzip2:libbz2", "cJSON:cjson", "googletest:gmock_main", "googletest:gtest_main", + "hilog:libhilog", + "init:libbegetutil_static", "libuv:uv", "lz4:liblz4_static", "openssl:libcrypto_shared", -- Gitee From 67a2f7bdb443313a2b74c58b1975c6ee60ab4f42 Mon Sep 17 00:00:00 2001 From: richard Date: Mon, 16 Dec 2024 03:34:22 +0000 Subject: [PATCH 35/41] add Signed-off-by: richard --- services/ui/view/component/label_btn_adapter.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/ui/view/component/label_btn_adapter.cpp b/services/ui/view/component/label_btn_adapter.cpp index 1d09818c..7901afd0 100644 --- a/services/ui/view/component/label_btn_adapter.cpp +++ b/services/ui/view/component/label_btn_adapter.cpp @@ -86,6 +86,9 @@ LabelBtnAdapter::LabelBtnAdapter(const UxViewInfo &info) LOG(DEBUG) << "init focus listener for " << viewId_; InitFocus(txtColor, bgColor, StrToColor(spec.focusedTxtColor), StrToColor(spec.focusedBgColor)); + } else { + this->SetFocusable(false); + this->SetTouchable(false); } } -- Gitee From 7ae04ecf06cf0feb5dfcca581960977b2e12fdbe Mon Sep 17 00:00:00 2001 From: richard Date: Mon, 16 Dec 2024 03:38:39 +0000 Subject: [PATCH 36/41] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20in?= =?UTF-8?q?terfaces/kits/packages/package.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interfaces/kits/packages/package.cpp | 314 --------------------------- 1 file changed, 314 deletions(-) delete mode 100755 interfaces/kits/packages/package.cpp diff --git a/interfaces/kits/packages/package.cpp b/interfaces/kits/packages/package.cpp deleted file mode 100755 index c61dd543..00000000 --- a/interfaces/kits/packages/package.cpp +++ /dev/null @@ -1,314 +0,0 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "package/package.h" -#include -#include -#include -#include -#include "log/log.h" -#include "package/pkg_manager.h" -#include "securec.h" - -using namespace Updater; -using namespace Hpackage; -constexpr uint32_t VERIFY_FINSH_PERCENT = 100; -constexpr uint32_t MAX_ENTRY_COUNT = 4096; - -namespace { -int32_t GetUpgradePkgInfo(UpgradePkgInfo *upgradePackageInfo, - std::vector> &files, - const UpgradePkgInfoExt *pkgInfoExt, - std::vector &compInfo) -{ - if (pkgInfoExt->entryCount > MAX_ENTRY_COUNT) { - LOG(ERROR) << "entry count oversized " << pkgInfoExt->entryCount << ", " << MAX_ENTRY_COUNT; - return PKG_INVALID_PARAM; - } - - upgradePackageInfo->updateFileVersion = pkgInfoExt->updateFileVersion; - if (pkgInfoExt->softwareVersion != nullptr) { - upgradePackageInfo->softwareVersion = pkgInfoExt->softwareVersion; - } - if (pkgInfoExt->productUpdateId != nullptr) { - upgradePackageInfo->productUpdateId = pkgInfoExt->productUpdateId; - } - if (pkgInfoExt->descriptPackageId != nullptr) { - upgradePackageInfo->descriptPackageId = pkgInfoExt->descriptPackageId; - } - if (pkgInfoExt->time != nullptr) { - upgradePackageInfo->time = pkgInfoExt->time; - } - if (pkgInfoExt->date != nullptr) { - upgradePackageInfo->date = pkgInfoExt->date; - } - upgradePackageInfo->pkgInfo.digestMethod = pkgInfoExt->digestMethod; - upgradePackageInfo->pkgInfo.signMethod = pkgInfoExt->signMethod; - upgradePackageInfo->pkgInfo.entryCount = pkgInfoExt->entryCount; - upgradePackageInfo->pkgInfo.pkgType = PKG_PACK_TYPE_UPGRADE; - files.resize(pkgInfoExt->entryCount); - for (uint32_t i = 0; i < pkgInfoExt->entryCount; i++) { - files[i].first.assign(compInfo[i].filePath); - ComponentInfo* info = &files[i].second; - if (memcpy_s(info->digest, sizeof(info->digest), compInfo[i].digest, sizeof(info->digest)) != EOK) { - LOG(ERROR) << "GetUpgradePkgInfo memcpy failed"; - return PKG_NONE_MEMORY; - } - info->fileInfo.identity.assign(compInfo[i].componentAddr); - info->fileInfo.unpackedSize = compInfo[i].size; - info->fileInfo.packedSize = compInfo[i].size; - info->fileInfo.packMethod = PKG_COMPRESS_METHOD_NONE; - info->fileInfo.digestMethod = pkgInfoExt->digestMethod; - info->version.assign(compInfo[i].version); - info->id = compInfo[i].id; - info->resType = compInfo[i].resType; - info->type = compInfo[i].type; - info->originalSize = compInfo[i].originalSize; - info->compFlags = compInfo[i].flags; - } - return PKG_SUCCESS; -} - -int32_t GetZipPkgInfo(PkgManager::PkgInfoPtr pkgInfo, - std::vector> &files, - const UpgradePkgInfoExt *pkgInfoExt, - std::vector &compInfo) -{ - if (pkgInfoExt->entryCount > MAX_ENTRY_COUNT) { - LOG(ERROR) << "entry count oversized " << pkgInfoExt->entryCount << ", " << MAX_ENTRY_COUNT; - return PKG_INVALID_PARAM; - } - - pkgInfo->signMethod = pkgInfoExt->signMethod; - pkgInfo->digestMethod = pkgInfoExt->digestMethod; - pkgInfo->entryCount = pkgInfoExt->entryCount; - pkgInfo->pkgType = pkgInfoExt->pkgType; - files.resize(pkgInfoExt->entryCount); - for (uint32_t i = 0; i < pkgInfo->entryCount; i++) { - files[i].first.assign(compInfo[i].filePath); - ZipFileInfo* info = &files[i].second; - info->fileInfo.identity.assign(compInfo[i].componentAddr); - info->fileInfo.packMethod = PKG_COMPRESS_METHOD_ZIP; - info->fileInfo.digestMethod = PKG_DIGEST_TYPE_CRC; - } - return PKG_SUCCESS; -} - -int32_t GetLz4PkgInfo(PkgManager::PkgInfoPtr pkgInfo, - std::vector> &files, - const UpgradePkgInfoExt *pkgInfoExt, - std::vector &compInfo) -{ - if (pkgInfoExt->entryCount > MAX_ENTRY_COUNT) { - LOG(ERROR) << "entry count oversized " << pkgInfoExt->entryCount << ", " << MAX_ENTRY_COUNT; - return PKG_INVALID_PARAM; - } - - pkgInfo->signMethod = pkgInfoExt->signMethod; - pkgInfo->digestMethod = pkgInfoExt->digestMethod; - pkgInfo->entryCount = pkgInfoExt->entryCount; - pkgInfo->pkgType = PKG_PACK_TYPE_LZ4; - files.resize(pkgInfoExt->entryCount); - for (uint32_t i = 0; i < pkgInfoExt->entryCount; i++) { - files[i].first.assign(compInfo[i].filePath); - Lz4FileInfo* info = &files[i].second; - info->fileInfo.identity.assign(compInfo[i].componentAddr); - info->fileInfo.packMethod = PKG_COMPRESS_METHOD_LZ4; - info->fileInfo.digestMethod = PKG_DIGEST_TYPE_CRC; - info->compressionLevel = MID_COMPRESS_LEVEL; - info->blockSizeID = 0; - info->contentChecksumFlag = 0; - info->blockIndependence = 0; - } - return PKG_SUCCESS; -} -} - -int32_t CreatePackage(const UpgradePkgInfoExt *pkgInfoExt, - std::vector &compInfo, - const char *path, - const char *keyPath) -{ - if (pkgInfoExt == nullptr || path == nullptr || keyPath == nullptr || pkgInfoExt->entryCount > compInfo.size()) { - LOG(ERROR) << "Check param fail "; - return PKG_INVALID_PARAM; - } - PkgManager::PkgManagerPtr manager = PkgManager::CreatePackageInstance(); - if (manager == nullptr) { - LOG(ERROR) << "CreatePackageInstance fail "; - return PKG_INVALID_PARAM; - } - - int32_t ret = PKG_SUCCESS; - switch (pkgInfoExt->pkgType) { - case PKG_PACK_TYPE_UPGRADE: { - UpgradePkgInfo upgradePackageInfo; - std::vector> files; - ret = GetUpgradePkgInfo(&upgradePackageInfo, files, pkgInfoExt, compInfo); - if (ret == PKG_SUCCESS) { - ret = manager->CreatePackage(path, keyPath, &upgradePackageInfo.pkgInfo, files); - } - break; - } - case PKG_PACK_TYPE_ZIP: - case PKG_PACK_TYPE_GZIP: { - PkgInfo info; - std::vector> files; - ret = GetZipPkgInfo(&info, files, pkgInfoExt, compInfo); - if (ret == PKG_SUCCESS) { - ret = manager->CreatePackage(path, keyPath, &info, files); - } - break; - } - case PKG_PACK_TYPE_LZ4: { - PkgInfo info; - std::vector> files; - ret = GetLz4PkgInfo(&info, files, pkgInfoExt, compInfo); - if (ret == PKG_SUCCESS) { - ret = manager->CreatePackage(path, keyPath, &info, files); - } - break; - } - default: - ret = PKG_INVALID_PARAM; - break; - } - PkgManager::ReleasePackageInstance(manager); - return ret; -} - -int32_t VerifyPackage(const char *packagePath, - const char *keyPath, - const char *version, - const uint8_t *digest, - size_t size) -{ - if (packagePath == nullptr || keyPath == nullptr || version == nullptr) { - LOG(ERROR) << "Check param fail"; - return PKG_INVALID_PARAM; - } - PkgManager::PkgManagerPtr manager = PkgManager::CreatePackageInstance(); - if (manager == nullptr) { - LOG(ERROR) << "CreatePackageInstance fail"; - return PKG_INVALID_PARAM; - } - - PkgBuffer digestBuffer(const_cast(digest), size); - int32_t ret = manager->VerifyPackage(packagePath, keyPath, version, digestBuffer, - [](int32_t result, uint32_t percent) {}); - PkgManager::ReleasePackageInstance(manager); - return ret; -} - -int32_t VerifyPackageWithCallback(const std::string &packagePath, - const std::string &keyPath, std::function cb) -{ - if (packagePath.empty() || keyPath.empty() || cb == nullptr) { - return PKG_INVALID_PARAM; - } - - PkgManager *manager = PkgManager::CreatePackageInstance(); - if (manager == nullptr) { - LOG(ERROR) << "CreatePackageInstance fail"; - return PKG_INVALID_PARAM; - } - PkgBuffer digestBuffer {}; - std::string version {}; - int32_t ret = manager->VerifyPackage(packagePath, keyPath, version, digestBuffer, cb); - if (ret != 0) { - cb(ret, VERIFY_FINSH_PERCENT); - } - PkgManager::ReleasePackageInstance(manager); - return ret; -} - -int32_t ExtraPackageDir(const char *packagePath, [[maybe_unused]] const char *keyPath, const char *dir, - const char *outPath) -{ - if (packagePath == nullptr || outPath == nullptr) { - LOG(ERROR) << "Check param fail "; - return PKG_INVALID_PARAM; - } - PkgManager::PkgManagerPtr manager = PkgManager::CreatePackageInstance(); - if (manager == nullptr) { - LOG(ERROR) << "CreatePackageInstance fail "; - return PKG_INVALID_PARAM; - } - - std::vector components; - int32_t ret = manager->LoadPackageWithoutUnPack(std::string(packagePath), components); - if (ret != PKG_SUCCESS) { - LOG(ERROR) << "LoadPackageWithoutUnPack fail"; - PkgManager::ReleasePackageInstance(manager); - return ret; - } - - for (size_t i = 0; i < components.size(); i++) { - if (dir != nullptr && components[i].compare(0, strlen(dir), dir) != 0) { - continue; - } - PkgManager::StreamPtr outStream = nullptr; - manager->CreatePkgStream(outStream, std::string(outPath) + components[i], 0, PkgStream::PkgStreamType_Write); - if (outStream == nullptr) { - LOG(ERROR) << "CreatePkgStream fail"; - PkgManager::ReleasePackageInstance(manager); - return PKG_INVALID_STREAM; - } - manager->ExtractFile(components[i], outStream); - manager->ClosePkgStream(outStream); - } - PkgManager::ReleasePackageInstance(manager); - return PKG_SUCCESS; -} - -int32_t ExtraPackageFile(const char *packagePath, [[maybe_unused]] const char *keyPath, const char *file, - const char *outPath) -{ - if (packagePath == nullptr || outPath == nullptr || file == nullptr) { - LOG(ERROR) << "Check param fail "; - return PKG_INVALID_PARAM; - } - - PkgManager::PkgManagerPtr manager = PkgManager::CreatePackageInstance(); - if (manager == nullptr) { - LOG(ERROR) << "Check param fail "; - return PKG_INVALID_PARAM; - } - - std::vector components; - int32_t ret = manager->LoadPackageWithoutUnPack(std::string(packagePath), components); - if (ret != PKG_SUCCESS) { - LOG(ERROR) << "LoadPackageWithoutUnPack fail"; - PkgManager::ReleasePackageInstance(manager); - return ret; - } - - PkgManager::StreamPtr outStream = nullptr; - manager->CreatePkgStream(outStream, std::string(outPath) + file, 0, PkgStream::PkgStreamType_Write); - if (outStream == nullptr) { - LOG(ERROR) << "CreatePkgStream fail"; - PkgManager::ReleasePackageInstance(manager); - return PKG_INVALID_STREAM; - } - ret = manager->ExtractFile(file, outStream); - if (ret != PKG_SUCCESS) { - LOG(ERROR) << "extract file failed" << file; - manager->ClosePkgStream(outStream); - PkgManager::ReleasePackageInstance(manager); - return PKG_INVALID_FILE; - } - manager->ClosePkgStream(outStream); - PkgManager::ReleasePackageInstance(manager); - return PKG_SUCCESS; -} -- Gitee From c8ebe7671aeebbc2ca0da94f33982882aee3be3e Mon Sep 17 00:00:00 2001 From: richard Date: Mon, 16 Dec 2024 03:40:38 +0000 Subject: [PATCH 37/41] =?UTF-8?q?Revert=20"=E5=88=A0=E9=99=A4=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20interfaces/kits/packages/package.cpp"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 7ae04ecf06cf0feb5dfcca581960977b2e12fdbe. --- interfaces/kits/packages/package.cpp | 314 +++++++++++++++++++++++++++ 1 file changed, 314 insertions(+) create mode 100755 interfaces/kits/packages/package.cpp diff --git a/interfaces/kits/packages/package.cpp b/interfaces/kits/packages/package.cpp new file mode 100755 index 00000000..c61dd543 --- /dev/null +++ b/interfaces/kits/packages/package.cpp @@ -0,0 +1,314 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "package/package.h" +#include +#include +#include +#include +#include "log/log.h" +#include "package/pkg_manager.h" +#include "securec.h" + +using namespace Updater; +using namespace Hpackage; +constexpr uint32_t VERIFY_FINSH_PERCENT = 100; +constexpr uint32_t MAX_ENTRY_COUNT = 4096; + +namespace { +int32_t GetUpgradePkgInfo(UpgradePkgInfo *upgradePackageInfo, + std::vector> &files, + const UpgradePkgInfoExt *pkgInfoExt, + std::vector &compInfo) +{ + if (pkgInfoExt->entryCount > MAX_ENTRY_COUNT) { + LOG(ERROR) << "entry count oversized " << pkgInfoExt->entryCount << ", " << MAX_ENTRY_COUNT; + return PKG_INVALID_PARAM; + } + + upgradePackageInfo->updateFileVersion = pkgInfoExt->updateFileVersion; + if (pkgInfoExt->softwareVersion != nullptr) { + upgradePackageInfo->softwareVersion = pkgInfoExt->softwareVersion; + } + if (pkgInfoExt->productUpdateId != nullptr) { + upgradePackageInfo->productUpdateId = pkgInfoExt->productUpdateId; + } + if (pkgInfoExt->descriptPackageId != nullptr) { + upgradePackageInfo->descriptPackageId = pkgInfoExt->descriptPackageId; + } + if (pkgInfoExt->time != nullptr) { + upgradePackageInfo->time = pkgInfoExt->time; + } + if (pkgInfoExt->date != nullptr) { + upgradePackageInfo->date = pkgInfoExt->date; + } + upgradePackageInfo->pkgInfo.digestMethod = pkgInfoExt->digestMethod; + upgradePackageInfo->pkgInfo.signMethod = pkgInfoExt->signMethod; + upgradePackageInfo->pkgInfo.entryCount = pkgInfoExt->entryCount; + upgradePackageInfo->pkgInfo.pkgType = PKG_PACK_TYPE_UPGRADE; + files.resize(pkgInfoExt->entryCount); + for (uint32_t i = 0; i < pkgInfoExt->entryCount; i++) { + files[i].first.assign(compInfo[i].filePath); + ComponentInfo* info = &files[i].second; + if (memcpy_s(info->digest, sizeof(info->digest), compInfo[i].digest, sizeof(info->digest)) != EOK) { + LOG(ERROR) << "GetUpgradePkgInfo memcpy failed"; + return PKG_NONE_MEMORY; + } + info->fileInfo.identity.assign(compInfo[i].componentAddr); + info->fileInfo.unpackedSize = compInfo[i].size; + info->fileInfo.packedSize = compInfo[i].size; + info->fileInfo.packMethod = PKG_COMPRESS_METHOD_NONE; + info->fileInfo.digestMethod = pkgInfoExt->digestMethod; + info->version.assign(compInfo[i].version); + info->id = compInfo[i].id; + info->resType = compInfo[i].resType; + info->type = compInfo[i].type; + info->originalSize = compInfo[i].originalSize; + info->compFlags = compInfo[i].flags; + } + return PKG_SUCCESS; +} + +int32_t GetZipPkgInfo(PkgManager::PkgInfoPtr pkgInfo, + std::vector> &files, + const UpgradePkgInfoExt *pkgInfoExt, + std::vector &compInfo) +{ + if (pkgInfoExt->entryCount > MAX_ENTRY_COUNT) { + LOG(ERROR) << "entry count oversized " << pkgInfoExt->entryCount << ", " << MAX_ENTRY_COUNT; + return PKG_INVALID_PARAM; + } + + pkgInfo->signMethod = pkgInfoExt->signMethod; + pkgInfo->digestMethod = pkgInfoExt->digestMethod; + pkgInfo->entryCount = pkgInfoExt->entryCount; + pkgInfo->pkgType = pkgInfoExt->pkgType; + files.resize(pkgInfoExt->entryCount); + for (uint32_t i = 0; i < pkgInfo->entryCount; i++) { + files[i].first.assign(compInfo[i].filePath); + ZipFileInfo* info = &files[i].second; + info->fileInfo.identity.assign(compInfo[i].componentAddr); + info->fileInfo.packMethod = PKG_COMPRESS_METHOD_ZIP; + info->fileInfo.digestMethod = PKG_DIGEST_TYPE_CRC; + } + return PKG_SUCCESS; +} + +int32_t GetLz4PkgInfo(PkgManager::PkgInfoPtr pkgInfo, + std::vector> &files, + const UpgradePkgInfoExt *pkgInfoExt, + std::vector &compInfo) +{ + if (pkgInfoExt->entryCount > MAX_ENTRY_COUNT) { + LOG(ERROR) << "entry count oversized " << pkgInfoExt->entryCount << ", " << MAX_ENTRY_COUNT; + return PKG_INVALID_PARAM; + } + + pkgInfo->signMethod = pkgInfoExt->signMethod; + pkgInfo->digestMethod = pkgInfoExt->digestMethod; + pkgInfo->entryCount = pkgInfoExt->entryCount; + pkgInfo->pkgType = PKG_PACK_TYPE_LZ4; + files.resize(pkgInfoExt->entryCount); + for (uint32_t i = 0; i < pkgInfoExt->entryCount; i++) { + files[i].first.assign(compInfo[i].filePath); + Lz4FileInfo* info = &files[i].second; + info->fileInfo.identity.assign(compInfo[i].componentAddr); + info->fileInfo.packMethod = PKG_COMPRESS_METHOD_LZ4; + info->fileInfo.digestMethod = PKG_DIGEST_TYPE_CRC; + info->compressionLevel = MID_COMPRESS_LEVEL; + info->blockSizeID = 0; + info->contentChecksumFlag = 0; + info->blockIndependence = 0; + } + return PKG_SUCCESS; +} +} + +int32_t CreatePackage(const UpgradePkgInfoExt *pkgInfoExt, + std::vector &compInfo, + const char *path, + const char *keyPath) +{ + if (pkgInfoExt == nullptr || path == nullptr || keyPath == nullptr || pkgInfoExt->entryCount > compInfo.size()) { + LOG(ERROR) << "Check param fail "; + return PKG_INVALID_PARAM; + } + PkgManager::PkgManagerPtr manager = PkgManager::CreatePackageInstance(); + if (manager == nullptr) { + LOG(ERROR) << "CreatePackageInstance fail "; + return PKG_INVALID_PARAM; + } + + int32_t ret = PKG_SUCCESS; + switch (pkgInfoExt->pkgType) { + case PKG_PACK_TYPE_UPGRADE: { + UpgradePkgInfo upgradePackageInfo; + std::vector> files; + ret = GetUpgradePkgInfo(&upgradePackageInfo, files, pkgInfoExt, compInfo); + if (ret == PKG_SUCCESS) { + ret = manager->CreatePackage(path, keyPath, &upgradePackageInfo.pkgInfo, files); + } + break; + } + case PKG_PACK_TYPE_ZIP: + case PKG_PACK_TYPE_GZIP: { + PkgInfo info; + std::vector> files; + ret = GetZipPkgInfo(&info, files, pkgInfoExt, compInfo); + if (ret == PKG_SUCCESS) { + ret = manager->CreatePackage(path, keyPath, &info, files); + } + break; + } + case PKG_PACK_TYPE_LZ4: { + PkgInfo info; + std::vector> files; + ret = GetLz4PkgInfo(&info, files, pkgInfoExt, compInfo); + if (ret == PKG_SUCCESS) { + ret = manager->CreatePackage(path, keyPath, &info, files); + } + break; + } + default: + ret = PKG_INVALID_PARAM; + break; + } + PkgManager::ReleasePackageInstance(manager); + return ret; +} + +int32_t VerifyPackage(const char *packagePath, + const char *keyPath, + const char *version, + const uint8_t *digest, + size_t size) +{ + if (packagePath == nullptr || keyPath == nullptr || version == nullptr) { + LOG(ERROR) << "Check param fail"; + return PKG_INVALID_PARAM; + } + PkgManager::PkgManagerPtr manager = PkgManager::CreatePackageInstance(); + if (manager == nullptr) { + LOG(ERROR) << "CreatePackageInstance fail"; + return PKG_INVALID_PARAM; + } + + PkgBuffer digestBuffer(const_cast(digest), size); + int32_t ret = manager->VerifyPackage(packagePath, keyPath, version, digestBuffer, + [](int32_t result, uint32_t percent) {}); + PkgManager::ReleasePackageInstance(manager); + return ret; +} + +int32_t VerifyPackageWithCallback(const std::string &packagePath, + const std::string &keyPath, std::function cb) +{ + if (packagePath.empty() || keyPath.empty() || cb == nullptr) { + return PKG_INVALID_PARAM; + } + + PkgManager *manager = PkgManager::CreatePackageInstance(); + if (manager == nullptr) { + LOG(ERROR) << "CreatePackageInstance fail"; + return PKG_INVALID_PARAM; + } + PkgBuffer digestBuffer {}; + std::string version {}; + int32_t ret = manager->VerifyPackage(packagePath, keyPath, version, digestBuffer, cb); + if (ret != 0) { + cb(ret, VERIFY_FINSH_PERCENT); + } + PkgManager::ReleasePackageInstance(manager); + return ret; +} + +int32_t ExtraPackageDir(const char *packagePath, [[maybe_unused]] const char *keyPath, const char *dir, + const char *outPath) +{ + if (packagePath == nullptr || outPath == nullptr) { + LOG(ERROR) << "Check param fail "; + return PKG_INVALID_PARAM; + } + PkgManager::PkgManagerPtr manager = PkgManager::CreatePackageInstance(); + if (manager == nullptr) { + LOG(ERROR) << "CreatePackageInstance fail "; + return PKG_INVALID_PARAM; + } + + std::vector components; + int32_t ret = manager->LoadPackageWithoutUnPack(std::string(packagePath), components); + if (ret != PKG_SUCCESS) { + LOG(ERROR) << "LoadPackageWithoutUnPack fail"; + PkgManager::ReleasePackageInstance(manager); + return ret; + } + + for (size_t i = 0; i < components.size(); i++) { + if (dir != nullptr && components[i].compare(0, strlen(dir), dir) != 0) { + continue; + } + PkgManager::StreamPtr outStream = nullptr; + manager->CreatePkgStream(outStream, std::string(outPath) + components[i], 0, PkgStream::PkgStreamType_Write); + if (outStream == nullptr) { + LOG(ERROR) << "CreatePkgStream fail"; + PkgManager::ReleasePackageInstance(manager); + return PKG_INVALID_STREAM; + } + manager->ExtractFile(components[i], outStream); + manager->ClosePkgStream(outStream); + } + PkgManager::ReleasePackageInstance(manager); + return PKG_SUCCESS; +} + +int32_t ExtraPackageFile(const char *packagePath, [[maybe_unused]] const char *keyPath, const char *file, + const char *outPath) +{ + if (packagePath == nullptr || outPath == nullptr || file == nullptr) { + LOG(ERROR) << "Check param fail "; + return PKG_INVALID_PARAM; + } + + PkgManager::PkgManagerPtr manager = PkgManager::CreatePackageInstance(); + if (manager == nullptr) { + LOG(ERROR) << "Check param fail "; + return PKG_INVALID_PARAM; + } + + std::vector components; + int32_t ret = manager->LoadPackageWithoutUnPack(std::string(packagePath), components); + if (ret != PKG_SUCCESS) { + LOG(ERROR) << "LoadPackageWithoutUnPack fail"; + PkgManager::ReleasePackageInstance(manager); + return ret; + } + + PkgManager::StreamPtr outStream = nullptr; + manager->CreatePkgStream(outStream, std::string(outPath) + file, 0, PkgStream::PkgStreamType_Write); + if (outStream == nullptr) { + LOG(ERROR) << "CreatePkgStream fail"; + PkgManager::ReleasePackageInstance(manager); + return PKG_INVALID_STREAM; + } + ret = manager->ExtractFile(file, outStream); + if (ret != PKG_SUCCESS) { + LOG(ERROR) << "extract file failed" << file; + manager->ClosePkgStream(outStream); + PkgManager::ReleasePackageInstance(manager); + return PKG_INVALID_FILE; + } + manager->ClosePkgStream(outStream); + PkgManager::ReleasePackageInstance(manager); + return PKG_SUCCESS; +} -- Gitee From de28b5ef689fad2df3f3a77d3407a2ad8fd251e8 Mon Sep 17 00:00:00 2001 From: richard Date: Mon, 16 Dec 2024 03:45:38 +0000 Subject: [PATCH 38/41] update interfaces/kits/packages/package.cpp. Signed-off-by: richard --- interfaces/kits/packages/package.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/interfaces/kits/packages/package.cpp b/interfaces/kits/packages/package.cpp index c61dd543..ea618a6c 100755 --- a/interfaces/kits/packages/package.cpp +++ b/interfaces/kits/packages/package.cpp @@ -301,13 +301,8 @@ int32_t ExtraPackageFile(const char *packagePath, [[maybe_unused]] const char *k PkgManager::ReleasePackageInstance(manager); return PKG_INVALID_STREAM; } - ret = manager->ExtractFile(file, outStream); - if (ret != PKG_SUCCESS) { - LOG(ERROR) << "extract file failed" << file; - manager->ClosePkgStream(outStream); - PkgManager::ReleasePackageInstance(manager); - return PKG_INVALID_FILE; - } + manager->ExtractFile(file, outStream); + manager->ClosePkgStream(outStream); PkgManager::ReleasePackageInstance(manager); return PKG_SUCCESS; -- Gitee From 834ea081b3dfd52863781f9e139bd1123f0a86a3 Mon Sep 17 00:00:00 2001 From: richard Date: Mon, 16 Dec 2024 04:02:43 +0000 Subject: [PATCH 39/41] add Signed-off-by: richard --- interfaces/kits/packages/package.cpp | 1 - services/applypatch/transfer_manager.cpp | 10 +------ services/fs_manager/mount.cpp | 22 +++------------ services/hwfault_retry/hwfault_retry.cpp | 10 ------- services/include/log/dump.h | 10 ------- services/include/updater/hwfault_retry.h | 2 -- services/include/updater/updater_const.h | 1 - services/package/pkg_verify/openssl_util.cpp | 7 ++--- .../package/pkg_verify/pkg_verify_util.cpp | 5 +--- services/ptable_parse/ufs_ptable.cpp | 17 +----------- services/ptable_parse/ufs_ptable.h | 2 -- .../script_interpreter/script_interpreter.cpp | 2 -- services/updater.cpp | 5 ---- services/updater_main.cpp | 1 - test/unittest/flashd_test/BUILD.gn | 27 ++++++++++--------- test/unittest/package/pkg_verify_unittest.cpp | 2 +- .../updater_test/hwfault_retry_unittest.cpp | 10 ------- updater_default_cfg.gni | 6 ----- 18 files changed, 24 insertions(+), 116 deletions(-) diff --git a/interfaces/kits/packages/package.cpp b/interfaces/kits/packages/package.cpp index ea618a6c..f82cd2c8 100755 --- a/interfaces/kits/packages/package.cpp +++ b/interfaces/kits/packages/package.cpp @@ -302,7 +302,6 @@ int32_t ExtraPackageFile(const char *packagePath, [[maybe_unused]] const char *k return PKG_INVALID_STREAM; } manager->ExtractFile(file, outStream); - manager->ClosePkgStream(outStream); PkgManager::ReleasePackageInstance(manager); return PKG_SUCCESS; diff --git a/services/applypatch/transfer_manager.cpp b/services/applypatch/transfer_manager.cpp index 3b4ed3cc..3810cca3 100644 --- a/services/applypatch/transfer_manager.cpp +++ b/services/applypatch/transfer_manager.cpp @@ -42,9 +42,6 @@ bool TransferManager::CommandsExecute(int fd, Command &cmd) return false; } CommandResult ret = cf->Execute(cmd); - if (!cmd.GetTransferParams()->canWrite) { - return ret == SUCCESS; - } if (!CheckResult(ret, cmd.GetCommandLine(), cmd.GetCommandType())) { return false; } @@ -191,17 +188,12 @@ bool TransferManager::CheckResult(const CommandResult result, const std::string } break; case NEED_RETRY: - LOG(INFO) << "IO failed. Running command need retry!"; + LOG(INFO) << "Running command need retry!"; if (transferParams_->env != nullptr) { transferParams_->env->PostMessage("retry_update", IO_FAILED_REBOOT); } return false; case FAILED: - LOG(INFO) << "Block update failed. Running command need retry!"; - if (transferParams_->env != nullptr) { - transferParams_->env->PostMessage("retry_update", BLOCK_UPDATE_FAILED_REBOOT); - } - return false; default: LOG(ERROR) << "Running command failed"; return false; diff --git a/services/fs_manager/mount.cpp b/services/fs_manager/mount.cpp index 4b84c1d9..22bd2cf6 100644 --- a/services/fs_manager/mount.cpp +++ b/services/fs_manager/mount.cpp @@ -123,8 +123,10 @@ int UmountForPath(const std::string& path) } return 0; } -static int LoopToMount(char *argv[], std::string source, std::string target) +static int MountNtfsWithRetry(std::string source, std::string target) { + char *argv[] = {const_cast("system/bin/mount.ntfs"), + const_cast(source.c_str()), const_cast(target.c_str()), nullptr}; int num = 0; do { pid_t child = fork(); @@ -161,20 +163,6 @@ static int LoopToMount(char *argv[], std::string source, std::string target) return -1; } -static int MountNtfsWithRetry(std::string source, std::string target) -{ - char *argv[] = {const_cast("system/bin/mount.ntfs"), - const_cast(source.c_str()), const_cast(target.c_str()), nullptr}; - return LoopToMount(argv, source, target); -} - -static int MountExfatWithRetry(std::string source, std::string target) -{ - char *argv[] = {const_cast("system/bin/mount.exfat"), - const_cast(source.c_str()), const_cast(target.c_str()), nullptr}; - return LoopToMount(argv, source, target); -} - int MountSdcard(std::string &path, std::string &mountPoint) { if (path.empty() || mountPoint.empty()) { @@ -199,10 +187,6 @@ int MountSdcard(std::string &path, std::string &mountPoint) LOG(INFO) << "mount success, sdcard type is ntfs"; return 0; } - if (MountExfatWithRetry(path, mountPoint) == 0) { - LOG(INFO) << "mount success, sdcard type is exfat"; - return 0; - } return -1; } diff --git a/services/hwfault_retry/hwfault_retry.cpp b/services/hwfault_retry/hwfault_retry.cpp index 2b67adbc..433af9c5 100644 --- a/services/hwfault_retry/hwfault_retry.cpp +++ b/services/hwfault_retry/hwfault_retry.cpp @@ -37,7 +37,6 @@ HwFaultRetry::HwFaultRetry() }; RegisterFunc(VERIFY_FAILED_REBOOT, rebootFunc); RegisterFunc(IO_FAILED_REBOOT, rebootFunc); - RegisterFunc(BLOCK_UPDATE_FAILED_REBOOT, rebootFunc); } void HwFaultRetry::RegisterFunc(const std::string &faultInfo, RetryFunc func) @@ -67,17 +66,8 @@ void HwFaultRetry::SetRetryCount(const uint32_t count) retryCount_ = count; } -void HwFaultRetry::SetEffectiveValue(bool value) -{ - effective_ = value; -} - void HwFaultRetry::RebootRetry() { - if (!effective_) { - LOG(WARNING) << "Special scenarios do not take effect, not need retry."; - return; - } if (retryCount_ >= MAX_RETRY_COUNT) { LOG(INFO) << "retry more than 3 times, no need retry"; return; diff --git a/services/include/log/dump.h b/services/include/log/dump.h index 67bb2570..272584d5 100644 --- a/services/include/log/dump.h +++ b/services/include/log/dump.h @@ -35,7 +35,6 @@ namespace Updater { class DumpHelper { public: virtual void RecordDump(const std::string &str) = 0; - virtual void ClearDump(void) = 0; virtual ~DumpHelper() {} }; @@ -45,7 +44,6 @@ public: { LOG(ERROR) << str; } - void ClearDump(void) override {} ~DumpHelperLog() override {} }; @@ -71,14 +69,6 @@ public: } } } - void ClearDump(void) - { - for (const auto &[key, value] : helpers_) { - if (value != nullptr) { - value->ClearDump(); - } - } - } private: Dump() {} diff --git a/services/include/updater/hwfault_retry.h b/services/include/updater/hwfault_retry.h index b0711dda..2927b6a5 100644 --- a/services/include/updater/hwfault_retry.h +++ b/services/include/updater/hwfault_retry.h @@ -33,7 +33,6 @@ public: void RegisterFunc(const std::string &faultInfo, RetryFunc func); void SetFaultInfo(const std::string &faultInfo); void SetRetryCount(const uint32_t count); - void SetEffectiveValue(bool value); private: void RebootRetry(); @@ -41,7 +40,6 @@ private: std::unordered_map retryMap_; std::string faultInfo_; uint32_t retryCount_ {}; - bool effective_ = true; }; } // Updater #endif // UPDATER_HWFAULT_RETRY_H diff --git a/services/include/updater/updater_const.h b/services/include/updater/updater_const.h index 2496e4bc..ad6a29e7 100644 --- a/services/include/updater/updater_const.h +++ b/services/include/updater/updater_const.h @@ -82,7 +82,6 @@ constexpr const char *MMC_SIZE_FILE = "/data/class/block/mmcblk0/size"; constexpr const char *UPDATER_RETRY_TAG = "retry_update"; constexpr const char *VERIFY_FAILED_REBOOT = "reboot_verify_failed"; constexpr const char *IO_FAILED_REBOOT = "reboot_IO_failed"; -constexpr const char *BLOCK_UPDATE_FAILED_REBOOT = "reboot_block_update_failed"; constexpr int MAX_RETRY_COUNT = 3; constexpr int MINIMAL_ARGC_LIMIT = 2; diff --git a/services/package/pkg_verify/openssl_util.cpp b/services/package/pkg_verify/openssl_util.cpp index a2ed3711..e73d4f1c 100644 --- a/services/package/pkg_verify/openssl_util.cpp +++ b/services/package/pkg_verify/openssl_util.cpp @@ -218,11 +218,11 @@ int32_t CalcSha256Digest(const PkgStreamPtr srcData, const size_t dataLen, std:: UPDATER_LAST_WORD(-1); return -1; } - SHA256_Update(&ctx, buffer.buffer, readLen); + SHA256_Update(&ctx, buffer.buffer, blockLen); offset += readLen; remainLen -= readLen; } - while (remainLen > 0) { + if (remainLen > 0) { ret = srcData->Read(buffer, offset, remainLen, readLen); if (ret != 0) { PKG_LOGE("Fail read data"); @@ -230,9 +230,6 @@ int32_t CalcSha256Digest(const PkgStreamPtr srcData, const size_t dataLen, std:: return -1; } SHA256_Update(&ctx, buffer.buffer, readLen); - offset += readLen; - PKG_LOGI("use new remainLen"); - remainLen -= readLen; } if (SHA256_Final(result.data(), &ctx) != 1) { diff --git a/services/package/pkg_verify/pkg_verify_util.cpp b/services/package/pkg_verify/pkg_verify_util.cpp index 596c7bc4..7e28cfd8 100644 --- a/services/package/pkg_verify/pkg_verify_util.cpp +++ b/services/package/pkg_verify/pkg_verify_util.cpp @@ -120,14 +120,11 @@ int32_t PkgVerifyUtil::VerifyPackageSign(const PkgStreamPtr pkgStream, const std } size_t srcDataLen = pkgStream->GetFileLength() - commentTotalLenAll - 2; - ret = HashCheck(pkgStream, srcDataLen, hash, path); + ret = HashCheck(pkgStream, srcDataLen, hash, path); if (ret != PKG_SUCCESS) { srcDataLen = pkgStream->GetFileLength() - signatureSize - ZIP_EOCD_FIXED_PART_LEN; ret = HashCheck(pkgStream, srcDataLen, hash, path); } - if (ret == PKG_SUCCESS) { - UPDATER_CLEAR_RECORD; - } PKG_LOGI("verify package signature %s", ret == PKG_SUCCESS ? "successfull" : "failed"); return ret; } diff --git a/services/ptable_parse/ufs_ptable.cpp b/services/ptable_parse/ufs_ptable.cpp index 0c6e7e01..cfda373b 100644 --- a/services/ptable_parse/ufs_ptable.cpp +++ b/services/ptable_parse/ufs_ptable.cpp @@ -45,21 +45,6 @@ uint32_t UfsPtable::GetPtableExtraOffset(void) } // avoid u disk being recognized as a valid gpt lun device -bool UfsPtable::IsUsbPath(const uint32_t lunIndex) -{ - char lunIndexName = 'a' + lunIndex; - const char* targetUsbString = "usb"; - const char* targetXhciString = "xhci"; - char linkBuf[READ_LINK_BUFFER_LENTH] = {0}; - std::string filePath = std::string(PREFIX_SYS_CLASS_BLOCK) + lunIndexName; - ssize_t retSize = readlink(filePath.c_str(), linkBuf, READ_LINK_BUFFER_LENTH - 1); - LOG(INFO) << "readlink " << filePath << " retSzie " << retSize << ", linkBuf is: " << linkBuf; - if (retSize > 0 && (strstr(linkBuf, targetUsbString) != nullptr || strstr(linkBuf, targetXhciString) != nullptr)) { - return true; - } - return false; -} - bool UfsPtable::CheckDeviceLunRemoveable(const uint32_t lunIndex) { constexpr uint32_t minRemoveableStartIdx = 3; @@ -103,7 +88,7 @@ void UfsPtable::SetDeviceLunNum() break; } #ifndef UPDATER_UT - if (CheckDeviceLunRemoveable(lunIndex) || IsUsbPath(lunIndex)) { + if (CheckDeviceLunRemoveable(lunIndex)) { LOG(ERROR) << "device " << ufsNode << " is removable, may be a u disk"; break; } diff --git a/services/ptable_parse/ufs_ptable.h b/services/ptable_parse/ufs_ptable.h index f6ee7809..b0180f91 100644 --- a/services/ptable_parse/ufs_ptable.h +++ b/services/ptable_parse/ufs_ptable.h @@ -41,7 +41,6 @@ public: static constexpr uint32_t MAX_LUN_NUMBERS = 26; static constexpr uint32_t MIN_UFS_WRITE_SIZE = 4096; static constexpr uint32_t GPT_PTABLE_BACKUP_SIZE = 33; // back ptable at the end of lun - static constexpr uint32_t READ_LINK_BUFFER_LENTH = 1024; // readlink buffer size struct UfsPartitionDataInfo { bool isGptVaild; @@ -78,7 +77,6 @@ public: uint8_t *GetPtableImageUfsLunPmbrStart(uint8_t *imageBuf, const uint32_t lunIndex); uint8_t *GetPtableImageUfsLunGptHeaderStart(uint8_t *imageBuf, const uint32_t lunIndex); uint8_t *GetPtableImageUfsLunEntryStart(uint8_t *imageBuf, const uint32_t lunIndex); - bool IsUsbPath(const uint32_t lunIndex); }; } // namespace Updater #endif // UPDATER_UFS_PTABLE_H \ No newline at end of file diff --git a/services/script/script_interpreter/script_interpreter.cpp b/services/script/script_interpreter/script_interpreter.cpp index edb3a2e3..5eb73309 100644 --- a/services/script/script_interpreter/script_interpreter.cpp +++ b/services/script/script_interpreter/script_interpreter.cpp @@ -42,8 +42,6 @@ int32_t ScriptInterpreter::ExecuteScript(ScriptManagerImpl *manager, Hpackage::P } int32_t ret = inter->LoadScript(pkgStream); if (ret != USCRIPT_SUCCESS) { - delete inter; - inter = nullptr; USCRIPT_LOGE("Fail to loadScript script %s", pkgStream->GetFileName().c_str()); UPDATER_LAST_WORD(USCRIPT_ERROR_CREATE_OBJ); return ret; diff --git a/services/updater.cpp b/services/updater.cpp index ce59f33f..3f5a9eeb 100644 --- a/services/updater.cpp +++ b/services/updater.cpp @@ -294,12 +294,10 @@ UpdaterStatus DoInstallUpdaterPackage(PkgManager::PkgManagerPtr pkgManager, Upda int ret = GetUpdatePackageInfo(pkgManager, upParams.updatePackage[upParams.pkgLocation]); if (ret != 0) { LOG(ERROR) << "get update package info fail"; - UPDATER_LAST_WORD(UPDATE_CORRUPT, "GetUpdatePackageInfo failed"); return UPDATE_CORRUPT; } if (!PreStartBinaryEntry(upParams.updatePackage[upParams.pkgLocation])) { LOG(ERROR) << "pre binary process failed"; - UPDATER_LAST_WORD(UPDATE_ERROR, "PreStartBinaryEntry failed"); return UPDATE_ERROR; } @@ -307,7 +305,6 @@ UpdaterStatus DoInstallUpdaterPackage(PkgManager::PkgManagerPtr pkgManager, Upda UpdaterStatus updateRet = StartUpdaterProc(pkgManager, upParams); if (updateRet != UPDATE_SUCCESS) { UPDATER_UI_INSTANCE.ShowUpdInfo(TR(UPD_INSTALL_FAIL)); - UPDATER_LAST_WORD(updateRet, "StartUpdaterProc failed"); LOG(ERROR) << "Install package failed."; } if (WriteResult(upParams.updatePackage[upParams.pkgLocation], @@ -421,7 +418,6 @@ UpdaterStatus HandlePipeMsg(UpdaterParams &upParams, int pipeRead, bool &retryUp FILE* fromChild = fdopen(pipeRead, "r"); if (fromChild == nullptr) { LOG(ERROR) << "fdopen pipeRead failed"; - UPDATER_LAST_WORD(UPDATE_ERROR); return UPDATE_ERROR; } while (fgets(buffer, MAX_BUFFER_SIZE - 1, fromChild) != nullptr) { @@ -505,7 +501,6 @@ UpdaterStatus StartUpdaterProc(PkgManager::PkgManagerPtr pkgManager, UpdaterPara pid_t pid = fork(); if (pid < 0) { ERROR_CODE(CODE_FORK_FAIL); - UPDATER_LAST_WORD(UPDATE_ERROR, "fork failed"); return UPDATE_ERROR; } diff --git a/services/updater_main.cpp b/services/updater_main.cpp index 15246514..8abf00a4 100644 --- a/services/updater_main.cpp +++ b/services/updater_main.cpp @@ -707,7 +707,6 @@ std::unordered_map> InitOptionsFuncTab(char* {"sdcard_update", [&]() -> void { upParams.updateMode = SDCARD_UPDATE; - upParams.sdExtMode = SDCARD_NORMAL_UPDATE; }}, {"UPDATE:MAINIMG", [&]() -> void { diff --git a/test/unittest/flashd_test/BUILD.gn b/test/unittest/flashd_test/BUILD.gn index 6fb16a94..c682a38a 100644 --- a/test/unittest/flashd_test/BUILD.gn +++ b/test/unittest/flashd_test/BUILD.gn @@ -83,6 +83,11 @@ ohos_unittest("flashd_unittest") { "${updater_path}/services/ptable_parse", "${updater_path}/utils/include", "${updater_path}/utils/json", + "//base/startup/init/services/include/param", + "//third_party/bounds_checking_function/include", + "//third_party/cJSON", + "//third_party/lz4/lib", + "//third_party/libuv", ] deps = [ @@ -98,23 +103,22 @@ ohos_unittest("flashd_unittest") { "${updater_path}/services/package:libupdaterpackage", "${updater_path}/services/script:libupdaterscript", "${updater_path}/utils:libutils", + "//third_party/bounds_checking_function:libsec_static", + "//third_party/bzip2:libbz2", + "//third_party/cJSON:cjson", + "//third_party/googletest:gmock_main", + "//third_party/googletest:gtest_main", + "//third_party/libuv:uv", + "//third_party/lz4:liblz4_static", + "//third_party/openssl:libcrypto_shared", + "//third_party/zlib:libz", ] external_deps = [ - "bounds_checking_function:libsec_static", - "bzip2:libbz2", - "cJSON:cjson", - "googletest:gmock_main", - "googletest:gtest_main", "hilog:libhilog", "init:libbegetutil_static", "libuv:uv", - "lz4:liblz4_static", - "openssl:libcrypto_shared", ] - if (updater_zlib_enable) { - external_deps += [ "zlib:libz" ] - } configs = [ "${updater_path}/test/unittest:utest_config" ] install_enable = true part_name = "updater" @@ -145,9 +149,8 @@ ohos_unittest("flashd_utils_unittest") { "c_utils:utils", "hilog:libhilog", "init:libbegetutil_static", - "libuv:uv", ] - deps = [] + deps = [ "//third_party/libuv:uv" ] configs = [ "${updater_path}/test/unittest:utest_config" ] install_enable = true part_name = "updater" diff --git a/test/unittest/package/pkg_verify_unittest.cpp b/test/unittest/package/pkg_verify_unittest.cpp index d3f583f5..33e86a18 100644 --- a/test/unittest/package/pkg_verify_unittest.cpp +++ b/test/unittest/package/pkg_verify_unittest.cpp @@ -64,7 +64,7 @@ public: packagePath = testPackagePath + "test_package.zip"; keyPath = "/data/updater/src/signing_cert.crt"; - file = "update.bin"; + file = "updater.bin"; ret = ExtraPackageFile(packagePath.c_str(), keyPath.c_str(), file.c_str(), testPackagePath.c_str()); EXPECT_EQ(ret, PKG_SUCCESS); return 0; diff --git a/test/unittest/updater_test/hwfault_retry_unittest.cpp b/test/unittest/updater_test/hwfault_retry_unittest.cpp index b65e82df..aca888c0 100644 --- a/test/unittest/updater_test/hwfault_retry_unittest.cpp +++ b/test/unittest/updater_test/hwfault_retry_unittest.cpp @@ -76,14 +76,4 @@ HWTEST_F(HwfaultRetryUnitTest, RetryMoreThanMax, TestSize.Level1) bool ret = Utils::CheckFaultInfo(IO_FAILED_REBOOT); EXPECT_EQ(ret, false); } - -HWTEST_F(HwfaultRetryUnitTest, SetEffectiveValueTest, TestSize.Level1) -{ - HwFaultRetry::GetInstance().SetEffectiveValue(false); - HwFaultRetry::GetInstance().SetFaultInfo(VERIFY_FAILED_REBOOT); - HwFaultRetry::GetInstance().SetRetryCount(0); - HwFaultRetry::GetInstance().DoRetryAction(); - - EXPECT_FALSE(Utils::CheckFaultInfo(VERIFY_FAILED_REBOOT)); -} } \ No newline at end of file diff --git a/updater_default_cfg.gni b/updater_default_cfg.gni index 4f84e9f2..2f8f2101 100644 --- a/updater_default_cfg.gni +++ b/updater_default_cfg.gni @@ -24,12 +24,6 @@ declare_args() { updater_absolutely_path = "//base/update/updater" hdc_base = "//developtools/hdc" updater_sign_on_server = false - updater_zlib_enable = true - - if (defined(global_parts_info) && - !defined(global_parts_info.third_party_zlib)) { - updater_zlib_enable = false - } } if (updater_cfg_file != "") { -- Gitee From 416cd6e678476c6b998556f5a973a7a740916752 Mon Sep 17 00:00:00 2001 From: richard Date: Mon, 16 Dec 2024 04:05:45 +0000 Subject: [PATCH 40/41] add Signed-off-by: richard --- interfaces/kits/packages/package.cpp | 1 + services/fs_manager/mount.cpp | 1 + services/include/log/dump.h | 1 - services/updater.cpp | 1 + test/unittest/flashd_test/BUILD.gn | 1 - 5 files changed, 3 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/packages/package.cpp b/interfaces/kits/packages/package.cpp index f82cd2c8..ea618a6c 100755 --- a/interfaces/kits/packages/package.cpp +++ b/interfaces/kits/packages/package.cpp @@ -302,6 +302,7 @@ int32_t ExtraPackageFile(const char *packagePath, [[maybe_unused]] const char *k return PKG_INVALID_STREAM; } manager->ExtractFile(file, outStream); + manager->ClosePkgStream(outStream); PkgManager::ReleasePackageInstance(manager); return PKG_SUCCESS; diff --git a/services/fs_manager/mount.cpp b/services/fs_manager/mount.cpp index 22bd2cf6..bb9f462d 100644 --- a/services/fs_manager/mount.cpp +++ b/services/fs_manager/mount.cpp @@ -123,6 +123,7 @@ int UmountForPath(const std::string& path) } return 0; } + static int MountNtfsWithRetry(std::string source, std::string target) { char *argv[] = {const_cast("system/bin/mount.ntfs"), diff --git a/services/include/log/dump.h b/services/include/log/dump.h index 272584d5..cc200e5f 100644 --- a/services/include/log/dump.h +++ b/services/include/log/dump.h @@ -29,7 +29,6 @@ #define UPDATER_LAST_WORD Updater::Dump::GetInstance().DumpInfo #define UPDATER_INIT_RECORD DumpStageHelper stageHelper(__FUNCTION__) -#define UPDATER_CLEAR_RECORD Updater::Dump::GetInstance().ClearDump() namespace Updater { class DumpHelper { diff --git a/services/updater.cpp b/services/updater.cpp index 3f5a9eeb..3644eace 100644 --- a/services/updater.cpp +++ b/services/updater.cpp @@ -501,6 +501,7 @@ UpdaterStatus StartUpdaterProc(PkgManager::PkgManagerPtr pkgManager, UpdaterPara pid_t pid = fork(); if (pid < 0) { ERROR_CODE(CODE_FORK_FAIL); + UPDATER_LAST_WORD(UPDATE_ERROR); return UPDATE_ERROR; } diff --git a/test/unittest/flashd_test/BUILD.gn b/test/unittest/flashd_test/BUILD.gn index c682a38a..6bb32d8f 100644 --- a/test/unittest/flashd_test/BUILD.gn +++ b/test/unittest/flashd_test/BUILD.gn @@ -117,7 +117,6 @@ ohos_unittest("flashd_unittest") { external_deps = [ "hilog:libhilog", "init:libbegetutil_static", - "libuv:uv", ] configs = [ "${updater_path}/test/unittest:utest_config" ] install_enable = true -- Gitee From 328e8deaea55357176a41e24ecaff22a169cd269 Mon Sep 17 00:00:00 2001 From: richard Date: Mon, 16 Dec 2024 04:06:27 +0000 Subject: [PATCH 41/41] add Signed-off-by: richard --- test/unittest/flashd_test/BUILD.gn | 1 + 1 file changed, 1 insertion(+) diff --git a/test/unittest/flashd_test/BUILD.gn b/test/unittest/flashd_test/BUILD.gn index 6bb32d8f..49a51a14 100644 --- a/test/unittest/flashd_test/BUILD.gn +++ b/test/unittest/flashd_test/BUILD.gn @@ -139,6 +139,7 @@ ohos_unittest("flashd_utils_unittest") { "${updater_path}/services/include", "${updater_path}/utils/include", "${updater_path}/services/flashd", + "//third_party/libuv", "${updater_path}/interfaces/kits/include", "${updater_path}/services/common", "${updater_path}/services/flashd/common", -- Gitee