CVE-2026-98563 in Linux
요약
\~에 의해 VulDB • 2026. 10. 19.
리눅스 커널에서 다음 취약점이 해결되었습니다:
net: phylink: 브라운업 실패 시 PHY를 한 번만 기록함
phylink_bringup_phy()는 마지막 유실 가능 단계 이전에 pl->phydev에 PHY를 저장합니다. LPI(저전력 유휴 모드)를 구현하는 MAC의 경우, phy_eee_rx_clock_stop()가 실제 MDIO 오류로 실패할 수 있습니다. 호출자는 phy_detach()로 롤백하지만, 이 함수는 pl->phydev에 대해 아무것도 알지 못하므로 더 이상 연결되지 않은 PHY 포인터가 실패한 연결 이후에도 생존합니다.
이것이 초래하는 비용은 호출자가 어떻게 여기에 도달했는지(어떤 경로를 통해 왔는지)에 따라 다릅니다. phylink_connect_phy()는 phylink_attach_phy()를 거치며, pl->phydev가 설정되어 있는 동안에는 부착을 거부하여 일시적인 MDIO 오류를 영구적인 -EBUSY로 만듭니다. SFP(Small Form-factor Pluggable) 경로는 그보다 더 나쁩니다: sfp_sm_probe_phy()는 phy_device_remove() 및 phy_device_free()로 실패에 대응하며, 이 오류 반환 이후에만 sfp->mod_phy를 할당합니다. 따라서 pl->phydev가 지워지지 않아 해제된(freed) phy_device를 가리킨 채 남게 되며, phylink_resolve()와 ethtool 헬퍼 함수들이 계속 이를 읽습니다.
phylink_fwnode_phy_connect()에는 이러한 확인(check)이 없으므로, 이후의 연결은 낡은 포인터를 덮어쓰고 문제를 숨깁니다. 그러나 디스커넥트(disconnect)는 그렇지 않습니다: phylink_disconnect_phy()는 해당 포인터를 phy_disconnect()에 전달하며, 동일한 PHY에 대한 두 번째 phy_detach() 호출은 첫 번째가 이미 해제한 참조(reference)를 감소시킵니다.
이 문제는 DSA(Distributed Switch Architecture) 포트가 스위치 프로브 이후에 드라이버가 도착하는 PHY에서 생존하도록 할 때 발견되었습니다: 실패한 연결 후 포트를 유지하고 재시도(retrying)하는 것이 이 윈도우(취약점 발생 구간)를 도달 가능하게 만듭니다.
실패할 수 있는 마지막 호출 후에 포터를 게시(unwind하지 않고)하십시오. 두 지점 사이에는 pl->phydev를 읽는 코드가 없으며, 이어지는 등록(registration)은 실패할 수 없습니다: phy_request_interrupt()는 자체적으로 폴링으로 대체(fallback)합니다. PHY 측의 상태 순서가 유지되므로 MDIO 작업 간 상대적 위치가 변경되지 않습니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.