@@ -7,6 +7,7 @@ package tracing
77
88import (
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