Merge release-20210112.0-77-g76da673a0 (automated)
diff --git a/pkg/tcpip/network/ipv4/igmp.go b/pkg/tcpip/network/ipv4/igmp.go
index 9515fde..4550aac 100644
--- a/pkg/tcpip/network/ipv4/igmp.go
+++ b/pkg/tcpip/network/ipv4/igmp.go
@@ -157,14 +157,13 @@
 	}
 	h := header.IGMP(headerView)
 
-	// Temporarily reset the checksum field to 0 in order to calculate the proper
-	// checksum.
-	wantChecksum := h.Checksum()
-	h.SetChecksum(0)
-	gotChecksum := ^header.ChecksumVV(pkt.Data, 0 /* initial */)
-	h.SetChecksum(wantChecksum)
-
-	if gotChecksum != wantChecksum {
+	// As per RFC 1071 section 1.3,
+	//
+	//   To check a checksum, the 1's complement sum is computed over the
+	//   same set of octets, including the checksum field. If the result
+	//   is all 1 bits (-0 in 1's complement arithmetic), the check
+	//   succeeds.
+	if header.ChecksumVV(pkt.Data, 0 /* initial */) != 0xFFFF {
 		received.checksumErrors.Increment()
 		return
 	}