From: Peilin Ye <yepeilin.cs@gmail.com>
To: Jakub Kicinski <kuba@kernel.org>
Cc: "David S. Miller" <davem@davemloft.net>,
Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>,
David Ahern <dsahern@kernel.org>,
Peilin Ye <peilin.ye@bytedance.com>,
Cong Wang <cong.wang@bytedance.com>,
Feng Zhou <zhoufeng.zf@bytedance.com>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH net 2/2] ip6_gre: Fix skb_under_panic in __gre6_xmit()
Date: Fri, 15 Apr 2022 23:56:33 -0700 [thread overview]
Message-ID: <20220416065633.GA10882@bytedance> (raw)
In-Reply-To: <20220415191133.0597a79a@kernel.org>
On Fri, Apr 15, 2022 at 07:11:33PM +0200, Jakub Kicinski wrote:
> On Thu, 14 Apr 2022 13:08:54 -0700 Peilin Ye wrote:
> > > We should also reject using SEQ with collect_md, but that's a separate
> > > issue.
> >
> > Could you explain this a bit more? It seems that commit 77a5196a804e
> > ("gre: add sequence number for collect md mode.") added this
> > intentionally.
>
> Interesting. Maybe a better way of dealing with the problem would be
> rejecting SEQ if it's not set on the device itself.
According to ip-link(8), the 'external' option is mutually exclusive
with the '[o]seq' option. In other words, a collect_md mode IP6GRETAP
device should always have the TUNNEL_SEQ flag off in its
'tunnel->parms.o_flags'.
(However, I just tried:
$ ip link add dev ip6gretap11 type ip6gretap oseq external
^^^^ ^^^^^^^^
...and my 'ip' executed it with no error. I will take a closer look at
iproute2 later; maybe it's undefined behavior...)
How about:
1. If 'external', then 'oseq' means "always turn off NETIF_F_LLTX, so
it's okay to set TUNNEL_SEQ in e.g. eBPF";
2. Otherwise, if 'external' but NOT 'oseq', then whenever we see a
TUNNEL_SEQ in skb's tunnel info, we do something like WARN_ONCE() then
return -EINVAL.
?
> When the device is set up without the SEQ bit enabled it disables Tx
> locking (look for LLTX). This means that multiple CPUs can try to do
> the tunnel->o_seqno++ in parallel. Not catastrophic but racy for sure.
Thanks for the explanation! At first glance, I was wondering why don't
we make 'o_seqno' atomic until I found commit b790e01aee74 ("ip_gre:
lockless xmit"). I quote:
"""
Even using an atomic_t o_seq, we would increase chance for packets being
out of order at receiver.
"""
I don't fully understand this out-of-order yet, but it seems that making
'o_seqno' atomic is not an option?
Thanks,
Peilin Ye
next prev parent reply other threads:[~2022-04-16 6:56 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-11 22:32 [PATCH net 1/2] ip6_gre: Avoid updating tunnel->tun_hlen in __gre6_xmit() Peilin Ye
2022-04-11 22:33 ` [PATCH net 2/2] ip6_gre: Fix skb_under_panic " Peilin Ye
2022-04-14 11:14 ` Jakub Kicinski
2022-04-14 20:08 ` Peilin Ye
2022-04-15 17:11 ` Jakub Kicinski
2022-04-16 6:56 ` Peilin Ye [this message]
2022-04-16 7:33 ` Jakub Kicinski
2022-04-16 8:16 ` Peilin Ye
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=20220416065633.GA10882@bytedance \
--to=yepeilin.cs@gmail.com \
--cc=cong.wang@bytedance.com \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=peilin.ye@bytedance.com \
--cc=yoshfuji@linux-ipv6.org \
--cc=zhoufeng.zf@bytedance.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.