From 48c23bd5966f059a381bed699479ee8dd1fbd9d5 Mon Sep 17 00:00:00 2001 From: Jiri Olsa Date: Wed, 2 Oct 2024 12:25:54 +0000 Subject: [PATCH] tetragon: Cleanup progs/maps after failed sensor load Currently we do not unload progs/maps that were loaded prior the fail to load the sensor for some reason, fixing that. Signed-off-by: Jiri Olsa --- pkg/sensors/load.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pkg/sensors/load.go b/pkg/sensors/load.go index 165e161c892..7bf04ff0f2a 100644 --- a/pkg/sensors/load.go +++ b/pkg/sensors/load.go @@ -117,10 +117,21 @@ func (s *Sensor) Load(bpfDir string) (err error) { return fmt.Errorf("tetragon, aborting minimum requirements not met: %w", err) } + var ( + loadedMaps []*program.Map + loadedProgs []*program.Program + ) + s.createDirs(bpfDir) defer func() { if err != nil { s.removeDirs() + for _, m := range loadedMaps { + m.Unload() + } + for _, p := range loadedProgs { + unloadProgram(p) + } } }() @@ -142,6 +153,7 @@ func (s *Sensor) Load(bpfDir string) (err error) { if err = s.loadMap(bpfDir, m); err != nil { return fmt.Errorf("tetragon, aborting could not load sensor BPF maps: %w", err) } + loadedMaps = append(loadedMaps, m) } for _, p := range s.Progs { @@ -155,6 +167,7 @@ func (s *Sensor) Load(bpfDir string) (err error) { return err } p.LoadState.RefInc() + loadedProgs = append(loadedProgs, p) l.WithField("prog", p.Name).WithField("label", p.Label).Debugf("BPF prog was loaded") }