Ayaka Koshibe([email protected]) on 2018.08.05 17:43:34 -0700:
> Hi,
>
> I noticed that if you try to move an immovable lo(4) to a nonexistent rdomain,
> a new routing table will be created despite the operation failing with an
> EPERM.
>
yes, i dont think it should do that
> The following moves the rdomain/index check for lo(4) to before the creation
> of a nonexisting target routing table.
>
> OK?
ok benno@
> Thanks,
> Ayaka
>
>
> Index: if.c
> ===================================================================
> RCS file: /cvs/src/sys/net/if.c,v
> retrieving revision 1.558
> diff -u -p -u -r1.558 if.c
> --- if.c 11 Jul 2018 09:08:21 -0000 1.558
> +++ if.c 6 Aug 2018 00:06:34 -0000
> @@ -1743,6 +1743,10 @@ if_setrdomain(struct ifnet *ifp, int rdo
> if (rdomain < 0 || rdomain > RT_TABLEID_MAX)
> return (EINVAL);
>
> + if ((ifp->if_flags & IFF_LOOPBACK) &&
> + (ifp->if_index == rtable_loindex(ifp->if_rdomain)))
> + return (EPERM);
> +
> /*
> * Create the routing table if it does not exist, including its
> * loopback interface with unit == rdomain.
> @@ -1777,10 +1781,6 @@ if_setrdomain(struct ifnet *ifp, int rdo
> return (EINVAL);
>
> if (rdomain != ifp->if_rdomain) {
> - if ((ifp->if_flags & IFF_LOOPBACK) &&
> - (ifp->if_index == rtable_loindex(ifp->if_rdomain)))
> - return (EPERM);
> -
> s = splnet();
> /*
> * We are tearing down the world.
>