diff mbox series

[net] ixgbe: Fix NULL pointer dereference in ethtool loopback test

Message ID 161523611656.36376.3641992659589167121.stgit@localhost.localdomain (mailing list archive)
State Awaiting Upstream
Delegated to: Netdev Maintainers
Headers show
Series [net] ixgbe: Fix NULL pointer dereference in ethtool loopback test | expand

Checks

Context Check Description
netdev/cover_letter success Link
netdev/fixes_present success Link
netdev/patch_count success Link
netdev/tree_selection success Clearly marked for net
netdev/subject_prefix success Link
netdev/cc_maintainers fail 5 blamed authors not CCed: tariqt@nvidia.com daniel@iogearbox.net mst@redhat.com ilias.apalodimas@linaro.org bjorn@kernel.org; 7 maintainers not CCed: tariqt@nvidia.com daniel@iogearbox.net mst@redhat.com ilias.apalodimas@linaro.org bjorn@kernel.org davem@davemloft.net kuba@kernel.org
netdev/source_inline success Was 0 now: 0
netdev/verify_signedoff success Link
netdev/module_param success Was 0 now: 0
netdev/build_32bit success Errors and warnings before: 3 this patch: 3
netdev/kdoc success Errors and warnings before: 2 this patch: 2
netdev/verify_fixes success Link
netdev/checkpatch warning WARNING: line length of 82 exceeds 80 columns
netdev/build_allmodconfig_warn success Errors and warnings before: 3 this patch: 3
netdev/header_inline success Link

Commit Message

Alexander Duyck March 8, 2021, 8:41 p.m. UTC
From: Alexander Duyck <alexanderduyck@fb.com>

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>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Björn Töpel March 9, 2021, 7:29 a.m. UTC | #1
On Mon, 8 Mar 2021 at 21:42, Alexander Duyck <alexander.duyck@gmail.com> wrote:
>
> From: Alexander Duyck <alexanderduyck@fb.com>
>
> 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>

Thanks Alex!

Acked-by: Björn Töpel <bjorn.topel@intel.com>

I'll look into if this applies to the other Intel drivers as well.


Björn
[...]
Switzer, David April 9, 2021, 7:39 p.m. UTC | #2
>-----Original Message-----
>From: Alexander Duyck <alexander.duyck@gmail.com>
>Sent: Monday, March 8, 2021 12:42 PM
>To: intel-wired-lan@lists.osuosl.org
>Cc: Brandeburg, Jesse <jesse.brandeburg@intel.com>; Nguyen, Anthony L
><anthony.l.nguyen@intel.com>; netdev@vger.kernel.org
>Subject: [net PATCH] ixgbe: Fix NULL pointer dereference in ethtool loopback test
>
>From: Alexander Duyck <alexanderduyck@fb.com>
>
>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>
>---
> drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |    9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
Tested-by: Dave Switzer <david.switzer@intel.com>
diff mbox series

Patch

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index fae84202d870..724cdd669957 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -6534,6 +6534,13 @@  static int ixgbe_setup_all_tx_resources(struct ixgbe_adapter *adapter)
 	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
@@ -6582,7 +6589,7 @@  int ixgbe_setup_rx_resources(struct ixgbe_adapter *adapter,
 
 	/* 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;