Skip to content

Commit 0276af2

Browse files
julianwiedmannkuba-moo
authored andcommitted
ethtool: ioctl: fix potential NULL deref in ethtool_set_coalesce()
ethtool_set_coalesce() now uses both the .get_coalesce() and .set_coalesce() callbacks. But the check for their availability is buggy, so changing the coalesce settings on a device where the driver provides only _one_ of the callbacks results in a NULL pointer dereference instead of an -EOPNOTSUPP. Fix the condition so that the availability of both callbacks is ensured. This also matches the netlink code. Note that reproducing this requires some effort - it only affects the legacy ioctl path, and needs a specific combination of driver options: - have .get_coalesce() and .coalesce_supported but no .set_coalesce(), or - have .set_coalesce() but no .get_coalesce(). Here eg. ethtool doesn't cause the crash as it first attempts to call ethtool_get_coalesce() and bails out on error. Fixes: f3ccfda ("ethtool: extend coalesce setting uAPI with CQE mode") Cc: Yufeng Mo <[email protected]> Cc: Huazhong Tan <[email protected]> Cc: Andrew Lunn <[email protected]> Cc: Heiner Kallweit <[email protected]> Signed-off-by: Julian Wiedmann <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent c26381f commit 0276af2

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

net/ethtool/ioctl.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1719,7 +1719,7 @@ static noinline_for_stack int ethtool_set_coalesce(struct net_device *dev,
17191719
struct ethtool_coalesce coalesce;
17201720
int ret;
17211721

1722-
if (!dev->ethtool_ops->set_coalesce && !dev->ethtool_ops->get_coalesce)
1722+
if (!dev->ethtool_ops->set_coalesce || !dev->ethtool_ops->get_coalesce)
17231723
return -EOPNOTSUPP;
17241724

17251725
ret = dev->ethtool_ops->get_coalesce(dev, &coalesce, &kernel_coalesce,

0 commit comments

Comments
 (0)