| From 31166efb1cee348eb6314e9c0095d84cbeb66b9d Mon Sep 17 00:00:00 2001 |
| From: Alexander Duyck <alexanderduyck@fb.com> |
| Date: Mon, 8 Mar 2021 12:41:56 -0800 |
| Subject: ixgbe: Fix NULL pointer dereference in ethtool loopback test |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Alexander Duyck <alexanderduyck@fb.com> |
| |
| commit 31166efb1cee348eb6314e9c0095d84cbeb66b9d upstream. |
| |
| The ixgbe driver currently generates a NULL pointer dereference when |
| performing the ethtool loopback test. This is due to the fact that there |
| isn't a q_vector associated with the test ring when it is setup as |
| interrupts are not normally added to the test rings. |
| |
| To address this I have added code that will check for a q_vector before |
| returning a napi_id value. If a q_vector is not present it will return a |
| value of 0. |
| |
| Fixes: b02e5a0ebb17 ("xsk: Propagate napi_id to XDP socket Rx path") |
| Signed-off-by: Alexander Duyck <alexanderduyck@fb.com> |
| Acked-by: Björn Töpel <bjorn.topel@intel.com> |
| Tested-by: Dave Switzer <david.switzer@intel.com> |
| Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 9 ++++++++- |
| 1 file changed, 8 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |
| +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |
| @@ -6540,6 +6540,13 @@ err_setup_tx: |
| return err; |
| } |
| |
| +static int ixgbe_rx_napi_id(struct ixgbe_ring *rx_ring) |
| +{ |
| + struct ixgbe_q_vector *q_vector = rx_ring->q_vector; |
| + |
| + return q_vector ? q_vector->napi.napi_id : 0; |
| +} |
| + |
| /** |
| * ixgbe_setup_rx_resources - allocate Rx resources (Descriptors) |
| * @adapter: pointer to ixgbe_adapter |
| @@ -6587,7 +6594,7 @@ int ixgbe_setup_rx_resources(struct ixgb |
| |
| /* XDP RX-queue info */ |
| if (xdp_rxq_info_reg(&rx_ring->xdp_rxq, adapter->netdev, |
| - rx_ring->queue_index, rx_ring->q_vector->napi.napi_id) < 0) |
| + rx_ring->queue_index, ixgbe_rx_napi_id(rx_ring)) < 0) |
| goto err; |
| |
| rx_ring->xdp_prog = adapter->xdp_prog; |