net/core/filter.c и linux/bpf/verifier.c

Если я правильно понял, изначально верификатор и интерпретатор cBPF находились внутри net/core/fiter.c, например, sk_run_filter здесь https://elixir.bootlin.com/linux/v3.2/source/net/core/filter.c#L112 просто преобразуйте инструкции cBPF, применяя их к эмулируемым регистрам и прямо на sk_buff. Пока sk_chk_filter проверьте, все ли инструкции законны.

В настоящее время я видел, что в filter.c все еще есть функция bpf_check_classic, которая заменяет старую sk_chk_filter. После проверки делается попытка JIT программы, если это невозможно, то следующим шагом будет преобразование cBPF в eBPF.

ВОПРОСЫ:

1) где на самом деле вызов для запуска jitted/converted cbpf filter в последнем net/core/filter.c?

2) Какая последовательность вызовов функций приводит к выполнению программы cBPF как программы eBPF?


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


Ответы (1)


Насколько я знаю, программа cBPF используется только для seccomp-bpf и в качестве фильтров сокетов.

person pchaigno    schedule 07.09.2019