[ip6] simplify applying of TMF UDP filter in Ip6::HandleDatagram() (#10822)

This commit simplifies the filter checks that drop TMF UDP messages
from untrusted origins. The `mTmfOriginFilterEnabled` flag is checked
first, and then the full UDP header is read from the message.
This commit is contained in:
Abtin Keshavarzian
2024-10-11 18:05:23 -07:00
committed by GitHub
parent 39ebb530c0
commit 43a73a1cac
+12 -13
View File
@@ -1219,22 +1219,21 @@ Error Ip6::HandleDatagram(OwnedPtr<Message> aMessagePtr, bool aIsReassembled)
SuccessOrExit(error);
}
if (aMessagePtr->IsOriginHostUntrusted() && (nextHeader == kProtoUdp))
{
uint16_t destPort;
SuccessOrExit(
error = aMessagePtr->Read(aMessagePtr->GetOffset() + Udp::Header::kDestPortFieldOffset, destPort));
destPort = BigEndian::HostSwap16(destPort);
if (destPort == Tmf::kUdpPort
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
&& mTmfOriginFilterEnabled
if (mTmfOriginFilterEnabled)
#endif
)
{
if (aMessagePtr->IsOriginHostUntrusted() && (nextHeader == kProtoUdp))
{
LogNote("Dropping TMF message from untrusted origin");
ExitNow(error = kErrorDrop);
Udp::Header udpHeader;
SuccessOrExit(error = aMessagePtr->Read(aMessagePtr->GetOffset(), udpHeader));
if (udpHeader.GetDestinationPort() == Tmf::kUdpPort)
{
LogNote("Dropping TMF message from untrusted origin");
ExitNow(error = kErrorDrop);
}
}
}