Невозможно присоединить программу BPF_PROG_TYPE_SOCK_OPS, используя тип подключения BPF_CGROUP_SOCK_OPS - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь присоединить следующую группу BPF к группе:

SEC("cgroup/sock_ops/sock_map_update")
int sock_ops_sock_map_update(struct bpf_sock_ops *ops)
{
    bpf_debug("sock_ops\n");

    int op;

    // retrieve operation
    op = (int) ops->op;
    bpf_debug("BPF command: %d\n", op);

    // update sockmap   
    if (op == BPF_SOCK_OPS_TCP_CONNECT_CB) {
        uint32_t idx = 1;
        bpf_sock_map_update(ops, &sock_ops, &idx, BPF_ANY);
    }

    return 1;
}

Для краткости я включил только ту часть программы, которая, на мой взгляд, уместна.Я успешно загрузил ее как программу BPF_PROG_TYPE_SOCK_OPS и пытаюсь присоединить ее к cgroup, используя тип подключения BPF_CGROUP_SOCK_OPS, но я получаю operation not permitted.

Есть ли что-то очевидное, что мне не хватает?

РЕДАКТИРОВАТЬ: Интересно, что я могу успешно прикрепить свою программу к /sys/fs/cgroup/unified, где

$ findmnt cgroup -t cgroup2
TARGET                 SOURCE FSTYPE  OPTIONS
/sys/fs/cgroup/unified cgroup cgroup2 rw,nosuid,nodev,noexec,relatime

, и я могу видеть строки отладки из моей программы BPF с cat /sys/kernel/debug/tracing/trace_pipe, но когда я делаю mkdir -m 0777 /sys/fs/cgroup/unified/testи попробуйте присоединить мою программу к /sys/fs/cgroup/unified/test таким же образом, как я снова получаю operation not permitted.

РЕДАКТИРОВАТЬ 2: Это не работает только в контейнере (Docker), но я не уверен, чтопервопричина

...