[meshcop] handle Keep Alive when no Commissioner is active (#2610)

Credit to OSS-Fuzz.
This commit is contained in:
Jonathan Hui
2018-03-12 18:25:28 +00:00
committed by GitHub
parent 6d98377a1a
commit ab0416c201
+8 -11
View File
@@ -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();
}