Как я могу безопасно построить полный путь структуры * в крючке EBPF (LSM) (например, inode_rename)?Linux

Ответить
Anonymous
 Как я могу безопасно построить полный путь структуры * в крючке EBPF (LSM) (например, inode_rename)?

Сообщение Anonymous »

Я пишу программу EBPF модуля безопасности Linux (LSM) с использованием Hook LSM.S/inode_rename , и я хочу захватить полный путь переименованного файла или каталога. Я использую Co-Rre и Cilium для инструментов. as: < /p>

Код: Выделить всё

load program: invalid argument: value -2147483648 makes ringbuf_mem pointer be out of bounds
< /code>
То, что я попробовал: я упростил проблему, добавив только имена файлов в порядке обратного пути в предварительный буфер символов, как ниже. (например, предположим, что существует путь/home/nights/run.sh 
. Затем я бы пересекал узлы дентри, такие как run.sh -> knights -> home -> nul run.sh/knights/home/.)

Код: Выделить всё

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;
}
Тем не менее, я все еще получаю сбои или оттенки проверки при запуске этого кода при использовании реального мира (например, команда MV в Ubuntu Linux). Я мог бы успешно получить только имя файла (например, run.sh , если весь путь - /HOME/Knight/run.sh ). Вы можете найти весь код моего текущего прогресса по адресу: https://github.com/knightchaser/lsm-bpf ... name.bpf.c.
образно Безопасно в EBPF, избегая ошибок проверки или недопустимого доступа к памяти?

Подробнее здесь: https://stackoverflow.com/questions/796 ... f-lsm-hook
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»