Message ID | 20240521-iwl-net-2024-05-14-set-channels-fixes-v2-0-7aa39e2e99f1@intel.com (mailing list archive) |
---|---|
Headers | show |
Series | intel: Interpret .set_channels() input differently | expand |
Hello: This series was applied to netdev/net.git (main) by Paolo Abeni <pabeni@redhat.com>: On Tue, 21 May 2024 12:39:52 -0700 you wrote: > The ice and idpf drivers can trigger a crash with AF_XDP due to incorrect > interpretation of the asymmetric Tx and Rx parameters in their > .set_channels() implementations: > > 1. ethtool -l <IFNAME> -> combined: 40 > 2. Attach AF_XDP to queue 30 > 3. ethtool -L <IFNAME> rx 15 tx 15 > combined number is not specified, so command becomes {rx_count = 15, > tx_count = 15, combined_count = 40}. > 4. ethnl_set_channels checks, if there are any AF_XDP of queues from the > new (combined_count + rx_count) to the old one, so from 55 to 40, check > does not trigger. > 5. the driver interprets `rx 15 tx 15` as 15 combined channels and deletes > the queue that AF_XDP is attached to. > > [...] Here is the summary with links: - [net,v2,1/2] ice: Interpret .set_channels() input differently https://git.kernel.org/netdev/net/c/05d6f442f31f - [net,v2,2/2] idpf: Interpret .set_channels() input differently https://git.kernel.org/netdev/net/c/5e7695e0219b You are awesome, thank you!
The ice and idpf drivers can trigger a crash with AF_XDP due to incorrect interpretation of the asymmetric Tx and Rx parameters in their .set_channels() implementations: 1. ethtool -l <IFNAME> -> combined: 40 2. Attach AF_XDP to queue 30 3. ethtool -L <IFNAME> rx 15 tx 15 combined number is not specified, so command becomes {rx_count = 15, tx_count = 15, combined_count = 40}. 4. ethnl_set_channels checks, if there are any AF_XDP of queues from the new (combined_count + rx_count) to the old one, so from 55 to 40, check does not trigger. 5. the driver interprets `rx 15 tx 15` as 15 combined channels and deletes the queue that AF_XDP is attached to. This is fundamentally a problem with interpreting a request for asymmetric queues as symmetric combined queues. Fix the ice and idpf drivers to stop interpreting such requests as a request for combined queues. Due to current driver design for both ice and idpf, it is not possible to support requests of the same count of Tx and Rx queues with independent interrupts, (i.e. ethtool -L <IFNAME> rx 15 tx 15) so such requests are now rejected. Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> --- Changes in v2: - Remove the unnecessary combined_count check in the ice fix. - Link to v1: https://lore.kernel.org/r/20240514-iwl-net-2024-05-14-set-channels-fixes-v1-0-eb18d88e30c3@intel.com --- Larysa Zaremba (2): ice: Interpret .set_channels() input differently idpf: Interpret .set_channels() input differently drivers/net/ethernet/intel/ice/ice_ethtool.c | 19 ++----------------- drivers/net/ethernet/intel/idpf/idpf_ethtool.c | 21 ++++++--------------- 2 files changed, 8 insertions(+), 32 deletions(-) --- base-commit: e4a87abf588536d1cdfb128595e6e680af5cf3ed change-id: 20240514-iwl-net-2024-05-14-set-channels-fixes-25be6f04a86d Best regards,