[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)
{