загрузить сгенерированный код seccomp_export_bpf в ядро

http://man7.org/linux/man-pages/man3/seccomp_export_bpf.3.html как я могу загрузить сгенерированный код в ядро? Каковы возможные варианты использования этой функции?


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


Ответы (1)


Как я могу загрузить сгенерированный код в ядро?

Если вы используете seccomp_export_bpf(const scmp_filter_ctx ctx, int fd), то у вас уже есть инициализированный объект scmp_filter_ctx, ctx, и в этом случае вы можете просто сделать:

int rc = seccomp_load(ctx);

Нет необходимости использовать seccomp_export_bpf для загрузки фильтра в ядре.

Каковы возможные варианты использования этой функции?

Я предполагаю, что seccomp_export_bpf в основном полезен, когда вы хотите сохранить копию своего фильтра на диске для будущего использования. Например, вы можете сделать (из примера страницы руководства ):

filter_fd = open("/tmp/seccomp_filter.bpf", O_WRONLY);
if (filter_fd == -1) {
     rc = -errno;
     goto out;
}

rc = seccomp_export_bpf(ctx, filter_fd);

Чтобы затем загрузить этот экспортированный фильтр в ядро, вы можете сделать:

char filter[4096];
int length = read(0, filter, 4096);
if (length < 0) {
    goto out;
}
struct sock_fprog bpf_prog = {
    .len = length / sizeof(struct sock_filter),
    .filter = filter,
};
rc = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &bpf_prog);
person pchaigno    schedule 12.08.2019
comment
Привет, я думаю, что это должно быть .len = length / sizeof(struct sock_filter), и в строке 2 есть синтаксическая ошибка. - person Shubham Johri; 03.07.2021
comment
Исправлено. Большое спасибо! - person pchaigno; 05.07.2021