From cdc61f6c60acd17374bd7bc204f2cd54a8dd6e38 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Thu, 13 Nov 2025 02:03:47 -0800 Subject: [PATCH] [border-agent] handle Proxy/Relay TX TMF when active commissioner (#12142) This commit adds checks in `BorderAgent::HandleTmfProxyTx()` and `BorderAgent::HandleTmfRelayTx()` to verify that the session belongs to the current active commissioner rather than a candidate. Specifically, `HandleTmfProxyTx()` uses the commissioner ALOC as the sender address, which is available only when commissioner petition is accepted. --- src/core/meshcop/border_agent.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/meshcop/border_agent.cpp b/src/core/meshcop/border_agent.cpp index 7fabc27ec..b51f5c4f8 100644 --- a/src/core/meshcop/border_agent.cpp +++ b/src/core/meshcop/border_agent.cpp @@ -1220,6 +1220,8 @@ void Manager::CoapDtlsSession::HandleTmfProxyTx(Coap::Message &aMessage) OffsetRange offsetRange; UdpEncapsulationTlvHeader udpEncapHeader; + VerifyOrExit(IsActiveCommissioner(), error = kErrorInvalidState); + SuccessOrExit(error = Tlv::FindTlvValueOffsetRange(aMessage, Tlv::kUdpEncapsulation, offsetRange)); SuccessOrExit(error = aMessage.Read(offsetRange, udpEncapHeader)); @@ -1258,6 +1260,8 @@ void Manager::CoapDtlsSession::HandleTmfRelayTx(Coap::Message &aMessage) VerifyOrExit(aMessage.IsNonConfirmablePostRequest()); + VerifyOrExit(IsActiveCommissioner(), error = kErrorInvalidState); + SuccessOrExit(error = Tlv::Find(aMessage, joinerRouterRloc)); message.Reset(Get().NewPriorityNonConfirmablePostMessage(kUriRelayTx));