Skip to content

Commit

Permalink
bpf: Refuse unused attributes in bpf_prog_{attach,detach}
Browse files Browse the repository at this point in the history
The recently added tcx attachment extended the BPF uapi for attaching
and detaching by a couple of fields. Those fields are currently only
supported for tcx, other types like cgroups and flow dissector silently
ignore the new flags.

This is problematic once we extend bpf_mprog to older attachment types,
since it's hard to figure out whether the syscall really was successful
if the kernel silently ignores non-zero values.

Explicitly reject non-zero flags for attachment types which don't use
bpf_mprog yet.

Fixes: e420bed ("bpf: Add fd-based tcx multi-prog infra with link support")
Signed-off-by: Lorenz Bauer <lmb@isovalent.com>
Co-developed-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
  • Loading branch information
lmb authored and borkmann committed Oct 5, 2023
1 parent f5fef92 commit 25db9f9
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions kernel/bpf/syscall.c
Original file line number Diff line number Diff line change
Expand Up @@ -3796,7 +3796,6 @@ static int bpf_prog_attach(const union bpf_attr *attr)
{
enum bpf_prog_type ptype;
struct bpf_prog *prog;
u32 mask;
int ret;

if (CHECK_ATTR(BPF_PROG_ATTACH))
Expand All @@ -3805,10 +3804,16 @@ static int bpf_prog_attach(const union bpf_attr *attr)
ptype = attach_type_to_prog_type(attr->attach_type);
if (ptype == BPF_PROG_TYPE_UNSPEC)
return -EINVAL;
mask = bpf_mprog_supported(ptype) ?
BPF_F_ATTACH_MASK_MPROG : BPF_F_ATTACH_MASK_BASE;
if (attr->attach_flags & ~mask)
return -EINVAL;
if (bpf_mprog_supported(ptype)) {
if (attr->attach_flags & ~BPF_F_ATTACH_MASK_MPROG)
return -EINVAL;
} else {
if (attr->attach_flags & ~BPF_F_ATTACH_MASK_BASE)
return -EINVAL;
if (attr->relative_fd ||
attr->expected_revision)
return -EINVAL;
}

prog = bpf_prog_get_type(attr->attach_bpf_fd, ptype);
if (IS_ERR(prog))
Expand Down Expand Up @@ -3878,6 +3883,10 @@ static int bpf_prog_detach(const union bpf_attr *attr)
if (IS_ERR(prog))
return PTR_ERR(prog);
}
} else if (attr->attach_flags ||
attr->relative_fd ||
attr->expected_revision) {
return -EINVAL;
}

switch (ptype) {
Expand Down

0 comments on commit 25db9f9

Please sign in to comment.