diff --git a/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_stub.cpp b/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_stub.cpp index f11c5c81c6c4777d9c9da7f21b6a42b89dfdde69..3b6f5e6d0d4f70803ce5a1c12d9e8782dcd42ebd 100644 --- a/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_stub.cpp +++ b/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_stub.cpp @@ -165,6 +165,18 @@ void AccessTokenManagerStub::GetDefPermissionsInner(MessageParcel& data, Message void AccessTokenManagerStub::GetReqPermissionsInner(MessageParcel& data, MessageParcel& reply) { + unsigned int callingTokenID = IPCSkeleton::GetCallingTokenID(); + if ((this->GetTokenType(callingTokenID) == TOKEN_HAP) && (!IsSystemAppCalling())) { + reply.WriteInt32(AccessTokenError::ERR_NOT_SYSTEM_APP); + return; + } + if (!IsPrivilegedCalling() && + VerifyAccessToken(callingTokenID, GET_SENSITIVE_PERMISSIONS) == PERMISSION_DENIED) { + ACCESSTOKEN_LOG_ERROR(LABEL, "Permission denied(tokenID=%{public}d)", callingTokenID); + reply.WriteInt32(AccessTokenError::ERR_PERMISSION_DENIED); + return; + } + AccessTokenID tokenID = data.ReadUint32(); int isSystemGrant = data.ReadInt32(); std::vector permList;