diff --git a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp index d0d27f9742ade6c4652aefa4d1442f8ea4ea9bc5..f5a7be7db0796711f450109e5d1be490fb44a450 100644 --- a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp +++ b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp @@ -3152,7 +3152,10 @@ int32_t UIAbilityLifecycleManager::TryPrepareTerminateByPids(const std::vector::GetInstance()->BlockProcessCacheByPids(pids)); + auto task = [pids]() { + IN_PROCESS_CALL_WITHOUT_RET(DelayedSingleton::GetInstance()->BlockProcessCacheByPids(pids)); + } + ffrt::submit(task); for (const auto &pid : pids) { std::unordered_set> abilitysToTerminate; std::vector> tokens; @@ -3166,9 +3169,13 @@ int32_t UIAbilityLifecycleManager::TryPrepareTerminateByPids(const std::vectorTerminateSession(abilityRecord); + } } + ffrt::submit(terminateTask); } TAG_LOGI(AAFwkTag::ABILITYMGR, "end."); return ERR_OK; diff --git a/services/appmgr/src/app_mgr_service_inner.cpp b/services/appmgr/src/app_mgr_service_inner.cpp index ad20c3fc056b5652a33eeae82944b8eee70173f5..510af6db0cf90f4e16e7b0071459ac18a7b86098 100644 --- a/services/appmgr/src/app_mgr_service_inner.cpp +++ b/services/appmgr/src/app_mgr_service_inner.cpp @@ -5848,17 +5848,21 @@ void AppMgrServiceInner::SendHiSysEvent(int32_t innerEventId, std::shared_ptr> &tokens) { + auto callerUid = IPCSkeleton::GetCallingUid(); + if (callerUid != FOUNDATION_UID) { + TAG_LOGE(AAFwkTag::APPMGR, "not foundation call"); + return ERR_PERMISSION_DENIED; + } auto appRecord = GetAppRunningRecordByPid(pid); if (!appRecord) { TAG_LOGE(AAFwkTag::APPMGR, "no appRecord"); return ERR_NAME_NOT_FOUND; } - auto isSaCall = AAFwk::PermissionVerification::GetInstance()->IsSACall(); - auto callingPid = IPCSkeleton::GetCallingPid(); - if (!isSaCall && callingPid != pid) { - TAG_LOGE(AAFwkTag::APPMGR, "permission verify fail"); - return ERR_PERMISSION_DENIED; + auto tokenId = appRecord->GetApplicationInfo().accessTokenId; + if (!AAFwk::PermissionVerification::GetInstance()->VerifyPrepareTerminatePermission(tokenId)) { + TAG_LOGW(AAFwkTag::ABILITYMGR, "app has no permission ohos.permission.PREPARE_APP_TERMINATE, terminating"); + appRecord->SetTerminating(); } for (auto &item : appRecord->GetAbilities()) { tokens.emplace_back(item.first);