{"id":41035,"date":"2026-10-19T00:31:53","date_gmt":"2026-10-18T16:31:53","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98563"},"modified":"2026-10-19T00:31:53","modified_gmt":"2026-10-18T16:31:53","slug":"cve-2026-98563","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98563","title":{"rendered":"CVE-2026-98563 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnet: phylink: record"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net: phylink: record the PHY only once bringup cannot fail<\/p>\n<p>phylink_bringup_phy() stores the PHY in pl-&gt;phydev before its last<br \/>\nfallible step: on a MAC whose phylink ops implement LPI,<br \/>\nphy_eee_rx_clock_stop() can fail with a real MDIO error. The callers<br \/>\nunwind with phy_detach(), which knows nothing about pl-&gt;phydev, so a<br \/>\npointer to a PHY that is no longer attached outlives the failed<br \/>\nconnect.<\/p>\n<p>What that costs depends on how the caller got here.<br \/>\nphylink_connect_phy() goes through phylink_attach_phy(), which refuses<br \/>\nto attach while pl-&gt;phydev is set, turning a transient MDIO error into<br \/>\na permanent -EBUSY. The SFP path is worse than that: sfp_sm_probe_phy()<br \/>\nanswers the failure with phy_device_remove() and phy_device_free(), and<br \/>\nit assigns sfp-&gt;mod_phy only past that error return, so nothing clears<br \/>\npl-&gt;phydev and it is left pointing at a freed phy_device that<br \/>\nphylink_resolve() and the ethtool helpers go on reading.<br \/>\nphylink_fwnode_phy_connect() has no such check, so a later connect<br \/>\noverwrites the stale pointer and hides the problem. A disconnect does<br \/>\nnot: phylink_disconnect_phy() hands that pointer to phy_disconnect(),<br \/>\nand the second phy_detach() on the same PHY drops references the first<br \/>\none already released.<\/p>\n<p>Found while making a DSA port survive a PHY whose driver arrives after<br \/>\nthe switch probes: keeping the port across a failed connect and<br \/>\nretrying is what makes this window reachable.<\/p>\n<p>Publish the pointer after the last call that can fail instead of<br \/>\nunwinding it afterwards. Nothing between the two points reads<br \/>\npl-&gt;phydev, and the registration that follows cannot fail:<br \/>\nphy_request_interrupt() falls back to polling on its own. The PHY-side<br \/>\nstate keeps the order it had, so no MDIO operation moves relative to<br \/>\nanother.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net: phylink: record the PHY only once bringup cannot fail<\/p>\n<p>phylink_bringup_phy() stores the PHY in pl-&gt;phydev before its last<br \/>\nfall<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-41035","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/41035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=41035"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=41035"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=41035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}