diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index 3fba43180..eec2a62ca 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -1912,10 +1912,16 @@ Error Mle::SendChildUpdateRequestToParent(ChildUpdateRequestMode aMode) VerifyOrExit((message = NewMleMessage(kCommandChildUpdateRequest)) != nullptr, error = kErrorNoBufs); SuccessOrExit(error = message->AppendModeTlv(mDeviceMode)); - if ((aMode == kAppendChallengeTlv) || IsDetached()) + switch (aMode) { - mParentRequestChallenge.GenerateRandom(); - SuccessOrExit(error = message->AppendChallengeTlv(mParentRequestChallenge)); + case kNormalChildUpdateRequest: + case kAppendZeroTimeout: + break; + case kAppendChallengeTlv: + case kToRestoreChildRole: + mPrevRoleRestorer.GenerateRandomChallenge(); + SuccessOrExit(error = message->AppendChallengeTlv(mPrevRoleRestorer.GetChallenge())); + break; } switch (mRole) @@ -3425,7 +3431,8 @@ void Mle::HandleChildUpdateResponseOnChild(RxInfo &aRxInfo) switch (mRole) { case kRoleDetached: - VerifyOrExit(response == mParentRequestChallenge, error = kErrorSecurity); + VerifyOrExit(mPrevRoleRestorer.IsRestoringChildRole(), error = kErrorSecurity); + VerifyOrExit(response == mPrevRoleRestorer.GetChallenge(), error = kErrorSecurity); break; case kRoleChild: diff --git a/src/core/thread/mle.hpp b/src/core/thread/mle.hpp index 9cde4eb62..1ea22a13a 100644 --- a/src/core/thread/mle.hpp +++ b/src/core/thread/mle.hpp @@ -1755,10 +1755,8 @@ private: bool IsRestoringRouterOrLeaderRole(void) const { return mState == kRestoringRouterOrLeaderRole; } void HandleTimer(void); -#if OPENTHREAD_FTD void GenerateRandomChallenge(void) { mChallenge.GenerateRandom(); } const TxChallenge &GetChallenge(void) const { return mChallenge; } -#endif private: static constexpr uint32_t kMaxStartDelay = 25; @@ -1782,12 +1780,10 @@ private: using DelayTimer = TimerMilliIn; - State mState; - uint8_t mAttempts; - DelayTimer mTimer; -#if OPENTHREAD_FTD + State mState; + uint8_t mAttempts; + DelayTimer mTimer; TxChallenge mChallenge; -#endif }; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -