From 3d5cb364f22f0881d5eb528aea01b8db40cc6dd2 Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Sat, 1 Jul 2023 07:31:22 -0700 Subject: [PATCH] [mesh-forwarder] only mark Key ID Mode 0 and 1 as secure --- src/core/thread/mesh_forwarder.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index 0b07174c0..ca24fa41c 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp @@ -75,10 +75,24 @@ void ThreadLinkInfo::SetFrom(const Mac::RxFrame &aFrame) 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) {