| From 19abf6728e9618986b7f8efd6595330cb77b575d Mon Sep 17 00:00:00 2001 |
| From: Arthur Kiyanovski <akiyano@amazon.com> |
| Date: Tue, 9 Oct 2018 11:21:29 +0300 |
| Subject: net: ena: fix NULL dereference due to untimely napi initialization |
| |
| [ Upstream commit 78a55d05def95144ca5fa9a64c49b2a0636a9866 ] |
| |
| napi poll functions should be initialized before running request_irq(), |
| to handle a rare condition where there is a pending interrupt, causing |
| the ISR to fire immediately while the poll function wasn't set yet, |
| causing a NULL dereference. |
| |
| Fixes: 1738cd3ed342 ("net: ena: Add a driver for Amazon Elastic Network Adapters (ENA)") |
| Signed-off-by: Arthur Kiyanovski <akiyano@amazon.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/amazon/ena/ena_netdev.c | 9 +++++++-- |
| 1 file changed, 7 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c |
| index 1d92e034febc..0c298878bf46 100644 |
| --- a/drivers/net/ethernet/amazon/ena/ena_netdev.c |
| +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c |
| @@ -1482,8 +1482,6 @@ static int ena_up_complete(struct ena_adapter *adapter) |
| if (rc) |
| return rc; |
| |
| - ena_init_napi(adapter); |
| - |
| ena_change_mtu(adapter->netdev, adapter->netdev->mtu); |
| |
| ena_refill_all_rx_bufs(adapter); |
| @@ -1643,6 +1641,13 @@ static int ena_up(struct ena_adapter *adapter) |
| |
| ena_setup_io_intr(adapter); |
| |
| + /* napi poll functions should be initialized before running |
| + * request_irq(), to handle a rare condition where there is a pending |
| + * interrupt, causing the ISR to fire immediately while the poll |
| + * function wasn't set yet, causing a null dereference |
| + */ |
| + ena_init_napi(adapter); |
| + |
| rc = ena_request_io_irq(adapter); |
| if (rc) |
| goto err_req_irq; |
| -- |
| 2.17.1 |
| |