Commit 8156210d authored by Eric Dumazet's avatar Eric Dumazet Committed by Jakub Kicinski
Browse files

ax25: properly unshare skbs in ax25_kiss_rcv()



Bernard Pidoux reported a regression apparently caused by commit
c353e898 ("net: introduce per netns packet chains").

skb->dev becomes NULL and we crash in __netif_receive_skb_core().

Before above commit, different kind of bugs or corruptions could happen
without a major crash.

But the root cause is that ax25_kiss_rcv() can queue/mangle input skb
without checking if this skb is shared or not.

Many thanks to Bernard Pidoux for his help, diagnosis and tests.

We had a similar issue years ago fixed with commit 7aaed57c
("phonet: properly unshare skbs in phonet_rcv()").

Fixes: 1da177e4 ("Linux-2.6.12-rc2")
Reported-by: default avatarBernard Pidoux <f6bvp@free.fr>
Closes: https://lore.kernel.org/netdev/1713f383-c538-4918-bc64-13b3288cd542@free.fr/


Tested-by: default avatarBernard Pidoux <f6bvp@free.fr>
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Cc: Joerg Reuter <jreuter@yaina.de>
Cc: David Ranch <dranch@trinnet.net>
Cc: Folkert van Heusden <folkert@vanheusden.com>
Reviewed-by: default avatarDan Cross <crossd@gmail.com>
Link: https://patch.msgid.link/20250902124642.212705-1-edumazet@google.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent a125c8fb
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -433,6 +433,10 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev,
int ax25_kiss_rcv(struct sk_buff *skb, struct net_device *dev,
		  struct packet_type *ptype, struct net_device *orig_dev)
{
	skb = skb_share_check(skb, GFP_ATOMIC);
	if (!skb)
		return NET_RX_DROP;

	skb_orphan(skb);

	if (!net_eq(dev_net(dev), &init_net)) {