Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

net: ethtool: fix compat with old RSS context API

Device driver gets access to rxfh_dev, while rxfh is just a local
copy of user space params. We need to check what RSS context ID
driver assigned in rxfh_dev, not rxfh.

Using rxfh leads to trying to store all contexts at index 0xffffffff.
From the user perspective it leads to "driver chose duplicate ID"
warnings when second context is added and inability to access any
contexts even tho they were successfully created - xa_load() for
the actual context ID will return NULL, and syscall will return -ENOENT.

Looks like a rebasing mistake, since rxfh_dev was added relatively
recently by commit fb6e30a72539 ("net: ethtool: pass a pointer to
parameters to get/set_rxfh ethtool ops").

Fixes: eac9122f0c41 ("net: ethtool: record custom RSS contexts in the XArray")
Reviewed-by: Edward Cree <ecree.xilinx@gmail.com>
Link: https://patch.msgid.link/20240702164157.4018425-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+2 -2
+2 -2
net/ethtool/ioctl.c
··· 1483 1483 /* Update rss_ctx tracking */ 1484 1484 if (create && !ops->create_rxfh_context) { 1485 1485 /* driver uses old API, it chose context ID */ 1486 - if (WARN_ON(xa_load(&dev->ethtool->rss_ctx, rxfh.rss_context))) { 1486 + if (WARN_ON(xa_load(&dev->ethtool->rss_ctx, rxfh_dev.rss_context))) { 1487 1487 /* context ID reused, our tracking is screwed */ 1488 1488 kfree(ctx); 1489 1489 goto out; 1490 1490 } 1491 1491 /* Allocate the exact ID the driver gave us */ 1492 - if (xa_is_err(xa_store(&dev->ethtool->rss_ctx, rxfh.rss_context, 1492 + if (xa_is_err(xa_store(&dev->ethtool->rss_ctx, rxfh_dev.rss_context, 1493 1493 ctx, GFP_KERNEL))) { 1494 1494 kfree(ctx); 1495 1495 goto out;