[mesh_forward] correct link security (cherry picked from commit 906e8637b33104db65f88640bb1bf9c71e22bfb0) See also: https://github.com/openthread/openthread/commit/3d5cb364f22f0881d5eb528aea01b8db40cc6dd2 Bug: b/276448493 Bug: b/280848132 Change-Id: I86af476dc4352506544405deee0be12bab0f4067 Reviewed-on: https://fuchsia-review.googlesource.com/c/third_party/openthread/+/881191 Reviewed-by: Jiaming (Charlie) Wang <jiamingw@google.com> (cherry picked from commit 48f6c6388a8d6a1f75eda53a6612fa836ed5180f)
diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index a88830c..34e24af 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp
@@ -75,10 +75,24 @@ mIsDstPanIdBroadcast = (dstPanId == Mac::kPanIdBroadcast); } - mChannel = aFrame.GetChannel(); - mRss = aFrame.GetRssi(); - mLqi = aFrame.GetLqi(); - mLinkSecurity = aFrame.GetSecurityEnabled(); + if (aFrame.GetSecurityEnabled()) + { + uint8_t keyIdMode; + + // MAC Frame Security was already validated at the MAC + // layer. As a result, `GetKeyIdMode()` will never return + // failure here. + IgnoreError(aFrame.GetKeyIdMode(keyIdMode)); + mLinkSecurity = (keyIdMode == Mac::Frame::kKeyIdMode0) || (keyIdMode == Mac::Frame::kKeyIdMode1); + } + else + { + mLinkSecurity = false; + } + + mChannel = aFrame.GetChannel(); + mRss = aFrame.GetRssi(); + mLqi = aFrame.GetLqi(); #if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE if (aFrame.GetTimeIe() != nullptr) {