diff --git a/pkg/btf/validation.go b/pkg/btf/validation.go index 14fd423c91b..2416129985b 100644 --- a/pkg/btf/validation.go +++ b/pkg/btf/validation.go @@ -224,6 +224,9 @@ func typesCompatible(specTy string, kernelTy string) bool { func validateSycall(kspec *v1alpha1.KProbeSpec, name string) error { if kspec.Return { + if kspec.ReturnArg == nil { + return fmt.Errorf("missing information for syscall %s: returnArg is missing", name) + } if !typesCompatible(kspec.ReturnArg.Type, "long") { return fmt.Errorf("unexpected syscall spec return type: %s", kspec.ReturnArg.Type) } diff --git a/pkg/sensors/tracing/kprobe_validation_test.go b/pkg/sensors/tracing/kprobe_validation_test.go index 1146fe289ae..1c981508cbf 100644 --- a/pkg/sensors/tracing/kprobe_validation_test.go +++ b/pkg/sensors/tracing/kprobe_validation_test.go @@ -229,3 +229,22 @@ spec: assert.Error(t, err) } + +func TestKprobeValidationMissingReturnArg(t *testing.T) { + + // missing returnArg while having return: true + + crd := ` +apiVersion: cilium.io/v1alpha1 +metadata: + name: "missing-returnarg" +spec: + kprobes: + - call: "sys_openat" + return: true + syscall: true +` + + err := checkCrd(t, crd) + assert.Error(t, err) +}