google / google/gopacket

reassembly: ReassembledSG-ReassemblyComplete call order invariant is sometimes broken

Open
#431 0 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

I haven't really debugged why it happens, but I have a test case.

There're two separate sessions in this file, which reuse TCP port (i.e. TCP/IP 4-tuple is the same). They're both propery closed (however, not from the point of view of reassembly, which makes this related to #427)

At the very end FlushCloseOlderThan is called with date set in future, and somehow ReassembledSG gets called after ReassemblyComplete.

https://gist.github.com/WGH-/e008ae99df08c3d557b18f23a57fea72
http://cdn.big.dong.solutions/a2441ae2-62c4-4cb7-b2dc-fc26e3f40902/reassembly_broken_invariant.pcap

```
2018/03/21 03:30:40 Calling FlushCloseOlderThan
2018/03/21 03:30:40 stream #1: ReassembledSG
2018/03/21 03:30:40 stream #1: ReassemblyComplete
2018/03/21 03:30:40 stream #1: ReassembledSG
2018/03/21 03:30:40 Got ReassembledSG after ReassemblyComplete 10.65.85.1->10.66.85.2 60922->4242!
```

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.