Message ID | 4806ef46-a162-4782-8c15-17e12ad88de7@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] ethtool: ignore unused/unreliable fields in set_eee op | expand |
On Wed, Feb 21, 2024 at 08:24:40AM +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> > --- > net/ethtool/ioctl.c | 7 ------- > 1 file changed, 7 deletions(-) > > diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c > index 1763e8b69..ff28c113b 100644 > --- a/net/ethtool/ioctl.c > +++ b/net/ethtool/ioctl.c > @@ -1513,20 +1513,13 @@ static void eee_to_keee(struct ethtool_keee *keee, > { > memset(keee, 0, sizeof(*keee)); > > - keee->supported_u32 = eee->supported; > keee->advertised_u32 = eee->advertised; > - keee->lp_advertised_u32 = eee->lp_advertised; This overlaps with the last patch in my series, which removes all the _u32 members from keee. They are no longer used at the end of my series. I added this removal patch because i kept missing a _u32, and i wanted the compiler to tell me. Andrew
On 21.02.2024 16:41, Andrew Lunn wrote: > On Wed, Feb 21, 2024 at 08:24:40AM +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> >> --- >> net/ethtool/ioctl.c | 7 ------- >> 1 file changed, 7 deletions(-) >> >> diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c >> index 1763e8b69..ff28c113b 100644 >> --- a/net/ethtool/ioctl.c >> +++ b/net/ethtool/ioctl.c >> @@ -1513,20 +1513,13 @@ static void eee_to_keee(struct ethtool_keee *keee, >> { >> memset(keee, 0, sizeof(*keee)); >> >> - keee->supported_u32 = eee->supported; >> keee->advertised_u32 = eee->advertised; >> - keee->lp_advertised_u32 = eee->lp_advertised; > > This overlaps with the last patch in my series, which removes all the > _u32 members from keee. They are no longer used at the end of my > series. I added this removal patch because i kept missing a _u32, and > i wanted the compiler to tell me. > Ah, didn't see this. Then I'll wait for your series to be applied, afterwards will check whether parts of my patch are still applicable. > Andrew Heiner
diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c index 1763e8b69..ff28c113b 100644 --- a/net/ethtool/ioctl.c +++ b/net/ethtool/ioctl.c @@ -1513,20 +1513,13 @@ static void eee_to_keee(struct ethtool_keee *keee, { memset(keee, 0, sizeof(*keee)); - keee->supported_u32 = eee->supported; keee->advertised_u32 = eee->advertised; - keee->lp_advertised_u32 = eee->lp_advertised; - 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> --- net/ethtool/ioctl.c | 7 ------- 1 file changed, 7 deletions(-)