mirror of
https://github.com/espressif/openthread.git
synced 2026-08-20 01:19:51 +00:00
[mesh-forwarder] fix RemoveDataResponseMessages() accessing freed msg (#6880)
This commit fixes a bug in `RemoveDataResponseMessages()` where `GetNext()` method may be called on an already dequeued and freed `Message` instance (within the `for` loop iteration). The change in this commit ensures to get and retain the `next` message before potentially removing the message from the `mSendQueue` and freeing it.
This commit is contained in:
@@ -303,9 +303,12 @@ void MeshForwarder::RemoveMessages(Child &aChild, Message::SubType aSubType)
|
||||
void MeshForwarder::RemoveDataResponseMessages(void)
|
||||
{
|
||||
Ip6::Header ip6Header;
|
||||
Message * next;
|
||||
|
||||
for (Message *message = mSendQueue.GetHead(); message; message = message->GetNext())
|
||||
for (Message *message = mSendQueue.GetHead(); message != nullptr; message = next)
|
||||
{
|
||||
next = message->GetNext();
|
||||
|
||||
if (message->GetSubType() != Message::kSubTypeMleDataResponse)
|
||||
{
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user