]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.8
authorSasha Levin <sashal@kernel.org>
Thu, 24 Sep 2020 23:38:15 +0000 (19:38 -0400)
committerSasha Levin <sashal@kernel.org>
Thu, 24 Sep 2020 23:38:15 +0000 (19:38 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-5.8/ibmvnic-add-missing-parenthesis-in-do_reset.patch [new file with mode: 0644]
queue-5.8/ibmvnic-fix-null-tx_pools-and-rx_tools-issue-at-do_r.patch [new file with mode: 0644]
queue-5.8/series

diff --git a/queue-5.8/ibmvnic-add-missing-parenthesis-in-do_reset.patch b/queue-5.8/ibmvnic-add-missing-parenthesis-in-do_reset.patch
new file mode 100644 (file)
index 0000000..97b14ad
--- /dev/null
@@ -0,0 +1,47 @@
+From 58893e81a820a9bd5433b4f0250ecb6c5fc1635a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 4 Sep 2020 21:07:49 -0700
+Subject: ibmvnic: add missing parenthesis in do_reset()
+
+From: Jakub Kicinski <kuba@kernel.org>
+
+[ Upstream commit 8ae4dff882eb879c17bf46574201bd37fc6bc8b5 ]
+
+Indentation and logic clearly show that this code is missing
+parenthesis.
+
+Fixes: 9f1345737790 ("ibmvnic fix NULL tx_pools and rx_tools issue at do_reset")
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/ibm/ibmvnic.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
+index d3a774331afc7..1b702a43a5d01 100644
+--- a/drivers/net/ethernet/ibm/ibmvnic.c
++++ b/drivers/net/ethernet/ibm/ibmvnic.c
+@@ -2032,16 +2032,18 @@ static int do_reset(struct ibmvnic_adapter *adapter,
+               } else {
+                       rc = reset_tx_pools(adapter);
+-                      if (rc)
++                      if (rc) {
+                               netdev_dbg(adapter->netdev, "reset tx pools failed (%d)\n",
+                                               rc);
+                               goto out;
++                      }
+                       rc = reset_rx_pools(adapter);
+-                      if (rc)
++                      if (rc) {
+                               netdev_dbg(adapter->netdev, "reset rx pools failed (%d)\n",
+                                               rc);
+                               goto out;
++                      }
+               }
+               ibmvnic_disable_irqs(adapter);
+       }
+-- 
+2.25.1
+
diff --git a/queue-5.8/ibmvnic-fix-null-tx_pools-and-rx_tools-issue-at-do_r.patch b/queue-5.8/ibmvnic-fix-null-tx_pools-and-rx_tools-issue-at-do_r.patch
new file mode 100644 (file)
index 0000000..34e4a09
--- /dev/null
@@ -0,0 +1,83 @@
+From 8f3b38ce364cc3b973a435b5545d23452455a6e4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 25 Aug 2020 13:26:41 -0400
+Subject: ibmvnic fix NULL tx_pools and rx_tools issue at do_reset
+
+From: Mingming Cao <mmc@linux.vnet.ibm.com>
+
+[ Upstream commit 9f13457377907fa253aef560e1a37e1ca4197f9b ]
+
+At the time of do_rest, ibmvnic tries to re-initalize the tx_pools
+and rx_pools to avoid re-allocating the long term buffer. However
+there is a window inside do_reset that the tx_pools and
+rx_pools were freed before re-initialized making it possible to deference
+null pointers.
+
+This patch fix this issue by always check the tx_pool
+and rx_pool are not NULL after ibmvnic_login. If so, re-allocating
+the pools. This will avoid getting into calling reset_tx/rx_pools with
+NULL adapter tx_pools/rx_pools pointer. Also add null pointer check in
+reset_tx_pools and reset_rx_pools to safe handle NULL pointer case.
+
+Signed-off-by: Mingming Cao <mmc@linux.vnet.ibm.com>
+Signed-off-by: Dany Madden <drt@linux.ibm.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/ibm/ibmvnic.c | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
+index 5afb3c9c52d20..d3a774331afc7 100644
+--- a/drivers/net/ethernet/ibm/ibmvnic.c
++++ b/drivers/net/ethernet/ibm/ibmvnic.c
+@@ -479,6 +479,9 @@ static int reset_rx_pools(struct ibmvnic_adapter *adapter)
+       int i, j, rc;
+       u64 *size_array;
++      if (!adapter->rx_pool)
++              return -1;
++
+       size_array = (u64 *)((u8 *)(adapter->login_rsp_buf) +
+               be32_to_cpu(adapter->login_rsp_buf->off_rxadd_buff_size));
+@@ -649,6 +652,9 @@ static int reset_tx_pools(struct ibmvnic_adapter *adapter)
+       int tx_scrqs;
+       int i, rc;
++      if (!adapter->tx_pool)
++              return -1;
++
+       tx_scrqs = be32_to_cpu(adapter->login_rsp_buf->num_txsubm_subcrqs);
+       for (i = 0; i < tx_scrqs; i++) {
+               rc = reset_one_tx_pool(adapter, &adapter->tso_pool[i]);
+@@ -2011,7 +2017,10 @@ static int do_reset(struct ibmvnic_adapter *adapter,
+                   adapter->req_rx_add_entries_per_subcrq !=
+                   old_num_rx_slots ||
+                   adapter->req_tx_entries_per_subcrq !=
+-                  old_num_tx_slots) {
++                  old_num_tx_slots ||
++                  !adapter->rx_pool ||
++                  !adapter->tso_pool ||
++                  !adapter->tx_pool) {
+                       release_rx_pools(adapter);
+                       release_tx_pools(adapter);
+                       release_napi(adapter);
+@@ -2024,10 +2033,14 @@ static int do_reset(struct ibmvnic_adapter *adapter,
+               } else {
+                       rc = reset_tx_pools(adapter);
+                       if (rc)
++                              netdev_dbg(adapter->netdev, "reset tx pools failed (%d)\n",
++                                              rc);
+                               goto out;
+                       rc = reset_rx_pools(adapter);
+                       if (rc)
++                              netdev_dbg(adapter->netdev, "reset rx pools failed (%d)\n",
++                                              rc);
+                               goto out;
+               }
+               ibmvnic_disable_irqs(adapter);
+-- 
+2.25.1
+
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..92f80e8b24ab501442f3bc3ee50af08bb67caeb3 100644 (file)
@@ -0,0 +1,2 @@
+ibmvnic-fix-null-tx_pools-and-rx_tools-issue-at-do_r.patch
+ibmvnic-add-missing-parenthesis-in-do_reset.patch