| From 7da413a18583baaf35dd4a8eb414fa410367d7f2 Mon Sep 17 00:00:00 2001 |
| From: Allen Pais <allen.pais@oracle.com> |
| Date: Wed, 18 Sep 2019 22:05:00 +0530 |
| Subject: libertas: fix a potential NULL pointer dereference |
| |
| From: Allen Pais <allen.pais@oracle.com> |
| |
| commit 7da413a18583baaf35dd4a8eb414fa410367d7f2 upstream. |
| |
| alloc_workqueue is not checked for errors and as a result, |
| a potential NULL dereference could occur. |
| |
| Signed-off-by: Allen Pais <allen.pais@oracle.com> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| [krzk: backport applied to different path - without marvell subdir] |
| Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/net/wireless/libertas/if_sdio.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| --- a/drivers/net/wireless/libertas/if_sdio.c |
| +++ b/drivers/net/wireless/libertas/if_sdio.c |
| @@ -1229,6 +1229,10 @@ static int if_sdio_probe(struct sdio_fun |
| |
| spin_lock_init(&card->lock); |
| card->workqueue = create_workqueue("libertas_sdio"); |
| + if (unlikely(!card->workqueue)) { |
| + ret = -ENOMEM; |
| + goto err_queue; |
| + } |
| INIT_WORK(&card->packet_worker, if_sdio_host_to_card_worker); |
| init_waitqueue_head(&card->pwron_waitq); |
| |
| @@ -1282,6 +1286,7 @@ err_activate_card: |
| lbs_remove_card(priv); |
| free: |
| destroy_workqueue(card->workqueue); |
| +err_queue: |
| while (card->packets) { |
| packet = card->packets; |
| card->packets = card->packets->next; |