lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <CAEf4BzbRxwbJQFZHvB-hBj1A+364Jua4KJgkL+D_9PKsj7jKSg@mail.gmail.com> Date: Fri, 7 Jan 2022 13:17:39 -0800 From: Andrii Nakryiko <andrii.nakryiko@...il.com> To: Toke Høiland-Jørgensen <toke@...hat.com> Cc: Alexei Starovoitov <ast@...nel.org>, Daniel Borkmann <daniel@...earbox.net>, "David S. Miller" <davem@...emloft.net>, Jakub Kicinski <kuba@...nel.org>, Jesper Dangaard Brouer <hawk@...nel.org>, John Fastabend <john.fastabend@...il.com>, Andrii Nakryiko <andrii@...nel.org>, Martin KaFai Lau <kafai@...com>, Song Liu <songliubraving@...com>, Yonghong Song <yhs@...com>, KP Singh <kpsingh@...nel.org>, syzbot+983941aa85af6ded1fd9@...kaller.appspotmail.com, Networking <netdev@...r.kernel.org>, bpf <bpf@...r.kernel.org> Subject: Re: [PATCH bpf 1/2] xdp: check prog type before updating BPF link On Fri, Jan 7, 2022 at 10:31 AM Toke Høiland-Jørgensen <toke@...hat.com> wrote: > > The bpf_xdp_link_update() function didn't check the program type before > updating the program, which made it possible to install any program type as > an XDP program, which is obviously not good. Syzbot managed to trigger this > by swapping in an LWT program on the XDP hook which would crash in a helper > call. > > Fix this by adding a check and bailing out if the types don't match. > > Fixes: 026a4c28e1db ("bpf, xdp: Implement LINK_UPDATE for BPF XDP link") > Reported-by: syzbot+983941aa85af6ded1fd9@...kaller.appspotmail.com > Signed-off-by: Toke Høiland-Jørgensen <toke@...hat.com> > --- The fix looks good to me, thanks. I'd love it if this was done generically in link_update, but each link type has its own locking schema for link->prog, so I didn't figure out a way to do this in a centralized way. Acked-by: Andrii Nakryiko <andrii@...nel.org> > net/core/dev.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/net/core/dev.c b/net/core/dev.c > index c4708e2487fb..2078d04c6482 100644 > --- a/net/core/dev.c > +++ b/net/core/dev.c > @@ -9656,6 +9656,12 @@ static int bpf_xdp_link_update(struct bpf_link *link, struct bpf_prog *new_prog, > goto out_unlock; > } > old_prog = link->prog; > + if (old_prog->type != new_prog->type || > + old_prog->expected_attach_type != new_prog->expected_attach_type) { > + err = -EINVAL; > + goto out_unlock; > + } > + > if (old_prog == new_prog) { > /* no-op, don't disturb drivers */ > bpf_prog_put(new_prog); > -- > 2.34.1 >
Powered by blists - more mailing lists