| From b1c6e04feba786a164f1102c52dcb2d713c7d805 Mon Sep 17 00:00:00 2001 |
| From: Kangjie Lu <kjlu@umn.edu> |
| Date: Tue, 14 May 2019 15:44:49 -0700 |
| Subject: rapidio: fix a NULL pointer dereference when create_workqueue() fails |
| |
| [ Upstream commit 23015b22e47c5409620b1726a677d69e5cd032ba ] |
| |
| In case create_workqueue fails, the fix releases resources and returns |
| -ENOMEM to avoid NULL pointer dereference. |
| |
| Signed-off-by: Kangjie Lu <kjlu@umn.edu> |
| Acked-by: Alexandre Bounine <alex.bou9@gmail.com> |
| Cc: Matt Porter <mporter@kernel.crashing.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/rapidio/rio_cm.c | 8 ++++++++ |
| 1 file changed, 8 insertions(+) |
| |
| diff --git a/drivers/rapidio/rio_cm.c b/drivers/rapidio/rio_cm.c |
| index cf45829585cb..b29fc258eeba 100644 |
| --- a/drivers/rapidio/rio_cm.c |
| +++ b/drivers/rapidio/rio_cm.c |
| @@ -2147,6 +2147,14 @@ static int riocm_add_mport(struct device *dev, |
| mutex_init(&cm->rx_lock); |
| riocm_rx_fill(cm, RIOCM_RX_RING_SIZE); |
| cm->rx_wq = create_workqueue(DRV_NAME "/rxq"); |
| + if (!cm->rx_wq) { |
| + riocm_error("failed to allocate IBMBOX_%d on %s", |
| + cmbox, mport->name); |
| + rio_release_outb_mbox(mport, cmbox); |
| + kfree(cm); |
| + return -ENOMEM; |
| + } |
| + |
| INIT_WORK(&cm->rx_work, rio_ibmsg_handler); |
| |
| cm->tx_slot = 0; |
| -- |
| 2.20.1 |
| |