lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 22 Mar 2019 22:52:21 -0500 From: Kangjie Lu <kjlu@....edu> To: kjlu@....edu Cc: pakki001@....edu, "David S. Miller" <davem@...emloft.net>, Colin Ian King <colin.king@...onical.com>, netdev@...r.kernel.org, linux-kernel@...r.kernel.org Subject: [PATCH v2] net: fjes: fix potential NULL pointer dereferences In case alloc_workqueue fails, the patch returns -ENOMEM to avoid NULL pointer dereferences. In addition, the patch fixes memory-leak issues. Signed-off-by: Kangjie Lu <kjlu@....edu> --- V2: free resources properly --- drivers/net/fjes/fjes_main.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/net/fjes/fjes_main.c b/drivers/net/fjes/fjes_main.c index d3eae1239045..471486eefb7b 100644 --- a/drivers/net/fjes/fjes_main.c +++ b/drivers/net/fjes/fjes_main.c @@ -1252,8 +1252,16 @@ 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_wq; + } INIT_WORK(&adapter->tx_stall_task, fjes_tx_stall_task); INIT_WORK(&adapter->raise_intr_rxdata_task, @@ -1270,7 +1278,7 @@ static int fjes_probe(struct platform_device *plat_dev) hw->hw_res.irq = platform_get_irq(plat_dev, 0); err = fjes_hw_init(&adapter->hw); if (err) - goto err_free_netdev; + goto err_free_wq; /* setup MAC address (02:00:00:00:00:[epid])*/ netdev->dev_addr[0] = 2; @@ -1292,6 +1300,11 @@ static int fjes_probe(struct platform_device *plat_dev) err_hw_exit: fjes_hw_exit(&adapter->hw); +err_free_wq: + if (adapter->txrx_wq) + destroy_workqueue(adapter->txrx_wq); + if (adapter->control_wq) + destroy_workqueue(adapter->control_wq); err_free_netdev: free_netdev(netdev); err_out: -- 2.17.1
Powered by blists - more mailing lists