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.
This commit is contained in:
Matthias Radestock
2017-07-07 06:54:58 +01:00
parent 683312ebc1
commit 8cf79b2e4a
6 changed files with 14 additions and 5 deletions

View File

@@ -97,6 +97,9 @@ func newEbpfTracker() (eventTracker, error) {
}
ebpfTracker = tracker
t.Start()
return tracker, nil
}

View File

@@ -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")

View File

@@ -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() {
}

View File

@@ -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 <net/sock.h>
#pragma clang diagnostic pop
#include <net/inet_sock.h>

View File

@@ -67,6 +67,8 @@ func main() {
os.Exit(1)
}
t.Start()
for _, p := range strings.Split(watchFdInstallPids, ",") {
if p == "" {
continue

2
vendor/manifest vendored
View File

@@ -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
},