diff --git a/src/core/net/ip6.cpp b/src/core/net/ip6.cpp index 82fda68a6..c6f028c0f 100644 --- a/src/core/net/ip6.cpp +++ b/src/core/net/ip6.cpp @@ -1219,22 +1219,21 @@ Error Ip6::HandleDatagram(OwnedPtr 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); + } } }