diff mbox series

[1/2] net: sit: Unregister catch-all devices

Message ID 20210412174117.299570-1-hristo@venev.name
State New
Headers show
Series [1/2] net: sit: Unregister catch-all devices | expand

Commit Message

Hristo Venev April 12, 2021, 5:41 p.m. UTC
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")
Signed-off-by: Hristo Venev <hristo@venev.name>
---
 net/ipv6/sit.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

patchwork-bot+netdevbpf@kernel.org April 13, 2021, 9:40 p.m. UTC | #1
Hello:

This series was applied to netdev/net.git (refs/heads/master):

On Mon, 12 Apr 2021 20:41:16 +0300 you wrote:
> 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:

> 

> [...]


Here is the summary with links:
  - [1/2] net: sit: Unregister catch-all devices
    https://git.kernel.org/netdev/net/c/610f8c0fc8d4
  - [2/2] net: ip6_tunnel: Unregister catch-all devices
    https://git.kernel.org/netdev/net/c/941ea91e87a6

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
Nicolas Dichtel April 21, 2021, 8:33 a.m. UTC | #2
Le 12/04/2021 à 19:41, Hristo Venev a écrit :
> 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")

> Signed-off-by: Hristo Venev <hristo@venev.name>



Thank you for your patches.
Please, think of putting original author in CC when you send a fix ;-)


Regards,
Nicolas
diff mbox series

Patch

diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index 63ccd9f2dccc..9fdccf0718b5 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -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]);