From: Kurt Kanzenbach <kurt@linutronix.de>
To: "David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>
Cc: Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Andrii Nakryiko <andriin@fb.com>,
Antoine Tenart <atenart@kernel.org>,
Eric Dumazet <edumazet@google.com>, Wei Wang <weiwan@google.com>,
Cong Wang <cong.wang@bytedance.com>,
Taehee Yoo <ap420073@gmail.com>,
Jesper Dangaard Brouer <brouer@redhat.com>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Willem de Bruijn <willemdebruijn.kernel@gmail.com>,
netdev@vger.kernel.org, Kurt Kanzenbach <kurt@linutronix.de>
Subject: [PATCH net v2] net: Reset MAC header for direct packet transmission
Date: Mon, 29 Mar 2021 09:17:16 +0200 [thread overview]
Message-ID: <20210329071716.12235-1-kurt@linutronix.de> (raw)
Reset MAC header in case of using dev_direct_xmit(), e.g. by specifying
PACKET_QDISC_BYPASS. This is needed, because other code such as the HSR layer
expects the MAC header to be correctly set.
This has been observed using the following setup:
|$ ip link add name hsr0 type hsr slave1 lan0 slave2 lan1 supervision 45 version 1
|$ ifconfig hsr0 up
|$ ./test hsr0
The test binary is using mmap'ed sockets and is specifying the
PACKET_QDISC_BYPASS socket option.
This patch resolves the following warning on a non-patched kernel:
|[ 112.725394] ------------[ cut here ]------------
|[ 112.731418] WARNING: CPU: 1 PID: 257 at net/hsr/hsr_forward.c:560 hsr_forward_skb+0x484/0x568
|[ 112.739962] net/hsr/hsr_forward.c:560: Malformed frame (port_src hsr0)
The MAC header is also reset unconditionally in case of PACKET_QDISC_BYPASS is
not used at the top of __dev_queue_xmit().
Fixes: d346a3fae3ff ("packet: introduce PACKET_QDISC_BYPASS socket option")
Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de>
---
Changes since v1:
* Move skb_reset_mac_header() to __dev_direct_xmit()
* Add Fixes tag
* Target net tree
Previous versions:
* https://lkml.kernel.org/netdev/20210326154835.21296-1-kurt@linutronix.de/
net/core/dev.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/core/dev.c b/net/core/dev.c
index b4c67a5be606..b5088223dc57 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4297,6 +4297,8 @@ int __dev_direct_xmit(struct sk_buff *skb, u16 queue_id)
!netif_carrier_ok(dev)))
goto drop;
+ skb_reset_mac_header(skb);
+
skb = validate_xmit_skb_list(skb, dev, &again);
if (skb != orig_skb)
goto drop;
--
2.20.1
next reply other threads:[~2021-03-29 7:18 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-29 7:17 Kurt Kanzenbach [this message]
2021-03-29 8:51 ` [PATCH net v2] net: Reset MAC header for direct packet transmission Eric Dumazet
2021-03-29 10:30 ` Kurt Kanzenbach
2021-03-29 12:13 ` Eric Dumazet
2021-03-29 12:41 ` Julian Wiedmann
2021-03-29 13:17 ` Eric Dumazet
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=20210329071716.12235-1-kurt@linutronix.de \
--to=kurt@linutronix.de \
--cc=andriin@fb.com \
--cc=ap420073@gmail.com \
--cc=ast@kernel.org \
--cc=atenart@kernel.org \
--cc=bigeasy@linutronix.de \
--cc=brouer@redhat.com \
--cc=cong.wang@bytedance.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=weiwan@google.com \
--cc=willemdebruijn.kernel@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).