reassembly panics with limited CPU resources
- 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
Assessment
This issue has not been assessed yet.