Skip to content

Commit 7f6fc1f

Browse files
authored
Merge pull request #71 from kubescape/bugfix/ebpf
Bugfix/ebpf
2 parents a228cf0 + 465d1a9 commit 7f6fc1f

File tree

7 files changed

+38
-7
lines changed

7 files changed

+38
-7
lines changed

.vscode/settings.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"mntns_filter.h": "c",
66
"randomx.h": "c",
77
"macros.h": "c",
8-
"buffer.h": "c"
8+
"buffer.h": "c",
9+
"bpf_helpers.h": "c"
910
}
1011
}

pkg/ebpf/gadgets/randomx/tracer/bpf/randomx.bpf.c

+14-1
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,21 @@ int tracepoint__x86_fpu_regs_deactivated(struct trace_event_raw_x86_fpu *ctx) {
4747
return 0;
4848
}
4949

50-
uint mxcsr = BPF_CORE_READ(ctx, fpu, fpstate, regs.xsave.i387.mxcsr);
50+
void *fpu = BPF_CORE_READ(ctx, fpu);
51+
if (fpu == NULL) {
52+
return 0;
53+
}
5154

55+
u32 mxcsr;
56+
// Since kernel 5.15, the fpu struct has been changed and CO-RE isn't able to read it.
57+
// We need to use the bpf_probe_read_kernel helper to read the mxcsr value.
58+
// The old_fpu struct is used for kernels <= 5.15.
59+
#if LINUX_KERNEL_VERSION <= KERNEL_VERSION(5, 15, 0)
60+
bpf_probe_read_kernel(&mxcsr, sizeof(mxcsr), &((struct old_fpu*)fpu)->state.xsave.i387.mxcsr);
61+
#else
62+
mxcsr = BPF_CORE_READ((struct fpu*)fpu, fpstate, regs.xsave.i387.mxcsr);
63+
#endif
64+
5265
int fpcr = (mxcsr & 0x6000) >> 13;
5366
if (fpcr != 0) {
5467
__u32 ppid = BPF_CORE_READ(current_task, real_parent, pid);

pkg/ebpf/gadgets/randomx/tracer/bpf/randomx.h

+19
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,30 @@
22

33
#include "../../../../include/types.h"
44

5+
// Utilize the kernel version provided by libbpf. (kconfig must be present).
6+
extern int LINUX_KERNEL_VERSION __kconfig;
7+
58
#ifndef TASK_COMM_LEN
69
#define TASK_COMM_LEN 16
710
#endif
811
#define INVALID_UID ((uid_t)-1)
912

13+
#if LINUX_KERNEL_VERSION <= KERNEL_VERSION(5, 15, 0)
14+
struct old_fpu {
15+
unsigned int last_cpu;
16+
unsigned char initialized;
17+
long: 24;
18+
long: 64;
19+
long: 64;
20+
long: 64;
21+
long: 64;
22+
long: 64;
23+
long: 64;
24+
long: 64;
25+
union fpregs_state state;
26+
};
27+
#endif
28+
1029
struct event {
1130
gadget_timestamp timestamp;
1231
gadget_mntns_id mntns_id;

pkg/ebpf/gadgets/randomx/tracer/randomx_bpfel.go pkg/ebpf/gadgets/randomx/tracer/randomx_bpf.go

+1-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/ebpf/gadgets/randomx/tracer/tracer.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import (
1818
"github.com/kubescape/kapprofiler/pkg/ebpf/gadgets/randomx/types"
1919
)
2020

21-
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -no-global-types -target bpfel -cc clang -cflags "-g -O2" -type event randomx bpf/randomx.bpf.c -- -I./bpf/
21+
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -no-global-types -target bpf -cc clang -cflags "-g -O2 -Wall" -type event randomx bpf/randomx.bpf.c -- -I./bpf/
2222

2323
const (
2424
TargetRandomxEventsCount = 50

pkg/tracing/ig.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package tracing
33
import (
44
"fmt"
55
"log"
6-
"os"
76
"runtime"
87

98
"github.com/cilium/ebpf"
@@ -89,7 +88,7 @@ func (t *Tracer) startAppBehaviorTracing() error {
8988
}
9089

9190
// Start tracing randomx
92-
if runtime.GOARCH == "amd64" && os.Getenv("KAPROFILER_ENABLE_RANDOMX") == "true" {
91+
if runtime.GOARCH == "amd64" || runtime.GOARCH == "x86_64" {
9392
err = t.startRandomxTracing()
9493
if err != nil {
9594
log.Printf("error starting randomx tracing: %s\n", err)

0 commit comments

Comments
 (0)