From 2d2414212823fa2256a990f0d9d32bf67baeab80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=82=AC?= Date: Fri, 17 Jan 2025 02:04:34 +0000 Subject: [PATCH] =?UTF-8?q?[Bug]:=20LoadPartitionInfo=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 黄悬 --- services/flashd/daemon/flash_commander.cpp | 4 ++- services/flashd/partition.cpp | 4 ++- services/ptable_parse/ptable_manager.cpp | 26 +++++++++---------- services/ptable_parse/ptable_manager.h | 8 +++--- services/ptable_parse/ptable_process.cpp | 5 ++-- services/updater_binary/update_processor.cpp | 4 ++- .../ptable_manager_unittest.cpp | 5 +++- 7 files changed, 33 insertions(+), 23 deletions(-) diff --git a/services/flashd/daemon/flash_commander.cpp b/services/flashd/daemon/flash_commander.cpp index 1c2fb9b1..733afea6 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 9094fca3..25b42da4 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 af91d8a9..713df871 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 5231b3c1..1734d514 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 f0b4bc31..6512abf5 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 0c8f99e3..b19bac1c 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 b4fae5b8..c16b3e72 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) { -- Gitee