From 105833537ddba73b7c86b4b093edd5a1d216c3ec Mon Sep 17 00:00:00 2001 From: ejose19 <8742215+ejose19@users.noreply.github.com> Date: Sat, 3 Jul 2021 10:36:04 -0300 Subject: [PATCH] refactor: adjust bpfd container runtime detection --- .../github.com/genuinetools/bpfd/proc/proc.go | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/vendor/github.com/genuinetools/bpfd/proc/proc.go b/vendor/github.com/genuinetools/bpfd/proc/proc.go index f2357caf8d..d48d479694 100644 --- a/vendor/github.com/genuinetools/bpfd/proc/proc.go +++ b/vendor/github.com/genuinetools/bpfd/proc/proc.go @@ -150,6 +150,12 @@ func GetContainerRuntime(tgid, pid int) ContainerRuntime { return runtime } + // Check for container specific files + runtime = detectContainerFiles() + if runtime != RuntimeNotFound { + return runtime + } + return RuntimeNotFound } @@ -167,6 +173,28 @@ func getContainerRuntime(input string) ContainerRuntime { return RuntimeNotFound } +// Related implementation: https://github.com/systemd/systemd/blob/6604fb0207ee10e8dc05d67f6fe45de0b193b5c4/src/basic/virt.c#L523-L549 +func detectContainerFiles() ContainerRuntime { + files := []struct { + runtime ContainerRuntime + location string + }{ + // https://github.com/containers/podman/issues/6192 + // https://github.com/containers/podman/issues/3586#issuecomment-661918679 + {RuntimePodman, "/run/.containerenv"}, + // https://github.com/moby/moby/issues/18355 + {RuntimeDocker, "/.dockerenv"}, + } + + for i := range files { + if fileExists(files[i].location) { + return files[i].runtime + } + } + + return RuntimeNotFound +} + // GetContainerID returns the container ID for a process if it's running in a container. // If pid is less than one, it returns the container ID for "self". func GetContainerID(tgid, pid int) string {