diff mbox series

[bpf,v2] restore behaviour of CAP_SYS_ADMIN allowing the loading of networking bpf programs

Message ID 20200620212616.93894-1-zenczykowski@gmail.com
State New
Headers show
Series [bpf,v2] restore behaviour of CAP_SYS_ADMIN allowing the loading of networking bpf programs | expand

Commit Message

Maciej Żenczykowski June 20, 2020, 9:26 p.m. UTC
From: Maciej Żenczykowski <maze@google.com>

This is a fix for a regression introduced in 5.8-rc1 by:
  commit 2c78ee898d8f10ae6fb2fa23a3fbaec96b1b7366
  'bpf: Implement CAP_BPF'

Before the above commit it was possible to load network bpf programs
with just the CAP_SYS_ADMIN privilege.

The Android bpfloader happens to run in such a configuration (it has
SYS_ADMIN but not NET_ADMIN) and creates maps and loads bpf programs
for later use by Android's netd (which has NET_ADMIN but not SYS_ADMIN).

Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Reported-by: John Stultz <john.stultz@linaro.org>
Fixes: 2c78ee898d8f ("bpf: Implement CAP_BPF")
Signed-off-by: Maciej Żenczykowski <maze@google.com>
---
 kernel/bpf/syscall.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

John Stultz July 6, 2020, 8:11 p.m. UTC | #1
On Tue, Jun 23, 2020 at 5:54 PM Alexei Starovoitov
<alexei.starovoitov@gmail.com> wrote:
> On Mon, Jun 22, 2020 at 12:44 PM John Stultz <john.stultz@linaro.org> wrote:

> > On Sat, Jun 20, 2020 at 2:26 PM Maciej Żenczykowski

> > <zenczykowski@gmail.com> wrote:

> > > From: Maciej Żenczykowski <maze@google.com>

> > >

> > > This is a fix for a regression introduced in 5.8-rc1 by:

> > >   commit 2c78ee898d8f10ae6fb2fa23a3fbaec96b1b7366

> > >   'bpf: Implement CAP_BPF'

> > >

> > > Before the above commit it was possible to load network bpf programs

> > > with just the CAP_SYS_ADMIN privilege.

> > >

> > > The Android bpfloader happens to run in such a configuration (it has

> > > SYS_ADMIN but not NET_ADMIN) and creates maps and loads bpf programs

> > > for later use by Android's netd (which has NET_ADMIN but not SYS_ADMIN).

> > >

> > > Cc: Alexei Starovoitov <ast@kernel.org>

> > > Cc: Daniel Borkmann <daniel@iogearbox.net>

> > > Reported-by: John Stultz <john.stultz@linaro.org>

> > > Fixes: 2c78ee898d8f ("bpf: Implement CAP_BPF")

> > > Signed-off-by: Maciej Żenczykowski <maze@google.com>

> >

> > Thanks so much for helping narrow this regression down and submitting this fix!

> > It's much appreciated!

> >

> > Tested-by: John Stultz <john.stultz@linaro.org>

>

> Applied to bpf tree. Thanks


Hey all,
  Just wanted to follow up on this as I've not seen the regression fix
land in 5.8-rc4 yet? Is it still pending, or did it fall through a
gap?

thanks
-john
Daniel Borkmann July 6, 2020, 8:15 p.m. UTC | #2
On 7/6/20 10:11 PM, John Stultz wrote:
> On Tue, Jun 23, 2020 at 5:54 PM Alexei Starovoitov

> <alexei.starovoitov@gmail.com> wrote:

>> On Mon, Jun 22, 2020 at 12:44 PM John Stultz <john.stultz@linaro.org> wrote:

>>> On Sat, Jun 20, 2020 at 2:26 PM Maciej Żenczykowski

>>> <zenczykowski@gmail.com> wrote:

>>>> From: Maciej Żenczykowski <maze@google.com>

>>>>

>>>> This is a fix for a regression introduced in 5.8-rc1 by:

>>>>    commit 2c78ee898d8f10ae6fb2fa23a3fbaec96b1b7366

>>>>    'bpf: Implement CAP_BPF'

>>>>

>>>> Before the above commit it was possible to load network bpf programs

>>>> with just the CAP_SYS_ADMIN privilege.

>>>>

>>>> The Android bpfloader happens to run in such a configuration (it has

>>>> SYS_ADMIN but not NET_ADMIN) and creates maps and loads bpf programs

>>>> for later use by Android's netd (which has NET_ADMIN but not SYS_ADMIN).

>>>>

>>>> Cc: Alexei Starovoitov <ast@kernel.org>

>>>> Cc: Daniel Borkmann <daniel@iogearbox.net>

>>>> Reported-by: John Stultz <john.stultz@linaro.org>

>>>> Fixes: 2c78ee898d8f ("bpf: Implement CAP_BPF")

>>>> Signed-off-by: Maciej Żenczykowski <maze@google.com>

>>>

>>> Thanks so much for helping narrow this regression down and submitting this fix!

>>> It's much appreciated!

>>>

>>> Tested-by: John Stultz <john.stultz@linaro.org>

>>

>> Applied to bpf tree. Thanks

> 

> Hey all,

>    Just wanted to follow up on this as I've not seen the regression fix

> land in 5.8-rc4 yet? Is it still pending, or did it fall through a

> gap?


No, it's in DaveM's -net tree currently, will go to Linus' tree on his next pull req:

   https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/commit/?id=b338cb921e6739ff59ce32f43342779fe5ffa732
John Stultz July 6, 2020, 8:36 p.m. UTC | #3
On Mon, Jul 6, 2020 at 1:15 PM Daniel Borkmann <daniel@iogearbox.net> wrote:
> On 7/6/20 10:11 PM, John Stultz wrote:

> >    Just wanted to follow up on this as I've not seen the regression fix

> > land in 5.8-rc4 yet? Is it still pending, or did it fall through a

> > gap?

>

> No, it's in DaveM's -net tree currently, will go to Linus' tree on his next pull req:

>

>    https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/commit/?id=b338cb921e6739ff59ce32f43342779fe5ffa732


Great! Much appreciated! Sorry to nag!
-john
diff mbox series

Patch

diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
index 8da159936bab..7d946435587d 100644
--- a/kernel/bpf/syscall.c
+++ b/kernel/bpf/syscall.c
@@ -2121,7 +2121,7 @@  static int bpf_prog_load(union bpf_attr *attr, union bpf_attr __user *uattr)
 	    !bpf_capable())
 		return -EPERM;
 
-	if (is_net_admin_prog_type(type) && !capable(CAP_NET_ADMIN))
+	if (is_net_admin_prog_type(type) && !capable(CAP_NET_ADMIN) && !capable(CAP_SYS_ADMIN))
 		return -EPERM;
 	if (is_perfmon_prog_type(type) && !perfmon_capable())
 		return -EPERM;