From 043dd69c15f3d620f89c770d290c1477e440e316 Mon Sep 17 00:00:00 2001 From: Tianyu Zhou Date: Thu, 27 Aug 2026 14:37:48 +0800 Subject: [PATCH] fix(tcpip): keep readv dispatcher alive after filtered frame Treat an Ethernet frame rejected by the endpoint address filter as a consumed packet rather than a request to stop the ReadV dispatch loop. A direct TAP endpoint can receive foreign unicast traffic after a sandbox is restored and reattached to a bridge with stale FDB or neighbor state. Returning false for that frame tears down the receive dispatcher, leaving the restored sandbox running but unable to receive subsequent traffic. Keep the dispatcher alive after dropping the frame, matching the RecvMMsg and PacketMMap paths. Signed-off-by: Tianyu Zhou --- pkg/tcpip/link/fdbased/packet_dispatchers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/tcpip/link/fdbased/packet_dispatchers.go b/pkg/tcpip/link/fdbased/packet_dispatchers.go index b903ae151de..5e6535f2010 100644 --- a/pkg/tcpip/link/fdbased/packet_dispatchers.go +++ b/pkg/tcpip/link/fdbased/packet_dispatchers.go @@ -202,7 +202,7 @@ func (d *readVDispatcher) dispatch() (bool, tcpip.Error) { addr := d.e.addr d.e.mu.RUnlock() if !d.e.parseInboundHeader(pkt, addr) { - return false, nil + return true, nil } d.mgr.queuePacket(pkt, d.e.hdrSize > 0) d.mgr.wakeReady()