From 1641eced0d0b19828899e0f75fc8ce7a25664cab Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 19 Dec 2022 23:50:54 +0100 Subject: [PATCH] [spinel] remove incorrect static_cast (#8512) This should not be cast to an unsigned integer. If the mRadioTimeOffset is negative, the resulting time instance is incorrect and breaks e.g. CSL over RCP. --- src/lib/spinel/radio_spinel.hpp | 2 +- src/lib/spinel/radio_spinel_impl.hpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/spinel/radio_spinel.hpp b/src/lib/spinel/radio_spinel.hpp index 4fd53b9f8..bc4d63397 100644 --- a/src/lib/spinel/radio_spinel.hpp +++ b/src/lib/spinel/radio_spinel.hpp @@ -1079,7 +1079,7 @@ private: uint64_t mTxRadioEndUs; uint64_t mRadioTimeRecalcStart; ///< When to recalculate RCP time offset. - int64_t mRadioTimeOffset; ///< Time difference with estimated RCP time minus host time. + uint64_t mRadioTimeOffset; ///< Time difference with estimated RCP time minus host time. MaxPowerTable mMaxPowerTable; diff --git a/src/lib/spinel/radio_spinel_impl.hpp b/src/lib/spinel/radio_spinel_impl.hpp index 4c7b17e3c..0952453a4 100644 --- a/src/lib/spinel/radio_spinel_impl.hpp +++ b/src/lib/spinel/radio_spinel_impl.hpp @@ -218,7 +218,7 @@ RadioSpinel::RadioSpinel(void) #endif , mTxRadioEndUs(UINT64_MAX) , mRadioTimeRecalcStart(UINT64_MAX) - , mRadioTimeOffset(0) + , mRadioTimeOffset(UINT64_MAX) { mVersion[0] = '\0'; memset(&mRadioSpinelMetrics, 0, sizeof(mRadioSpinelMetrics)); @@ -2201,7 +2201,7 @@ void RadioSpinel::CalcRcpTimeOffset(void) VerifyOrExit(error == OT_ERROR_NONE, mRadioTimeRecalcStart = localRxTimestamp); - mRadioTimeOffset = static_cast(remoteTimestamp - ((localRxTimestamp / 2) + (localTxTimestamp / 2))); + mRadioTimeOffset = (remoteTimestamp - ((localRxTimestamp / 2) + (localTxTimestamp / 2))); mIsTimeSynced = true; mRadioTimeRecalcStart = localRxTimestamp + RCP_TIME_OFFSET_CHECK_INTERVAL; @@ -2213,7 +2213,7 @@ exit: template uint64_t RadioSpinel::GetNow(void) { - return mIsTimeSynced ? (otPlatTimeGet() + static_cast(mRadioTimeOffset)) : UINT64_MAX; + return (mIsTimeSynced) ? (otPlatTimeGet() + mRadioTimeOffset) : UINT64_MAX; } template