From 266d2129cea009bb7316d091df1abe435febf0a3 Mon Sep 17 00:00:00 2001 From: Alexander Hasselbach Date: Thu, 18 Mar 2021 15:38:54 +0300 Subject: [PATCH 1/5] (fix) buf size for smaller and larger data structures sent as perf events --- bpf_test.go | 112 ++++++++++++++++++++++++++++++++++++++- elf/perf.go | 7 ++- go.mod | 2 + pkg/test/test_structs.go | 65 +++++++++++++++++++++++ tests/dummy-410.o | Bin 5320 -> 7584 bytes tests/dummy-414.o | Bin 5320 -> 7584 bytes tests/dummy-46.o | Bin 4248 -> 6152 bytes tests/dummy-48.o | Bin 5056 -> 7176 bytes tests/dummy.c | 72 ++++++++++++++++++++++--- tests/dummy.o | Bin 3080 -> 4984 bytes tests/dummy_structs.h | 18 +++++++ 11 files changed, 267 insertions(+), 9 deletions(-) create mode 100644 pkg/test/test_structs.go create mode 100644 tests/dummy_structs.h diff --git a/bpf_test.go b/bpf_test.go index 8a8a4969..8b752a75 100644 --- a/bpf_test.go +++ b/bpf_test.go @@ -20,17 +20,21 @@ import ( "bytes" "encoding/binary" "fmt" + "github.com/iovisor/gobpf/pkg/test" + "io/ioutil" "os" "path/filepath" "strconv" "syscall" "testing" + "time" "unsafe" "github.com/iovisor/gobpf/bcc" "github.com/iovisor/gobpf/elf" "github.com/iovisor/gobpf/pkg/bpffs" "github.com/iovisor/gobpf/pkg/progtestrun" + "github.com/stretchr/testify/assert" ) // redefine flags here as cgo in test is not supported @@ -313,6 +317,7 @@ func checkMaps(t *testing.T, b *elf.Module) { "dummy_prog_array", "dummy_perf", "dummy_array_custom", + "master_pid", } if kernelVersion >= kernelVersion46 { @@ -351,8 +356,8 @@ func checkMaps(t *testing.T, b *elf.Module) { func checkProbes(t *testing.T, b *elf.Module) { var expectedProbes = []string{ - "kprobe/dummy", - "kretprobe/dummy", + "kprobe/__x64_sys_write", + "kretprobe/__x64_sys_write", } var probes []*elf.Kprobe @@ -626,6 +631,100 @@ func checkProgTestRun(t *testing.T, b *elf.Module) { } } +func checkPerfArray(t *testing.T, b *elf.Module) { + receiverChan := make(chan []byte, 100) + lostChan := make(chan uint64, 100) + + perfMap, err := elf.InitPerfMap(b, "dummy_perf", receiverChan, lostChan) + if err != nil { + t.Fatal(err) + } + + perfMap.PollStart() + defer perfMap.PollStop() + + // configure master_pid to catch only sys_write's of the current process + masterPIDMap := b.Map("master_pid") + if masterPIDMap == nil { + t.Fatal("unable to find master_pid map") + } + key := 0 + currentPID := os.Getpid() + if err := b.UpdateElement(masterPIDMap, unsafe.Pointer(&key), unsafe.Pointer(¤tPID), BPF_ANY); err != nil { + t.Fatal("failed to setup master PID") + } + + var actualS1 *test.S1 + var actualS2 *test.S2 + var actualS8 *test.S8 + + finished := make(chan bool) + + go func() { + L: + for { + select { + case event := <-receiverChan: + s1 := test.ReadS1(event) + if s1 != nil { + actualS1 = s1 + } + s2 := test.ReadS2(event) + if s2 != nil { + actualS2 = s2 + } + s8 := test.ReadS8(event) + if s8 != nil { + actualS8 = s8 + } + if actualS1 != nil && actualS2 != nil && actualS8 != nil { + break L + } + case lost := <-lostChan: + assert.Fail(t, "Unexpectedly lost %d events", lost) + break L + case <-time.After(2000 * time.Millisecond): + assert.Fail(t, "Didn't get all expected messages") + break L + } + } + finished <- true + }() + + // perform test operation that should be detected by kprobe/sys_write + tfd, err := ioutil.TempFile("", "*") + if err != nil { + t.Fatal(err) + } + _, err = tfd.WriteString("bpf_integration_test") + if err != nil { + t.Fatal(err) + } + _ = tfd.Close() + + <-finished + + expectedS1 := test.S1{0x10000011} + expectedS2 := test.S2{0x20000011, 0x20000022} + expectedS8 := test.S8{ + A: 0x80000011, + B: 0x80000022, + C: 0x80000033, + D: 0x80000044, + E: 0x80000055, + F: 0x80000066, + G: 0x80000077, + H: 0x80000088, + } + + assert.NotNil(t, actualS1) + assert.Equal(t, expectedS1, *actualS1) + assert.NotNil(t, actualS2) + assert.Equal(t, expectedS2, *actualS2) + assert.NotNil(t, actualS8) + assert.Equal(t, expectedS8, *actualS8) +} + func TestModuleLoadELF(t *testing.T) { var err error kernelVersion, err = elf.CurrentKernelVersion() @@ -648,6 +747,9 @@ func TestModuleLoadELF(t *testing.T) { "maps/dummy_array_custom": elf.SectionParams{ PinPath: filepath.Join("gobpf-test", "testgroup1"), }, + "maps/dummy_perf": elf.SectionParams{ + PerfRingBufferPageCount: 256, + }, } var closeOptions = map[string]elf.CloseOptions{ "maps/dummy_array_custom": elf.CloseOptions{ @@ -664,9 +766,14 @@ func TestModuleLoadELF(t *testing.T) { if b == nil { t.Fatal("prog is nil") } + b.EnableOptionCompatProbe() if err := b.Load(secParams); err != nil { t.Fatal(err) } + err = b.EnableKprobes(256) + if err != nil { + t.Fatal(err) + } defer func() { if err := b.CloseExt(closeOptions); err != nil { t.Fatal(err) @@ -685,4 +792,5 @@ func TestModuleLoadELF(t *testing.T) { checkUpdateDeleteElement(t, b) checkLookupElement(t, b) checkProgTestRun(t, b) + checkPerfArray(t, b) } diff --git a/elf/perf.go b/elf/perf.go index 585968c8..4a4bf348 100644 --- a/elf/perf.go +++ b/elf/perf.go @@ -369,7 +369,12 @@ func (pm *PerfMap) PollStart() { case 0: break ringBufferLoop // nothing to read case C.PERF_RECORD_SAMPLE: - size := sample.Size - 4 + var size uint32 + if sample.Size > 8 { + size = sample.Size - 4 + } else { + size = sample.Size + } b := C.GoBytes(unsafe.Pointer(&sample.data), C.int(size)) incoming.bytesArray = append(incoming.bytesArray, b) harvestCount++ diff --git a/go.mod b/go.mod index be4d70a1..74142608 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module github.com/iovisor/gobpf go 1.15 + +require github.com/stretchr/testify v1.7.0 diff --git a/pkg/test/test_structs.go b/pkg/test/test_structs.go new file mode 100644 index 00000000..ac4ac899 --- /dev/null +++ b/pkg/test/test_structs.go @@ -0,0 +1,65 @@ +package test + +/* +#include "../../tests/dummy_structs.h" +*/ +import "C" +import ( + "unsafe" +) + +type S1 struct { + A uint +} +type S2 struct { + A uint + B uint +} +type S8 struct { + A uint + B uint + C uint + D uint + E uint + F uint + G uint + H uint +} + +func ReadS1(data []byte) *S1 { + if len(data) != int(unsafe.Sizeof(C.struct_S1{})) { + return nil + } + eventC := (*C.struct_S1)(unsafe.Pointer(&data[0])) + return &S1{ + A: uint((*eventC).a), + } +} + +func ReadS2(data []byte) *S2 { + if len(data) != int(unsafe.Sizeof(C.struct_S2{})) { + return nil + } + eventC := (*C.struct_S2)(unsafe.Pointer(&data[0])) + return &S2{ + A: uint((*eventC).a), + B: uint((*eventC).b), + } +} + +func ReadS8(data []byte) *S8 { + if len(data) != int(unsafe.Sizeof(C.struct_S8{})) { + return nil + } + eventC := (*C.struct_S8)(unsafe.Pointer(&data[0])) + return &S8{ + A: uint((*eventC).a), + B: uint((*eventC).b), + C: uint((*eventC).c), + D: uint((*eventC).d), + E: uint((*eventC).e), + F: uint((*eventC).f), + G: uint((*eventC).g), + H: uint((*eventC).h), + } +} diff --git a/tests/dummy-410.o b/tests/dummy-410.o index 7e8b938a46b00cd3d0251840a008657e6647fdb1..5f1102e7d88099fe0eab7b38614fd595d44a43d7 100644 GIT binary patch literal 7584 zcmeHLPiP!v6o1K96Rm%;v1%IstvN-IP1+QUAQDTeIRq?Lp_ek9>`szpv)N^4)+APO z5rl#u1r-WjL_`8!JP7H@h+cZkK}zUJ@KVr2go1mh#`pW?y`9Ok*EJ+idWok=LIM>Pw@yTD--GJ<5A4f``0cTD;kaJ<6Mk;303f z#pAdeK@5aHU0HPqydrqR*kaDuq2AulKmEf`rdhi2H!o}_Wjyrz!UDQtUsc*l(xUk3}wgoyK?SF7`;%2Ogi}93G)R z%(q_DFmH03q3KAD)t;fwGdV*zRpXK&oGNk2m|e9Kj$I`#8M-eHGLoVD6Y!%6IA&8^ zGW1{!{Ec&(rO_6SeGc-1!SRI~h~lrXI!s~w`ko#(co@IpA26OJSOd}jFV2|uA6J+Z z|Avt)g@2MLUNZjpMJbdqpj~P6iZ;DSET>kvwXT_f} z@r3h1@tej!oDYhRGY&yq*i(=%2r9g-oi=?)){ol3fk4M9nufvx9dqbB6c*^n(mE6t z=or;iC@j!1nrl#4pkvnULScc9+17-@0v*|k<`r3;hJgi@$%0oclpWu)iuFomg9=M- zwO+FTDpaqz)di=exsHDTP)2z{U4j-Tf(8S&DoPf;V%NOj(Xw6F-k=CjbKF9$9>=A> zxW8Ln67Rh4toyWHtXVbN^T>DYf>W!OR(X`Jy=HkEp5?6ijvKK|h@oJwtauZl2O255 z)fz|UF~h2riWUb+*4vKjm8z@Jh)qaVq3-$BiX?IZxrq8K+um|imr-_r7pbh-vP{Tp zZpnA3EXhZRf~cDbJHYa;vl4hlKx?H`a8^BsV9h(r)}m`yoM<$jZ}WRM`3m50)MQ>~ zzR((2d4ckt@A@|CjSA}d)2An`DI|V^qg*=49aW3AZ|4i1KXtN&pD+{fKmNSL>#WnM zv?*I$UDly?Bhy}0!r2Tg+&Kc%Oi;ysb-!1`O(x%sult|+hbKgU++cEeI;a=Xb=it% z1bT{Vj8pl#Fa4O%|797s`bje_zUmkGp;P=s|8y zN{D~AOa8e8{;e+gW%lbd{$`i_a|!%GSrlpSzbN@@Uqd4T=()keG}1o*-(wWy^5J&9)PjFGbuIpLuxV>*s8uDo| QCkqQ<;8v^r5je5@1J)dtn*aa+ literal 5320 zcmeHKzi-n(6uy@78;bc=WkX_OYJiO`3@|YuCL{*eaZFmJj;%YVG*h!6F)+XY6GK^; z7}y8{sAGkM;6DJdATcsU9SHB8pA(gF>3d6f*_56M5L;m;-iq=tW%{4*N< zO7c%@_)-iJ#DLCIYwPMYi4Q`F@|dZ65SO8^HwXg*<3_6OVh50(3M$ z=}rQ6nn{FszqZ_=_0*}ub=KEKeagTfEgpo--tf3s3%cnk z$~o9>Peg%FS+8Se(wtRCtfqZhRt|hWO%ss=Z%@vA61mf4%Oc{DgU`N?PncdE6575x zXaQ8}+a>iJczN&dO-cO%)K{Kl9U&G0zEL*?tpbsfo{fKl$`aOf*qJTyEp<(`)Xre{>mj-=#ZV5+nEe?$jGk={3qzfD(rk=`@thxEyit(UC-3-p;I7MIO- SNI$~Gf#Cyx$@y195bO_O>kS|P diff --git a/tests/dummy-414.o b/tests/dummy-414.o index 7e8b938a46b00cd3d0251840a008657e6647fdb1..5f1102e7d88099fe0eab7b38614fd595d44a43d7 100644 GIT binary patch literal 7584 zcmeHLPiP!v6o1K96Rm%;v1%IstvN-IP1+QUAQDTeIRq?Lp_ek9>`szpv)N^4)+APO z5rl#u1r-WjL_`8!JP7H@h+cZkK}zUJ@KVr2go1mh#`pW?y`9Ok*EJ+idWok=LIM>Pw@yTD--GJ<5A4f``0cTD;kaJ<6Mk;303f z#pAdeK@5aHU0HPqydrqR*kaDuq2AulKmEf`rdhi2H!o}_Wjyrz!UDQtUsc*l(xUk3}wgoyK?SF7`;%2Ogi}93G)R z%(q_DFmH03q3KAD)t;fwGdV*zRpXK&oGNk2m|e9Kj$I`#8M-eHGLoVD6Y!%6IA&8^ zGW1{!{Ec&(rO_6SeGc-1!SRI~h~lrXI!s~w`ko#(co@IpA26OJSOd}jFV2|uA6J+Z z|Avt)g@2MLUNZjpMJbdqpj~P6iZ;DSET>kvwXT_f} z@r3h1@tej!oDYhRGY&yq*i(=%2r9g-oi=?)){ol3fk4M9nufvx9dqbB6c*^n(mE6t z=or;iC@j!1nrl#4pkvnULScc9+17-@0v*|k<`r3;hJgi@$%0oclpWu)iuFomg9=M- zwO+FTDpaqz)di=exsHDTP)2z{U4j-Tf(8S&DoPf;V%NOj(Xw6F-k=CjbKF9$9>=A> zxW8Ln67Rh4toyWHtXVbN^T>DYf>W!OR(X`Jy=HkEp5?6ijvKK|h@oJwtauZl2O255 z)fz|UF~h2riWUb+*4vKjm8z@Jh)qaVq3-$BiX?IZxrq8K+um|imr-_r7pbh-vP{Tp zZpnA3EXhZRf~cDbJHYa;vl4hlKx?H`a8^BsV9h(r)}m`yoM<$jZ}WRM`3m50)MQ>~ zzR((2d4ckt@A@|CjSA}d)2An`DI|V^qg*=49aW3AZ|4i1KXtN&pD+{fKmNSL>#WnM zv?*I$UDly?Bhy}0!r2Tg+&Kc%Oi;ysb-!1`O(x%sult|+hbKgU++cEeI;a=Xb=it% z1bT{Vj8pl#Fa4O%|797s`bje_zUmkGp;P=s|8y zN{D~AOa8e8{;e+gW%lbd{$`i_a|!%GSrlpSzbN@@Uqd4T=()keG}1o*-(wWy^5J&9)PjFGbuIpLuxV>*s8uDo| QCkqQ<;8v^r5je5@1J)dtn*aa+ literal 5320 zcmeHKzi-n(6uy@78;bc=WkX_OYJiO`3@|YuCL{*eaZFmJj;%YVG*h!6F)+XY6GK^; z7}y8{sAGkM;6DJdATcsU9SHB8pA(gF>3d6f*_56M5L;m;-iq=tW%{4*N< zO7c%@_)-iJ#DLCIYwPMYi4Q`F@|dZ65SO8^HwXg*<3_6OVh50(3M$ z=}rQ6nn{FszqZ_=_0*}ub=KEKeagTfEgpo--tf3s3%cnk z$~o9>Peg%FS+8Se(wtRCtfqZhRt|hWO%ss=Z%@vA61mf4%Oc{DgU`N?PncdE6575x zXaQ8}+a>iJczN&dO-cO%)K{Kl9U&G0zEL*?tpbsfo{fKl$`aOf*qJTyEp<(`)Xre{>mj-=#ZV5+nEe?$jGk={3qzfD(rk=`@thxEyit(UC-3-p;I7MIO- SNI$~Gf#Cyx$@y195bO_O>kS|P diff --git a/tests/dummy-46.o b/tests/dummy-46.o index 315c0dd87c7244c6bbd78a5a4debae58081c3550..ac5b19e7f1183eaa11746be024cd7a5e22388c3b 100644 GIT binary patch literal 6152 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 X) +#define bpf_debug(fmt, ...) \ + ({ \ + char ____fmt[] = fmt; \ + bpf_trace_printk(____fmt, sizeof(____fmt), ##__VA_ARGS__); \ + }) + struct pt_regs{}; struct bpf_map_def SEC("maps/dummy_hash") dummy_hash = { @@ -27,6 +49,13 @@ struct bpf_map_def SEC("maps/dummy_array") dummy_array = { .max_entries = 128, }; +struct bpf_map_def SEC("maps/master_pid") master_pid_map = { + .type = BPF_MAP_TYPE_ARRAY, + .key_size = sizeof(int), + .value_size = sizeof(unsigned int), + .max_entries = 1, +}; + struct bpf_map_def SEC("maps/dummy_prog_array") dummy_prog_array = { .type = BPF_MAP_TYPE_PROG_ARRAY, .key_size = sizeof(int), @@ -81,14 +110,43 @@ struct bpf_map_def SEC("maps/dummy_array_custom") dummy_array_custom = { .pinning = PIN_CUSTOM_NS, }; -SEC("kprobe/dummy") -int kprobe__dummy(struct pt_regs *ctx) -{ - return 0; +SEC("kprobe/sys_write") +int kprobe__sys_write(struct pt_regs *ctx) { + unsigned int master_pid_map_key = 0; + unsigned int *master_pid_ptr = bpf_map_lookup_elem(&master_pid_map, &master_pid_map_key); + if (master_pid_ptr == 0) { + return 0; + } + + unsigned int master_pid = *master_pid_ptr; + unsigned int current_pid = bpf_get_current_pid_tgid(); + + if (master_pid != current_pid) { + return 0; + } + + struct S1 s1 = {0x10000011}; + struct S2 s2 = {0x20000011, 0x20000022}; + struct S8 s8 = { + .a = 0x80000011, + .b = 0x80000022, + .c = 0x80000033, + .d = 0x80000044, + .e = 0x80000055, + .f = 0x80000066, + .g = 0x80000077, + .h = 0x80000088 + }; + + bpf_perf_event_output(ctx, &dummy_perf, 0, &s1, sizeof(s1)); + bpf_perf_event_output(ctx, &dummy_perf, 0, &s2, sizeof(s2)); + bpf_perf_event_output(ctx, &dummy_perf, 0, &s8, sizeof(s8)); + return 0; } -SEC("kretprobe/dummy") -int kretprobe__dummy(struct pt_regs *ctx) + +SEC("kretprobe/sys_write") +int kretprobe__sys_write(struct pt_regs *ctx) { return 0; } @@ -146,3 +204,5 @@ int xdp_pass(struct xdp_md *ctx) { #endif unsigned int _version SEC("version") = 0xFFFFFFFE; + +char _license[] SEC("license") = "GPL"; diff --git a/tests/dummy.o b/tests/dummy.o index 57ea29d95b9c083c548cae80369cc12c27579011..8f943658aeb063b675fadbcf8f54612159cfe7e6 100644 GIT binary patch literal 4984 zcmeHKJ!}+56n@76hCs-j1<0{LI*>rF4umNjB|;}e5(-No1QG>kwVc=X$(+yHU4t(m zaSak>ibSGGgD5D|L`G>`At5R^NR*U_id1o7#k_Ckz1_L>t?#6y%ROmt=KJ3J=I71K z?%bpAr+?U0D3Dr#{-zWuOEh&Tt=CMoMn^bu?WpBfMN}W(+yb-q%p}xqv#$d z&nw|m-MZ1OJ-3RH-9#Il-!>;`^`8dR@5|Az52&v=`c8xF`Q=@=3I8Nsr+rje}NEVdXIg^sBCVk-Ta@1 z-)~9&)%Z7t|8g6@Xn3r;HI4tsaMa09RFeu8-z+C%n!HtT9JX0@KdC0TFK@MB-XfU)XR0Bpd>^-TaaV9ag>fDIU< zdI*^ac{9t+W}B9m!q%N2L17Sg5jOaY8>>J=1vmYr$W}c+4E;7a1UES+ zY&8y6V)jLG5PD0E8IQxryBCB}qqXR2Oe0=>If`3Nm!J2ec^5AQ;VdoaU_38sN8bIg z5eKv&GjSLVJCkzNFt}?Y9n!nos0WKtK=4+Bd2crKn}O{%9Xpw{RO?iY;xP8_aM^C6 zoW6MRtT)Nx){Gzf)p`_9o->Q^AN*YBh3s|uU&>KvW1$_(KzhVJaOn=V!8KcK`_=QT zj>9b8Nw4Qk&dd3|DlE<~a-@1am$z7-?HiJ_a#h%n N0i%Fc^eMZZ_5qeS6SA?#2t|D|k^-1I36$_@4 zB8y5wpV0ILp-*Z$gnqr{Qrq5bdtL|H0r6{Y91)i$gq9{Gw)yQ};&ea~SY89w3U!Yu*oQ6&_x%GoNl&O>=Me|$6)Nk*ijimqp diff --git a/tests/dummy_structs.h b/tests/dummy_structs.h new file mode 100644 index 00000000..a193dced --- /dev/null +++ b/tests/dummy_structs.h @@ -0,0 +1,18 @@ + +struct S1 { + unsigned int a; +}; +struct S2 { + unsigned int a; + unsigned int b; +}; +struct S8 { + unsigned int a; + unsigned int b; + unsigned int c; + unsigned int d; + unsigned int e; + unsigned int f; + unsigned int g; + unsigned int h; +}; From 1660e593db6e6659e115ba332307fde8d886295f Mon Sep 17 00:00:00 2001 From: Alexander Hasselbach Date: Mon, 19 Apr 2021 11:54:08 +0200 Subject: [PATCH 2/5] (fix) remove unnecessary filtering of sys_write events (get any of that to check perf map only) --- bpf_test.go | 35 ++++++++++++----------------------- tests/dummy-410.o | Bin 7584 -> 7432 bytes tests/dummy-414.o | Bin 7584 -> 7432 bytes tests/dummy-46.o | Bin 6152 -> 6000 bytes tests/dummy-48.o | Bin 7176 -> 7024 bytes tests/dummy.c | 13 ------------- tests/dummy.o | Bin 4984 -> 4832 bytes 7 files changed, 12 insertions(+), 36 deletions(-) diff --git a/bpf_test.go b/bpf_test.go index 8b752a75..5d18fdd7 100644 --- a/bpf_test.go +++ b/bpf_test.go @@ -643,17 +643,6 @@ func checkPerfArray(t *testing.T, b *elf.Module) { perfMap.PollStart() defer perfMap.PollStop() - // configure master_pid to catch only sys_write's of the current process - masterPIDMap := b.Map("master_pid") - if masterPIDMap == nil { - t.Fatal("unable to find master_pid map") - } - key := 0 - currentPID := os.Getpid() - if err := b.UpdateElement(masterPIDMap, unsafe.Pointer(&key), unsafe.Pointer(¤tPID), BPF_ANY); err != nil { - t.Fatal("failed to setup master PID") - } - var actualS1 *test.S1 var actualS2 *test.S2 var actualS8 *test.S8 @@ -683,7 +672,7 @@ func checkPerfArray(t *testing.T, b *elf.Module) { case lost := <-lostChan: assert.Fail(t, "Unexpectedly lost %d events", lost) break L - case <-time.After(2000 * time.Millisecond): + case <-time.After(5000 * time.Millisecond): assert.Fail(t, "Didn't get all expected messages") break L } @@ -781,16 +770,16 @@ func TestModuleLoadELF(t *testing.T) { checkPinConfigCleanup(t, []string{"/sys/fs/bpf/gobpf-test/testgroup1"}) }() - checkMaps(t, b) - checkProbes(t, b) - checkUprobes(t, b) - checkCgroupProgs(t, b) - checkSocketFilters(t, b) - checkTracepointProgs(t, b) - checkXDPProgs(t, b) - checkPinConfig(t, []string{"/sys/fs/bpf/gobpf-test/testgroup1"}) - checkUpdateDeleteElement(t, b) - checkLookupElement(t, b) - checkProgTestRun(t, b) + //checkMaps(t, b) + //checkProbes(t, b) + //checkUprobes(t, b) + //checkCgroupProgs(t, b) + //checkSocketFilters(t, b) + //checkTracepointProgs(t, b) + //checkXDPProgs(t, b) + //checkPinConfig(t, []string{"/sys/fs/bpf/gobpf-test/testgroup1"}) + //checkUpdateDeleteElement(t, b) + //checkLookupElement(t, b) + //checkProgTestRun(t, b) checkPerfArray(t, b) } diff --git a/tests/dummy-410.o b/tests/dummy-410.o index 5f1102e7d88099fe0eab7b38614fd595d44a43d7..58142f52da8a0f625ad2ee538a404e2d5dd2287b 100644 GIT binary patch delta 512 zcmZ9Iy-xx`5XITyLs8B%Al%AF1Y?9)5gXx5?y$2lS`lJJVPRz~fd=g;F|V<_#>5hX zg-2y!B9*n}{TYCbbDqV9N#?!xo87(at#dpuhZP#69}ae3ULB1*F>Y>L3V3>K{G}ff z4?xM!z6kx5ZyE0EC4OGwe6T&_kBPgcaF}yT;RxrB!coqT3dcB~y(xng&ff~Ja-Jz1 z=PZ>AtufaWULQZD&Iv#1E3`8*E>pqT8{B95!h5sabg^aBD#hxs&H8w zn6qA>E^X09m-QB|wCRq}+b*Ld4Kd{HWsLL)_T&~h{(?m#!h~%a#)8d@z|2}Si=vmc z#3tOVEh?C^Hc-#mqJ=Iie>rED9Z_&Gk9@~e83ENb|f~}K;S+FWn V|G&Hc*j)bKC%FBm@=FF5`UMYqRc8PI delta 728 zcmZ`%J4ho@6n*ch`KXDXVd9KQkw_q6u?Pqn6*7wpl0w*aSqM6c2wIDFE(;4OBe$_M zRc7J_!Bw6u-Y+Q^m`fp|`41QGVYIrpCX?)%QvSI$=(MUzdPewo`;z|L&1&v<)5 zRVr$f>h=45M+g30{~%$>R+T}?j|L;GC&4{13m%2B7G1vjc9}3$(|$?()T0|%SE(UY zHtm&(b%VP6p1MC_5#Y)huo3RcFath(@{@yAf_{#34#Bn|uuKEc4}(8w0QwQ|m5hX zg-2y!B9*n}{TYCbbDqV9N#?!xo87(at#dpuhZP#69}ae3ULB1*F>Y>L3V3>K{G}ff z4?xM!z6kx5ZyE0EC4OGwe6T&_kBPgcaF}yT;RxrB!coqT3dcB~y(xng&ff~Ja-Jz1 z=PZ>AtufaWULQZD&Iv#1E3`8*E>pqT8{B95!h5sabg^aBD#hxs&H8w zn6qA>E^X09m-QB|wCRq}+b*Ld4Kd{HWsLL)_T&~h{(?m#!h~%a#)8d@z|2}Si=vmc z#3tOVEh?C^Hc-#mqJ=Iie>rED9Z_&Gk9@~e83ENb|f~}K;S+FWn V|G&Hc*j)bKC%FBm@=FF5`UMYqRc8PI delta 728 zcmZ`%J4ho@6n*ch`KXDXVd9KQkw_q6u?Pqn6*7wpl0w*aSqM6c2wIDFE(;4OBe$_M zRc7J_!Bw6u-Y+Q^m`fp|`41QGVYIrpCX?)%QvSI$=(MUzdPewo`;z|L&1&v<)5 zRVr$f>h=45M+g30{~%$>R+T}?j|L;GC&4{13m%2B7G1vjc9}3$(|$?()T0|%SE(UY zHtm&(b%VP6p1MC_5#Y)huo3RcFath(@{@yAf_{#34#Bn|uuKEc4}(8w0QwQ|mD9t zU2+xBLm)p1LEQ(VEG91ms)?BV5J<*MRul(Y1|%~kFBG@e5a5NV(*Okp5P(cz2VxEo K2M8n}6axT->O!pm delta 499 zcmZ8dze_?<7`^vuK5zN+`CeKyL_<6pLJG>3cg+@!AZT(4k%rc`+?*6`QohA8npz@6 z0&%gSA)V?!=ufcCL3n+iPvOxA=bZ1Hd%5rMCi{(a%MwAoy|+_hI5(R!hjjQv%$Oz^ zn>mh?;;vtE4Ht?`X3wLt=AKX$*zW(_bmZMpoZ@G5veYj^l-j93H<5zI6cs$l&;f^QJdT-Ge z9=OQm(xpQv$1mYEz9I85_sS5y<5jACr60*YmBYzGTR-Lv80m_4KqeG_h5~XQn#i9p zLjD11C_aUPp+qbI4~8u)4aO+hAgr3UC`vdtZGHz$Q;EhJj1#-O3%_QPKZ0CW{2dC& cAJ9a`Cy}Qhlgg@u7bQGDC5RD$CglqI18J#G{Qv*} diff --git a/tests/dummy-48.o b/tests/dummy-48.o index b0a29ac306c97e64ccafffd3f09289941dd47dcd..97d375857d479520e243327518043a2a6a32c53d 100644 GIT binary patch delta 524 zcmZuuF-*ch6y*-Y)}#=S!nHUEOVPxHIAEvNIO)ddXqjL!jBa#f#Jt7P5(idO2Syj8 zqj6%>Iyx~r`p*(`A-?4Q|K7XH<^6W-E<2MJA6BmSoA(c)!9Q5sDcB5QF&|$R-xwJ< zDLs!^<`;65srqYrwx)N|>ltZtDp%22;^&Ia5x-LO2Jst3=ZPQ86=Re5LeU!WZ$<0z zQ+b=?y)wX=S<_t^m~e=JIgc<^b}V}pVzta)ju4UU^IHR-w#V-bH0vIp8R*fNmoTk+t$886{3?G0L5AI; LlAldNq$BeKwL4E> delta 588 zcmZ8dy-&hG6u&z@+9K2jC@s|i9hA68Vni5h2@V2ra$+&WIG8xO>BeLNOpv!Q8Yf2$ z3!90Hz+iAA{sD$jHU^UVu7#xWCGY({-sRoB`^`3T?KBhB&fa#7U|bmso8#LPuY?GU zkcDmAI(7A`J|N+iN=(PP6x~YE}}LW&t|t5pBRw zwP+WlghijBjI|FnnmZ()GVg>VWgQX9e|K-vO*9l2vq@E zx=C+gs9QK)N?P<0%2;u3(qiK+2aAzyL(?0C5Hy ze+3#}2BMq+B+LZF7D#+%AUgty&jMsuAn{p&>={UWHXwWR4xSW7UcI9Hl*E!mz2xE& zW24E2eDRY5_&FGhCeP%n2f0&<-;8qwH$=^?l z2Lj22$rFKO#pH`Xa>8UmL3^eZtdoNT?HCVC4ir?MyhBie@y6tdKvn`5ix|icLQwa> zs1F>Ig@o)F1ttdy*)xhvo(Lo*CSMe?XS%^XSxDGU;{+!}HbrC;+CHX_<4-YV)Saw2k$=pqgfcd1?~?)z!1vNHyrHiIiGUmzq$95(*dJSyVa zRv6-8QQ~3?F-#v7Vj#Z%c@vitwVv-wyYe~gos7?8-^%z6?0XrH>kwm<36ya~@6y6~ zvsrH+!LxAzKgO;$(dCf Date: Mon, 19 Apr 2021 14:18:35 +0200 Subject: [PATCH 3/5] revert commenting --- bpf_test.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/bpf_test.go b/bpf_test.go index 5d18fdd7..4639d415 100644 --- a/bpf_test.go +++ b/bpf_test.go @@ -770,16 +770,16 @@ func TestModuleLoadELF(t *testing.T) { checkPinConfigCleanup(t, []string{"/sys/fs/bpf/gobpf-test/testgroup1"}) }() - //checkMaps(t, b) - //checkProbes(t, b) - //checkUprobes(t, b) - //checkCgroupProgs(t, b) - //checkSocketFilters(t, b) - //checkTracepointProgs(t, b) - //checkXDPProgs(t, b) - //checkPinConfig(t, []string{"/sys/fs/bpf/gobpf-test/testgroup1"}) - //checkUpdateDeleteElement(t, b) - //checkLookupElement(t, b) - //checkProgTestRun(t, b) + checkMaps(t, b) + checkProbes(t, b) + checkUprobes(t, b) + checkCgroupProgs(t, b) + checkSocketFilters(t, b) + checkTracepointProgs(t, b) + checkXDPProgs(t, b) + checkPinConfig(t, []string{"/sys/fs/bpf/gobpf-test/testgroup1"}) + checkUpdateDeleteElement(t, b) + checkLookupElement(t, b) + checkProgTestRun(t, b) checkPerfArray(t, b) } From e77388b7e7fb55e52e11b47d63b1ecebc087644d Mon Sep 17 00:00:00 2001 From: Alexander Hasselbach Date: Mon, 19 Apr 2021 17:19:45 +0200 Subject: [PATCH 4/5] remove unused code --- bpf_test.go | 1 - tests/dummy-410.o | Bin 7432 -> 7032 bytes tests/dummy-414.o | Bin 7432 -> 7032 bytes tests/dummy-46.o | Bin 6000 -> 5608 bytes tests/dummy-48.o | Bin 7024 -> 6624 bytes tests/dummy.c | 23 ----------------------- tests/dummy.o | Bin 4832 -> 4432 bytes 7 files changed, 24 deletions(-) diff --git a/bpf_test.go b/bpf_test.go index 4639d415..cd10e215 100644 --- a/bpf_test.go +++ b/bpf_test.go @@ -317,7 +317,6 @@ func checkMaps(t *testing.T, b *elf.Module) { "dummy_prog_array", "dummy_perf", "dummy_array_custom", - "master_pid", } if kernelVersion >= kernelVersion46 { diff --git a/tests/dummy-410.o b/tests/dummy-410.o index 58142f52da8a0f625ad2ee538a404e2d5dd2287b..a0b1791c956cbb8c0a1b15110578547ffcb2d067 100644 GIT binary patch delta 615 zcmZ`$O-lk%6n$@W&=IMb(fL#}gJ2@0+?YhEErMK`i-_9PrbX@A2hk=pB7*Y=j5a|n zGPi-WD(f#4R1jp_HZFTJ&KMzGc<v$6rnaBXXab)HZjOln~VTK|U%L_AXDAt+CsKhin3L1#uHWp4zFwn+* z?hxK{5$<_@M>(g4$6o$XUU^D_FJ&avab>LEAG>yC%h* delta 746 zcmZWmJ4?e*6uvhmwpH7-P0}Qlwses=h!w;aN;@bxICK)7N}+-dmHHUkNp!IwNa0NC zpx_@+`U89px;Y6tiMZ(^IMhi`lY0}y6Owz+cfRwTM_MEGiH4=sHR4*%zU4^reCkw$ zN_P*X%`3r2ArtCszKSCOf4@M8NIrkyN>E`q^kKeJLLwyYN{H+>3Tat~ygcihu^BoX z%eoSCc?P0wTY-Byv86f=emP#Vvy^{$!^Wfk@Eb%T_;BMoK5RHbycs!uhB{Hw;m~{V zcwr44!CF|4T6UQ*SHrfNJK=pHST1gCF0B_TE2ToY2qEQ7E*C2sgB}c@%5Eo_#Ht;* zBPC$45mwgENRc{OqBg& rcZ`+?Q%gx-NU_&6P-TTr7(0PyFTQ@}^ZzuBf`YSl*$HJ}u{ZS#;3{*u diff --git a/tests/dummy-414.o b/tests/dummy-414.o index 58142f52da8a0f625ad2ee538a404e2d5dd2287b..a0b1791c956cbb8c0a1b15110578547ffcb2d067 100644 GIT binary patch delta 615 zcmZ`$O-lk%6n$@W&=IMb(fL#}gJ2@0+?YhEErMK`i-_9PrbX@A2hk=pB7*Y=j5a|n zGPi-WD(f#4R1jp_HZFTJ&KMzGc<v$6rnaBXXab)HZjOln~VTK|U%L_AXDAt+CsKhin3L1#uHWp4zFwn+* z?hxK{5$<_@M>(g4$6o$XUU^D_FJ&avab>LEAG>yC%h* delta 746 zcmZWmJ4?e*6uvhmwpH7-P0}Qlwses=h!w;aN;@bxICK)7N}+-dmHHUkNp!IwNa0NC zpx_@+`U89px;Y6tiMZ(^IMhi`lY0}y6Owz+cfRwTM_MEGiH4=sHR4*%zU4^reCkw$ zN_P*X%`3r2ArtCszKSCOf4@M8NIrkyN>E`q^kKeJLLwyYN{H+>3Tat~ygcihu^BoX z%eoSCc?P0wTY-Byv86f=emP#Vvy^{$!^Wfk@Eb%T_;BMoK5RHbycs!uhB{Hw;m~{V zcwr44!CF|4T6UQ*SHrfNJK=pHST1gCF0B_TE2ToY2qEQ7E*C2sgB}c@%5Eo_#Ht;* zBPC$45mwgENRc{OqBg& rcZ`+?Q%gx-NU_&6P-TTr7(0PyFTQ@}^ZzuBf`YSl*$HJ}u{ZS#;3{*u diff --git a/tests/dummy-46.o b/tests/dummy-46.o index b22dc8dafa61a7e281005b359968eb7150029e09..9c6e6a63cd5cd3f9ce988143ac594e18e8e827fe 100644 GIT binary patch delta 552 zcmZvYJxIeq7>4g+N|V;c=6dO+pwvlH1Zlxl+M!Bu5Pw!t3gT?h&7p;Y6kUXOa?nu( z7ejX!ccBQnx(MQA2hpuw;x!8OhP(HBzQ31ypL?A>^&BrvqEiV~g$RFPL+@V2T5)5a z5~7p-01b_!nmWiYN??;r)T1kPE?=84Jf#Y`>rnp=c4bd+?vS&lGS*KZ?;(Fc-4e|= zNo+Dcl06D}a)j4IClez)Avq&s5r0GHaV!hg;b()%BFs)jwAGKUUi)31NPz0cos>{5K2LPK^Kn delta 655 zcmZWlze~eF6uwK-)=JXml9Z%^Ef$e#@z>VHCg4AysNkTq1&bCbq}IVnp_?vh-zK;? zsVFE#C@#8IaB*>RajH%ZF1qL?y|mCC+`ad{?|a|fy=L-j;wTZe2x>3W$xNi*&Mfe- z;}I~fl{h~JQ}ETQ{H`BYfe44OMT`(ZYP*kT*%gfhDexeSM(&-wW3JO4d%XY_2a};z zK~EQdr#V5v9{dNUMGdl|FDdkJmh%p&2amw9s6}|n%E;ShUEL|6chu$!G&VLxuRFq1h(Ix=)kYp2J>SzKn5Bj9h@^vNo-LGXoO?`;-*`I diff --git a/tests/dummy-48.o b/tests/dummy-48.o index 97d375857d479520e243327518043a2a6a32c53d..53dd20ebd65500fda4f4f95438ad45c243fb1306 100644 GIT binary patch delta 567 zcmZWlzfZzI6uv7ETT|gmDR(U~Xktto9UvML2LmJOBAbbWtDEo_U^FqrIFP)=!AWOb z8XQ=4!Ii}yn~rYaWa8rMabT2}zV^NE`|kC7*I#>EY5C5aO~z4{Rhi_%jgxr$CGn-x zSLh|5=?&bc_*9G%Vv#I#Q$f*^b!L22U?0UPrbT{dj_?5H*=*60n&>sc*X0~Gf$vB> z1&53;B`4UfWYZIP4MN7#d&s6qV$3qq{$!gPY}rpx$TSk~$j9JXvkhGtvZ0sRrH!`@;44lnD!QFJQ5mBb4bR)a`N;x!nAV} t&QQ>S(Bno+2^dsSaEGgjWo7+H&5bq_nEyBXz`twqmab-o(hgK}`5$*VQ?UR5 delta 678 zcmZXRze^)Q6vyXn7R_Qdo9u3OX8l1-Bh!eYAVH7_Hg}!%HE}_~69Pdk#3m8{0p;~# zKtW4M6V$>Vg{^`dcIG=58vf`N@en2G4tRDVH>75>4BW|-q#8b4i352nR zXBM{;sw^EL$^x1<)=$l>1RI+x>*eb2<#HuJ!+x?VL3LxIi?MCj`xw(0OVErQqZnJ8 z!X2j!r})PP_>Cc2!*-JK`OD&dGjK})5*xV^WGHj&Uizs;X>6PnfOkEJ1qFzIEe)r1UC=2SaA7xEB0BBYFX&hr|*BCN$NmT NBWuNDzsGAo{|SdaY)JqB diff --git a/tests/dummy.c b/tests/dummy.c index bd67b121..cfe11f5d 100644 --- a/tests/dummy.c +++ b/tests/dummy.c @@ -8,31 +8,15 @@ #define SEC(NAME) __attribute__((section(NAME), used)) -static int (*bpf_probe_read_str)(char *dst, int size, void *unsafe_ptr) = - (void *) BPF_FUNC_probe_read_str; -static int (*bpf_trace_printk)(const char *fmt, int fmt_size, ...) = - (void *) BPF_FUNC_trace_printk; -static unsigned long long (*bpf_get_smp_processor_id)(void) = - (void *) BPF_FUNC_get_smp_processor_id; -static unsigned long long (*bpf_get_current_pid_tgid)(void) = - (void *) BPF_FUNC_get_current_pid_tgid; static int (*bpf_perf_event_output)(void *ctx, void *map, unsigned long long flags, void *data, int size) = (void *) BPF_FUNC_perf_event_output; -static void *(*bpf_map_lookup_elem)(struct bpf_map_def *map, void *key) = - (void *)BPF_FUNC_map_lookup_elem; #define PERF_MAX_STACK_DEPTH 127 #define KERNEL_VERSION_GTE(X) (KERNEL_VERSION >= X) -#define bpf_debug(fmt, ...) \ - ({ \ - char ____fmt[] = fmt; \ - bpf_trace_printk(____fmt, sizeof(____fmt), ##__VA_ARGS__); \ - }) - struct pt_regs{}; struct bpf_map_def SEC("maps/dummy_hash") dummy_hash = { @@ -49,13 +33,6 @@ struct bpf_map_def SEC("maps/dummy_array") dummy_array = { .max_entries = 128, }; -struct bpf_map_def SEC("maps/master_pid") master_pid_map = { - .type = BPF_MAP_TYPE_ARRAY, - .key_size = sizeof(int), - .value_size = sizeof(unsigned int), - .max_entries = 1, -}; - struct bpf_map_def SEC("maps/dummy_prog_array") dummy_prog_array = { .type = BPF_MAP_TYPE_PROG_ARRAY, .key_size = sizeof(int), diff --git a/tests/dummy.o b/tests/dummy.o index ddf2075b9871438a3bc919859a3949aed905ed14..119404f2cdc879f1b48605dd39184cd13aaab758 100644 GIT binary patch delta 410 zcmaE$dO>M|hG+l}0~|PjSq=;$8*PJGHm_i{U}4mq{E)L>UW}1}L6AWJu8;-FY6a4Q z4E&S(xilpwgW0@rH4;EQAh3G!MJ{p1-IE!)#V2vIX>&tFfh0`9Z6I5Sff+9T0IKoW zWJ7N8%?aGTjFb29te9NFo6TrC`5~`3=MOH3+Th8IeDRE|lN0&u85t)pIZ?FBB5z+yE6mG5Mg7JOFGhL*4)Y delta 509 zcmZutJ4*vW5Z*b@@bCNSVSamFb1J7x$utv&_u5-#qqX-{uGDQ!ja?lc^OZs6djPwUUfa5e=Z* zkfMMCCDJ{US7c=!2$9KXj19@g52c+-bHd^$G+BUio-IQ0P|f6SCfEpDh{IZ^9q49bB`|80R(rcyuJ2aMwMre2 z;gP{tSf`WPP2 zH;!QyiZp^80|NuLT1O&2bLib};l$T-qc;09YH sTg5%TMV)2(Lf*z7d5M4IZJ}i`^+n7NFlVK{0mg|~H2?qr From b26aa02f0671e5a44fa1f5915a10cf8c335f9460 Mon Sep 17 00:00:00 2001 From: Alexander Hasselbach Date: Wed, 21 Apr 2021 15:24:40 +0200 Subject: [PATCH 5/5] Use sudo for integration tests --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7937e3f3..5fdb50df 100644 --- a/README.md +++ b/README.md @@ -60,5 +60,5 @@ sudo -E go run examples/bcc/perf/perf.go ## Tests ``` -go test -tags integration -v ./... +sudo go test -tags integration -v ./... ```