diff mbox series

net: fjes: fix potential NULL pointer dereferences

Message ID 20190311071022.27610-1-kjlu@umn.edu
State Changes Requested
Delegated to: David Miller
Headers show
Series net: fjes: fix potential NULL pointer dereferences | expand

Commit Message

Kangjie Lu March 11, 2019, 7:10 a.m. UTC
In case alloc_workqueue fails, the fix returns -ENOMEM to avoid
ULL pointer dereferences.

Signed-off-by: Kangjie Lu <kjlu@umn.edu>
---
 drivers/net/fjes/fjes_main.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

David Miller March 11, 2019, 11:19 p.m. UTC | #1
From: Kangjie Lu <kjlu@umn.edu>
Date: Mon, 11 Mar 2019 02:10:21 -0500

>  	adapter->control_wq = alloc_workqueue(DRV_NAME "/control",
>  					      WQ_MEM_RECLAIM, 0);
> +	if (!adapter->control_wq) {
> +		err = -ENOMEM;
> +		goto err_free_netdev;
> +	}

This error path leaks adapter->txrx_wq.
Kangjie Lu March 12, 2019, 4:56 a.m. UTC | #2
> On Mar 11, 2019, at 6:19 PM, David Miller <davem@davemloft.net> wrote:
> 
> From: Kangjie Lu <kjlu@umn.edu>
> Date: Mon, 11 Mar 2019 02:10:21 -0500
> 
>> 	adapter->control_wq = alloc_workqueue(DRV_NAME "/control",
>> 					      WQ_MEM_RECLAIM, 0);
>> +	if (!adapter->control_wq) {
>> +		err = -ENOMEM;
>> +		goto err_free_netdev;
>> +	}
> 
> This error path leaks adapter->txrx_wq.

The following code also has an error-handling case: goto err_free_netdev.
Shouldn’t the resource release be in err_free_netdev?

>
diff mbox series

Patch

diff --git a/drivers/net/fjes/fjes_main.c b/drivers/net/fjes/fjes_main.c
index d3eae1239045..18c2c9e24c24 100644
--- a/drivers/net/fjes/fjes_main.c
+++ b/drivers/net/fjes/fjes_main.c
@@ -1252,8 +1252,17 @@  static int fjes_probe(struct platform_device *plat_dev)
 	adapter->open_guard = false;
 
 	adapter->txrx_wq = alloc_workqueue(DRV_NAME "/txrx", WQ_MEM_RECLAIM, 0);
+	if (!adapter->txrx_wq) {
+		err = -ENOMEM;
+		goto err_free_netdev;
+	}
+
 	adapter->control_wq = alloc_workqueue(DRV_NAME "/control",
 					      WQ_MEM_RECLAIM, 0);
+	if (!adapter->control_wq) {
+		err = -ENOMEM;
+		goto err_free_netdev;
+	}
 
 	INIT_WORK(&adapter->tx_stall_task, fjes_tx_stall_task);
 	INIT_WORK(&adapter->raise_intr_rxdata_task,