Re: [PATCH v3 bpf-next 0/4] Add support for cgroup bpf_link
From: Andrii Nakryiko <hidden>
Date: 2020-03-31 03:54:50
Also in:
bpf
On Mon, Mar 30, 2020 at 5:57 PM David Ahern [off-list ref] wrote:
On 3/30/20 6:32 PM, Alexei Starovoitov wrote:quoted
quoted
This is not a large feature, and there is no reason for CREATE/UPDATE - a mere 4 patch set - to go in without something as essential as the QUERY for observability.As I said 'bpftool cgroup' covers it. Observability is not reduced in any way.You want a feature where a process can prevent another from installing a program on a cgroup. How do I learn which process is holding the bpf_link reference and preventing me from installing a program? Unless I have missed some recent change that is not currently covered by bpftool cgroup, and there is no way reading kernel code will tell me. ### To quote Lorenz from an earlier response: "However, this behaviour concerns me. It's like Windows not letting you delete a file while an application has it opened, which just leads to randomly killing programs until you find the right one. It's frustrating and counter productive. You're taking power away from the operator. In your deployment scenario this might make sense, but I think it's a really bad model in general. If I am privileged I need to be able to exercise that privilege." ### That is my point. You are restricting what root can do and people will not want to resort to killing random processes trying to find the one holding a reference. This is an essential missing piece and should go in at the same time as this set.
No need to kill random processes, you can kill only those that hold bpf_link FD. You can find them using drgn tool with script like [0]. It will give you quite a lot of information already, but it should also find pinned bpf_links, I haven't added it yet. Found total 11 bpf_links. ------------------------------------------------- type: tracing prog: 'test1' id:223 type:BPF_PROG_TYPE_TRACING pids: 449027 ------------------------------------------------- type: tracing prog: 'test2' id:224 type:BPF_PROG_TYPE_TRACING pids: 449027 ------------------------------------------------- type: tracing prog: 'test3' id:225 type:BPF_PROG_TYPE_TRACING pids: 449027 ------------------------------------------------- type: tracing prog: 'test4' id:226 type:BPF_PROG_TYPE_TRACING pids: 449027 ------------------------------------------------- type: tracing prog: 'test5' id:227 type:BPF_PROG_TYPE_TRACING pids: 449027 ------------------------------------------------- type: tracing prog: 'test6' id:228 type:BPF_PROG_TYPE_TRACING pids: 449027 ------------------------------------------------- type: raw_tp prog: '' id:237 type:BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE tp: bpf_test_finish pids: 449462 ------------------------------------------------- type: cgroup prog: 'egress' id:242 type:BPF_PROG_TYPE_CGROUP_SKB attach: BPF_CGROUP_INET_EGRESS cgroup: /cgroup-test-work-dir/cg1 pids: 449881 ------------------------------------------------- type: cgroup prog: 'egress' id:242 type:BPF_PROG_TYPE_CGROUP_SKB attach: BPF_CGROUP_INET_EGRESS cgroup: /cgroup-test-work-dir/cg1/cg2 pids: 449881 ------------------------------------------------- type: cgroup prog: 'egress' id:242 type:BPF_PROG_TYPE_CGROUP_SKB attach: BPF_CGROUP_INET_EGRESS cgroup: /cgroup-test-work-dir/cg1/cg2/cg3 pids: 449881 ------------------------------------------------- type: cgroup prog: 'egress' id:242 type:BPF_PROG_TYPE_CGROUP_SKB attach: BPF_CGROUP_INET_EGRESS cgroup: /cgroup-test-work-dir/cg1/cg2/cg3/cg4 pids: 449881 ------------------------------------------------- [0] https://gist.github.com/anakryiko/562dff8e39c619a5ee247bb55aa057c7