mirror of
https://github.com/espressif/openthread.git
synced 2026-10-10 17:57:48 +00:00
Mesh_forwarder: Copy the payload into message before ipv6 filter check (#511)
This commit changes the steps in `mesh_forwarder` so we check the ipv6 filter (security) check after payload is copied into the message buffer. This helps the IPv6 filter to pass along the TCP packets with unsecure dst port(s) properly.
This commit is contained in:
committed by
Jonathan Hui
parent
2d914a1cc0
commit
1ef2165866
@@ -1302,9 +1302,6 @@ void MeshForwarder::HandleFragment(uint8_t *aFrame, uint8_t aFrameLength,
|
||||
headerLength = mLowpan.Decompress(*message, aMacSource, aMacDest, aFrame, aFrameLength, datagramLength);
|
||||
VerifyOrExit(headerLength > 0, error = kThreadError_NoBufs);
|
||||
|
||||
// Security Check
|
||||
VerifyOrExit(mNetif.GetIp6Filter().Accept(*message), error = kThreadError_Drop);
|
||||
|
||||
aFrame += headerLength;
|
||||
aFrameLength -= headerLength;
|
||||
|
||||
@@ -1314,6 +1311,13 @@ void MeshForwarder::HandleFragment(uint8_t *aFrame, uint8_t aFrameLength,
|
||||
message->SetDatagramTag(datagramTag);
|
||||
message->SetTimeout(kReassemblyTimeout);
|
||||
|
||||
// copy Fragment
|
||||
message->Write(message->GetOffset(), aFrameLength, aFrame);
|
||||
message->MoveOffset(aFrameLength);
|
||||
|
||||
// Security Check
|
||||
VerifyOrExit(mNetif.GetIp6Filter().Accept(*message), error = kThreadError_Drop);
|
||||
|
||||
mReassemblyList.Enqueue(*message);
|
||||
|
||||
if (!mReassemblyTimer.IsRunning())
|
||||
@@ -1339,14 +1343,12 @@ void MeshForwarder::HandleFragment(uint8_t *aFrame, uint8_t aFrameLength,
|
||||
}
|
||||
|
||||
VerifyOrExit(message != NULL, error = kThreadError_Drop);
|
||||
|
||||
// copy Fragment
|
||||
message->Write(message->GetOffset(), aFrameLength, aFrame);
|
||||
message->MoveOffset(aFrameLength);
|
||||
}
|
||||
|
||||
assert(message != NULL);
|
||||
|
||||
// copy Fragment
|
||||
message->Write(message->GetOffset(), aFrameLength, aFrame);
|
||||
message->MoveOffset(aFrameLength);
|
||||
|
||||
exit:
|
||||
|
||||
if (error == kThreadError_None)
|
||||
@@ -1412,9 +1414,6 @@ void MeshForwarder::HandleLowpanHC(uint8_t *aFrame, uint8_t aFrameLength,
|
||||
headerLength = mLowpan.Decompress(*message, aMacSource, aMacDest, aFrame, aFrameLength, 0);
|
||||
VerifyOrExit(headerLength > 0, error = kThreadError_Drop);
|
||||
|
||||
// Security Check
|
||||
VerifyOrExit(mNetif.GetIp6Filter().Accept(*message), error = kThreadError_Drop);
|
||||
|
||||
aFrame += headerLength;
|
||||
aFrameLength -= headerLength;
|
||||
|
||||
@@ -1425,6 +1424,9 @@ void MeshForwarder::HandleLowpanHC(uint8_t *aFrame, uint8_t aFrameLength,
|
||||
|
||||
message->Write(message->GetOffset(), aFrameLength, aFrame);
|
||||
|
||||
// Security Check
|
||||
VerifyOrExit(mNetif.GetIp6Filter().Accept(*message), error = kThreadError_Drop);
|
||||
|
||||
exit:
|
||||
|
||||
if (error == kThreadError_None)
|
||||
|
||||
Reference in New Issue
Block a user