• Florian Fainelli's avatar
    net: phy: Fix PHY module checks and NULL deref in phy_attach_direct() · 6d9f66ac
    Florian Fainelli authored
    The Generic PHY drivers gets assigned after we checked that the current
    PHY driver is NULL, so we need to check a few things before we can
    safely dereference d->driver. This would be causing a NULL deference to
    occur when a system binds to the Generic PHY driver. Update
    phy_attach_direct() to do the following:
    
    - grab the driver module reference after we have assigned the Generic
      PHY drivers accordingly, and remember we came from the generic PHY
      path
    
    - update the error path to clean up the module reference in case the
      Generic PHY probe function fails
    
    - split the error path involving phy_detacht() to avoid double free/put
      since phy_detach() does all the clean up
    
    - finally, have phy_detach() drop the module reference count before we
      call device_release_driver() for the Generic PHY driver case
    
    Fixes: cafe8df8 ("net: phy: Fix lack of reference count on PHY driver")
    Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    6d9f66ac
phy_device.c 47.3 KB