Skip to content

Commit 0134cdc

Browse files
committed
tetragon: Add test for retrieving and matching kprobe regs data
Testing that we retrieve and match the proper value from syscall registers. Signed-off-by: Jiri Olsa <[email protected]>
1 parent c473091 commit 0134cdc

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

pkg/sensors/tracing/kprobe_amd64_test.go

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package tracing
77

88
import (
99
"context"
10+
"os"
1011
"os/exec"
1112
"strconv"
1213
"sync"
@@ -176,3 +177,81 @@ spec:
176177

177178
testListSyscallsDups(t, checker, configHook)
178179
}
180+
181+
func TestKprobePtRegsDataMatch(t *testing.T) {
182+
pathHook := `
183+
apiVersion: cilium.io/v1alpha1
184+
kind: TracingPolicy
185+
metadata:
186+
name: "kprobe"
187+
spec:
188+
kprobes:
189+
- call: sys_prctl
190+
syscall: true
191+
data:
192+
- index: 0
193+
type: "uint64"
194+
source: "pt_regs"
195+
resolve: "rdi"
196+
- index: 1
197+
type: "uint64"
198+
source: "pt_regs"
199+
resolve: "rsi"
200+
- index: 2
201+
type: "uint64"
202+
source: "pt_regs"
203+
resolve: "rdx"
204+
- index: 3
205+
type: "uint64"
206+
source: "pt_regs"
207+
resolve: "r10"
208+
- index: 4
209+
type: "uint64"
210+
source: "pt_regs"
211+
resolve: "r8"
212+
selectors:
213+
- matchData:
214+
- index: 0
215+
operator: "Equal"
216+
values:
217+
- "0xffff0"
218+
`
219+
220+
pathConfigHook := []byte(pathHook)
221+
err := os.WriteFile(testConfigFile, pathConfigHook, 0644)
222+
if err != nil {
223+
t.Fatalf("writeFile(%s): err %s", testConfigFile, err)
224+
}
225+
226+
kpChecker := ec.NewProcessKprobeChecker("").
227+
WithFunctionName(sm.Suffix("sys_prctl")).
228+
WithData(ec.NewKprobeArgumentListMatcher().
229+
WithOperator(lc.Ordered).
230+
WithValues(
231+
ec.NewKprobeArgumentChecker().WithSizeArg(0xffff0),
232+
ec.NewKprobeArgumentChecker().WithSizeArg(1),
233+
ec.NewKprobeArgumentChecker().WithSizeArg(2),
234+
ec.NewKprobeArgumentChecker().WithSizeArg(3),
235+
ec.NewKprobeArgumentChecker().WithSizeArg(4),
236+
))
237+
238+
checker := ec.NewUnorderedEventChecker(kpChecker)
239+
240+
var doneWG, readyWG sync.WaitGroup
241+
defer doneWG.Wait()
242+
243+
ctx, cancel := context.WithTimeout(context.Background(), tus.Conf().CmdWaitTime)
244+
defer cancel()
245+
246+
obs, err := observertesthelper.GetDefaultObserverWithFile(t, ctx, testConfigFile, tus.Conf().TetragonLib)
247+
if err != nil {
248+
t.Fatalf("GetDefaultObserverWithFile error: %s", err)
249+
}
250+
observertesthelper.LoopEvents(ctx, t, &doneWG, &readyWG, obs)
251+
readyWG.Wait()
252+
253+
unix.Prctl(0xffff0, 1, 2, 3, 4)
254+
255+
err = jsonchecker.JsonTestCheck(t, checker)
256+
require.NoError(t, err)
257+
}

0 commit comments

Comments
 (0)