iflib: allow clone detach if not yet init

If we hit an error during init, then we'll unwind our state and attempt
to detach the device -- don't block it.

This was discovered by creating a wg0 with missing parameters; said
failure ended up leaving this orphaned device in place and ended up
panicking the system upon enumeration of the dev.* sysctl space.

Reviewed by:	gallatin, markj
MFC after:	3 days
Differential Revision:	https://reviews.freebsd.org/D29145
This commit is contained in:
Kyle Evans 2021-03-09 06:13:31 -06:00
parent 299f8977ce
commit 0dd691b412

View File

@ -83,7 +83,8 @@ iflib_pseudo_detach(device_t dev)
if_ctx_t ctx;
ctx = device_get_softc(dev);
if ((iflib_get_flags(ctx) & IFC_IN_DETACH) == 0)
if ((iflib_get_flags(ctx) & (IFC_INIT_DONE | IFC_IN_DETACH)) ==
IFC_INIT_DONE)
return (EBUSY);
return (0);
}