From efc81b9bafad546279e0ee44d185c76206372be0 Mon Sep 17 00:00:00 2001 From: "M. Mert Yildiran" Date: Mon, 30 May 2022 23:27:19 +0300 Subject: [PATCH] Fix exe path finding --- agent/go.mod | 1 - agent/go.sum | 2 -- tap/go.mod | 1 - tap/go.sum | 2 -- tap/passive_tapper.go | 2 +- tap/tlstapper/tls_poller.go | 2 ++ tap/tlstapper/tls_process_discoverer.go | 2 +- tap/tlstapper/tls_tapper.go | 28 ++++++++++++------------- 8 files changed, 17 insertions(+), 23 deletions(-) diff --git a/agent/go.mod b/agent/go.mod index 6b0baf1cf..3f59df01f 100644 --- a/agent/go.mod +++ b/agent/go.mod @@ -90,7 +90,6 @@ require ( github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-isatty v0.0.14 // indirect github.com/mertyildiran/gqlparser/v2 v2.4.6 // indirect - github.com/mitchellh/go-ps v1.0.0 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/moby/spdystream v0.2.0 // indirect github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect diff --git a/agent/go.sum b/agent/go.sum index 7dbf5558a..6c0cd1018 100644 --- a/agent/go.sum +++ b/agent/go.sum @@ -509,8 +509,6 @@ github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceT github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= -github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= diff --git a/tap/go.mod b/tap/go.mod index 58cc0f7bc..810c4073b 100644 --- a/tap/go.mod +++ b/tap/go.mod @@ -8,7 +8,6 @@ require ( github.com/go-errors/errors v1.4.2 github.com/google/gopacket v1.1.19 github.com/hashicorp/golang-lru v0.5.4 - github.com/mitchellh/go-ps v1.0.0 github.com/shirou/gopsutil v3.21.11+incompatible github.com/struCoder/pidusage v0.2.1 github.com/up9inc/mizu/logger v0.0.0 diff --git a/tap/go.sum b/tap/go.sum index 65388ee40..de38968c2 100644 --- a/tap/go.sum +++ b/tap/go.sum @@ -93,8 +93,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= -github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= diff --git a/tap/passive_tapper.go b/tap/passive_tapper.go index 9b6e1e47b..fc0e3ecae 100644 --- a/tap/passive_tapper.go +++ b/tap/passive_tapper.go @@ -287,7 +287,7 @@ func startTlsTapper(extension *api.Extension, outputItems chan *api.OutputChanne // A quick way to instrument Go `crypto/tls` without PID filtering - used for debuging and troubleshooting // if os.Getenv("MIZU_GLOBAL_GOLANG_PID") != "" { - if err := tls.GlobalGolangTap(os.Getenv("MIZU_GLOBAL_GOLANG_PID")); err != nil { + if err := tls.GlobalGolangTap(*procfs, os.Getenv("MIZU_GLOBAL_GOLANG_PID")); err != nil { tlstapper.LogError(err) return nil } diff --git a/tap/tlstapper/tls_poller.go b/tap/tlstapper/tls_poller.go index 65f38b427..b3845c62c 100644 --- a/tap/tlstapper/tls_poller.go +++ b/tap/tlstapper/tls_poller.go @@ -81,6 +81,8 @@ func (p *tlsPoller) init(bpfObjects *tlsTapperObjects, bufferSize int) error { return errors.Wrap(err, 0) } + p.golangReadWriteMap = orderedmap.New() + return nil } diff --git a/tap/tlstapper/tls_process_discoverer.go b/tap/tlstapper/tls_process_discoverer.go index f0341506d..7b653acd9 100644 --- a/tap/tlstapper/tls_process_discoverer.go +++ b/tap/tlstapper/tls_process_discoverer.go @@ -32,7 +32,7 @@ func UpdateTapTargets(tls *TlsTapper, pods *[]v1.Pod, procfs string) error { LogError(err) } - if err := tls.AddGolangPid(pid, pod.Namespace); err != nil { + if err := tls.AddGolangPid(procfs, pid, pod.Namespace); err != nil { LogError(err) } } diff --git a/tap/tlstapper/tls_tapper.go b/tap/tlstapper/tls_tapper.go index 3be9d5753..58e62b57d 100644 --- a/tap/tlstapper/tls_tapper.go +++ b/tap/tlstapper/tls_tapper.go @@ -1,12 +1,13 @@ package tlstapper import ( + "fmt" + "os" "strconv" "sync" "github.com/cilium/ebpf/rlimit" "github.com/go-errors/errors" - ps "github.com/mitchellh/go-ps" "github.com/up9inc/mizu/logger" "github.com/up9inc/mizu/tap/api" ) @@ -72,18 +73,17 @@ func (t *TlsTapper) GlobalSsllibTap(sslLibrary string) error { return t.tapSsllibPid(GLOABL_TAP_PID, sslLibrary, api.UNKNOWN_NAMESPACE) } -func (t *TlsTapper) GlobalGolangTap(_pid string) error { - pid, err := strconv.Atoi(_pid) +func (t *TlsTapper) GlobalGolangTap(procfs string, pid string) error { + _pid, err := strconv.Atoi(pid) if err != nil { return err } - p, err := ps.FindProcess(pid) if err != nil { return err } - return t.tapGolangPid(uint32(pid), p.Executable(), api.UNKNOWN_NAMESPACE) + return t.tapGolangPid(procfs, uint32(_pid), api.UNKNOWN_NAMESPACE) } func (t *TlsTapper) AddSsllibPid(procfs string, pid uint32, namespace string) error { @@ -97,15 +97,8 @@ func (t *TlsTapper) AddSsllibPid(procfs string, pid uint32, namespace string) er return t.tapSsllibPid(pid, sslLibrary, namespace) } -func (t *TlsTapper) AddGolangPid(pid uint32, namespace string) error { - p, err := ps.FindProcess(int(pid)) - - if err != nil { - logger.Log.Infof("PID skipped not found (pid: %d) %v", pid, err) - return nil - } - - return t.tapGolangPid(pid, p.Executable(), namespace) +func (t *TlsTapper) AddGolangPid(procfs string, pid uint32, namespace string) error { + return t.tapGolangPid(procfs, pid, namespace) } func (t *TlsTapper) RemovePid(pid uint32) error { @@ -198,7 +191,12 @@ func (t *TlsTapper) tapSsllibPid(pid uint32, sslLibrary string, namespace string return nil } -func (t *TlsTapper) tapGolangPid(pid uint32, exePath string, namespace string) error { +func (t *TlsTapper) tapGolangPid(procfs string, pid uint32, namespace string) error { + exePath, err := os.Readlink(fmt.Sprintf("%s/%d/exe", procfs, pid)) + if err != nil { + return err + } + hooks := golangHooks{} if err := hooks.installUprobes(&t.bpfObjects, exePath); err != nil {