From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-12-15 19:35:49
This series contains updates to igb, igbvf, igc and ixgbe drivers.
Karen moves checks for invalid VF MAC filters to occur earlier for
igb.
Letu Ren fixes a double free issue in igbvf probe.
Sasha fixes incorrect min value being used when calculating for max for
igc.
Robert Schlabbach adds documentation on enabling NBASE-T support for
ixgbe.
Cyril Novikov adds missing initialization of MDIO bus speed for ixgbe.
The following are changes since commit 1d1c950faa81e1c287c9e14f307f845b190eb578:
Merge tag 'wireless-drivers-2021-12-15' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers
and are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue 1GbE
Cyril Novikov (1):
ixgbe: set X550 MDIO speed before talking to PHY
Karen Sornek (1):
igb: Fix removal of unicast MAC filters of VFs
Letu Ren (1):
igbvf: fix double free in `igbvf_probe`
Robert Schlabbach (1):
ixgbe: Document how to enable NBASE-T support
Sasha Neftin (1):
igc: Fix typo in i225 LTR functions
.../device_drivers/ethernet/intel/ixgbe.rst | 16 +++++++++++
drivers/net/ethernet/intel/igb/igb_main.c | 28 +++++++++----------
drivers/net/ethernet/intel/igbvf/netdev.c | 1 +
drivers/net/ethernet/intel/igc/igc_i225.c | 2 +-
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 4 +++
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 3 ++
6 files changed, 39 insertions(+), 15 deletions(-)
--
2.31.1
From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-12-15 19:35:50
From: Karen Sornek <redacted>
Move checking condition of VF MAC filter before clearing
or adding MAC filter to VF to prevent potential blackout caused
by removal of necessary and working VF's MAC filter.
Fixes: 1b8b062a99dc ("igb: add VF trust infrastructure")
Signed-off-by: Karen Sornek <redacted>
Tested-by: Konrad Jankowski <redacted>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/igb/igb_main.c | 28 +++++++++++------------
1 file changed, 14 insertions(+), 14 deletions(-)
@@ -7648,6 +7648,20 @@ static int igb_set_vf_mac_filter(struct igb_adapter *adapter, const int vf,structvf_mac_filter*entry=NULL;intret=0;+if((vf_data->flags&IGB_VF_FLAG_PF_SET_MAC)&&+!vf_data->trusted){+dev_warn(&pdev->dev,+"VF %d requested MAC filter but is administratively denied\n",+vf);+return-EINVAL;+}+if(!is_valid_ether_addr(addr)){+dev_warn(&pdev->dev,+"VF %d attempted to set invalid MAC filter\n",+vf);+return-EINVAL;+}+switch(info){caseE1000_VF_MAC_FILTER_CLR:/* remove all unicast MAC filters related to the current VF */
@@ -7661,20 +7675,6 @@ static int igb_set_vf_mac_filter(struct igb_adapter *adapter, const int vf,}break;caseE1000_VF_MAC_FILTER_ADD:-if((vf_data->flags&IGB_VF_FLAG_PF_SET_MAC)&&-!vf_data->trusted){-dev_warn(&pdev->dev,-"VF %d requested MAC filter but is administratively denied\n",-vf);-return-EINVAL;-}-if(!is_valid_ether_addr(addr)){-dev_warn(&pdev->dev,-"VF %d attempted to set invalid MAC filter\n",-vf);-return-EINVAL;-}-/* try to find empty slot in the list */list_for_each(pos,&adapter->vf_macs.l){entry=list_entry(pos,structvf_mac_filter,l);
From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-12-15 19:35:51
From: Letu Ren <redacted>
In `igbvf_probe`, if register_netdev() fails, the program will go to
label err_hw_init, and then to label err_ioremap. In free_netdev() which
is just below label err_ioremap, there is `list_for_each_entry_safe` and
`netif_napi_del` which aims to delete all entries in `dev->napi_list`.
The program has added an entry `adapter->rx_ring->napi` which is added by
`netif_napi_add` in igbvf_alloc_queues(). However, adapter->rx_ring has
been freed below label err_hw_init. So this a UAF.
In terms of how to patch the problem, we can refer to igbvf_remove() and
delete the entry before `adapter->rx_ring`.
The KASAN logs are as follows:
[ 35.126075] BUG: KASAN: use-after-free in free_netdev+0x1fd/0x450
[ 35.127170] Read of size 8 at addr ffff88810126d990 by task modprobe/366
[ 35.128360]
[ 35.128643] CPU: 1 PID: 366 Comm: modprobe Not tainted 5.15.0-rc2+ #14
[ 35.129789] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.12.0-59-gc9ba5276e321-prebuilt.qemu.org 04/01/2014
[ 35.131749] Call Trace:
[ 35.132199] dump_stack_lvl+0x59/0x7b
[ 35.132865] print_address_description+0x7c/0x3b0
[ 35.133707] ? free_netdev+0x1fd/0x450
[ 35.134378] __kasan_report+0x160/0x1c0
[ 35.135063] ? free_netdev+0x1fd/0x450
[ 35.135738] kasan_report+0x4b/0x70
[ 35.136367] free_netdev+0x1fd/0x450
[ 35.137006] igbvf_probe+0x121d/0x1a10 [igbvf]
[ 35.137808] ? igbvf_vlan_rx_add_vid+0x100/0x100 [igbvf]
[ 35.138751] local_pci_probe+0x13c/0x1f0
[ 35.139461] pci_device_probe+0x37e/0x6c0
[ 35.165526]
[ 35.165806] Allocated by task 366:
[ 35.166414] ____kasan_kmalloc+0xc4/0xf0
[ 35.167117] foo_kmem_cache_alloc_trace+0x3c/0x50 [igbvf]
[ 35.168078] igbvf_probe+0x9c5/0x1a10 [igbvf]
[ 35.168866] local_pci_probe+0x13c/0x1f0
[ 35.169565] pci_device_probe+0x37e/0x6c0
[ 35.179713]
[ 35.179993] Freed by task 366:
[ 35.180539] kasan_set_track+0x4c/0x80
[ 35.181211] kasan_set_free_info+0x1f/0x40
[ 35.181942] ____kasan_slab_free+0x103/0x140
[ 35.182703] kfree+0xe3/0x250
[ 35.183239] igbvf_probe+0x1173/0x1a10 [igbvf]
[ 35.184040] local_pci_probe+0x13c/0x1f0
Fixes: d4e0fe01a38a0 (igbvf: add new driver to support 82576 virtual functions)
Reported-by: Zheyu Ma <redacted>
Signed-off-by: Letu Ren <redacted>
Tested-by: Konrad Jankowski <redacted>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/igbvf/netdev.c | 1 +
1 file changed, 1 insertion(+)
From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-12-15 19:35:51
From: Sasha Neftin <redacted>
The LTR maximum value was incorrectly written using the scale from
the LTR minimum value. This would cause incorrect values to be sent,
in cases where the initial calculation lead to different min/max scales.
Fixes: 707abf069548 ("igc: Add initial LTR support")
Suggested-by: Dima Ruinskiy <redacted>
Signed-off-by: Sasha Neftin <redacted>
Tested-by: Nechama Kraus <redacted>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/igc/igc_i225.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-12-15 19:35:52
From: Robert Schlabbach <redacted>
Commit a296d665eae1 ("ixgbe: Add ethtool support to enable 2.5 and 5.0
Gbps support") introduced suppression of the advertisement of NBASE-T
speeds by default, according to Todd Fujinaka to accommodate customers
with network switches which could not cope with advertised NBASE-T
speeds, as posted in the E1000-devel mailing list:
https://sourceforge.net/p/e1000/mailman/message/37106269/
However, the suppression was not documented at all, nor was how to
enable NBASE-T support.
Properly document the NBASE-T suppression and how to enable NBASE-T
support.
Fixes: a296d665eae1 ("ixgbe: Add ethtool support to enable 2.5 and 5.0 Gbps support")
Reported-by: Robert Schlabbach <redacted>
Signed-off-by: Robert Schlabbach <redacted>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
.../device_drivers/ethernet/intel/ixgbe.rst | 16 ++++++++++++++++
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 4 ++++
2 files changed, 20 insertions(+)
@@ -440,6 +440,22 @@ NOTE: For 82599-based network connections, if you are enabling jumbo frames in a virtual function (VF), jumbo frames must first be enabled in the physical function (PF). The VF MTU setting cannot be larger than the PF MTU.+NBASE-T Support+---------------+The ixgbe driver supports NBASE-T on some devices. However, the advertisement+of NBASE-T speeds is suppressed by default, to accommodate broken network+switches which cannot cope with advertised NBASE-T speeds. Use the ethtool+command to enable advertising NBASE-T speeds on devices which support it::++ ethtool -s eth? advertise 0x1800000001028++On Linux systems with INTERFACES(5), this can be specified as a pre-up command+in /etc/network/interfaces so that the interface is always brought up with+NBASE-T support, e.g.::++ iface eth? inet dhcp+ pre-up ethtool -s eth? advertise 0x1800000001028 || true+ Generic Receive Offload, aka GRO -------------------------------- The driver supports the in-kernel software implementation of GRO. GRO has
From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-12-15 19:35:52
From: Cyril Novikov <redacted>
The MDIO bus speed must be initialized before talking to the PHY the first
time in order to avoid talking to it using a speed that the PHY doesn't
support.
This fixes HW initialization error -17 (IXGBE_ERR_PHY_ADDR_INVALID) on
Denverton CPUs (a.k.a. the Atom C3000 family) on ports with a 10Gb network
plugged in. On those devices, HLREG0[MDCSPD] resets to 1, which combined
with the 10Gb network results in a 24MHz MDIO speed, which is apparently
too fast for the connected PHY. PHY register reads over MDIO bus return
garbage, leading to initialization failure.
Reproduced with Linux kernel 4.19 and 5.15-rc7. Can be reproduced using
the following setup:
* Use an Atom C3000 family system with at least one X552 LAN on the SoC
* Disable PXE or other BIOS network initialization if possible
(the interface must not be initialized before Linux boots)
* Connect a live 10Gb Ethernet cable to an X550 port
* Power cycle (not reset, doesn't always work) the system and boot Linux
* Observe: ixgbe interfaces w/ 10GbE cables plugged in fail with error -17
Fixes: e84db7272798 ("ixgbe: Introduce function to control MDIO speed")
Signed-off-by: Cyril Novikov <redacted>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 3 +++
1 file changed, 3 insertions(+)
@@ -3405,6 +3405,9 @@ static s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw)/* flush pending Tx transactions */ixgbe_clear_tx_pending(hw);+/* set MDIO speed before talking to the PHY in case it's the 1st time */+ixgbe_set_mdio_speed(hw);+/* PHY ops must be identified and initialized prior to reset */status=hw->phy.ops.init(hw);if(status==IXGBE_ERR_SFP_NOT_SUPPORTED||
Hello:
This series was applied to netdev/net.git (master)
by Tony Nguyen [off-list ref]:
On Wed, 15 Dec 2021 11:34:29 -0800 you wrote:
This series contains updates to igb, igbvf, igc and ixgbe drivers.
Karen moves checks for invalid VF MAC filters to occur earlier for
igb.
Letu Ren fixes a double free issue in igbvf probe.
[...]