In case alloc_workqueue fails to allocate the work queue and returns NULL, the fix releases the resources and returns -ENOMEM. Signed-off-by: Kangjie Lu <kjlu@xxxxxxx> --- drivers/net/can/spi/mcp251x.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/net/can/spi/mcp251x.c b/drivers/net/can/spi/mcp251x.c index e90817608645..2737b9a20dfe 100644 --- a/drivers/net/can/spi/mcp251x.c +++ b/drivers/net/can/spi/mcp251x.c @@ -962,6 +962,14 @@ static int mcp251x_open(struct net_device *net) priv->wq = alloc_workqueue("mcp251x_wq", WQ_FREEZABLE | WQ_MEM_RECLAIM, 0); + if (unlikely(!priv->wq)) { + dev_err(&spi->dev, "failed to allocate work queue\n"); + mcp251x_power_enable(priv->transceiver, 0); + close_candev(net); + ret = -ENOMEM; + goto open_unlock; + } + INIT_WORK(&priv->tx_work, mcp251x_tx_work_handler); INIT_WORK(&priv->restart_work, mcp251x_restart_work_handler); -- 2.17.1