From 8cf79b2e4ac1a288233b91f06b4a88e0129d6336 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Fri, 7 Jul 2017 06:54:58 +0100 Subject: [PATCH] bump tcptracer-bpf version and use it to fix race We defer starting the ebpf tracer until we've set the global var which is referenced by the callback functions. Previously the var could be unset when the callbacks are invoked, resulting in a segfault. Fixes #2687. --- probe/endpoint/ebpf.go | 3 +++ .../weaveworks/tcptracer-bpf/pkg/tracer/tracer.go | 8 +++++--- .../tcptracer-bpf/pkg/tracer/tracer_unsupported.go | 3 ++- .../github.com/weaveworks/tcptracer-bpf/tcptracer-bpf.c | 1 + .../github.com/weaveworks/tcptracer-bpf/tests/tracer.go | 2 ++ vendor/manifest | 2 +- 6 files changed, 14 insertions(+), 5 deletions(-) diff --git a/probe/endpoint/ebpf.go b/probe/endpoint/ebpf.go index ff23b4e21..e134b084c 100644 --- a/probe/endpoint/ebpf.go +++ b/probe/endpoint/ebpf.go @@ -97,6 +97,9 @@ func newEbpfTracker() (eventTracker, error) { } ebpfTracker = tracker + + t.Start() + return tracker, nil } diff --git a/vendor/github.com/weaveworks/tcptracer-bpf/pkg/tracer/tracer.go b/vendor/github.com/weaveworks/tcptracer-bpf/pkg/tracer/tracer.go index 4f060da9d..7b297a213 100644 --- a/vendor/github.com/weaveworks/tcptracer-bpf/pkg/tracer/tracer.go +++ b/vendor/github.com/weaveworks/tcptracer-bpf/pkg/tracer/tracer.go @@ -101,9 +101,6 @@ func NewTracer(tcpEventCbV4 func(TcpV4), tcpEventCbV6 func(TcpV6), lostCb func(l } }() - perfMapIPV4.PollStart() - perfMapIPV6.PollStart() - return &Tracer{ m: m, perfMapIPV4: perfMapIPV4, @@ -112,6 +109,11 @@ func NewTracer(tcpEventCbV4 func(TcpV4), tcpEventCbV6 func(TcpV6), lostCb func(l }, nil } +func (t *Tracer) Start() { + t.perfMapIPV4.PollStart() + t.perfMapIPV6.PollStart() +} + func (t *Tracer) AddFdInstallWatcher(pid uint32) (err error) { var one uint32 = 1 mapFdInstall := t.m.Map("fdinstall_pids") diff --git a/vendor/github.com/weaveworks/tcptracer-bpf/pkg/tracer/tracer_unsupported.go b/vendor/github.com/weaveworks/tcptracer-bpf/pkg/tracer/tracer_unsupported.go index 8eb1a02f8..2acaa037b 100644 --- a/vendor/github.com/weaveworks/tcptracer-bpf/pkg/tracer/tracer_unsupported.go +++ b/vendor/github.com/weaveworks/tcptracer-bpf/pkg/tracer/tracer_unsupported.go @@ -15,12 +15,13 @@ func TracerAsset() ([]byte, error) { func NewTracer(tcpEventCbV4 func(TcpV4), tcpEventCbV6 func(TcpV6), lostCb func(lost uint64)) (*Tracer, error) { return nil, fmt.Errorf("not supported on non-Linux systems") } +func (t *Tracer) Start() { +} func (t *Tracer) AddFdInstallWatcher(pid uint32) (err error) { return fmt.Errorf("not supported on non-Linux systems") } func (t *Tracer) RemoveFdInstallWatcher(pid uint32) (err error) { return fmt.Errorf("not supported on non-Linux systems") } - func (t *Tracer) Stop() { } diff --git a/vendor/github.com/weaveworks/tcptracer-bpf/tcptracer-bpf.c b/vendor/github.com/weaveworks/tcptracer-bpf/tcptracer-bpf.c index 24d8210b2..500a45067 100644 --- a/vendor/github.com/weaveworks/tcptracer-bpf/tcptracer-bpf.c +++ b/vendor/github.com/weaveworks/tcptracer-bpf/tcptracer-bpf.c @@ -11,6 +11,7 @@ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wtautological-compare" +#pragma clang diagnostic ignored "-Wgnu-variable-sized-type-not-at-end" #include #pragma clang diagnostic pop #include diff --git a/vendor/github.com/weaveworks/tcptracer-bpf/tests/tracer.go b/vendor/github.com/weaveworks/tcptracer-bpf/tests/tracer.go index fcbea950b..15f786d9f 100644 --- a/vendor/github.com/weaveworks/tcptracer-bpf/tests/tracer.go +++ b/vendor/github.com/weaveworks/tcptracer-bpf/tests/tracer.go @@ -67,6 +67,8 @@ func main() { os.Exit(1) } + t.Start() + for _, p := range strings.Split(watchFdInstallPids, ",") { if p == "" { continue diff --git a/vendor/manifest b/vendor/manifest index f92f4ddad..2631e2ea2 100644 --- a/vendor/manifest +++ b/vendor/manifest @@ -1038,7 +1038,7 @@ "importpath": "github.com/weaveworks/tcptracer-bpf", "repository": "https://github.com/weaveworks/tcptracer-bpf", "vcs": "git", - "revision": "a616ebc6c5ac196af743e5dfc621a52fce030f87", + "revision": "fc80d1659bf07dabebbb42c5507578440103d66f", "branch": "master", "notests": true },