Skip to content

Commit f49ea14

Browse files
authored
Merge pull request #164 from coroot/handling_out_of_order
close existing connection with same PID:FD when creating a new one
2 parents 1dbf538 + 09c1209 commit f49ea14

File tree

5 files changed

+23
-14
lines changed

5 files changed

+23
-14
lines changed

containers/container.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,12 @@ func (c *Container) onConnectionOpen(pid uint32, fd uint64, src, dst, actualDst
559559
Timestamp: timestamp,
560560
}
561561
c.activeConnections[ConnectionKey{src: src, dst: dst}] = connection
562-
c.connectionsByPidFd[PidFd{Pid: pid, Fd: fd}] = connection
562+
k := PidFd{Pid: pid, Fd: fd}
563+
prev := c.connectionsByPidFd[k]
564+
if prev != nil {
565+
prev.Closed = time.Now()
566+
}
567+
c.connectionsByPidFd[k] = connection
563568
}
564569
c.lastConnectionAttempts[key.Destination()] = time.Now()
565570
}
@@ -569,6 +574,9 @@ func (c *Container) onConnectionClose(e ebpftracer.Event) {
569574
conn := c.connectionsByPidFd[PidFd{Pid: e.Pid, Fd: e.Fd}]
570575
c.lock.Unlock()
571576
if conn != nil {
577+
if conn.Timestamp != 0 && conn.Timestamp != e.Timestamp {
578+
return
579+
}
572580
if conn.Closed.IsZero() {
573581
if e.TrafficStats != nil {
574582
c.lock.Lock()

ebpftracer/ebpf.go

Lines changed: 10 additions & 10 deletions
Large diffs are not rendered by default.

ebpftracer/ebpf/tcp/state.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ int inet_sock_set_state(void *ctx)
160160
timestamp = conn->timestamp;
161161
type = EVENT_TYPE_CONNECTION_OPEN;
162162
} else if (args.newstate == BPF_TCP_CLOSE) {
163+
bpf_map_delete_elem(&connection_id_by_socket, &args.skaddr);
163164
bpf_map_delete_elem(&active_connections, cid);
164165
type = EVENT_TYPE_CONNECTION_ERROR;
165166
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ require (
1111
github.com/containerd/cgroups v1.0.4
1212
github.com/containerd/containerd v1.6.26
1313
github.com/coreos/go-systemd/v22 v22.5.0
14-
github.com/coroot/logparser v1.1.6
14+
github.com/coroot/logparser v1.1.7
1515
github.com/docker/docker v25.0.3+incompatible
1616
github.com/florianl/go-conntrack v0.3.0
1717
github.com/go-kit/log v0.2.1

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,8 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc
293293
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
294294
github.com/coroot/dotnetdiag v1.2.2 h1:PVP/By8o+xhPjfVolJYcjHLbFQInM7pkaD6/otPLc8Q=
295295
github.com/coroot/dotnetdiag v1.2.2/go.mod h1:veXCMlFzm1yNl7wwJb/ZLxO4WbzhDBoy1VG1XtkH2ls=
296-
github.com/coroot/logparser v1.1.6 h1:iMZ7CfKfbSKDD+LayGnd14s9M6/T25/+GKosKYIMoCk=
297-
github.com/coroot/logparser v1.1.6/go.mod h1:YfYxn9FYBm5GYHHUB4zI22irFAWVDe2bcbOWDHKSmEo=
296+
github.com/coroot/logparser v1.1.7 h1:YdWD/4WhgXDwAyaZVzRnucCZC3Lkae9a5oy5g8wxmFg=
297+
github.com/coroot/logparser v1.1.7/go.mod h1:YfYxn9FYBm5GYHHUB4zI22irFAWVDe2bcbOWDHKSmEo=
298298
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
299299
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
300300
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=

0 commit comments

Comments
 (0)