⬢ DragonFlyBSD Kernel Audit
DF-5053 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/netif/mii_layer/qsphy.c
+++ b/sys/dev/netif/mii_layer/qsphy.c
@@ -167,8 +167,22 @@
 	device_printf(dev, " ");
 	if (sc->mii_capabilities & BMSR_MEDIAMASK)
 		mii_phy_add_media(sc);
-	else
+	else {
 		kprintf("no media present");
+		/*
+		 * DF-5053 (DF-4930/DF-4957/DF-4981/DF-5003 family, hub
+		 * DF-5001): add an explicit fallback media entry so that
+		 * miibus_mediainit()'s terminal ifmedia_set() (mii.c:244)
+		 * finds a match instead of panicking
+		 * ("ifmedia_set: no match").  mii_phy_add_media()'s own
+		 * IFM_NONE fallback cannot be used here: it is gated on
+		 * MIIF_NOISOLATE being clear (mii_physubr.c:230) and this
+		 * driver always sets MIIF_NOISOLATE (qsphy.c:160).
+		 */
+		ifmedia_add(&mii->mii_media,
+		    IFM_MAKEWORD(IFM_ETHER, IFM_NONE, 0, sc->mii_inst),
+		    MII_MEDIA_NONE, NULL);
+	}
 	kprintf("\n");
 
 	MIIBUS_MEDIAINIT(sc->mii_dev);