From 70513418a523d58d04b776945789c08bf3a688a9 Mon Sep 17 00:00:00 2001 From: Nayana Bidari Date: Mon, 10 Feb 2025 09:37:25 -0800 Subject: [PATCH] Fix data race in packetmmap endpoint. PiperOrigin-RevId: 725246804 --- pkg/sentry/socket/netstack/packetmmap/endpoint.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/sentry/socket/netstack/packetmmap/endpoint.go b/pkg/sentry/socket/netstack/packetmmap/endpoint.go index 04f5804fea..600f0d3c0c 100644 --- a/pkg/sentry/socket/netstack/packetmmap/endpoint.go +++ b/pkg/sentry/socket/netstack/packetmmap/endpoint.go @@ -68,8 +68,9 @@ type Endpoint struct { // +checklocks:mu mode ringBufferMode + // +checklocks:mu + cooked bool - cooked bool packetEP stack.MappablePacketEndpoint reserve uint32 nicID tcpip.NICID @@ -196,6 +197,7 @@ func (m *Endpoint) HandlePacket(nicID tcpip.NICID, netProto tcpip.NetworkProtoco m.stack.Stats().DroppedPackets.Increment() return } + isCooked := m.cooked m.mu.Unlock() if pkt.GSOOptions.Type != stack.GSONone && pkt.GSOOptions.NeedsCsum { @@ -206,7 +208,7 @@ func (m *Endpoint) HandlePacket(nicID tcpip.NICID, netProto tcpip.NetworkProtoco } pktBuf := pkt.ToBuffer() - if m.cooked { + if isCooked { pktBuf.TrimFront(int64(len(pkt.LinkHeader().Slice()) + len(pkt.VirtioNetHeader().Slice()))) // Cooked packet endpoints don't include the link-headers in received // packets.