Wie kann ich den vollständigen Pfad einer Struktur -Dentry * in einem EBPF -Haken (z. B. inode_rename) sicher erstellen?Linux

Linux verstehen
Anonymous
 Wie kann ich den vollständigen Pfad einer Struktur -Dentry * in einem EBPF -Haken (z. B. inode_rename) sicher erstellen?

Post by Anonymous »

Ich schreibe ein EBPF -Programm (Linux Security Modul) mit dem Hook LSM.S/Inode_Rename , und ich möchte den vollständigen Pfad der umbenannten Datei oder des Verzeichnisses erfassen. Ich verwende die Toolchain von Co-RE und Cilium. Laufzeitfehler wie: < /p>

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 
. Dann habe ich die Zahnstapelknoten wie run.sh -> Ritter -> home -> null durchqueren. run.sh/knights/home/.)

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;
}
Ich erhalte jedoch immer noch Abstürze oder Verifiziererableitungen, wenn ich diesen Code unter realer Weltnutzung ausführe (z. B. mv Befehl in ubuntu linux). Ich könnte den Dateinamen nur erfolgreich erhalten (z. B. run.sh Wenn der gesamte Pfad /home/knight/run.sh ist). Sie finden den gesamten Code meines aktuellen Fortschritts unter: https://github.com/knightchaser/lsm-bpf ... ode_rename Pfad sicher in EBPF, vermeiden Sie Überprüfungsfehler oder ungültige Speicherzugriff?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post