diff --git a/interfaces/inner_api/bundlemgr_extension/src/bms_extension_data_mgr.cpp b/interfaces/inner_api/bundlemgr_extension/src/bms_extension_data_mgr.cpp index 5e0ee5487901bf6b166bc085de321615ae440021..d0cc4f32cb8536e6dc95b7c36d29817cb2b98203 100644 --- a/interfaces/inner_api/bundlemgr_extension/src/bms_extension_data_mgr.cpp +++ b/interfaces/inner_api/bundlemgr_extension/src/bms_extension_data_mgr.cpp @@ -84,7 +84,9 @@ bool BmsExtensionDataMgr::CheckApiInfo(const BundleInfo &bundleInfo, uint32_t sd auto bundleMgrExtPtr = BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr) { - return bundleMgrExtPtr->CheckApiInfo(bundleInfo); + auto ret = bundleMgrExtPtr->CheckApiInfo(bundleInfo); + dlclose(handler_); + return ret; } APP_LOGE("create class: %{public}s failed", bmsExtension_.bmsExtensionBundleMgr.extensionName.c_str()); return false; @@ -107,9 +109,12 @@ ErrCode BmsExtensionDataMgr::HapVerify(const std::string &filePath, Security::Ve BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("bundleMgrExtPtr is nullptr"); + dlclose(handler_); return ERR_APPEXECFWK_INSTALL_INTERNAL_ERROR; } - return bundleMgrExtPtr->HapVerify(filePath, hapVerifyResult); + auto ret = bundleMgrExtPtr->HapVerify(filePath, hapVerifyResult); + dlclose(handler_); + return ret; } APP_LOGW("access bms-extension failed"); return ERR_BUNDLEMANAGER_INSTALL_FAILED_SIGNATURE_EXTENSION_NOT_EXISTED; @@ -125,9 +130,12 @@ bool BmsExtensionDataMgr::IsRdDevice() BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return false; } - return bundleMgrExtPtr->IsRdDevice(); + auto ret = bundleMgrExtPtr->IsRdDevice(); + dlclose(handler_); + return ret; } ErrCode BmsExtensionDataMgr::QueryAbilityInfos(const Want &want, int32_t userId, @@ -138,9 +146,12 @@ ErrCode BmsExtensionDataMgr::QueryAbilityInfos(const Want &want, int32_t userId, BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { LOG_W(BMS_TAG_QUERY, "bundleMgrExtPtr is nullptr"); + dlclose(handler_); return ERR_APPEXECFWK_INSTALL_INTERNAL_ERROR; } - return bundleMgrExtPtr->QueryAbilityInfos(want, userId, abilityInfos); + auto ret = bundleMgrExtPtr->QueryAbilityInfos(want, userId, abilityInfos); + dlclose(handler_); + return ret; } LOG_W(BMS_TAG_QUERY, "access bms-extension failed"); return ERR_BUNDLE_MANAGER_INSTALL_FAILED_BUNDLE_EXTENSION_NOT_EXISTED; @@ -154,9 +165,12 @@ ErrCode BmsExtensionDataMgr::QueryAbilityInfosWithFlag(const Want &want, int32_t BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { LOG_W(BMS_TAG_QUERY, "bundleMgrExtPtr is nullptr"); + dlclose(handler_); return ERR_APPEXECFWK_INSTALL_INTERNAL_ERROR; } - return bundleMgrExtPtr->QueryAbilityInfosWithFlag(want, flags, userId, abilityInfos, isNewVersion); + auto ret = bundleMgrExtPtr->QueryAbilityInfosWithFlag(want, flags, userId, abilityInfos, isNewVersion); + dlclose(handler_); + return ret; } LOG_W(BMS_TAG_QUERY, "access bms-extension failed"); return ERR_BUNDLE_MANAGER_INSTALL_FAILED_BUNDLE_EXTENSION_NOT_EXISTED; @@ -170,9 +184,12 @@ ErrCode BmsExtensionDataMgr::GetBundleInfos(int32_t flags, std::vectorGetBundleInfos(flags, bundleInfos, userId, isNewVersion); + auto ret = bundleMgrExtPtr->GetBundleInfos(flags, bundleInfos, userId, isNewVersion); + dlclose(handler_); + return ret; } LOG_W(BMS_TAG_QUERY, "access bms-extension failed"); return ERR_BUNDLE_MANAGER_INSTALL_FAILED_BUNDLE_EXTENSION_NOT_EXISTED; @@ -186,9 +203,12 @@ ErrCode BmsExtensionDataMgr::GetBundleInfo(const std::string &bundleName, int32_ BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { LOG_W(BMS_TAG_QUERY, "bundleMgrExtPtr is nullptr"); + dlclose(handler_); return ERR_APPEXECFWK_INSTALL_INTERNAL_ERROR; } - return bundleMgrExtPtr->GetBundleInfo(bundleName, flags, userId, bundleInfo, isNewVersion); + auto ret = bundleMgrExtPtr->GetBundleInfo(bundleName, flags, userId, bundleInfo, isNewVersion); + dlclose(handler_); + return ret; } LOG_W(BMS_TAG_QUERY, "access bms-extension failed"); return ERR_BUNDLE_MANAGER_INSTALL_FAILED_BUNDLE_EXTENSION_NOT_EXISTED; @@ -201,9 +221,12 @@ ErrCode BmsExtensionDataMgr::Uninstall(const std::string &bundleName) BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("bundleMgrExtPtr is nullptr"); + dlclose(handler_); return ERR_APPEXECFWK_INSTALL_INTERNAL_ERROR; } - return bundleMgrExtPtr->Uninstall(bundleName); + auto ret = bundleMgrExtPtr->Uninstall(bundleName); + dlclose(handler_); + return ret; } APP_LOGW("access bms-extension failed"); return ERR_BUNDLE_MANAGER_INSTALL_FAILED_BUNDLE_EXTENSION_NOT_EXISTED; @@ -220,9 +243,12 @@ ErrCode BmsExtensionDataMgr::GetBundleStats( BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } - return bundleMgrExtPtr->GetBundleStats(bundleName, userId, bundleStats); + auto ret = bundleMgrExtPtr->GetBundleStats(bundleName, userId, bundleStats); + dlclose(handler_); + return ret; } ErrCode BmsExtensionDataMgr::ClearData(const std::string &bundleName, int32_t userId) @@ -235,9 +261,12 @@ ErrCode BmsExtensionDataMgr::ClearData(const std::string &bundleName, int32_t us BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } - return bundleMgrExtPtr->ClearData(bundleName, userId); + auto ret = bundleMgrExtPtr->ClearData(bundleName, userId); + dlclose(handler_); + return ret; } ErrCode BmsExtensionDataMgr::ClearCache(const std::string &bundleName, sptr callback, int32_t userId) @@ -250,9 +279,12 @@ ErrCode BmsExtensionDataMgr::ClearCache(const std::string &bundleName, sptrClearCache(bundleName, callback, userId); + auto ret = bundleMgrExtPtr->ClearCache(bundleName, callback, userId); + dlclose(handler_); + return ret; } ErrCode BmsExtensionDataMgr::GetUidByBundleName(const std::string &bundleName, int32_t userId, int32_t &uid) @@ -265,9 +297,12 @@ ErrCode BmsExtensionDataMgr::GetUidByBundleName(const std::string &bundleName, i BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } - return bundleMgrExtPtr->GetUidByBundleName(bundleName, userId, uid); + auto ret = bundleMgrExtPtr->GetUidByBundleName(bundleName, userId, uid); + dlclose(handler_); + return ret; } ErrCode BmsExtensionDataMgr::GetBundleNameByUid(int32_t uid, std::string &bundleName) @@ -280,9 +315,12 @@ ErrCode BmsExtensionDataMgr::GetBundleNameByUid(int32_t uid, std::string &bundle BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } - return bundleMgrExtPtr->GetBundleNameByUid(uid, bundleName); + auto ret = bundleMgrExtPtr->GetBundleNameByUid(uid, bundleName); + dlclose(handler_); + return ret; } ErrCode BmsExtensionDataMgr::VerifyActivationLock(bool &res) @@ -295,9 +333,12 @@ ErrCode BmsExtensionDataMgr::VerifyActivationLock(bool &res) BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } - return bundleMgrExtPtr->VerifyActivationLock(res); + auto ret = bundleMgrExtPtr->VerifyActivationLock(res); + dlclose(handler_); + return ret; } ErrCode BmsExtensionDataMgr::GetBackupUninstallList(int32_t userId, std::set &uninstallBundles) @@ -310,9 +351,12 @@ ErrCode BmsExtensionDataMgr::GetBackupUninstallList(int32_t userId, std::setGetBackupUninstallList(userId, uninstallBundles); + auto ret = bundleMgrExtPtr->GetBackupUninstallList(userId, uninstallBundles); + dlclose(handler_); + return ret; } ErrCode BmsExtensionDataMgr::ClearBackupUninstallFile(int32_t userId) @@ -325,9 +369,12 @@ ErrCode BmsExtensionDataMgr::ClearBackupUninstallFile(int32_t userId) BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } - return bundleMgrExtPtr->ClearBackupUninstallFile(userId); + auto ret = bundleMgrExtPtr->ClearBackupUninstallFile(userId); + dlclose(handler_); + return ret; } bool BmsExtensionDataMgr::IsAppInBlocklist(const std::string &bundleName, const int32_t userId) @@ -340,9 +387,12 @@ bool BmsExtensionDataMgr::IsAppInBlocklist(const std::string &bundleName, const BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return false; } - return bundleMgrExtPtr->IsAppInBlocklist(bundleName, userId); + auto ret = bundleMgrExtPtr->IsAppInBlocklist(bundleName, userId); + dlclose(handler_); + return ret; } bool BmsExtensionDataMgr::CheckWhetherCanBeUninstalled(const std::string &bundleName) @@ -355,9 +405,12 @@ bool BmsExtensionDataMgr::CheckWhetherCanBeUninstalled(const std::string &bundle BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return true; } - return bundleMgrExtPtr->CheckWhetherCanBeUninstalled(bundleName); + auto ret = bundleMgrExtPtr->CheckWhetherCanBeUninstalled(bundleName); + dlclose(handler_); + return ret; } ErrCode BmsExtensionDataMgr::AddResourceInfoByBundleName(const std::string &bundleName, const int32_t userId) @@ -370,11 +423,13 @@ ErrCode BmsExtensionDataMgr::AddResourceInfoByBundleName(const std::string &bund BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } ErrCode ret = bundleMgrExtPtr->AddResourceInfoByBundleName(bundleName, userId); APP_LOGD("call bundle mgr ext return %{public}d by bundleName:%{public}s userId:%{private}d", ret, bundleName.c_str(), userId); + dlclose(handler_); return ret; } @@ -389,12 +444,14 @@ ErrCode BmsExtensionDataMgr::AddResourceInfoByAbility(const std::string &bundleN BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } ErrCode ret = bundleMgrExtPtr->AddResourceInfoByAbility(bundleName, moduleName, abilityName, userId); APP_LOGD("call bundle mgr ext return %{public}d by bundleName:%{public}s moduleName:%{public}s \ abilityName:%{public}s userId:%{private}d", ret, bundleName.c_str(), moduleName.c_str(), abilityName.c_str(), userId); + dlclose(handler_); return ret; } @@ -408,10 +465,12 @@ ErrCode BmsExtensionDataMgr::DeleteResourceInfo(const std::string &key) BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } ErrCode ret = bundleMgrExtPtr->DeleteResourceInfo(key); APP_LOGD("call bundle mgr ext return %{public}d by key:%{private}s", ret, key.c_str()); + dlclose(handler_); return ret; } @@ -426,6 +485,7 @@ ErrCode BmsExtensionDataMgr::KeyOperation( BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_OK; } auto ret = bundleMgrExtPtr->KeyOperation(codeProtectBundleInfos, type); @@ -433,6 +493,7 @@ ErrCode BmsExtensionDataMgr::KeyOperation( APP_LOGI("KeyOperation %{public}s %{public}d ret %{public}d", codeProtectBundleInfos[0].bundleName.c_str(), type, ret); } + dlclose(handler_); return ret; } @@ -447,11 +508,13 @@ ErrCode BmsExtensionDataMgr::OptimizeDisposedPredicates(const std::string &calli BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } ErrCode ret = bundleMgrExtPtr->OptimizeDisposedPredicates(callingName, appId, userId, appIndex, absRdbPredicates); APP_LOGD("call bundle mgr ext OptimizeDisposedPredicates, return %{public}d, result:%{private}s", ret, absRdbPredicates.ToString().c_str()); + dlclose(handler_); return ret; } @@ -466,11 +529,13 @@ ErrCode BmsExtensionDataMgr::GetBundleResourceInfo(const std::string &bundleName BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } ErrCode ret = bundleMgrExtPtr->GetBundleResourceInfo(bundleName, flags, bundleResourceInfo, appIndex); APP_LOGD("call bundle mgr ext GetBundleResourceInfo, return %{public}d, bundleName:%{public}s", ret, bundleName.c_str()); + dlclose(handler_); return ret; } @@ -485,12 +550,14 @@ ErrCode BmsExtensionDataMgr::GetLauncherAbilityResourceInfo(const std::string &b BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } ErrCode ret = bundleMgrExtPtr->GetLauncherAbilityResourceInfo(bundleName, flags, launcherAbilityResourceInfo, appIndex); APP_LOGD("call bundle mgr ext GetLauncherAbilityResourceInfo, return %{public}d, bundleName:%{public}s", ret, bundleName.c_str()); + dlclose(handler_); return ret; } @@ -505,10 +572,12 @@ ErrCode BmsExtensionDataMgr::GetAllBundleResourceInfo(const uint32_t flags, BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } ErrCode ret = bundleMgrExtPtr->GetAllBundleResourceInfo(flags, bundleResourceInfos); APP_LOGD("call bundle mgr ext GetAllBundleResourceInfo, return %{public}d", ret); + dlclose(handler_); return ret; } @@ -523,10 +592,12 @@ ErrCode BmsExtensionDataMgr::GetAllLauncherAbilityResourceInfo(const uint32_t fl BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } ErrCode ret = bundleMgrExtPtr->GetAllLauncherAbilityResourceInfo(flags, launcherAbilityResourceInfos); APP_LOGD("call bundle mgr ext GetAllLauncherAbilityResourceInfo, return %{public}d", ret); + dlclose(handler_); return ret; } @@ -539,15 +610,18 @@ void BmsExtensionDataMgr::CheckBundleNameAndStratAbility(const std::string &bund } if (bundleName.empty()) { APP_LOGW("bundleName empty"); + dlclose(handler_); return; } auto bundleMgrExtPtr = BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return; } bundleMgrExtPtr->CheckBundleNameAndStratAbility(bundleName, appIdentifier); + dlclose(handler_); } bool BmsExtensionDataMgr::DetermineCloneNum( @@ -559,15 +633,19 @@ bool BmsExtensionDataMgr::DetermineCloneNum( } if (bundleName.empty()) { APP_LOGW("bundleName empty"); + dlclose(handler_); return false; } auto bundleMgrExtPtr = BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return false; } - return bundleMgrExtPtr->DetermineCloneNum(bundleName, appIdentifier, cloneNum); + auto ret = bundleMgrExtPtr->DetermineCloneNum(bundleName, appIdentifier, cloneNum); + dlclose(handler_); + return ret; } std::string BmsExtensionDataMgr::GetCompatibleDeviceType(const std::string &bundleName) @@ -576,10 +654,14 @@ std::string BmsExtensionDataMgr::GetCompatibleDeviceType(const std::string &bund auto bundleMgrExtPtr = BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr) { - return bundleMgrExtPtr->GetCompatibleDeviceType(bundleName); + auto ret = bundleMgrExtPtr->GetCompatibleDeviceType(bundleName); + dlclose(handler_); + return ret; } APP_LOGE("create class: %{public}s failed", bmsExtension_.bmsExtensionBundleMgr.extensionName.c_str()); - return GetDeviceType(); + auto ret = GetDeviceType(); + dlclose(handler_); + return ret; } APP_LOGW("access bms-extension failed"); return GetDeviceType(); @@ -595,9 +677,12 @@ ErrCode BmsExtensionDataMgr::VerifyActivationLockToken(bool &res) BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName); if (bundleMgrExtPtr == nullptr) { APP_LOGW("GetBundleMgrExt failed"); + dlclose(handler_); return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR; } - return bundleMgrExtPtr->VerifyActivationLockToken(res); + auto ret = bundleMgrExtPtr->VerifyActivationLockToken(res); + dlclose(handler_); + return ret; } } // AppExecFwk } // OHOS diff --git a/services/bundlemgr/src/installd/installd_operator.cpp b/services/bundlemgr/src/installd/installd_operator.cpp index e27d22c898c35e83b9347ff5291f689ffd74c24c..0bad9355b23726bfbe588d94a6c980f7644f6501 100644 --- a/services/bundlemgr/src/installd/installd_operator.cpp +++ b/services/bundlemgr/src/installd/installd_operator.cpp @@ -2342,8 +2342,10 @@ bool InstalldOperator::EnforceEncryption(std::unordered_map