linux/net/devlink
Fernando Fernandez Mancera ef8f0a1d88 devlink: region: fix snapshot id leak on kernel-allocated ids
When DEVLINK_CMD_REGION_NEW is issued without a snapshot id, the kernel
allocates one with __devlink_region_snapshot_id_get(). That helper counts
the caller as a user of the id, and the caller must release this hold
once it is done.

devlink_nl_region_new_doit() never drops it. The refcount of the id goes
1 (allocation) -> 2 (snapshot created) and stays at 2. When the snapshot
is deleted the count only drops to 1, so the id is never erased from
the snapshot_ids xarray. The id then stays in use for the lifetime of
the devlink instance: requesting a snapshot with that explicit id fails
with -EEXIST, and there is no snapshot left to delete to clean it up.

Reproducer steps:
  # devlink region new pci/0000:13:00.0/device-caps
  pci/0000:13:00.0/device-caps: snapshot 0
  # devlink region del pci/0000:13:00.0/device-caps snapshot 0
  # devlink region new pci/0000:13:00.0/device-caps snapshot 0
  kernel answers: File exists

Drop the caller's reference right after the snapshot has been created,
as the snapshot then holds its own.

Fixes: 043b3e2276 ("devlink: let kernel allocate region snapshot id")
Reported-by: Guikun Yang <yangguikun19@qq.com>
Closes: https://lore.kernel.org/netdev/tencent_BE912BA710539F285F9FCF28E854ABEFCD07@qq.com/
Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
Link: https://patch.msgid.link/20261026174403.512-1-fmancera@suse.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-27 15:41:18 -07:00
..
core.c devlink: fix reload error on netns teardown 2026-10-15 19:15:45 -07:00
dev.c devlink: fix reload error on netns teardown 2026-10-15 19:15:45 -07:00
devl_internal.h devlink: fix reload error on netns teardown 2026-10-15 19:15:45 -07:00
dpipe.c devlink: Migrate from info->user_ptr to info->ctx 2026-07-07 11:31:26 +02:00
health.c devlink: Migrate from info->user_ptr to info->ctx 2026-07-07 11:31:26 +02:00
linecard.c devlink: Migrate from info->user_ptr to info->ctx 2026-07-07 11:31:26 +02:00
Makefile devlink: introduce shared devlink instance for PFs on same chip 2026-03-14 13:08:50 -07:00
netlink_gen.c devlink: validate the port index in the rate set request 2026-09-17 18:23:35 -07:00
netlink_gen.h devlink: generate the port function policy from the spec 2026-09-17 18:23:35 -07:00
netlink.c treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
param.c treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
port.c devlink: generate the port function policy from the spec 2026-09-17 18:23:35 -07:00
rate.c devlink: Allow rate node parents from other devlinks 2026-07-07 11:31:26 +02:00
region.c devlink: region: fix snapshot id leak on kernel-allocated ids 2026-10-27 15:41:18 -07:00
resource.c devlink: Migrate from info->user_ptr to info->ctx 2026-07-07 11:31:26 +02:00
sb.c devlink: Migrate from info->user_ptr to info->ctx 2026-07-07 11:31:26 +02:00
sh_dev.c devlink: introduce shared devlink instance for PFs on same chip 2026-03-14 13:08:50 -07:00
trap.c devlink: Migrate from info->user_ptr to info->ctx 2026-07-07 11:31:26 +02:00