From: Eric Dumazet <edumazet@kernel.org>
To: "David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>
Cc: Willem de Bruijn <willemb@google.com>,
Simon Horman <horms@kernel.org>,
netdev@vger.kernel.org, Eric Dumazet <edumazet@kernel.org>,
Andrew Lunn <andrew+netdev@lunn.ch>,
Aaron Conole <aconole@redhat.com>,
Eelco Chaudron <echaudro@redhat.com>,
Ilya Maximets <i.maximets@ovn.org>,
Jamal Hadi Salim <jhs@mojatatu.com>,
Jiri Pirko <jiri@resnulli.us>,
dev@openvswitch.org,
Willem de Bruijn <willemdebruijn.kernel@gmail.com>,
Ren Wei <weir@nebusec.ai>, Vega <vega@nebusec.ai>
Subject: [PATCH net 2/5] loopback: use eth_type_trans_careful()
Date: Tue, 27 Oct 2026 09:26:01 +0100 [thread overview]
Message-ID: <20261027082604.1485903-3-edumazet@kernel.org> (raw)
In-Reply-To: <20261027082604.1485903-1-edumazet@kernel.org>
tc egress actions can leave an skb with fewer than ETH_HLEN bytes in
its linear part. loopback_xmit() then crashes in eth_type_trans():
tc qdisc add dev lo clsact
tc filter add dev lo egress matchall action vlan pop_eth
# AF_PACKET SOCK_RAW: eth / eth / 8192 bytes of payload
kernel BUG at include/linux/skbuff.h:2839!
RIP: 0010:eth_type_trans (include/linux/etherdevice.h:635 net/ethernet/eth.c:163)
Call Trace:
loopback_xmit (drivers/net/loopback.c:87)
dev_hard_start_xmit (include/linux/netdevice.h:5455 include/linux/netdevice.h:5464 net/core/dev.c:4057 net/core/dev.c:4073)
__dev_queue_xmit (net/core/dev.c:5066)
packet_sendmsg (net/packet/af_packet.c:3157 net/packet/af_packet.c:3189)
The same happens with "action ife decode" on lo egress.
Use eth_type_trans_careful(), and drop the packet if the Ethernet
header can not be pulled.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Reported-by: Vega <vega@nebusec.ai>
Link: https://lore.kernel.org/netdev/20261005052249.1914367-2-weir@nebusec.ai/
Signed-off-by: Eric Dumazet <edumazet@kernel.org>
---
drivers/net/loopback.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c
index 55ecd5ebac0f21b61b64373c429a6f9ba5d15c8e..8a6cb34e6b5f02c88dfb0c6bf112068c4f51fec1 100644
--- a/drivers/net/loopback.c
+++ b/drivers/net/loopback.c
@@ -70,6 +70,7 @@ EXPORT_SYMBOL(blackhole_netdev);
static netdev_tx_t loopback_xmit(struct sk_buff *skb,
struct net_device *dev)
{
+ enum skb_drop_reason reason;
int len;
skb_tx_timestamp(skb);
@@ -84,7 +85,12 @@ static netdev_tx_t loopback_xmit(struct sk_buff *skb,
*/
skb_dst_force(skb);
- skb->protocol = eth_type_trans(skb, dev);
+ reason = eth_type_trans_careful(skb, dev);
+ if (unlikely(reason)) {
+ dev_core_stats_tx_dropped_inc(dev);
+ kfree_skb_reason(skb, reason);
+ return NETDEV_TX_OK;
+ }
len = skb->len;
if (likely(__netif_rx(skb) == NET_RX_SUCCESS))
--
2.53.0
next prev parent reply other threads:[~2026-10-27 8:26 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-27 8:25 [PATCH net 0/5] net: fix eth_type_trans() crashes on skbs coming from the stack Eric Dumazet
2026-10-27 8:26 ` [PATCH net 1/5] net: add eth_type_trans_careful() Eric Dumazet
2026-10-27 13:51 ` Aaron Conole
2026-10-27 15:02 ` Willem de Bruijn
2026-10-27 8:26 ` Eric Dumazet [this message]
2026-10-27 8:26 ` [PATCH net 3/5] net: use eth_type_trans_careful() in __dev_forward_skb2() Eric Dumazet
2026-10-27 8:26 ` [PATCH net 4/5] openvswitch: use eth_type_trans_careful() in internal_dev_recv() Eric Dumazet
2026-10-27 13:50 ` Aaron Conole
2026-10-27 8:26 ` [PATCH net 5/5] net/sched: act_ife: do not consume the inner header on egress Eric Dumazet
2026-10-27 9:17 ` [PATCH net 0/5] net: fix eth_type_trans() crashes on skbs coming from the stack Jamal Hadi Salim
2026-10-27 9:51 ` Eric Dumazet
2026-10-27 13:07 ` Jamal Hadi Salim
2026-10-27 14:00 ` Aaron Conole
2026-10-27 14:33 ` Eric Dumazet
2026-10-27 14:40 ` Willem de Bruijn
2026-10-27 15:49 ` Eric Dumazet
2026-10-27 19:48 ` Jamal Hadi Salim
2026-10-27 20:34 ` Eric Dumazet
2026-10-27 21:20 ` Jamal Hadi Salim
2026-10-27 21:25 ` Jakub Kicinski
2026-10-28 5:02 ` 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=20261027082604.1485903-3-edumazet@kernel.org \
--to=edumazet@kernel.org \
--cc=aconole@redhat.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=dev@openvswitch.org \
--cc=echaudro@redhat.com \
--cc=horms@kernel.org \
--cc=i.maximets@ovn.org \
--cc=jhs@mojatatu.com \
--cc=jiri@resnulli.us \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=vega@nebusec.ai \
--cc=weir@nebusec.ai \
--cc=willemb@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 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.