From d30b1ae6fbcfd3963d598bd21606616a65faf16a Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Wed, 12 Mar 2025 10:59:00 -0700 Subject: [PATCH] [mesh-forwarder] handle route lookup errors in `UpdateIp6RouteFtd()` (#11335) This commit modifies `UpdateIp6RouteFtd()` to handle errors returned by `NetworkData::Leader::RouteLookup()`, ensuring that messages are dropped appropriately when a route lookup fails. It also initializes `mMeshDest` to an invalid RLOC16 at the beginning of the method. --- src/core/thread/mesh_forwarder_ftd.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/thread/mesh_forwarder_ftd.cpp b/src/core/thread/mesh_forwarder_ftd.cpp index 270a41b30..04f1feda0 100644 --- a/src/core/thread/mesh_forwarder_ftd.cpp +++ b/src/core/thread/mesh_forwarder_ftd.cpp @@ -393,6 +393,8 @@ Error MeshForwarder::UpdateIp6RouteFtd(const Ip6::Header &aIp6Header, Message &a Error error = kErrorNone; Neighbor *neighbor; + mMeshDest = Mle::kInvalidRloc16; + if (aMessage.GetOffset() > 0) { mMeshDest = aMessage.GetMeshDest(); @@ -400,6 +402,7 @@ Error MeshForwarder::UpdateIp6RouteFtd(const Ip6::Header &aIp6Header, Message &a else if (mle.IsRoutingLocator(aIp6Header.GetDestination())) { uint16_t rloc16 = aIp6Header.GetDestination().GetIid().GetLocator(); + VerifyOrExit(Mle::IsRouterIdValid(Mle::RouterIdFromRloc16(rloc16)), error = kErrorDrop); mMeshDest = rloc16; } @@ -436,8 +439,8 @@ Error MeshForwarder::UpdateIp6RouteFtd(const Ip6::Header &aIp6Header, Message &a } else { - IgnoreError( - Get().RouteLookup(aIp6Header.GetSource(), aIp6Header.GetDestination(), mMeshDest)); + SuccessOrExit(error = Get().RouteLookup(aIp6Header.GetSource(), + aIp6Header.GetDestination(), mMeshDest)); } VerifyOrExit(mMeshDest != Mle::kInvalidRloc16, error = kErrorDrop);