On 8/26/2021 8:02 PM, Chengfeng Ye wrote: > The lock pdata->phy_mutex may not be correctly released if the > function return in these two branches, which may lead to > deadlock if the lock is acquired again. > > Cc: cy...@connect.ust.hk > Bugzilla ID: 776 > > Signed-off-by: Chengfeng Ye <cy...@connect.ust.hk> > --- > drivers/net/axgbe/axgbe_phy_impl.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/axgbe/axgbe_phy_impl.c > b/drivers/net/axgbe/axgbe_phy_impl.c > index 02236ec192..cf39095ee4 100644 > --- a/drivers/net/axgbe/axgbe_phy_impl.c > +++ b/drivers/net/axgbe/axgbe_phy_impl.c > @@ -418,8 +418,10 @@ static int axgbe_phy_get_comm_ownership(struct > axgbe_port *pdata) > */ > pthread_mutex_lock(&pdata->phy_mutex); > > - if (phy_data->comm_owned) > + if (phy_data->comm_owned) { > + pthread_mutex_unlock(&pdata->phy_mutex); > return 0; > + } > > /* Clear the mutexes */ > XP_IOWRITE(pdata, XP_I2C_MUTEX, AXGBE_MUTEX_RELEASE); > @@ -444,6 +446,7 @@ static int axgbe_phy_get_comm_ownership(struct axgbe_port > *pdata) > XP_IOWRITE(pdata, XP_MDIO_MUTEX, mutex_id); > > phy_data->comm_owned = 1; > + pthread_mutex_unlock(&pdata->phy_mutex); > return 0; > } > >
'axgbe_phy_get_comm_ownership()' seems intended to keep the lock on success. Please also check: Fixes: c8c2296b5974 ("net/axgbe: fix double unlock") Perhaps you can comment the 'axgbe_phy_get_comm_ownership()' function instead?