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