From 9859a0d6abfa4b6a7fd71dfcefc0299f14a3ac94 Mon Sep 17 00:00:00 2001 From: "hezhiqiang19@huawei.com" Date: Tue, 9 Jul 2024 09:27:32 +0000 Subject: [PATCH] add check for notify privacy Signed-off-by: hezhiqiang19@huawei.com Change-Id: Ic6e01372bb7c7a02f4961d58f9e04214568ae6d0 --- .../native/audioutils/include/audio_utils.h | 2 +- frameworks/native/audioutils/src/audio_utils.cpp | 15 +++++++++++---- .../server/src/audio_process_in_server.cpp | 6 ++++-- .../server/src/capturer_in_server.cpp | 3 ++- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/frameworks/native/audioutils/include/audio_utils.h b/frameworks/native/audioutils/include/audio_utils.h index 6f4b82d2b1..967e0c3c4f 100644 --- a/frameworks/native/audioutils/include/audio_utils.h +++ b/frameworks/native/audioutils/include/audio_utils.h @@ -111,7 +111,7 @@ public: static bool VerifyPermission(const std::string &permissionName, uint32_t tokenId); static bool NeedVerifyBackgroundCapture(int32_t callingUid, SourceType sourceType); static bool VerifyBackgroundCapture(uint32_t tokenId, uint64_t fullTokenId); - static void NotifyPrivacy(uint32_t targetTokenId, AudioPermissionState state); + static bool NotifyPrivacy(uint32_t targetTokenId, AudioPermissionState state); }; void AdjustStereoToMonoForPCM8Bit(int8_t *data, uint64_t len); diff --git a/frameworks/native/audioutils/src/audio_utils.cpp b/frameworks/native/audioutils/src/audio_utils.cpp index af78b2ae97..d5dfef6605 100644 --- a/frameworks/native/audioutils/src/audio_utils.cpp +++ b/frameworks/native/audioutils/src/audio_utils.cpp @@ -268,25 +268,32 @@ bool PermissionUtil::VerifyBackgroundCapture(uint32_t tokenId, uint64_t fullToke return ret; } -void PermissionUtil::NotifyPrivacy(uint32_t targetTokenId, AudioPermissionState state) +bool PermissionUtil::NotifyPrivacy(uint32_t targetTokenId, AudioPermissionState state) { if (state == AUDIO_PERMISSION_START) { Trace trace("PrivacyKit::StartUsingPermission"); int res = Security::AccessToken::PrivacyKit::StartUsingPermission(targetTokenId, MICROPHONE_PERMISSION); if (res != 0) { - AUDIO_WARNING_LOG("notice start using perm error: %{public}d", res); + AUDIO_ERR_LOG("StartUsingPermission for tokenId %{public}u!, The PrivacyKit error code is %{public}d", + targetTokenId, res); + return false; } res = Security::AccessToken::PrivacyKit::AddPermissionUsedRecord(targetTokenId, MICROPHONE_PERMISSION, 1, 0); if (res != 0) { - AUDIO_WARNING_LOG("add mic record error: %{public}d", res); + AUDIO_ERR_LOG("AddPermissionUsedRecord for tokenId %{public}u! The PrivacyKit error code is " + "%{public}d", targetTokenId, res); + return false; } } else if (state == AUDIO_PERMISSION_STOP) { Trace trace("PrivacyKit::StopUsingPermission"); int res = Security::AccessToken::PrivacyKit::StopUsingPermission(targetTokenId, MICROPHONE_PERMISSION); if (res != 0) { - AUDIO_WARNING_LOG("notice stop using perm error: %{public}d", res); + AUDIO_ERR_LOG("StopUsingPermission for tokenId %{public}u!, The PrivacyKit error code is %{public}d", + targetTokenId, res); + return false; } } + return true; } void AdjustStereoToMonoForPCM8Bit(int8_t *data, uint64_t len) diff --git a/services/audio_service/server/src/audio_process_in_server.cpp b/services/audio_service/server/src/audio_process_in_server.cpp index 866939f347..9d5e70f1a9 100644 --- a/services/audio_service/server/src/audio_process_in_server.cpp +++ b/services/audio_service/server/src/audio_process_in_server.cpp @@ -97,7 +97,8 @@ int32_t AudioProcessInServer::Start() if (processConfig_.audioMode != AUDIO_MODE_PLAYBACK && needCheckBackground_) { CHECK_AND_RETURN_RET_LOG(PermissionUtil::VerifyBackgroundCapture(processConfig_.appInfo.appTokenId, processConfig_.appInfo.appFullTokenId), ERR_OPERATION_FAILED, "VerifyBackgroundCapture failed!"); - PermissionUtil::NotifyPrivacy(processConfig_.appInfo.appTokenId, AUDIO_PERMISSION_START); + CHECK_AND_RETURN_RET_LOG(PermissionUtil::NotifyPrivacy(processConfig_.appInfo.appTokenId, + AUDIO_PERMISSION_START), ERR_PERMISSION_DENIED, "NotifyPrivacy failed!"); } for (size_t i = 0; i < listenerList_.size(); i++) { @@ -144,7 +145,8 @@ int32_t AudioProcessInServer::Resume() uint64_t fullTokenId = processConfig_.appInfo.appFullTokenId; CHECK_AND_RETURN_RET_LOG(PermissionUtil::VerifyBackgroundCapture(tokenId, fullTokenId), ERR_OPERATION_FAILED, "VerifyBackgroundCapture failed!"); - PermissionUtil::NotifyPrivacy(tokenId, AUDIO_PERMISSION_START); + CHECK_AND_RETURN_RET_LOG(PermissionUtil::NotifyPrivacy(tokenId, AUDIO_PERMISSION_START), ERR_PERMISSION_DENIED, + "NotifyPrivacy failed!"); } for (size_t i = 0; i < listenerList_.size(); i++) { diff --git a/services/audio_service/server/src/capturer_in_server.cpp b/services/audio_service/server/src/capturer_in_server.cpp index 34577562b9..c78e9d33ec 100644 --- a/services/audio_service/server/src/capturer_in_server.cpp +++ b/services/audio_service/server/src/capturer_in_server.cpp @@ -292,7 +292,8 @@ int32_t CapturerInServer::Start() uint64_t fullTokenId = processConfig_.appInfo.appFullTokenId; CHECK_AND_RETURN_RET_LOG(PermissionUtil::VerifyBackgroundCapture(tokenId, fullTokenId), ERR_OPERATION_FAILED, "VerifyBackgroundCapture failed!"); - PermissionUtil::NotifyPrivacy(tokenId, AUDIO_PERMISSION_START); + CHECK_AND_RETURN_RET_LOG(PermissionUtil::NotifyPrivacy(tokenId, AUDIO_PERMISSION_START), ERR_PERMISSION_DENIED, + "NotifyPrivacy failed!"); } status_ = I_STATUS_STARTING; -- Gitee