linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH bpf-next] bpf/xdp: Can't detach BPF XDP prog if not exist
@ 2022-05-04  3:52 Zhengchao Shao
  2022-05-04 11:19 ` Toke Høiland-Jørgensen
  0 siblings, 1 reply; 4+ messages in thread
From: Zhengchao Shao @ 2022-05-04  3:52 UTC (permalink / raw)
  To: netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni
  Cc: ast, daniel, hawk, john.fastabend, andrii, kafai, songliubraving,
	yhs, kpsingh, bigeasy, imagedong, petrm, memxor, arnd,
	weiyongjun1, shaozhengchao, yuehaibing

if user sets nonexistent xdp_flags to detach xdp prog, kernel should
return err and tell user that detach failed with detail info.

Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
---
 net/core/dev.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/net/core/dev.c b/net/core/dev.c
index 8ed0272bf32f..8ed05ef62c68 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -9149,6 +9149,12 @@ static int dev_xdp_attach(struct net_device *dev, struct netlink_ext_ack *extack
 		return -EBUSY;
 	}
 
+	/* no BPF XDP prog attached */
+	if (!new_prog && !(dev->xdp_state[mode].prog)) {
+		NL_SET_ERR_MSG(extack, "no BPF XDP prog attached");
+		return -ENOENT;
+	}
+
 	/* don't allow if an upper device already has a program */
 	netdev_for_each_upper_dev_rcu(dev, upper, iter) {
 		if (dev_xdp_prog_count(upper) > 0) {
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH bpf-next] bpf/xdp: Can't detach BPF XDP prog if not exist
  2022-05-04  3:52 [PATCH bpf-next] bpf/xdp: Can't detach BPF XDP prog if not exist Zhengchao Shao
@ 2022-05-04 11:19 ` Toke Høiland-Jørgensen
  2022-05-05  8:21   ` 答复: " shaozhengchao
  0 siblings, 1 reply; 4+ messages in thread
From: Toke Høiland-Jørgensen @ 2022-05-04 11:19 UTC (permalink / raw)
  To: Zhengchao Shao, netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni
  Cc: ast, daniel, hawk, john.fastabend, andrii, kafai, songliubraving,
	yhs, kpsingh, bigeasy, imagedong, petrm, memxor, arnd,
	weiyongjun1, shaozhengchao, yuehaibing

Zhengchao Shao <shaozhengchao@huawei.com> writes:

> if user sets nonexistent xdp_flags to detach xdp prog, kernel should
> return err and tell user that detach failed with detail info.
>
> Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>

I kinda see your point, but this will change user-visible behaviour that
applications might be relying on, so I don't think we can make this
change at this stage. Why can't your application just query the link for
whether a program is attached?

-Toke


^ permalink raw reply	[flat|nested] 4+ messages in thread

* 答复: [PATCH bpf-next] bpf/xdp: Can't detach BPF XDP prog if not exist
  2022-05-04 11:19 ` Toke Høiland-Jørgensen
@ 2022-05-05  8:21   ` shaozhengchao
  2022-05-05 14:27     ` Toke Høiland-Jørgensen
  0 siblings, 1 reply; 4+ messages in thread
From: shaozhengchao @ 2022-05-05  8:21 UTC (permalink / raw)
  To: Toke Høiland-Jørgensen, netdev, linux-kernel, bpf,
	davem, edumazet, kuba, pabeni
  Cc: ast, daniel, hawk, john.fastabend, andrii, kafai, songliubraving,
	yhs, kpsingh, bigeasy, imagedong, petrm, memxor, arnd,
	weiyongjun (A),
	yuehaibing


-----邮件原件-----
发件人: Toke Høiland-Jørgensen [mailto:toke@redhat.com] 
发送时间: 2022年5月4日 19:20
收件人: shaozhengchao <shaozhengchao@huawei.com>; netdev@vger.kernel.org; linux-kernel@vger.kernel.org; bpf@vger.kernel.org; davem@davemloft.net; edumazet@google.com; kuba@kernel.org; pabeni@redhat.com
抄送: ast@kernel.org; daniel@iogearbox.net; hawk@kernel.org; john.fastabend@gmail.com; andrii@kernel.org; kafai@fb.com; songliubraving@fb.com; yhs@fb.com; kpsingh@kernel.org; bigeasy@linutronix.de; imagedong@tencent.com; petrm@nvidia.com; memxor@gmail.com; arnd@arndb.de; weiyongjun (A) <weiyongjun1@huawei.com>; shaozhengchao <shaozhengchao@huawei.com>; yuehaibing <yuehaibing@huawei.com>
主题: Re: [PATCH bpf-next] bpf/xdp: Can't detach BPF XDP prog if not exist

Zhengchao Shao <shaozhengchao@huawei.com> writes:

> if user sets nonexistent xdp_flags to detach xdp prog, kernel should 
> return err and tell user that detach failed with detail info.
>
> Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>

I kinda see your point, but this will change user-visible behaviour that applications might be relying on, so I don't think we can make this change at this stage. Why can't your application just query the link for whether a program is attached?

-Toke


Thank you for your reply. I wiil change sample application firstly. But if kernel does nothing and return 0, maybe user will think setup is OK, actually It failed. Is this acceptable?

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: 答复: [PATCH bpf-next] bpf/xdp: Can't detach BPF XDP prog if not exist
  2022-05-05  8:21   ` 答复: " shaozhengchao
@ 2022-05-05 14:27     ` Toke Høiland-Jørgensen
  0 siblings, 0 replies; 4+ messages in thread
From: Toke Høiland-Jørgensen @ 2022-05-05 14:27 UTC (permalink / raw)
  To: shaozhengchao, netdev, linux-kernel, bpf, davem, edumazet, kuba, pabeni
  Cc: ast, daniel, hawk, john.fastabend, andrii, kafai, songliubraving,
	yhs, kpsingh, bigeasy, imagedong, petrm, memxor, arnd,
	weiyongjun (A),
	yuehaibing

shaozhengchao <shaozhengchao@huawei.com> writes:

> Thank you for your reply. I wiil change sample application firstly.
> But if kernel does nothing and return 0, maybe user will think setup
> is OK, actually It failed. Is this acceptable?

Your patch was about detach; what has that got to do with "setup is OK"?

As for detaching, it's possible to write the application in a way that
it will always get a consistent result. There are basically two cases
when using netlink to detach an XDP program (bpf_link has its own
semantics, so setting that aside here):

1. The application just wants to turn off XDP entirely on the interface
   (e.g., 'ip link set dev XXX xdp off'). In this case you just send a
   RTM_SETLINK message with an IFLA_XDP_FD of -1, and if you don't get
   an error you can be sure that there is now no XDP program attached.
   Whether this was because there was already no program attached, or
   because you just detached it doesn't really matter in this case,
   since you're doing an unspecific detach anyway.

2. You attached a program earlier, and now you want to detach that (and
   only that) program. Or, equivalently, you queried the link and want
   to detach the program you know is attached there. In this case you
   send an RTM_SETLINK message with an IFLA_XDP_FD of -1 and an
   IFLA_XDP_EXPECTED_FD referring to the existing program. In this case
   you will get an error if that specific program is not in fact
   attached, whether because it was detached or swapped out in the
   meantime.

I don't see how case 1. is improved by returning ENOENT if there is no
program attached; if you care about detaching a specific program you'd
use case 2. anyway, and if you just want to check if a program is
attached, you'd do an RTM_GETLINK.

-Toke


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-05-05 14:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-04  3:52 [PATCH bpf-next] bpf/xdp: Can't detach BPF XDP prog if not exist Zhengchao Shao
2022-05-04 11:19 ` Toke Høiland-Jørgensen
2022-05-05  8:21   ` 答复: " shaozhengchao
2022-05-05 14:27     ` Toke Høiland-Jørgensen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).