From 5ca8a039c2dd3027875a6d085d3c715694623730 Mon Sep 17 00:00:00 2001 From: liulinna Date: Tue, 29 Mar 2022 21:34:45 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: guduhanyan --- services/time_manager/src/time_tick_notify.cpp | 2 +- utils/native/src/time_permission.cpp | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/services/time_manager/src/time_tick_notify.cpp b/services/time_manager/src/time_tick_notify.cpp index bd949c4..6c9fa9b 100644 --- a/services/time_manager/src/time_tick_notify.cpp +++ b/services/time_manager/src/time_tick_notify.cpp @@ -73,7 +73,7 @@ void TimeTickNotify::RefreshNextTriggerTime() struct tm *tblock = localtime(&t); TIME_HILOGI(TIME_MODULE_SERVICE, "Time now: %{public}s", asctime(tblock)); auto UTCTimeMicro = duration_cast(system_clock::now().time_since_epoch()).count(); - TIME_HILOGD(TIME_MODULE_SERVICE, "Time Now Mirc: %{public}" PRId64 "", UTCTimeMicro); + TIME_HILOGI(TIME_MODULE_SERVICE, "Time Now Mirc"); auto timeMilliseconds = GetMillisecondsFromUTC(UTCTimeMicro); nextTriggerTime_ = MINUTE_TO_MILLISECOND - timeMilliseconds; } diff --git a/utils/native/src/time_permission.cpp b/utils/native/src/time_permission.cpp index c760b31..21f822b 100644 --- a/utils/native/src/time_permission.cpp +++ b/utils/native/src/time_permission.cpp @@ -21,7 +21,7 @@ namespace OHOS { namespace MiscServices { namespace { constexpr int32_t SYSTEM_UID = 1000; -constexpr int32_t TEST_UID = 0; +constexpr int32_t ROOT_UID = 0; constexpr int32_t MIN_SYSTEM_UID = 2100; constexpr int32_t MAX_SYSTEM_UID = 2899; } @@ -37,8 +37,8 @@ bool TimePermission::CheckSelfPermission(std::string permName) bool TimePermission::CheckCallingPermission(int32_t uid, std::string permName) { - if ((uid == SYSTEM_UID) || (uid == TEST_UID)) { - TIME_HILOGD(TIME_MODULE_COMMON, "system uid return true"); + if ((uid == SYSTEM_UID) || (uid == ROOT_UID)) { + TIME_HILOGD(TIME_MODULE_COMMON, "root uid return true"); return true; } if (IsSystemUid(uid)) { @@ -46,7 +46,13 @@ bool TimePermission::CheckCallingPermission(int32_t uid, std::string permName) return true; } auto callingToken = IPCSkeleton::GetCallingTokenID(); - auto result = Security::AccessToken::AccessTokenKit::VerifyAccessToken(callingToken, permName); + + auto tokenType = Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(callingToken); + if (tokenType == Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE) { + TIME_HILOGD(TIME_MODULE_COMMON, "native token."); + return true; + } + auto result = Security::AccessToken::AccessTokenKit::VerifyAccessToken(callingToken, permName); if (result == Security::AccessToken::TypePermissionState::PERMISSION_DENIED) { return false; } From 74ddfeef247a3b11ead4435e8d86249119815f63 Mon Sep 17 00:00:00 2001 From: liulinna Date: Tue, 29 Mar 2022 22:01:59 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: guduhanyan --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c2099d6..b1aeb89 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Timing and Time +# Timing and Time - [Introduction](#section11660541593) - [Directory Structure](#section161941989596) @@ -28,6 +28,7 @@ The timing and time module provides APIs for managing the system time. └── services # Service implementation ``` + ## Usage ### Available JS APIs From 9e089065d502c4229dd47757ad0ecc3ef10ba234 Mon Sep 17 00:00:00 2001 From: liulinna Date: Wed, 30 Mar 2022 11:17:59 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=B9=8B=E8=AF=AD=E6=B3=95=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: guduhanyan --- utils/native/src/time_permission.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/native/src/time_permission.cpp b/utils/native/src/time_permission.cpp index 21f822b..4a987c9 100644 --- a/utils/native/src/time_permission.cpp +++ b/utils/native/src/time_permission.cpp @@ -52,7 +52,7 @@ bool TimePermission::CheckCallingPermission(int32_t uid, std::string permName) TIME_HILOGD(TIME_MODULE_COMMON, "native token."); return true; } - auto result = Security::AccessToken::AccessTokenKit::VerifyAccessToken(callingToken, permName); + auto result = Security::AccessToken::AccessTokenKit::VerifyAccessToken(callingToken, permName); if (result == Security::AccessToken::TypePermissionState::PERMISSION_DENIED) { return false; } From 9074d74629c4a5b498ffb9b917c6382767d68e96 Mon Sep 17 00:00:00 2001 From: liulinna Date: Wed, 30 Mar 2022 17:49:05 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: guduhanyan --- services/timer/src/timer_manager.cpp | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/services/timer/src/timer_manager.cpp b/services/timer/src/timer_manager.cpp index 871e3cb..68b4250 100644 --- a/services/timer/src/timer_manager.cpp +++ b/services/timer/src/timer_manager.cpp @@ -182,6 +182,10 @@ void TimerManager::SetHandler(uint64_t id, auto nowElapsed = steady_clock::now(); auto nominalTrigger = ConvertToElapsed(milliseconds(triggerAtTime), type); + if (nominalTrigger < nowElapsed) { + TIME_HILOGI(TIME_MODULE_SERVICE, "invalid trigger time end."); + return; + } auto minTrigger = (IsSystemUid(uid)) ? (nowElapsed + ZERO_FUTURITY) : (nowElapsed + MIN_FUTURITY); auto triggerElapsed = (nominalTrigger > minTrigger) ? nominalTrigger : minTrigger; @@ -302,6 +306,10 @@ void TimerManager::ReAddTimerLocked(std::shared_ptr timer, TIME_HILOGI(TIME_MODULE_SERVICE, "start"); timer->when = timer->origWhen; auto whenElapsed = ConvertToElapsed(timer->when, timer->type); + if (whenElapsed < nowElapsed) { + TIME_HILOGI(TIME_MODULE_SERVICE, "invalid timer end."); + return; + } steady_clock::time_point maxElapsed; if (timer->windowLength == milliseconds::zero()) { maxElapsed = whenElapsed; @@ -319,10 +327,16 @@ std::chrono::steady_clock::time_point TimerManager::ConvertToElapsed(std::chrono { TIME_HILOGI(TIME_MODULE_SERVICE, "start"); if (type == RTC || type == RTC_WAKEUP) { - auto offset = when - system_clock::now().time_since_epoch(); + auto systemTimeNow = system_clock::now().time_since_epoch(); + auto offset = when - systemTimeNow; + TIME_HILOGI(TIME_MODULE_SERVICE, "systemTimeNow : %{public}lld", systemTimeNow.count()); + TIME_HILOGI(TIME_MODULE_SERVICE, "offset : %{public}lld", offset.count()); return steady_clock::now() + offset; } - auto offset = when - steady_clock::now().time_since_epoch(); + auto bootTimeNow = steady_clock::now().time_since_epoch(); + auto offset = when - bootTimeNow; + TIME_HILOGI(TIME_MODULE_SERVICE, "bootTimeNow : %{public}lld", bootTimeNow.count()); + TIME_HILOGI(TIME_MODULE_SERVICE, "offset : %{public}lld", offset.count()); TIME_HILOGI(TIME_MODULE_SERVICE, "end"); return steady_clock::now() + offset; } @@ -439,9 +453,17 @@ void TimerManager::RescheduleKernelTimerLocked() auto firstWakeup = FindFirstWakeupBatchLocked(); auto firstBatch = alarmBatches_.front(); if (firstWakeup != nullptr) { + auto alarmPtr = firstWakeup->Get(0); + if (alarmPtr != nullptr) { + TIME_HILOGI(TIME_MODULE_SERVICE, "wake up alarm id :%{public}" PRId64 "", alarmPtr->id); + } SetLocked(ELAPSED_REALTIME_WAKEUP, firstWakeup->GetStart().time_since_epoch()); } if (firstBatch != firstWakeup) { + auto alarmPtr = firstBatch->Get(0); + if (alarmPtr != nullptr) { + TIME_HILOGI(TIME_MODULE_SERVICE, "nonwakeup alarm id :%{public}" PRId64 "", alarmPtr->id); + } nextNonWakeup = firstBatch->GetStart(); } }