Skip to content

Commit

Permalink
[csl] ignore zero valued CSL IE period (openthread#9414)
Browse files Browse the repository at this point in the history
Ignore a CSL IE with period set to 0.

Accepting it would eventually lead to a division by 0 fault in
`CslTxScheduler::GetNextCslTransmissionDelay`.
  • Loading branch information
edmont authored Sep 12, 2023
1 parent 6da6e09 commit d62167e
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 1 deletion.
2 changes: 2 additions & 0 deletions src/core/mac/mac.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2329,6 +2329,8 @@ void Mac::ProcessCsl(const RxFrame &aFrame, const Address &aSrcAddr)
VerifyOrExit(child != nullptr);

csl = reinterpret_cast<const CslIe *>(cur + sizeof(HeaderIe));
VerifyOrExit(csl->GetPeriod() >= kMinCslIePeriod);

child->SetCslPeriod(csl->GetPeriod());
child->SetCslPhase(csl->GetPhase());
child->SetCslSynchronized(true);
Expand Down
4 changes: 3 additions & 1 deletion src/core/mac/mac.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ namespace Mac {

constexpr uint32_t kDataPollTimeout =
OPENTHREAD_CONFIG_MAC_DATA_POLL_TIMEOUT; ///< Timeout for receiving Data Frame (in msec).
constexpr uint32_t kSleepDelay = 300; ///< Max sleep delay when frame is pending (in msec)
constexpr uint32_t kSleepDelay = 300; ///< Max sleep delay when frame is pending (in msec).

constexpr uint16_t kScanDurationDefault = OPENTHREAD_CONFIG_MAC_SCAN_DURATION; ///< Duration per channel (in msec).

Expand All @@ -87,6 +87,8 @@ constexpr uint8_t kMaxFrameRetriesCsl = 0;

constexpr uint8_t kTxNumBcast = OPENTHREAD_CONFIG_MAC_TX_NUM_BCAST; ///< Num of times broadcast frame is tx.

constexpr uint16_t kMinCslIePeriod = OPENTHREAD_CONFIG_MAC_CSL_MIN_PERIOD;

/**
* Defines the function pointer called on receiving an IEEE 802.15.4 Beacon during an Active Scan.
*
Expand Down

0 comments on commit d62167e

Please sign in to comment.