[sub-mac] fix semiWindow overflow in GetCslWindowEdges() (#7549)

Prevent possible overflow in semiWindow calculation by converting
it to uint64_t accuracy.
This commit is contained in:
Łukasz Maciejończyk
2022-03-31 21:34:17 -07:00
committed by GitHub
parent 309073109f
commit c6a767579f
+2 -1
View File
@@ -1198,7 +1198,8 @@ void SubMac::GetCslWindowEdges(uint32_t &aAhead, uint32_t &aAfter)
elapsed = curTime - mCslLastSync.GetValue();
semiWindow = elapsed * (Get<Radio>().GetCslAccuracy() + mCslParentAccuracy) / 1000000;
semiWindow = static_cast<uint32_t>(static_cast<uint64_t>(elapsed) *
(Get<Radio>().GetCslAccuracy() + mCslParentAccuracy) / 1000000);
semiWindow += mCslParentUncert * kUsPerUncertUnit;
aAhead = (semiWindow + kCslReceiveTimeAhead > semiPeriod) ? semiPeriod : semiWindow + kCslReceiveTimeAhead;