• Jon Mason's avatar
    mdio: mux: Correct mdio_mux_init error path issues · b6016166
    Jon Mason authored
    There is a potential unnecessary refcount decrement on error path of
    put_device(&pb->mii_bus->dev), as it is possible to avoid the
    of_mdio_find_bus() call if mux_bus is specified by the calling function.
    
    The same put_device() is not called in the error path if the
    devm_kzalloc of pb fails.  This caused the variable used in the
    put_device() to be changed, as the pb pointer was obviously not set up.
    
    There is an unnecessary of_node_get() on child_bus_node if the
    of_mdiobus_register() is successful, as the
    for_each_available_child_of_node() automatically increments this.
    Thus the refcount on this node will always be +1 more than it should be.
    
    There is no of_node_put() on child_bus_node if the of_mdiobus_register()
    call fails.
    
    Finally, it is lacking devm_kfree() of pb in the error path.  While this
    might not be technically necessary, it was present in other parts of the
    function.  So, I am adding it where necessary to make it uniform.
    Signed-off-by: default avatarJon Mason <jon.mason@broadcom.com>
    Fixes: f20e6657 ("mdio: mux: Enhanced MDIO mux framework for integrated multiplexers")
    Fixes: 0ca2997d ("netdev/of/phy: Add MDIO bus multiplexer support.")
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b6016166
mdio-mux.c 4.81 KB