panic on detroying tap device

Sepherosa Ziehau sepherosa at gmail.com
Mon Dec 6 02:23:43 PST 2010


On Mon, Nov 22, 2010 at 12:56 AM, Jan Lentfer <Jan.Lentfer at web.de> wrote:
> When playing with vkernel and networking a encountered a panic when doing
>
> ifconfig tap4 down
> ifconfig tap4 destroy

If the tap(4) is open(2)ed by vkernel, it should bypasses all cloning operation.

Your probably should add one more if_clone method besides
if_clone_creat/if_clone_destroy, like if_clone_iscloned, to fix all
pseudo devices, which support open(2) and if_clone.  Then change code
in net/if_clone.c like following:

int
if_clone_destroy()
{
    ....

    ifp = ifunit(name);
    if (ifp == NULL)
        return (ENXIO);

    if (!ifc->ifc_iscloned(ifp))
        return EOPNOTSUPP;

    if (ifc->ifc_destroy == NULL)
        return (EOPNOTSUPP);

    ....
}

BTW, after all these the TAP_CLONE test in tap_clone_destroy()
probably should be changed to assertion.

Best Regards,
sephe

-- 
Tomorrow Will Never Die





More information about the Bugs mailing list