diff --git a/firewall/interception/windowskext/handler.go b/firewall/interception/windowskext/handler.go index f7952ec8..7515f471 100644 --- a/firewall/interception/windowskext/handler.go +++ b/firewall/interception/windowskext/handler.go @@ -33,7 +33,7 @@ const ( // VerdictRequest is the request structure from the Kext. type VerdictRequest struct { id uint32 // ID from RegisterPacket - _ uint64 // Process ID - does not yet work + pid uint64 // Process ID - info only packets direction uint8 ipV6 uint8 // True: IPv6, False: IPv4 protocol uint8 // Protocol @@ -108,6 +108,7 @@ func Handler(packets chan packet.Packet) { info.Inbound = packetInfo.direction > 0 info.InTunnel = false info.Protocol = packet.IPProtocol(packetInfo.protocol) + info.PID = packetInfo.pid // IP version if packetInfo.ipV6 == 1 { diff --git a/firewall/interception/windowskext/kext.go b/firewall/interception/windowskext/kext.go index 6a9045fa..c1a981d8 100644 --- a/firewall/interception/windowskext/kext.go +++ b/firewall/interception/windowskext/kext.go @@ -147,6 +147,9 @@ func RecvVerdictRequest() (*VerdictRequest, error) { // SetVerdict sets the verdict for a packet and/or connection. func SetVerdict(pkt *Packet, verdict network.Verdict) error { + if pkt.verdictRequest.pid != 0 { + return nil // Ignore info only packets + } if pkt.verdictRequest.id == 0 { log.Tracer(pkt.Ctx()).Errorf("kext: failed to set verdict %s: no packet ID", verdict) return ErrNoPacketID