Skip to contentSkip to conversation

FAILED: patch "[PATCH] net: sit: Unregister catch-all devices" failed to apply to 4.4-stable tree

PATCH [email protected] 1 participant 1 message Apr 18, 2021

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 610f8c0fc8d46e0933955ce13af3d64484a4630a Mon Sep 17 00:00:00 2001
From: Hristo Venev <[email protected]>
Date: Mon, 12 Apr 2021 20:41:16 +0300
Subject: [PATCH] net: sit: Unregister catch-all devices

A sit interface created without a local or a remote address is linked into the sit_net::tunnels_wc list of its original namespace. When deleting a network namespace, delete the devices that have been moved.

The following script triggers a null pointer dereference if devices linked in a deleted sit_net remain:

for i in seq 1 30; do
ip netns add ns-test
ip netns exec ns-test ip link add dev veth0 type veth peer veth1 ip netns exec ns-test ip link add dev sit$i type sit dev veth0 ip netns exec ns-test ip link set dev sit$i netns $$ ip netns del ns-test
done
for i in seq 1 30; do
ip link del dev sit$i
done

Fixes 5e6700b3bf98f ("sit: add support of x-netns")
net/ipv6/sit.c +2 -2
index 63ccd9f2dccc..9fdccf0718b5 100644
@@ -1867,9 +1867,9 @@ static void __net_exit sit_destroy_tunnels(struct net *net,
 		if (dev->rtnl_link_ops == &sit_link_ops)
 			unregister_netdevice_queue(dev, head);
 
-	for (prio = 1; prio < 4; prio++) {
+	for (prio = 0; prio < 4; prio++) {
 		int h;
-		for (h = 0; h < IP6_SIT_HASH_SIZE; h++) {
+		for (h = 0; h < (prio ? IP6_SIT_HASH_SIZE : 1); h++) {
 			struct ip_tunnel *t;
 
 			t = rtnl_dereference(sitn->tunnels[prio][h]);