[meshcop] update Timestamp::AdvanceRandomTicks() (#10320)

This commit updates `Timestamp::AdvanceRandomTicks()` to ensure that
the seconds value is incremented only if the ticks value overflows.
This commit is contained in:
Abtin Keshavarzian
2024-06-03 13:37:35 -07:00
committed by GitHub
parent b2f17f865d
commit 8fc67f3104
3 changed files with 5 additions and 3 deletions
+1
View File
@@ -95,6 +95,7 @@ Error DatasetUpdater::RequestUpdate(Dataset &aDataset, UpdaterCallback aCallback
else
{
pendingTimestamp.Clear();
pendingTimestamp.SetSeconds(1);
}
pendingTimestamp.AdvanceRandomTicks();
+3 -2
View File
@@ -99,10 +99,11 @@ void Timestamp::AdvanceRandomTicks(void)
{
uint16_t ticks = GetTicks();
ticks += Random::NonCrypto::GetUint32InRange(1, kMaxRandomTicks);
ticks += Random::NonCrypto::GetUint32InRange(1, kMaxTicks + 1);
if (ticks & (kTicksMask >> kTicksOffset))
if (ticks > kMaxTicks)
{
ticks -= (kMaxTicks + 1);
SetSeconds(GetSeconds() + 1);
}
+1 -1
View File
@@ -179,9 +179,9 @@ public:
private:
static constexpr uint8_t kTicksOffset = 1;
static constexpr uint16_t kTicksMask = 0x7fff << kTicksOffset;
static constexpr uint16_t kMaxRandomTicks = 0x7fff;
static constexpr uint8_t kAuthoritativeOffset = 0;
static constexpr uint16_t kAuthoritativeMask = 1 << kAuthoritativeOffset;
static constexpr uint16_t kMaxTicks = 0x7fff;
uint16_t mSeconds16; // bits 32-47
uint32_t mSeconds32; // bits 0-31