[dpdk-stable] patch 'net/axgbe: fix double unlock' has been queued to LTS release 18.11.6

Kevin Traynor ktraynor at redhat.com
Tue Dec 10 15:58:45 CET 2019


Hi,

FYI, your patch has been queued to LTS release 18.11.6

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/16/19. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/kevintraynor/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable-queue/commit/3c53ea193553308b5fc9788b5d32ba2cf5a4b440

Thanks.

Kevin.

---
>From 3c53ea193553308b5fc9788b5d32ba2cf5a4b440 Mon Sep 17 00:00:00 2001
From: Pallantla Poornima <pallantlax.poornima at intel.com>
Date: Thu, 19 Sep 2019 12:01:47 +0100
Subject: [PATCH] net/axgbe: fix double unlock

[ upstream commit c8c2296b5974ab369c942cc4cada923193018eb9 ]

One issue caught by Coverity 340835
*unlock: axgbe_phy_set_mode unlocks pdata->phy_mutex
*double_unlock: axgbe_phy_sfp_detect unlocks pdata->phy_mutex
while it is unlocked.

In axgbe_phy_sfp_detect()/axgbe_phy_set_redrv_mode(),
axgbe_phy_get_comm_ownership() and axgbe_phy_put_comm_ownership()
are invoked subsequently.

Currently in axgbe_phy_get_comm_ownership(), during one of the case
'phy_data->comm_owned' is not protected and before returning 0, lock is
not called and unlock is called in axgbe_phy_put_comm_ownership()
directly which is incorrect.

Ideally, the variable 'phy_data->comm_owned' needs to be protected.
During success scenario, lock is called in
axgbe_phy_get_comm_ownership() followed by unlock in
axgbe_phy_put_comm_ownership().  In failure case, unlock is invoked in
axgbe_phy_get_comm_ownership() itself appropriately.

The fix is to protect 'phy_data->comm_owned' in the identified case
ensuring locks/unlocks properly exist.

Coverity issue: 340835
Fixes: a5c7273771e8 ("net/axgbe: add phy programming APIs")

Signed-off-by: Pallantla Poornima <pallantlax.poornima at intel.com>
Acked-by: Ravi Kumar <ravi1.kumar at amd.com>
---
 drivers/net/axgbe/axgbe_phy_impl.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/axgbe/axgbe_phy_impl.c b/drivers/net/axgbe/axgbe_phy_impl.c
index 973177f69..2267c5f81 100644
--- a/drivers/net/axgbe/axgbe_phy_impl.c
+++ b/drivers/net/axgbe/axgbe_phy_impl.c
@@ -413,7 +413,4 @@ static int axgbe_phy_get_comm_ownership(struct axgbe_port *pdata)
 	unsigned int mutex_id;
 
-	if (phy_data->comm_owned)
-		return 0;
-
 	/* The I2C and MDIO/GPIO bus is multiplexed between multiple devices,
 	 * the driver needs to take the software mutex and then the hardware
@@ -422,4 +419,7 @@ static int axgbe_phy_get_comm_ownership(struct axgbe_port *pdata)
 	pthread_mutex_lock(&pdata->phy_mutex);
 
+	if (phy_data->comm_owned)
+		return 0;
+
 	/* Clear the mutexes */
 	XP_IOWRITE(pdata, XP_I2C_MUTEX, AXGBE_MUTEX_RELEASE);
-- 
2.21.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2019-12-10 14:49:39.834476239 +0000
+++ 0011-net-axgbe-fix-double-unlock.patch	2019-12-10 14:49:38.996458812 +0000
@@ -1 +1 @@
-From c8c2296b5974ab369c942cc4cada923193018eb9 Mon Sep 17 00:00:00 2001
+From 3c53ea193553308b5fc9788b5d32ba2cf5a4b440 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit c8c2296b5974ab369c942cc4cada923193018eb9 ]
+
@@ -31 +32,0 @@
-Cc: stable at dpdk.org



More information about the stable mailing list