Code: Select all
load program: invalid argument: value -2147483648 makes ringbuf_mem pointer be out of bounds
< /code>
Was ich ausprobiert habe: Ich habe das Problem vereinfacht, indem ich nur die Dateinamen in umgekehrter Pfadreihenfolge in einen preallozierten Zeichenpuffer angehängt habe, wie unten. (Angenommen, es gibt einen Pfad /home/knights/run.sh
Code: Select all
static __always_inline int build_path(struct dentry *d, char *buf, int buf_len) {
int off = 0;
#pragma unroll
for (int i = 0; i < 16; i++) {
if (!d) break;
struct qstr q = BPF_CORE_READ(d, d_name);
__u32 len = q.len;
if (off + len + 2 > buf_len) // name + slash + NULL
return -1;
// Copy name into buffer
bpf_probe_read_kernel(buf + off, len, q.name);
off += len;
// Append slash
buf[off++] = '/';
struct dentry *parent = BPF_CORE_READ(d, d_parent);
if (parent == d) break;
d = parent;
}
if (off >= buf_len)
return -1;
buf[off] = '\0';
return off;
}