• Lorenz Bauer's avatar
    bpf: cgroup: Allow multi-attach program to replace itself · 248e00ac
    Lorenz Bauer authored
    When using BPF_PROG_ATTACH to attach a program to a cgroup in
    BPF_F_ALLOW_MULTI mode, it is not possible to replace a program
    with itself. This is because the check for duplicate programs
    doesn't take the replacement program into account.
    
    Replacing a program with itself might seem weird, but it has
    some uses: first, it allows resetting the associated cgroup storage.
    Second, it makes the API consistent with the non-ALLOW_MULTI usage,
    where it is possible to replace a program with itself. Third, it
    aligns BPF_PROG_ATTACH with bpf_link, where replacing itself is
    also supported.
    
    Sice this code has been refactored a few times this change will
    only apply to v5.7 and later. Adjustments could be made to
    commit 1020c1f2 ("bpf: Simplify __cgroup_bpf_attach") and
    commit d7bf2c10 ("bpf: allocate cgroup storage entries on attaching bpf programs")
    as well as commit 324bda9e ("bpf: multi program support for cgroup+bpf")
    
    Fixes: af6eea57 ("bpf: Implement bpf_link-based cgroup BPF program attachment")
    Signed-off-by: default avatarLorenz Bauer <lmb@cloudflare.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20200608162202.94002-1-lmb@cloudflare.com
    248e00ac
cgroup.c 47.3 KB