google / google/gopacket

reassembly panics with limited CPU resources

Open
#483 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
6.8k
Forks
1.2k
PR merge metrics
No merged PRs in 30d

Description

Currently there appears to be an issue on CPU saturation where a call to `reassemblyObject.CaptureInfo` results in an invalid access in `page.CaptureInfo`. Details are slim at the moment since I just started investigating this, but I have a couple backtraces (with the project name redacted)

```
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x8ee246]

goroutine 245 [running]:
github.com/?/main/vendor/github.com/google/gopacket/reassembly.(*page).captureInfo(0xc4222f2f40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/?/main/vendor/github.com/google/gopacket/reassembly/tcpassembly.go:242 +0x56
github.com/?/main/vendor/github.com/google/gopacket/reassembly.(*reassemblyObject).CaptureInfo(0xc42017d0a0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/?/main/vendor/github.com/google/gopacket/reassembly/tcpassembly.go:162 +0xcc
github.com/?/main/agent/?/pcapture.(*tcpStream).ReassembledSG(0xc426edca00, 0x14979e0, 0xc42017d0a0, 0x148a6a0, 0xc422e14270)
/go/src/github.com/?/main/agent/?/pcapture/pcapture.go:160 +0x110
github.com/?/main/vendor/github.com/google/gopacket/reassembly.(*Assembler).sendToConnection(0xc42017d000, 0xc4271b3508, 0xc4271b3578, 0x148a6a0, 0xc422e14270, 0x8857eefe)
/go/src/github.com/?/main/vendor/github.com/google/gopacket/reassembly/tcpassembly.go:1080 +0xab
github.com/?/main/vendor/github.com/google/gopacket/reassembly.(*Assembler).skipFlush(0xc42017d000, 0xc4271b3508, 0xc4271b3578)
/go/src/github.com/?/main/vendor/github.com/google/gopacket/reassembly/tcpassembly.go:1166 +0xbd
github.com/?/main/vendor/github.com/google/gopacket/reassembly.(*Assembler).flushClose(0xc42017d000, 0xc4271b3508, 0xc4271b3578, 0xbec910de9435861c, 0x3792065ec7, 0x14d59e0, 0xbec910de9435861c, 0x3792065ec7, 0x14d59e0, 0xc4297f0000)
/go/src/github.com/?/main/vendor/github.com/google/gopacket/reassembly/tcpassembly.go:1273 +0x5a
github.com/?/main/vendor/github.com/google/gopacket/reassembly.(*Assembler).FlushWithOptions(0xc42017d000, 0xbec910de9435861c, 0x3792065ec7, 0x14d59e0, 0xbec910de9435861c, 0x3792065ec7, 0x14d59e0, 0x1435861c, 0x1435861c297f8ec0)
/go/src/github.com/?/main/vendor/github.com/google/gopacket/reassembly/tcpassembly.go:1242 +0x11d
github.com/?/main/vendor/github.com/google/gopacket/reassembly.(*Assembler).FlushCloseOlderThan(0xc42017d000, 0xbec910de9435861c, 0x3792065ec7, 0x14d59e0, 0xbec910de9435861c, 0x3792065ec7)
/go/src/github.com/?/main/vendor/github.com/google/gopacket/reassembly/tcpassembly.go:1263 +0xa7
github.com/?/main/agent/?/pcapture.newHandle.func1(0xc4292c6de4, 0x6, 0xc427706b40, 0xc4282bc300, 0xc42017d000, 0xc426d22e40)
/go/src/github.com/?/main/agent/?/pcapture/pcapture.go:275 +0x96
created by github.com/?/main/agent/?/pcapture.newHandle

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x8ee246]

goroutine 189 [running]:
github.com/?/main/vendor/github.com/google/gopacket/reassembly.(*page).captureInfo(0xc4224b1210, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/?/main/vendor/github.com/google/gopacket/reassembly/tcpassembly.go:242 +0x56
github.com/?/main/vendor/github.com/google/gopacket/reassembly.(*reassemblyObject).CaptureInfo(0xc4293a02a0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/?/main/vendor/github.com/google/gopacket/reassembly/tcpassembly.go:162 +0xcc
github.com/?/main/agent/?/pcapture.(*tcpStream).ReassembledSG(0xc427c39a40, 0x14979e0, 0xc4293a02a0, 0x148a6a0, 0xc432cb1080)
/go/src/github.com/?/main/agent/?/pcapture/pcapture.go:160 +0x110
github.com/?/main/vendor/github.com/google/gopacket/reassembly.(*Assembler).sendToConnection(0xc4293a0200, 0xc429c27240, 0xc429c272b0, 0x148a6a0, 0xc432cb1080, 0xc429c272b0)
/go/src/github.com/?/main/vendor/github.com/google/gopacket/reassembly/tcpassembly.go:1080 +0xab
github.com/?/main/vendor/github.com/google/gopacket/reassembly.(*Assembler).AssembleWithContext(0xc4293a0200, 0x1, 0x4, 0x4, 0xf401280a, 0x0, 0x7900280a, 0x0, 0xc433962b40, 0x148a6a0, ...)
/go/src/github.com/?/main/vendor/github.com/google/gopacket/reassembly/tcpassembly.go:706 +0x7be
github.com/?/main/agent/?/pcapture.(*_handle).tryAssembleTCP(0xc426ed1f90, 0x1499120, 0xc433962a00)
/go/src/github.com/?/main/agent/?/pcapture/pcapture.go:481 +0x1fb
github.com/?/main/agent/?/pcapture.(*_handle).read(0xc426ed1f90)
/go/src/github.com/?/main/agent/?/pcapture/pcapture.go:357 +0x1df
github.com/?/main/agent/?/pcapture.listenToDevice(0xc4274eb29a, 0x6)
/go/src/github.com/?/main/agent/?/pcapture/pcapture.go:309 +0x19a
created by github.com/?/main/agent/?/pcapture.Init.func2
/go/src/github.com/?/main/agent/?/pcapture/pcapture.go:208 +0x99
```

I intend to keep this issue updated if I figure anything out.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.