diff --git a/services/flashd/daemon/flash_commander.cpp b/services/flashd/daemon/flash_commander.cpp index 1c2fb9b16f57b1f0dafc14ba49432eb97e80eeed..733afea60f1bdb963ccb42f2243fa758ffa17bf7 100644 --- a/services/flashd/daemon/flash_commander.cpp +++ b/services/flashd/daemon/flash_commander.cpp @@ -80,7 +80,9 @@ void FlashCommander::DoCommand(const uint8_t *payload, int payloadSize) bool FlashCommander::InitPartition(const std::string &partName, const uint8_t *buffer, int bufferSize) { #ifdef UPDATER_USE_PTABLE - DevicePtable::GetInstance().LoadPartitionInfo(); + if (!DevicePtable::GetInstance().LoadPartitionInfo()) { + return false; + } #endif std::unique_ptr writer = FlashdImageWriter::GetInstance().GetWriter( partName, buffer, bufferSize); diff --git a/services/flashd/partition.cpp b/services/flashd/partition.cpp index 9094fca3cd0dcdd6175ba5825029bb07db1cb2ae..25b42da4992de9a5c5f502832853eba0c14b79bc 100644 --- a/services/flashd/partition.cpp +++ b/services/flashd/partition.cpp @@ -44,7 +44,9 @@ int Partition::DoFlash(const uint8_t *buffer, int bufferSize) const int Partition::DoErase() const { #ifdef UPDATER_USE_PTABLE - DevicePtable::GetInstance().LoadPartitionInfo(); + if (!DevicePtable::GetInstance().LoadPartitionInfo()) { + return FLASHING_ARG_INVALID; + } DevicePtable &devicePtb = DevicePtable::GetInstance(); Ptable::PtnInfo ptnInfo; diff --git a/services/ptable_parse/ptable_manager.cpp b/services/ptable_parse/ptable_manager.cpp index af91d8a975764a0135656488be0abdbf6426c7bc..713df87172c565b7cb741e2649121d9a30f6eaef 100644 --- a/services/ptable_parse/ptable_manager.cpp +++ b/services/ptable_parse/ptable_manager.cpp @@ -53,7 +53,7 @@ bool PtableManager::IsUfsDevice() return GetBootdevType() != 0; } -void PtableManager::ReloadDevicePartition(Hpackage::PkgManager *pkgManager) +bool PtableManager::ReloadDevicePartition(Hpackage::PkgManager *pkgManager) { return LoadPartitionInfo(pkgManager); } @@ -288,43 +288,43 @@ void PtableManager::InitCompositePtable() // class PackagePtable PackagePtable::PackagePtable() : PtableManager() {} -void PackagePtable::LoadPartitionInfo([[maybe_unused]] Hpackage::PkgManager *pkgManager) +bool PackagePtable::LoadPartitionInfo([[maybe_unused]] Hpackage::PkgManager *pkgManager) { if (pkgManager == nullptr) { LOG(ERROR) << "pkgManager is nullptr"; - return; + return false; } if (!InitPtableManager()) { LOG(ERROR) << "init ptable manager error"; - return; + return false; } uint32_t imgBufSize = pPtable_->GetDefaultImageSize(); if (imgBufSize <= 0) { LOG(ERROR) << "Invalid imgBufSize"; - return; + return false; } uint8_t *imageBuf = new(std::nothrow) uint8_t[imgBufSize](); if (imageBuf == nullptr) { LOG(ERROR) << "new ptable_buffer error"; - return; + return false; } if (!GetPtableBufferFromPkg(pkgManager, imageBuf, imgBufSize)) { LOG(ERROR) << "get ptable buffer failed"; delete [] imageBuf; - return; + return false; } if (!pPtable_->ParsePartitionFromBuffer(imageBuf, imgBufSize)) { LOG(ERROR) << "get ptable from ptable image buffer failed"; delete [] imageBuf; - return; + return false; } delete [] imageBuf; LOG(INFO) << "print package partition info:"; pPtable_->PrintPtableInfo(); - return; + return true; } bool PackagePtable::GetPtableBufferFromPkg(Hpackage::PkgManager *pkgManager, uint8_t *&imageBuf, uint32_t size) @@ -372,21 +372,21 @@ bool PackagePtable::GetPtableBufferFromPkg(Hpackage::PkgManager *pkgManager, uin // class DevicePtable DevicePtable::DevicePtable() : PtableManager() {} -void DevicePtable::LoadPartitionInfo([[maybe_unused]] Hpackage::PkgManager *pkgManager) +bool DevicePtable::LoadPartitionInfo([[maybe_unused]] Hpackage::PkgManager *pkgManager) { (void)pkgManager; if (!InitPtableManager()) { LOG(ERROR) << "init ptable manager error"; - return; + return false; } if (!pPtable_->LoadPtableFromDevice()) { LOG(ERROR) << "load device parititon to ram fail"; - return; + return false; } LOG(INFO) << "print device partition info:"; pPtable_->PrintPtableInfo(); - return; + return true; } bool DevicePtable::ComparePartition(PtableManager &newPtbManager, const std::string partitionName) diff --git a/services/ptable_parse/ptable_manager.h b/services/ptable_parse/ptable_manager.h index 5231b3c1e2144eae45f33c6ebbcfc1320b3c6ed4..1734d51479be877674a434aa00ee838abc9f6ddf 100644 --- a/services/ptable_parse/ptable_manager.h +++ b/services/ptable_parse/ptable_manager.h @@ -33,8 +33,8 @@ public: STORAGE_UFS, }; - virtual void LoadPartitionInfo([[maybe_unused]] Hpackage::PkgManager *pkgManager = nullptr) = 0; - void ReloadDevicePartition(Hpackage::PkgManager *pkgManager); + virtual bool LoadPartitionInfo([[maybe_unused]] Hpackage::PkgManager *pkgManager = nullptr) = 0; + bool ReloadDevicePartition(Hpackage::PkgManager *pkgManager); bool WritePtableToDevice(); void PrintPtableInfo(); bool GetPartionInfoByName(const std::string &partitionName, Ptable::PtnInfo &ptnInfo, int32_t &index); @@ -84,7 +84,7 @@ public: return instance; } - void LoadPartitionInfo([[maybe_unused]] Hpackage::PkgManager *pkgManager = nullptr) override; + bool LoadPartitionInfo([[maybe_unused]] Hpackage::PkgManager *pkgManager = nullptr) override; protected: PackagePtable(); @@ -102,7 +102,7 @@ public: return instance; } - void LoadPartitionInfo([[maybe_unused]] Hpackage::PkgManager *pkgManager = nullptr) override; + bool LoadPartitionInfo([[maybe_unused]] Hpackage::PkgManager *pkgManager = nullptr) override; bool ComparePtable(PtableManager &newPtbManager); bool ComparePartition(PtableManager &newPtbManager, const std::string partitionName); protected: diff --git a/services/ptable_parse/ptable_process.cpp b/services/ptable_parse/ptable_process.cpp index f0b4bc316688df5acdd46ee53068ed974cdfa993..6512abf58fe34cd7c01b9dab6d63f6aae1509b7c 100644 --- a/services/ptable_parse/ptable_process.cpp +++ b/services/ptable_parse/ptable_process.cpp @@ -55,9 +55,10 @@ bool PtableProcess(UpdaterParams &upParams) return false; } DevicePtable& devicePtb = DevicePtable::GetInstance(); - devicePtb.LoadPartitionInfo(); PackagePtable& packagePtb = PackagePtable::GetInstance(); - packagePtb.LoadPartitionInfo(pkgManager); + if (!devicePtb.LoadPartitionInfo() || !packagePtb.LoadPartitionInfo(pkgManager)) { + return false; + } if (!devicePtb.ComparePtable(packagePtb)) { LOG(INFO) << "Ptable NOT changed, no need to process!"; Hpackage::PkgManager::ReleasePackageInstance(pkgManager); diff --git a/services/updater_binary/update_processor.cpp b/services/updater_binary/update_processor.cpp index 0c8f99e37a686ab1b8e762cb67d672c5905d0170..b19bac1c613470daea7f439e84a459caf53fa212 100644 --- a/services/updater_binary/update_processor.cpp +++ b/services/updater_binary/update_processor.cpp @@ -503,7 +503,9 @@ int ProcessUpdater(bool retry, int pipeFd, const std::string &packagePath, const return EXIT_INVALID_ARGS; } #ifdef UPDATER_USE_PTABLE - DevicePtable::GetInstance().LoadPartitionInfo(); + if (!DevicePtable::GetInstance().LoadPartitionInfo()) { + return EXIT_EXEC_SCRIPT_ERROR; + } #endif ret = Updater::ExecUpdate(pkgManager, retry, packagePath, diff --git a/test/unittest/ptable_parse_test/ptable_manager_unittest.cpp b/test/unittest/ptable_parse_test/ptable_manager_unittest.cpp index b4fae5b8498e1693fe860e602c8c9ff1ce14444b..c16b3e72890a1ba1784e36a65b9e3eb44021367c 100644 --- a/test/unittest/ptable_parse_test/ptable_manager_unittest.cpp +++ b/test/unittest/ptable_parse_test/ptable_manager_unittest.cpp @@ -28,7 +28,10 @@ public: ~PtableManagerTest() {} - void LoadPartitionInfo([[maybe_unused]] Hpackage::PkgManager *pkgManager = nullptr) override {} + bool LoadPartitionInfo([[maybe_unused]] Hpackage::PkgManager *pkgManager = nullptr) override + { + return true; + } int32_t TestGetPartitionInfoIndexByName(const std::vector &ptnInfo, const std::string &name) {