From a3aa5df51a6874c810a6a7fcd5d303d493cb1971 Mon Sep 17 00:00:00 2001 From: Kornilios Kourtis Date: Thu, 13 Feb 2025 14:26:46 +0100 Subject: [PATCH] tracing: add spec options to policyInfo Spec options are policy-wide, so place them in policy info. They will be used in a subsequent patch to configure the policy mode. No functional changes. Signed-off-by: Kornilios Kourtis --- pkg/sensors/tracing/generickprobe.go | 8 ++------ pkg/sensors/tracing/genericuprobe.go | 7 +------ pkg/sensors/tracing/policyhandler.go | 16 +++++++++++++--- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/pkg/sensors/tracing/generickprobe.go b/pkg/sensors/tracing/generickprobe.go index 97f23365c87..71bbe745f91 100644 --- a/pkg/sensors/tracing/generickprobe.go +++ b/pkg/sensors/tracing/generickprobe.go @@ -601,16 +601,11 @@ func createGenericKprobeSensor( kprobes := spec.KProbes lists := spec.Lists - specOpts, err := getSpecOptions(spec.Options) - if err != nil { - return nil, fmt.Errorf("failed to get spec options: %s", err) - } - // use multi kprobe only if: // - it's not disabled by spec option // - it's not disabled by command line option // - there's support detected - if !specOpts.DisableKprobeMulti { + if !polInfo.specOpts.DisableKprobeMulti { useMulti = !option.Config.DisableKprobeMulti && bpf.HasKprobeMulti() } @@ -655,6 +650,7 @@ func createGenericKprobeSensor( } } + var err error if useMulti { progs, maps, err = createMultiKprobeSensor(polInfo, ids, has) } else { diff --git a/pkg/sensors/tracing/genericuprobe.go b/pkg/sensors/tracing/genericuprobe.go index 0648784ffda..f6acef5f2af 100644 --- a/pkg/sensors/tracing/genericuprobe.go +++ b/pkg/sensors/tracing/genericuprobe.go @@ -252,11 +252,6 @@ func createGenericUprobeSensor( var ids []idtable.EntryID var err error - options, err := getSpecOptions(spec.Options) - if err != nil { - return nil, fmt.Errorf("failed to set options: %s", err) - } - in := addUprobeIn{ sensorPath: name, policyName: polInfo.name, @@ -264,7 +259,7 @@ func createGenericUprobeSensor( // use multi kprobe only if: // - it's not disabled by spec option // - there's support detected - useMulti: !options.DisableUprobeMulti && bpf.HasUprobeMulti(), + useMulti: !polInfo.specOpts.DisableUprobeMulti && bpf.HasUprobeMulti(), } for _, uprobe := range spec.UProbes { diff --git a/pkg/sensors/tracing/policyhandler.go b/pkg/sensors/tracing/policyhandler.go index 01764c98d31..5c41631a227 100644 --- a/pkg/sensors/tracing/policyhandler.go +++ b/pkg/sensors/tracing/policyhandler.go @@ -26,23 +26,30 @@ type policyInfo struct { policyID policyfilter.PolicyID customHandler eventhandler.Handler maps map[string]struct{} + specOpts *specOptions } func newPolicyInfo( policy tracingpolicy.TracingPolicy, policyID policyfilter.PolicyID, -) *policyInfo { +) (*policyInfo, error) { namespace := "" if tpn, ok := policy.(tracingpolicy.TracingPolicyNamespaced); ok { namespace = tpn.TpNamespace() } + + opts, err := getSpecOptions(policy.TpSpec().Options) + if err != nil { + return nil, err + } return &policyInfo{ name: policy.TpName(), namespace: namespace, policyID: policyID, customHandler: eventhandler.GetCustomEventhandler(policy), maps: map[string]struct{}{}, - } + specOpts: opts, + }, nil } func (pi *policyInfo) mapBuilder(name string, prog *program.Program) *program.Map { @@ -77,7 +84,10 @@ func (h policyHandler) PolicyHandler( return nil, errors.New("tracing policies with multiple sections of kprobes, tracepoints, lsm hooks, or uprobes are currently not supported") } - polInfo := newPolicyInfo(policy, policyID) + polInfo, err := newPolicyInfo(policy, policyID) + if err != nil { + return nil, fmt.Errorf("failed to parse options: %w", err) + } if len(spec.KProbes) > 0 { name := "generic_kprobe"