netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net 0/5][pull request] Intel Wired LAN Driver Updates 2022-11-23 (ixgbevf, i40e, fm10k, iavf, e100)
@ 2022-11-23 23:04 Tony Nguyen
  2022-11-23 23:04 ` [PATCH net 1/5] ixgbevf: Fix resource leak in ixgbevf_init_module() Tony Nguyen
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Tony Nguyen @ 2022-11-23 23:04 UTC (permalink / raw)
  To: davem, kuba, pabeni, edumazet; +Cc: Tony Nguyen, netdev

This series contains updates to various Intel drivers.

Shang XiaoJing fixes init module error path stop to resource leaks for
ixgbevf and i40e.

Yuan Can also does the same for fm10k and iavf.

Wang Hai stops freeing of skb as it was causing use after free error for
e100.

The following are changes since commit 748064b54c99418f615aabff5755996cd9816969:
  net/cdc_ncm: Fix multicast RX support for CDC NCM devices with ZLP
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue 10GbE

Shang XiaoJing (2):
  ixgbevf: Fix resource leak in ixgbevf_init_module()
  i40e: Fix error handling in i40e_init_module()

Wang Hai (1):
  e100: Fix possible use after free in e100_xmit_prepare

Yuan Can (2):
  fm10k: Fix error handling in fm10k_init_module()
  iavf: Fix error handling in iavf_init_module()

 drivers/net/ethernet/intel/e100.c                 |  5 +----
 drivers/net/ethernet/intel/fm10k/fm10k_main.c     | 10 +++++++++-
 drivers/net/ethernet/intel/i40e/i40e_main.c       | 11 ++++++++++-
 drivers/net/ethernet/intel/iavf/iavf_main.c       |  9 ++++++++-
 drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 10 +++++++++-
 5 files changed, 37 insertions(+), 8 deletions(-)

-- 
2.35.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH net 1/5] ixgbevf: Fix resource leak in ixgbevf_init_module()
  2022-11-23 23:04 [PATCH net 0/5][pull request] Intel Wired LAN Driver Updates 2022-11-23 (ixgbevf, i40e, fm10k, iavf, e100) Tony Nguyen
@ 2022-11-23 23:04 ` Tony Nguyen
  2022-11-23 23:04 ` [PATCH net 2/5] i40e: Fix error handling in i40e_init_module() Tony Nguyen
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Tony Nguyen @ 2022-11-23 23:04 UTC (permalink / raw)
  To: davem, kuba, pabeni, edumazet
  Cc: Shang XiaoJing, netdev, anthony.l.nguyen, Saeed Mahameed,
	Konrad Jankowski

From: Shang XiaoJing <shangxiaojing@huawei.com>

ixgbevf_init_module() won't destroy the workqueue created by
create_singlethread_workqueue() when pci_register_driver() failed. Add
destroy_workqueue() in fail path to prevent the resource leak.

Similar to the handling of u132_hcd_init in commit f276e002793c
("usb: u132-hcd: fix resource leak")

Fixes: 40a13e2493c9 ("ixgbevf: Use a private workqueue to avoid certain possible hangs")
Signed-off-by: Shang XiaoJing <shangxiaojing@huawei.com>
Reviewed-by: Saeed Mahameed <saeed@kernel.org>
Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
 drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
index 99933e89717a..e338fa572793 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
@@ -4869,6 +4869,8 @@ static struct pci_driver ixgbevf_driver = {
  **/
 static int __init ixgbevf_init_module(void)
 {
+	int err;
+
 	pr_info("%s\n", ixgbevf_driver_string);
 	pr_info("%s\n", ixgbevf_copyright);
 	ixgbevf_wq = create_singlethread_workqueue(ixgbevf_driver_name);
@@ -4877,7 +4879,13 @@ static int __init ixgbevf_init_module(void)
 		return -ENOMEM;
 	}
 
-	return pci_register_driver(&ixgbevf_driver);
+	err = pci_register_driver(&ixgbevf_driver);
+	if (err) {
+		destroy_workqueue(ixgbevf_wq);
+		return err;
+	}
+
+	return 0;
 }
 
 module_init(ixgbevf_init_module);
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net 2/5] i40e: Fix error handling in i40e_init_module()
  2022-11-23 23:04 [PATCH net 0/5][pull request] Intel Wired LAN Driver Updates 2022-11-23 (ixgbevf, i40e, fm10k, iavf, e100) Tony Nguyen
  2022-11-23 23:04 ` [PATCH net 1/5] ixgbevf: Fix resource leak in ixgbevf_init_module() Tony Nguyen
@ 2022-11-23 23:04 ` Tony Nguyen
  2022-11-23 23:04 ` [PATCH net 3/5] fm10k: Fix error handling in fm10k_init_module() Tony Nguyen
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Tony Nguyen @ 2022-11-23 23:04 UTC (permalink / raw)
  To: davem, kuba, pabeni, edumazet
  Cc: Shang XiaoJing, netdev, anthony.l.nguyen, Leon Romanovsky, Gurucharan G

From: Shang XiaoJing <shangxiaojing@huawei.com>

i40e_init_module() won't free the debugfs directory created by
i40e_dbg_init() when pci_register_driver() failed. Add fail path to
call i40e_dbg_exit() to remove the debugfs entries to prevent the bug.

i40e: Intel(R) Ethernet Connection XL710 Network Driver
i40e: Copyright (c) 2013 - 2019 Intel Corporation.
debugfs: Directory 'i40e' with parent '/' already present!

Fixes: 41c445ff0f48 ("i40e: main driver core")
Signed-off-by: Shang XiaoJing <shangxiaojing@huawei.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Tested-by: Gurucharan G <gurucharanx.g@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
 drivers/net/ethernet/intel/i40e/i40e_main.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index b5dcd15ced36..b3cb587a2032 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -16644,6 +16644,8 @@ static struct pci_driver i40e_driver = {
  **/
 static int __init i40e_init_module(void)
 {
+	int err;
+
 	pr_info("%s: %s\n", i40e_driver_name, i40e_driver_string);
 	pr_info("%s: %s\n", i40e_driver_name, i40e_copyright);
 
@@ -16661,7 +16663,14 @@ static int __init i40e_init_module(void)
 	}
 
 	i40e_dbg_init();
-	return pci_register_driver(&i40e_driver);
+	err = pci_register_driver(&i40e_driver);
+	if (err) {
+		destroy_workqueue(i40e_wq);
+		i40e_dbg_exit();
+		return err;
+	}
+
+	return 0;
 }
 module_init(i40e_init_module);
 
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net 3/5] fm10k: Fix error handling in fm10k_init_module()
  2022-11-23 23:04 [PATCH net 0/5][pull request] Intel Wired LAN Driver Updates 2022-11-23 (ixgbevf, i40e, fm10k, iavf, e100) Tony Nguyen
  2022-11-23 23:04 ` [PATCH net 1/5] ixgbevf: Fix resource leak in ixgbevf_init_module() Tony Nguyen
  2022-11-23 23:04 ` [PATCH net 2/5] i40e: Fix error handling in i40e_init_module() Tony Nguyen
@ 2022-11-23 23:04 ` Tony Nguyen
  2022-11-23 23:04 ` [PATCH net 4/5] iavf: Fix error handling in iavf_init_module() Tony Nguyen
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Tony Nguyen @ 2022-11-23 23:04 UTC (permalink / raw)
  To: davem, kuba, pabeni, edumazet
  Cc: Yuan Can, netdev, anthony.l.nguyen, Jacob Keller

From: Yuan Can <yuancan@huawei.com>

A problem about modprobe fm10k failed is triggered with the following log
given:

 Intel(R) Ethernet Switch Host Interface Driver
 Copyright(c) 2013 - 2019 Intel Corporation.
 debugfs: Directory 'fm10k' with parent '/' already present!

The reason is that fm10k_init_module() returns fm10k_register_pci_driver()
directly without checking its return value, if fm10k_register_pci_driver()
failed, it returns without removing debugfs and destroy workqueue,
resulting the debugfs of fm10k can never be created later and leaks the
workqueue.

 fm10k_init_module()
   alloc_workqueue()
   fm10k_dbg_init() # create debugfs
   fm10k_register_pci_driver()
     pci_register_driver()
       driver_register()
         bus_add_driver()
           priv = kzalloc(...) # OOM happened
   # return without remove debugfs and destroy workqueue

Fix by remove debugfs and destroy workqueue when
fm10k_register_pci_driver() returns error.

Fixes: 7461fd913afe ("fm10k: Add support for debugfs")
Fixes: b382bb1b3e2d ("fm10k: use separate workqueue for fm10k driver")
Signed-off-by: Yuan Can <yuancan@huawei.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
 drivers/net/ethernet/intel/fm10k/fm10k_main.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_main.c b/drivers/net/ethernet/intel/fm10k/fm10k_main.c
index 4a6630586ec9..fc373472e4e1 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_main.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_main.c
@@ -32,6 +32,8 @@ struct workqueue_struct *fm10k_workqueue;
  **/
 static int __init fm10k_init_module(void)
 {
+	int ret;
+
 	pr_info("%s\n", fm10k_driver_string);
 	pr_info("%s\n", fm10k_copyright);
 
@@ -43,7 +45,13 @@ static int __init fm10k_init_module(void)
 
 	fm10k_dbg_init();
 
-	return fm10k_register_pci_driver();
+	ret = fm10k_register_pci_driver();
+	if (ret) {
+		fm10k_dbg_exit();
+		destroy_workqueue(fm10k_workqueue);
+	}
+
+	return ret;
 }
 module_init(fm10k_init_module);
 
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net 4/5] iavf: Fix error handling in iavf_init_module()
  2022-11-23 23:04 [PATCH net 0/5][pull request] Intel Wired LAN Driver Updates 2022-11-23 (ixgbevf, i40e, fm10k, iavf, e100) Tony Nguyen
                   ` (2 preceding siblings ...)
  2022-11-23 23:04 ` [PATCH net 3/5] fm10k: Fix error handling in fm10k_init_module() Tony Nguyen
@ 2022-11-23 23:04 ` Tony Nguyen
  2022-11-23 23:04 ` [PATCH net 5/5] e100: Fix possible use after free in e100_xmit_prepare Tony Nguyen
  2022-11-28  9:30 ` [PATCH net 0/5][pull request] Intel Wired LAN Driver Updates 2022-11-23 (ixgbevf, i40e, fm10k, iavf, e100) patchwork-bot+netdevbpf
  5 siblings, 0 replies; 7+ messages in thread
From: Tony Nguyen @ 2022-11-23 23:04 UTC (permalink / raw)
  To: davem, kuba, pabeni, edumazet
  Cc: Yuan Can, netdev, anthony.l.nguyen, Konrad Jankowski

From: Yuan Can <yuancan@huawei.com>

The iavf_init_module() won't destroy workqueue when pci_register_driver()
failed. Call destroy_workqueue() when pci_register_driver() failed to
prevent the resource leak.

Similar to the handling of u132_hcd_init in commit f276e002793c
("usb: u132-hcd: fix resource leak")

Fixes: 2803b16c10ea ("i40e/i40evf: Use private workqueue")
Signed-off-by: Yuan Can <yuancan@huawei.com>
Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
 drivers/net/ethernet/intel/iavf/iavf_main.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c
index d7465296f650..f71e132ede09 100644
--- a/drivers/net/ethernet/intel/iavf/iavf_main.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_main.c
@@ -5196,6 +5196,8 @@ static struct pci_driver iavf_driver = {
  **/
 static int __init iavf_init_module(void)
 {
+	int ret;
+
 	pr_info("iavf: %s\n", iavf_driver_string);
 
 	pr_info("%s\n", iavf_copyright);
@@ -5206,7 +5208,12 @@ static int __init iavf_init_module(void)
 		pr_err("%s: Failed to create workqueue\n", iavf_driver_name);
 		return -ENOMEM;
 	}
-	return pci_register_driver(&iavf_driver);
+
+	ret = pci_register_driver(&iavf_driver);
+	if (ret)
+		destroy_workqueue(iavf_wq);
+
+	return ret;
 }
 
 module_init(iavf_init_module);
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net 5/5] e100: Fix possible use after free in e100_xmit_prepare
  2022-11-23 23:04 [PATCH net 0/5][pull request] Intel Wired LAN Driver Updates 2022-11-23 (ixgbevf, i40e, fm10k, iavf, e100) Tony Nguyen
                   ` (3 preceding siblings ...)
  2022-11-23 23:04 ` [PATCH net 4/5] iavf: Fix error handling in iavf_init_module() Tony Nguyen
@ 2022-11-23 23:04 ` Tony Nguyen
  2022-11-28  9:30 ` [PATCH net 0/5][pull request] Intel Wired LAN Driver Updates 2022-11-23 (ixgbevf, i40e, fm10k, iavf, e100) patchwork-bot+netdevbpf
  5 siblings, 0 replies; 7+ messages in thread
From: Tony Nguyen @ 2022-11-23 23:04 UTC (permalink / raw)
  To: davem, kuba, pabeni, edumazet
  Cc: Wang Hai, netdev, anthony.l.nguyen, baijiaju1990, Alexander Duyck

From: Wang Hai <wanghai38@huawei.com>

In e100_xmit_prepare(), if we can't map the skb, then return -ENOMEM, so
e100_xmit_frame() will return NETDEV_TX_BUSY and the upper layer will
resend the skb. But the skb is already freed, which will cause UAF bug
when the upper layer resends the skb.

Remove the harmful free.

Fixes: 5e5d49422dfb ("e100: Release skb when DMA mapping is failed in e100_xmit_prepare")
Signed-off-by: Wang Hai <wanghai38@huawei.com>
Reviewed-by: Alexander Duyck <alexanderduyck@fb.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
 drivers/net/ethernet/intel/e100.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c
index 560d1d442232..d3fdc290937f 100644
--- a/drivers/net/ethernet/intel/e100.c
+++ b/drivers/net/ethernet/intel/e100.c
@@ -1741,11 +1741,8 @@ static int e100_xmit_prepare(struct nic *nic, struct cb *cb,
 	dma_addr = dma_map_single(&nic->pdev->dev, skb->data, skb->len,
 				  DMA_TO_DEVICE);
 	/* If we can't map the skb, have the upper layer try later */
-	if (dma_mapping_error(&nic->pdev->dev, dma_addr)) {
-		dev_kfree_skb_any(skb);
-		skb = NULL;
+	if (dma_mapping_error(&nic->pdev->dev, dma_addr))
 		return -ENOMEM;
-	}
 
 	/*
 	 * Use the last 4 bytes of the SKB payload packet as the CRC, used for
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH net 0/5][pull request] Intel Wired LAN Driver Updates 2022-11-23 (ixgbevf, i40e, fm10k, iavf, e100)
  2022-11-23 23:04 [PATCH net 0/5][pull request] Intel Wired LAN Driver Updates 2022-11-23 (ixgbevf, i40e, fm10k, iavf, e100) Tony Nguyen
                   ` (4 preceding siblings ...)
  2022-11-23 23:04 ` [PATCH net 5/5] e100: Fix possible use after free in e100_xmit_prepare Tony Nguyen
@ 2022-11-28  9:30 ` patchwork-bot+netdevbpf
  5 siblings, 0 replies; 7+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-11-28  9:30 UTC (permalink / raw)
  To: Tony Nguyen; +Cc: davem, kuba, pabeni, edumazet, netdev

Hello:

This series was applied to netdev/net.git (master)
by Tony Nguyen <anthony.l.nguyen@intel.com>:

On Wed, 23 Nov 2022 15:04:01 -0800 you wrote:
> This series contains updates to various Intel drivers.
> 
> Shang XiaoJing fixes init module error path stop to resource leaks for
> ixgbevf and i40e.
> 
> Yuan Can also does the same for fm10k and iavf.
> 
> [...]

Here is the summary with links:
  - [net,1/5] ixgbevf: Fix resource leak in ixgbevf_init_module()
    https://git.kernel.org/netdev/net/c/8cfa238a48f3
  - [net,2/5] i40e: Fix error handling in i40e_init_module()
    https://git.kernel.org/netdev/net/c/479dd0614942
  - [net,3/5] fm10k: Fix error handling in fm10k_init_module()
    https://git.kernel.org/netdev/net/c/771a794c0a3c
  - [net,4/5] iavf: Fix error handling in iavf_init_module()
    https://git.kernel.org/netdev/net/c/227d8d2f7f22
  - [net,5/5] e100: Fix possible use after free in e100_xmit_prepare
    https://git.kernel.org/netdev/net/c/45605c75c52c

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-11-28  9:30 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-23 23:04 [PATCH net 0/5][pull request] Intel Wired LAN Driver Updates 2022-11-23 (ixgbevf, i40e, fm10k, iavf, e100) Tony Nguyen
2022-11-23 23:04 ` [PATCH net 1/5] ixgbevf: Fix resource leak in ixgbevf_init_module() Tony Nguyen
2022-11-23 23:04 ` [PATCH net 2/5] i40e: Fix error handling in i40e_init_module() Tony Nguyen
2022-11-23 23:04 ` [PATCH net 3/5] fm10k: Fix error handling in fm10k_init_module() Tony Nguyen
2022-11-23 23:04 ` [PATCH net 4/5] iavf: Fix error handling in iavf_init_module() Tony Nguyen
2022-11-23 23:04 ` [PATCH net 5/5] e100: Fix possible use after free in e100_xmit_prepare Tony Nguyen
2022-11-28  9:30 ` [PATCH net 0/5][pull request] Intel Wired LAN Driver Updates 2022-11-23 (ixgbevf, i40e, fm10k, iavf, e100) patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).