netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ido Schimmel <idosch@idosch.org>
To: Daniel Borkmann <daniel@iogearbox.net>
Cc: kuba@kernel.org, netdev@vger.kernel.org, bpf@vger.kernel.org,
	jhs@mojatatu.com, victor@mojatatu.com, martin.lau@linux.dev,
	dxu@dxuuu.xyz, xiyou.wangcong@gmail.com
Subject: Re: [PATCH net-next v2 1/2] net, sched: Make tc-related drop reason more flexible
Date: Wed, 25 Oct 2023 11:59:35 +0300	[thread overview]
Message-ID: <ZTjY959R+AFXf3Xy@shredder> (raw)
In-Reply-To: <20231009092655.22025-1-daniel@iogearbox.net>

On Mon, Oct 09, 2023 at 11:26:54AM +0200, Daniel Borkmann wrote:
> diff --git a/net/core/dev.c b/net/core/dev.c
> index 606a366cc209..664426285fa3 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -3910,7 +3910,8 @@ EXPORT_SYMBOL_GPL(netdev_xmit_skip_txqueue);
>  #endif /* CONFIG_NET_EGRESS */
>  
>  #ifdef CONFIG_NET_XGRESS
> -static int tc_run(struct tcx_entry *entry, struct sk_buff *skb)
> +static int tc_run(struct tcx_entry *entry, struct sk_buff *skb,
> +		  enum skb_drop_reason *drop_reason)
>  {
>  	int ret = TC_ACT_UNSPEC;
>  #ifdef CONFIG_NET_CLS_ACT
> @@ -3922,12 +3923,14 @@ static int tc_run(struct tcx_entry *entry, struct sk_buff *skb)
>  
>  	tc_skb_cb(skb)->mru = 0;
>  	tc_skb_cb(skb)->post_ct = false;
> +	res.drop_reason = *drop_reason;
>  
>  	mini_qdisc_bstats_cpu_update(miniq, skb);
>  	ret = tcf_classify(skb, miniq->block, miniq->filter_list, &res, false);
>  	/* Only tcf related quirks below. */
>  	switch (ret) {
>  	case TC_ACT_SHOT:
> +		*drop_reason = res.drop_reason;

Daniel,

Getting the following splat [1] with CONFIG_DEBUG_NET=y and this
reproducer [2]. Problem seems to be that classifiers clear 'struct
tcf_result::drop_reason', thereby triggering the warning in
__kfree_skb_reason() due to reason being 'SKB_NOT_DROPPED_YET' (0).

Fixed by maintaining the original drop reason if the one returned from
tcf_classify() is 'SKB_NOT_DROPPED_YET' [3]. I can submit this fix
unless you have a better idea.

Thanks

[1]
WARNING: CPU: 0 PID: 181 at net/core/skbuff.c:1082 kfree_skb_reason+0x38/0x130
Modules linked in:
CPU: 0 PID: 181 Comm: mausezahn Not tainted 6.6.0-rc6-custom-ge43e6d9582e0 #682
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-1.fc37 04/01/2014
RIP: 0010:kfree_skb_reason+0x38/0x130
[...]
Call Trace:
 <IRQ>
 __netif_receive_skb_core.constprop.0+0x837/0xdb0
 __netif_receive_skb_one_core+0x3c/0x70
 process_backlog+0x95/0x130
 __napi_poll+0x25/0x1b0
 net_rx_action+0x29b/0x310
 __do_softirq+0xc0/0x29b
 do_softirq+0x43/0x60
 </IRQ>

[2]
#!/bin/bash

ip link add name veth0 type veth peer name veth1
ip link set dev veth0 up
ip link set dev veth1 up
tc qdisc add dev veth1 clsact
tc filter add dev veth1 ingress pref 1 proto all flower dst_mac 00:11:22:33:44:55 action drop
mausezahn veth0 -a own -b 00:11:22:33:44:55 -q -c 1

[3]
diff --git a/net/core/dev.c b/net/core/dev.c
index a37a932a3e14..abd0b13f3f17 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3929,7 +3929,8 @@ static int tc_run(struct tcx_entry *entry, struct sk_buff *skb,
        /* Only tcf related quirks below. */
        switch (ret) {
        case TC_ACT_SHOT:
-               *drop_reason = res.drop_reason;
+               if (res.drop_reason != SKB_NOT_DROPPED_YET)
+                       *drop_reason = res.drop_reason;
                mini_qdisc_qstats_cpu_drop(miniq);
                break;
        case TC_ACT_OK:

  parent reply	other threads:[~2023-10-25  8:59 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-09  9:26 [PATCH net-next v2 1/2] net, sched: Make tc-related drop reason more flexible Daniel Borkmann
2023-10-09  9:26 ` [PATCH net-next v2 2/2] net, sched: Add tcf_set_drop_reason for {__,}tcf_classify Daniel Borkmann
2023-10-09 14:03 ` [PATCH net-next v2 1/2] net, sched: Make tc-related drop reason more flexible Jamal Hadi Salim
2023-10-13 21:17 ` Jakub Kicinski
2023-10-16 20:10 ` patchwork-bot+netdevbpf
2023-10-25  8:59 ` Ido Schimmel [this message]
2023-10-25 10:01   ` Daniel Borkmann
2023-10-25 11:05     ` Jamal Hadi Salim
2023-10-25 11:52       ` Daniel Borkmann
2023-10-25 13:21         ` Jamal Hadi Salim
2023-10-25 13:46           ` Daniel Borkmann
2023-10-25 23:13             ` Jamal Hadi Salim
2023-10-27 14:01               ` Daniel Borkmann
2023-10-27 17:37                 ` Jamal Hadi Salim
2023-10-27 18:29                   ` Daniel Borkmann
2023-10-25 13:53         ` Jakub Kicinski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZTjY959R+AFXf3Xy@shredder \
    --to=idosch@idosch.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=dxu@dxuuu.xyz \
    --cc=jhs@mojatatu.com \
    --cc=kuba@kernel.org \
    --cc=martin.lau@linux.dev \
    --cc=netdev@vger.kernel.org \
    --cc=victor@mojatatu.com \
    --cc=xiyou.wangcong@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).