From f4f591d14c703332e1f00fbae685358b742d78f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=9D=E5=80=89=E6=B0=B4=E5=B8=8C?= Date: Thu, 8 Jan 2026 19:58:23 +0800 Subject: [PATCH] fix: outbound packet not dropped by acl (#1766) --- easytier/src/peers/peer_manager.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/easytier/src/peers/peer_manager.rs b/easytier/src/peers/peer_manager.rs index 03f4056d..be9c17bc 100644 --- a/easytier/src/peers/peer_manager.rs +++ b/easytier/src/peers/peer_manager.rs @@ -941,7 +941,8 @@ impl PeerManager { self.get_route().get_foreign_network_summary().await } - async fn run_nic_packet_process_pipeline(&self, data: &mut ZCPacket) { + async fn run_nic_packet_process_pipeline(&self, data: &mut ZCPacket) -> bool { + // Enforce ACL for outbound (NIC-originated) packets. If ACL denies, stop processing. if !self.global_ctx.get_acl_filter().process_packet_with_acl( data, false, @@ -949,12 +950,14 @@ impl PeerManager { None, &self.get_route(), ) { - return; + return false; } for pipeline in self.nic_packet_process_pipeline.read().await.iter().rev() { let _ = pipeline.try_process_packet_from_nic(data).await; } + + true } pub async fn remove_nic_packet_process_pipeline(&self, id: String) -> Result<(), Error> { @@ -1161,7 +1164,9 @@ impl PeerManager { 0, tunnel::packet_def::PacketType::Data as u8, ); - self.run_nic_packet_process_pipeline(&mut msg).await; + if !self.run_nic_packet_process_pipeline(&mut msg).await { + return Ok(()); + } let cur_to_peer_id = msg.peer_manager_header().unwrap().to_peer_id.into(); if cur_to_peer_id != 0 { return Self::send_msg_internal(