используйте другую структуру данных вместо seccomp_data с seccomp

Можно ли использовать другую структуру данных вместо seccomp_data в коде BPF seccomp? Например из этого...

...
BPF_STMT(BPF_LD+BPF_W+BPF_ABS,(offsetof (struct seccomp_data, args[0]))),
...

к этому

...
BPF_STMT(BPF_LD+BPF_W+BPF_ABS,(offsetof (struct my_data, my_field[0]))),
...

person Maicake    schedule 25.11.2019    source источник


Ответы (1)


Нет, эта структура заполняется на стороне ядра. перед вызовом вашей программы cBPF. Чтобы изменить данные, которые ваши программы cBPF принимают в качестве входных данных, вам придется отредактировать (и перекомпилировать) ядро.

Вы можете переопределить эту структуру, но я не уверен, в чем смысл этого.

person pchaigno    schedule 25.11.2019
comment
Как я могу увидеть каскад функций, вызываемых ядром, когда seccomp запускается системным вызовом? - person Maicake; 27.11.2019
comment
Bootlin (ссылка в ответе) должен позволить вам это сделать. На x86 вы проходите через do_syscall_64, syscall_trace_enter и __secure_computing. - person pchaigno; 27.11.2019
comment
спасибо, а как связаны do_syscall_64 и do_seccomp? Я имею в виду, что do_seccomp должен быть общей точкой входа как для системных вызовов prctl, так и для seccomp, запускает ли он do_syscall_64? - person Maicake; 27.11.2019
comment
Я ожидаю, что do_syscall_64 будет вызываться для всех системных вызовов x86-64, так что да, даже для seccomp и prctl, например, при установке нового фильтра seccomp. - person pchaigno; 27.11.2019