diff --git a/interfaces/inner_api/security_component/test/unittest/src/sec_comp_register_callback_test.cpp b/interfaces/inner_api/security_component/test/unittest/src/sec_comp_register_callback_test.cpp index 6782c7f..5cbf7b7 100644 --- a/interfaces/inner_api/security_component/test/unittest/src/sec_comp_register_callback_test.cpp +++ b/interfaces/inner_api/security_component/test/unittest/src/sec_comp_register_callback_test.cpp @@ -522,9 +522,6 @@ HWTEST_F(SecCompRegisterCallbackTest, UnregisterSecurityComponent001, TestSize.L auto token = proxy->AsObject(); EXPECT_EQ(SC_SERVICE_ERROR_CLICK_EVENT_INVALID, SecCompKit::ReportSecurityComponentClickEvent(scId, saveInfo, clickInfo, token)); - setuid(100); - EXPECT_EQ(SC_SERVICE_ERROR_VALUE_INVALID, SecCompKit::UnregisterSecurityComponent(scId)); - setuid(g_selfUid); EXPECT_EQ(SC_OK, SecCompKit::UnregisterSecurityComponent(scId)); system("param set sec.comp.enhance 0"); } diff --git a/services/security_component_service/sa/sa_main/delay_exit_task.cpp b/services/security_component_service/sa/sa_main/delay_exit_task.cpp index 5d78873..6a4ce6f 100644 --- a/services/security_component_service/sa/sa_main/delay_exit_task.cpp +++ b/services/security_component_service/sa/sa_main/delay_exit_task.cpp @@ -23,7 +23,7 @@ namespace SecurityComponent { namespace { constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, SECURITY_DOMAIN_SECURITY_COMPONENT, "DelayExitTask"}; static const std::string DELAY_EXIT_TASK = "DelayExitTask"; -static const int32_t DELAY_EXIT_MILLISECONDS = 30 * 1000; // 30s +static const int32_t DELAY_EXIT_MILLISECONDS = 10 * 60 * 1000; // 10m } DelayExitTask::DelayExitTask() @@ -69,4 +69,3 @@ void DelayExitTask::Stop() } // namespace SecurityComponent } // namespace Security } // namespace OHOS - diff --git a/services/security_component_service/sa/sa_main/sec_comp_manager.cpp b/services/security_component_service/sa/sa_main/sec_comp_manager.cpp index 5dde35d..9da222f 100644 --- a/services/security_component_service/sa/sa_main/sec_comp_manager.cpp +++ b/services/security_component_service/sa/sa_main/sec_comp_manager.cpp @@ -101,6 +101,7 @@ int32_t SecCompManager::DeleteSecurityComponentFromList(int32_t pid, int32_t scI if (!IsForegroundCompExist()) { SecCompEnhanceAdapter::DisableInputEnhance(); } + DelayExitTask::GetInstance().Start(); return SC_OK; } } @@ -155,7 +156,14 @@ SecCompEntity* SecCompManager::GetSecurityComponentFromList(int32_t pid, int32_t bool SecCompManager::IsForegroundCompExist() { return std::any_of(componentMap_.begin(), componentMap_.end(), [](const auto & iter) { - return iter.second.isForeground; + return (iter.second.isForeground) && (iter.second.compList.size() > 0); + }); +} + +bool SecCompManager::IsCompExist() +{ + return std::any_of(componentMap_.begin(), componentMap_.end(), [](const auto & iter) { + return (iter.second.compList.size() > 0); }); } @@ -218,7 +226,7 @@ void SecCompManager::NotifyProcessDied(int32_t pid) void SecCompManager::ExitSaProcess() { OHOS::Utils::UniqueReadGuard lk(this->componentInfoLock_); - if (!componentMap_.empty() || !malicious_.IsMaliciousAppListEmpty()) { + if (IsCompExist()) { SC_LOG_INFO(LABEL, "Apps using security component still exist, no exit sa"); return; } diff --git a/services/security_component_service/sa/sa_main/sec_comp_manager.h b/services/security_component_service/sa/sa_main/sec_comp_manager.h index 92e0faa..fdf83d0 100644 --- a/services/security_component_service/sa/sa_main/sec_comp_manager.h +++ b/services/security_component_service/sa/sa_main/sec_comp_manager.h @@ -70,6 +70,7 @@ public: private: SecCompManager(); bool IsForegroundCompExist(); + bool IsCompExist(); int32_t AddSecurityComponentToList(int32_t pid, AccessToken::AccessTokenID tokenId, const SecCompEntity& newEntity); int32_t DeleteSecurityComponentFromList(int32_t pid, int32_t scId); diff --git a/services/security_component_service/sa/sa_main/sec_comp_service.cpp b/services/security_component_service/sa/sa_main/sec_comp_service.cpp index 7dec764..bf4597f 100644 --- a/services/security_component_service/sa/sa_main/sec_comp_service.cpp +++ b/services/security_component_service/sa/sa_main/sec_comp_service.cpp @@ -210,10 +210,9 @@ int32_t SecCompService::UpdateSecurityComponent(int32_t scId, const std::string& int32_t SecCompService::UnregisterSecurityComponent(int32_t scId) { SecCompCallerInfo caller; - if (!GetCallerInfo(caller)) { - SC_LOG_ERROR(LABEL, "Check caller failed"); - return SC_SERVICE_ERROR_VALUE_INVALID; - } + caller.tokenId = IPCSkeleton::GetCallingTokenID(); + caller.pid = IPCSkeleton::GetCallingPid(); + caller.uid = IPCSkeleton::GetCallingUid(); return SecCompManager::GetInstance().UnregisterSecurityComponent(scId, caller); } diff --git a/services/security_component_service/sa/test/unittest/src/sec_comp_manager_test.cpp b/services/security_component_service/sa/test/unittest/src/sec_comp_manager_test.cpp index ce721b3..73a38c3 100644 --- a/services/security_component_service/sa/test/unittest/src/sec_comp_manager_test.cpp +++ b/services/security_component_service/sa/test/unittest/src/sec_comp_manager_test.cpp @@ -544,12 +544,6 @@ HWTEST_F(SecCompManagerTest, UpdateSecurityComponent002, TestSize.Level1) */ HWTEST_F(SecCompManagerTest, ExitSaProcess001, TestSize.Level1) { - std::shared_ptr instance = std::make_shared(); - instance->malicious_.AddAppToMaliciousAppList(ServiceTestCommon::TEST_SC_ID_1); - instance->ExitSaProcess(); - EXPECT_FALSE(instance->isSaExit_); - - instance->malicious_.maliciousAppList_.clear(); std::shared_ptr compPtr = std::make_shared(); ASSERT_NE(nullptr, compPtr); compPtr->rect_.x_ = ServiceTestCommon::TEST_COORDINATE; @@ -557,6 +551,7 @@ HWTEST_F(SecCompManagerTest, ExitSaProcess001, TestSize.Level1) compPtr->rect_.width_ = ServiceTestCommon::TEST_COORDINATE; compPtr->rect_.height_ = ServiceTestCommon::TEST_COORDINATE; SecCompEntity entity(compPtr, ServiceTestCommon::TEST_TOKEN_ID, ServiceTestCommon::TEST_SC_ID_1); + std::shared_ptr instance = std::make_shared(); ASSERT_EQ(SC_OK, instance->AddSecurityComponentToList(ServiceTestCommon::TEST_PID_1, 0, entity)); instance->ExitSaProcess();