Skip to content

Commit 4680680

Browse files
committed
tetragon: Enable fentry objects in generic kprobe sensor
Signed-off-by: Jiri Olsa <[email protected]>
1 parent 6382892 commit 4680680

File tree

3 files changed

+25
-7
lines changed

3 files changed

+25
-7
lines changed

pkg/sensors/tracing/generickprobe.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -932,7 +932,15 @@ func createKprobeSensorFromEntry(polInfo *policyInfo, kprobeEntry *genericKprobe
932932
loadProgName, loadProgRetName := config.GenericKprobeObjs(false)
933933
isSecurityFunc := strings.HasPrefix(kprobeEntry.funcName, "security_")
934934

935-
useFentry := false
935+
// We can use trampoline (fentry/fexit) in case:
936+
// 1) it's not disabled (disable-kprobe-fentry option)
937+
// 2) we do not do override or enforcer (FIXME)
938+
// 3) we have fentry program support
939+
// 4) fexit needs bpf_get_func_ret helper
940+
useFentry := !polInfo.specOpts.DisableKprobeFentry && // 1
941+
!kprobeEntry.hasOverride && !has.enforcer && // 2
942+
bpf.HasFentryProgram() && // 3
943+
bpf.HasGetFuncRetHelper() // 4
936944

937945
pinProg := kprobeEntry.funcName
938946
if kprobeEntry.instance != 0 {

pkg/sensors/tracing/kprobe_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4323,8 +4323,8 @@ spec:
43234323
WithArgs(ec.NewKprobeArgumentListMatcher().
43244324
WithValues(
43254325
ec.NewKprobeArgumentChecker().WithBpfAttrArg(ec.NewKprobeBpfAttrChecker().
4326-
WithProgName(sm.Full("generic_kprobe_")).
4327-
WithProgType(sm.Full("BPF_PROG_TYPE_KPROBE")),
4326+
WithProgName(sm.Regex("generic_kprobe_|generic_fentry_")).
4327+
WithProgType(sm.Regex("BPF_PROG_TYPE_KPROBE|BPF_PROG_TYPE_TRACING")),
43284328
),
43294329
))
43304330

@@ -4459,6 +4459,9 @@ kind: TracingPolicy
44594459
metadata:
44604460
name: "sys-read"
44614461
spec:
4462+
options:
4463+
- name: "disable-kprobe-fentry"
4464+
value: "1"
44624465
kprobes:
44634466
- call: "sys_read"
44644467
syscall: true

pkg/sensors/tracing/options.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,11 @@ func overrideMethodParse(s string) OverrideMethod {
4141
}
4242

4343
type specOptions struct {
44-
DisableKprobeMulti bool
45-
DisableUprobeMulti bool
46-
OverrideMethod OverrideMethod
47-
policyMode policyconf.Mode
44+
DisableKprobeFentry bool
45+
DisableKprobeMulti bool
46+
DisableUprobeMulti bool
47+
OverrideMethod OverrideMethod
48+
policyMode policyconf.Mode
4849
}
4950

5051
type opt struct {
@@ -92,6 +93,12 @@ var opts = map[string]opt{
9293
return nil
9394
},
9495
},
96+
"disable-kprobe-fentry": {
97+
set: func(str string, options *specOptions) (err error) {
98+
options.DisableKprobeFentry, err = strconv.ParseBool(str)
99+
return err
100+
},
101+
},
95102
}
96103

97104
func getSpecOptions(specs []v1alpha1.OptionSpec) (*specOptions, error) {

0 commit comments

Comments
 (0)