diff --git a/hisysevent.yaml b/hisysevent.yaml index c59ebc41d2106651741f3365aee349eb8de81d17..17eddf4fe6313a96d28a27ea1d3967f2993ec6fd 100644 --- a/hisysevent.yaml +++ b/hisysevent.yaml @@ -171,3 +171,20 @@ ACCESSTOKEN_EXCEPTION: ERROR_CODE: {type: INT32, desc: error code} ERROR_MSG: {type: STRING, desc: error reason} +APP_USING_PERMISSION: + __BASE: {type: BEHAVIOR, level: CRITICAL, desc: app using sensitive permission or resource} + SCENE_CODE: {type: STRING, desc: START STOP} + STOP_SCENE: {type: STRING, desc: STOP_USING APP_DIED PROCESS_DIED CALLER_DIED} + TOKEN_ID: {type: UINT32, desc: app tokenID} + PERMISSION_NAME: {type: STRING, desc: permission name} + PERMISSION_USED_TYPE: {type: UINT32, desc: permission used type} + PID: {type: INT32, desc: app process id} + CALLER_PID: {type: INT32, desc: interface caller process id} + DURATION: {type: INT64, desc: start duration} + ERROR_CODE: {type: INT32, desc: error code} + +CAMERA_TURN_BACKGROUND: + __BASE: {type: BEHAVIOR, level: CRITICAL, desc: app using camera turn background} + SCENE_CODE: {type: STRING, desc: APP_BACKGROUND SCREEN_LOCKED} + TOKEN_ID: {type: UINT32, desc: app tokenID} + PID: {type: INT32, desc: app process id} diff --git a/services/privacymanager/src/record/permission_record_manager.cpp b/services/privacymanager/src/record/permission_record_manager.cpp index b01b4dc922485a9d8303b877269a9e4ad9820f65..58f1779ea5bf163354a208f5af5ac11560baf7b5 100644 --- a/services/privacymanager/src/record/permission_record_manager.cpp +++ b/services/privacymanager/src/record/permission_record_manager.cpp @@ -33,6 +33,7 @@ #include "constant.h" #include "constant_common.h" #include "data_translator.h" +#include "hisysevent.h" #include "i_state_change_callback.h" #include "ipc_skeleton.h" #include "iservice_registry.h" @@ -1106,6 +1107,9 @@ void PermissionRecordManager::RemoveRecordFromStartListByPid(const AccessTokenID record.tokenId = tokenId; record.pid = pid; (void) ToRemoveRecord(record, &ContinusPermissionRecord::IsEqualPid); + HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "APP_USING_PERMISSION", + HiviewDFX::HiSysEvent::EventType::BEHAVIOR, "SCENE_CODE", "STOP", "STOP_SCENE", "PROCESS_DIED", + "TOKEN_ID", tokenId, "PID", pid); } /* @@ -1117,6 +1121,9 @@ void PermissionRecordManager::RemoveRecordFromStartListByToken(const AccessToken ContinusPermissionRecord record = {0}; record.tokenId = tokenId; (void) ToRemoveRecord(record, &ContinusPermissionRecord::IsEqualTokenId); + HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "APP_USING_PERMISSION", + HiviewDFX::HiSysEvent::EventType::BEHAVIOR, "SCENE_CODE", "STOP", "STOP_SCENE", "APP_DIED", + "TOKEN_ID", tokenId); } void PermissionRecordManager::RemoveRecordFromStartListByOp(int32_t opCode) @@ -1133,6 +1140,9 @@ void PermissionRecordManager::RemoveRecordFromStartListByCallerPid(int32_t calle ContinusPermissionRecord record = {0}; record.callerPid = callerPid; (void) ToRemoveRecord(record, &ContinusPermissionRecord::IsEqualCallerPid); + HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "APP_USING_PERMISSION", + HiviewDFX::HiSysEvent::EventType::BEHAVIOR, "SCENE_CODE", "STOP", "STOP_SCENE", "CALLER_DIED", + "CALLER_PID", callerPid); } bool PermissionRecordManager::ToRemoveRecord(const ContinusPermissionRecord& targetRecord, @@ -1282,10 +1292,14 @@ void PermissionRecordManager::ExecuteAllCameraExecuteCallback() auto it = [&](uint64_t id, sptr cameraCallback) { auto callback = iface_cast(cameraCallback); AccessTokenID tokenId = static_cast(id); + int32_t pid = static_cast(id >> 32); if (callback != nullptr) { LOGI(PRI_DOMAIN, PRI_TAG, "CameraCallback tokenId %{public}d changeType %{public}d.", tokenId, PERM_INACTIVE); callback->StateChangeNotify(tokenId, false); + HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "CAMERA_TURN_BACKGROUND", + HiviewDFX::HiSysEvent::EventType::BEHAVIOR, "SCENE_CODE", "SCREEN_LOCKED", "TOKEN_ID", tokenId, + "PID", pid); } }; this->cameraCallbackMap_.Iterate(it); @@ -1304,6 +1318,9 @@ void PermissionRecordManager::ExecuteCameraCallbackAsync(AccessTokenID tokenId, LOGI(PRI_DOMAIN, PRI_TAG, "CameraCallback tokenId(%{public}u) pid( %{public}d) changeType %{public}d", tokenId, pid, PERM_INACTIVE); callback->StateChangeNotify(tokenId, false); + HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "CAMERA_TURN_BACKGROUND", + HiviewDFX::HiSysEvent::EventType::BEHAVIOR, "SCENE_CODE", "APP_BACKGROUND", "TOKEN_ID", tokenId, + "PID", pid); } }; this->cameraCallbackMap_.Iterate(it); @@ -1315,6 +1332,7 @@ void PermissionRecordManager::ExecuteCameraCallbackAsync(AccessTokenID tokenId, int32_t PermissionRecordManager::StartUsingPermission(const PermissionUsedTypeInfo &info, int32_t callerPid) { + int64_t beginTime = AccessToken::TimeUtil::GetCurrentTimestamp(); AccessTokenID tokenId = info.tokenId; const std::string &permissionName = info.permissionName; LOGI(PRI_DOMAIN, PRI_TAG, @@ -1349,12 +1367,20 @@ int32_t PermissionRecordManager::StartUsingPermission(const PermissionUsedTypeIn status = PERM_INACTIVE; } #endif - return AddRecordToStartList(info, status, callerPid); + int32_t res = AddRecordToStartList(info, status, callerPid); + int64_t endTime = AccessToken::TimeUtil::GetCurrentTimestamp(); + HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "APP_USING_PERMISSION", + HiviewDFX::HiSysEvent::EventType::BEHAVIOR, "SCENE_CODE", "START", "TOKEN_ID", info.tokenId, + "PERMISSION_NAME", info.permissionName, "PERMISSION_USED_TYPE", info.type, "PID", info.pid, + "CALLER_PID", callerPid, "DURATION", endTime - beginTime, "RROR_CODE", res); + + return res; } int32_t PermissionRecordManager::StartUsingPermission(const PermissionUsedTypeInfo &info, const sptr& callback, int32_t callerPid) { + int64_t beginTime = AccessToken::TimeUtil::GetCurrentTimestamp(); AccessTokenID tokenId = info.tokenId; const std::string &permissionName = info.permissionName; LOGI(PRI_DOMAIN, PRI_TAG, @@ -1395,6 +1421,11 @@ int32_t PermissionRecordManager::StartUsingPermission(const PermissionUsedTypeIn if (ret != RET_SUCCESS) { cameraCallbackMap_.Erase(id); } + int64_t endTime = AccessToken::TimeUtil::GetCurrentTimestamp(); + HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "APP_USING_PERMISSION", + HiviewDFX::HiSysEvent::EventType::BEHAVIOR, "SCENE_CODE", "START", "TOKEN_ID", info.tokenId, + "PERMISSION_NAME", info.permissionName, "PERMISSION_USED_TYPE", info.type, "PID", info.pid, + "CALLER_PID", callerPid, "DURATION", endTime - beginTime, "ERROR_CODE", ret); return ret; } @@ -1411,7 +1442,11 @@ int32_t PermissionRecordManager::StopUsingPermission( return PrivacyError::ERR_PARAM_INVALID; } - return RemoveRecordFromStartList(tokenId, pid, permissionName, callerPid); + int32_t res = RemoveRecordFromStartList(tokenId, pid, permissionName, callerPid); + HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::ACCESS_TOKEN, "APP_USING_PERMISSION", + HiviewDFX::HiSysEvent::EventType::BEHAVIOR, "SCENE_CODE", "STOP", "STOP_SCENE", "STOP_USING", + "TOKEN_ID", tokenId, "PERMISSION_NAME", permissionName, "PID", pid, "CALLER_PID", callerPid, "ERROR_CODE", res); + return res; } bool PermissionRecordManager::HasCallerInStartList(int32_t callerPid)