Message ID | ad7ee11e-eb7a-4975-9122-547e13a161d8@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 344f7a4651497ffc62166ec6318b33f79d71c3df |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [v2,net-next] ethtool: ignore unused/unreliable fields in set_eee op | expand |
On Sat, Mar 02, 2024 at 03:18:27PM +0100, Heiner Kallweit wrote: > This function is used with the set_eee() ethtool operation. Certain > fields of struct ethtool_keee() are relevant only for the get_eee() > operation. In addition, in case of the ioctl interface, we have no > guarantee that userspace sends sane values in struct ethtool_eee. > Therefore explicitly ignore all fields not needed for set_eee(). > This protects from drivers trying to use unchecked and unreliable > data, relying on specific userspace behavior. > > Note: Such unsafe driver behavior has been found and fixed in the > tg3 driver. > > Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Andrew
Hello: This patch was applied to netdev/net-next.git (main) by Jakub Kicinski <kuba@kernel.org>: On Sat, 2 Mar 2024 15:18:27 +0100 you wrote: > This function is used with the set_eee() ethtool operation. Certain > fields of struct ethtool_keee() are relevant only for the get_eee() > operation. In addition, in case of the ioctl interface, we have no > guarantee that userspace sends sane values in struct ethtool_eee. > Therefore explicitly ignore all fields not needed for set_eee(). > This protects from drivers trying to use unchecked and unreliable > data, relying on specific userspace behavior. > > [...] Here is the summary with links: - [v2,net-next] ethtool: ignore unused/unreliable fields in set_eee op https://git.kernel.org/netdev/net-next/c/344f7a465149 You are awesome, thank you!
diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c index 317308bdb..5a55270aa 100644 --- a/net/ethtool/ioctl.c +++ b/net/ethtool/ioctl.c @@ -1514,17 +1514,12 @@ static void eee_to_keee(struct ethtool_keee *keee, { memset(keee, 0, sizeof(*keee)); - keee->eee_active = eee->eee_active; keee->eee_enabled = eee->eee_enabled; keee->tx_lpi_enabled = eee->tx_lpi_enabled; keee->tx_lpi_timer = eee->tx_lpi_timer; - ethtool_convert_legacy_u32_to_link_mode(keee->supported, - eee->supported); ethtool_convert_legacy_u32_to_link_mode(keee->advertised, eee->advertised); - ethtool_convert_legacy_u32_to_link_mode(keee->lp_advertised, - eee->lp_advertised); } static void keee_to_eee(struct ethtool_eee *eee,
This function is used with the set_eee() ethtool operation. Certain fields of struct ethtool_keee() are relevant only for the get_eee() operation. In addition, in case of the ioctl interface, we have no guarantee that userspace sends sane values in struct ethtool_eee. Therefore explicitly ignore all fields not needed for set_eee(). This protects from drivers trying to use unchecked and unreliable data, relying on specific userspace behavior. Note: Such unsafe driver behavior has been found and fixed in the tg3 driver. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> --- v2: - rebased --- net/ethtool/ioctl.c | 5 ----- 1 file changed, 5 deletions(-)