mirror of
https://github.com/espressif/openthread.git
synced 2026-08-28 12:59:54 +00:00
[meshcop] handle Keep Alive when no Commissioner is active (#2610)
Credit to OSS-Fuzz.
This commit is contained in:
@@ -178,8 +178,10 @@ void Leader::HandleKeepAlive(void * aContext,
|
||||
|
||||
void Leader::HandleKeepAlive(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo)
|
||||
{
|
||||
NetworkData::Leader & netdata = GetNetif().GetNetworkDataLeader();
|
||||
StateTlv state;
|
||||
CommissionerSessionIdTlv sessionId;
|
||||
BorderAgentLocatorTlv * borderAgentLocator;
|
||||
StateTlv::State responseState;
|
||||
|
||||
otLogInfoMeshCoP(GetInstance(), "received keep alive");
|
||||
@@ -190,7 +192,10 @@ void Leader::HandleKeepAlive(Coap::Header &aHeader, Message &aMessage, const Ip6
|
||||
SuccessOrExit(Tlv::GetTlv(aMessage, Tlv::kCommissionerSessionId, sizeof(sessionId), sessionId));
|
||||
VerifyOrExit(sessionId.IsValid());
|
||||
|
||||
if (sessionId.GetCommissionerSessionId() != mSessionId)
|
||||
borderAgentLocator =
|
||||
static_cast<BorderAgentLocatorTlv *>(netdata.GetCommissioningDataSubTlv(Tlv::kBorderAgentLocator));
|
||||
|
||||
if ((borderAgentLocator == NULL) || (sessionId.GetCommissionerSessionId() != mSessionId))
|
||||
{
|
||||
responseState = StateTlv::kReject;
|
||||
}
|
||||
@@ -201,19 +206,11 @@ void Leader::HandleKeepAlive(Coap::Header &aHeader, Message &aMessage, const Ip6
|
||||
}
|
||||
else
|
||||
{
|
||||
NetworkData::Leader & netdata = GetNetif().GetNetworkDataLeader();
|
||||
BorderAgentLocatorTlv *borderAgentLocator;
|
||||
uint16_t rloc;
|
||||
|
||||
borderAgentLocator =
|
||||
static_cast<BorderAgentLocatorTlv *>(netdata.GetCommissioningDataSubTlv(Tlv::kBorderAgentLocator));
|
||||
assert(borderAgentLocator != NULL);
|
||||
|
||||
rloc = HostSwap16(aMessageInfo.GetPeerAddr().mFields.m16[7]);
|
||||
uint16_t rloc = HostSwap16(aMessageInfo.GetPeerAddr().mFields.m16[7]);
|
||||
|
||||
if (borderAgentLocator->GetBorderAgentLocator() != rloc)
|
||||
{
|
||||
borderAgentLocator->SetBorderAgentLocator(HostSwap16(aMessageInfo.GetPeerAddr().mFields.m16[7]));
|
||||
borderAgentLocator->SetBorderAgentLocator(rloc);
|
||||
netdata.IncrementVersion();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user