diff --git a/pkg/sensors/load.go b/pkg/sensors/load.go index 0570b506ac4..2dbab57ce59 100644 --- a/pkg/sensors/load.go +++ b/pkg/sensors/load.go @@ -208,6 +208,10 @@ func (s *Sensor) FindPrograms() error { return nil } +func (s *Sensor) SetMapPinPath(bpfDir string, m *program.Map) { + m.PinPath = filepath.Join(bpfDir, m.PinName) +} + // loadMaps loads all the BPF maps in the sensor. func (s *Sensor) loadMaps(bpfDir string) error { l := logger.GetLogger() @@ -221,7 +225,7 @@ func (s *Sensor) loadMaps(bpfDir string) error { continue } - pinPath := filepath.Join(bpfDir, m.PinName) + s.SetMapPinPath(bpfDir, m) spec, err := ebpf.LoadCollectionSpec(m.Prog.Name) if err != nil { @@ -242,14 +246,14 @@ func (s *Sensor) loadMaps(bpfDir string) error { } } - if err := m.LoadOrCreatePinnedMap(pinPath, mapSpec); err != nil { + if err := m.LoadOrCreatePinnedMap(m.PinPath, mapSpec); err != nil { return fmt.Errorf("failed to load map '%s' for sensor '%s': %w", m.Name, s.Name, err) } l.WithFields(logrus.Fields{ "sensor": s.Name, "map": m.Name, - "path": pinPath, + "path": m.PinPath, }).Info("tetragon, map loaded.") } diff --git a/pkg/sensors/program/loader.go b/pkg/sensors/program/loader.go index ed978ad1653..9823e645532 100644 --- a/pkg/sensors/program/loader.go +++ b/pkg/sensors/program/loader.go @@ -432,9 +432,9 @@ func MultiKprobeAttach(load *Program, bpfDir string) AttachFunc { func LoadTracepointProgram(bpfDir string, load *Program, verbose int) error { var ci *customInstall - for mName, mPath := range load.PinMap { + for mName, m := range load.PinMap { if mName == "tp_calls" || mName == "execve_calls" { - ci = &customInstall{mPath, "tracepoint"} + ci = &customInstall{m.PinName, "tracepoint"} break } } @@ -454,9 +454,9 @@ func LoadRawTracepointProgram(bpfDir string, load *Program, verbose int) error { func LoadKprobeProgram(bpfDir string, load *Program, verbose int) error { var ci *customInstall - for mName, mPath := range load.PinMap { + for mName, m := range load.PinMap { if mName == "kprobe_calls" || mName == "retkprobe_calls" { - ci = &customInstall{mPath, "kprobe"} + ci = &customInstall{m.PinName, "kprobe"} break } } @@ -499,9 +499,9 @@ func LoadKprobeProgramAttachMany(bpfDir string, load *Program, syms []string, ve func LoadUprobeProgram(bpfDir string, load *Program, verbose int) error { var ci *customInstall - for mName, mPath := range load.PinMap { + for mName, m := range load.PinMap { if mName == "uprobe_calls" { - ci = &customInstall{mPath, "uprobe"} + ci = &customInstall{m.PinName, "uprobe"} break } } @@ -514,9 +514,9 @@ func LoadUprobeProgram(bpfDir string, load *Program, verbose int) error { func LoadMultiKprobeProgram(bpfDir string, load *Program, verbose int) error { var ci *customInstall - for mName, mPath := range load.PinMap { + for mName, m := range load.PinMap { if mName == "kprobe_calls" || mName == "retkprobe_calls" { - ci = &customInstall{mPath, "kprobe"} + ci = &customInstall{m.PinName, "kprobe"} break } } @@ -731,8 +731,9 @@ func doLoadProgram( var m *ebpf.Map var err error var mapPath string - if pinName, ok := load.PinMap[name]; ok { - mapPath = filepath.Join(bpfDir, pinName) + + if pm, ok := load.PinMap[name]; ok { + mapPath = filepath.Join(pm.PinPath) } else { mapPath = filepath.Join(bpfDir, name) } diff --git a/pkg/sensors/program/map.go b/pkg/sensors/program/map.go index 47f2e0e9421..f2492d43896 100644 --- a/pkg/sensors/program/map.go +++ b/pkg/sensors/program/map.go @@ -25,6 +25,7 @@ const ( type Map struct { Name string PinName string + PinPath string Prog *Program PinState State MapHandle *ebpf.Map @@ -32,12 +33,13 @@ type Map struct { } func MapBuilder(name string, ld *Program) *Map { - return &Map{name, name, ld, Idle(), nil, Global} + return &Map{name, name, "", ld, Idle(), nil, Global} } func MapBuilderPin(name, pin string, ld *Program) *Map { - ld.PinMap[name] = pin - return &Map{name, pin, ld, Idle(), nil, Global} + m := &Map{name, pin, "", ld, Idle(), nil, Global} + ld.PinMap[name] = m + return m } func (m *Map) Unload() error { diff --git a/pkg/sensors/program/program.go b/pkg/sensors/program/program.go index d4125e34ed5..0f2f00cc52d 100644 --- a/pkg/sensors/program/program.go +++ b/pkg/sensors/program/program.go @@ -27,7 +27,7 @@ func Builder( LoaderData: struct{}{}, MapLoad: nil, unloader: nil, - PinMap: make(map[string]string), + PinMap: make(map[string]*Map), MaxEntriesMap: make(map[string]uint32), MaxEntriesInnerMap: make(map[string]uint32), } @@ -95,7 +95,7 @@ type Program struct { unloader unloader.Unloader unloaderOverride unloader.Unloader - PinMap map[string]string + PinMap map[string]*Map // available when program.KeepCollection is true LC *LoadedCollection