summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/net
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2026-07-21 16:39:50 +0000
committerJakub Kicinski <kuba@kernel.org>2026-07-22 10:20:34 -0700
commit24d0af194bcca043bd82f8a0842a051cdde266ee (patch)
tree1f5549344bc206cd37fc3f20d0a1c9a35d0be773 /tools/testing/selftests/net
parentfcaf2221b9703af2f2285fad1a13a4171b8368dd (diff)
downloadlinux-next-24d0af194bcca043bd82f8a0842a051cdde266ee.tar.gz
linux-next-24d0af194bcca043bd82f8a0842a051cdde266ee.zip
geneve: fix geneve_config leak on register_netdevice() failure
When geneve_configure() allocates a new geneve_config structure via geneve_config_alloc() and assigns it to geneve->cfg before calling register_netdevice(), if register_netdevice() fails early (for example, in dev_get_valid_name() due to an invalid or duplicate interface name), register_netdevice() exits without calling dev->priv_destructor. The caller (e.g. rtnl_newlink()) subsequently calls free_netdev(), which frees the net_device structure directly via kvfree() because reg_state is NETREG_UNINITIALIZED, bypassing dev->priv_destructor (geneve_free_dev()). As a result, the newly allocated geneve_config and its per-CPU dst_cache are leaked. Fix this by invoking geneve_free_dev(dev) directly on the error path of register_netdevice(). Since geneve_free_dev() sets geneve->cfg to NULL, this call is fully idempotent and safe even if register_netdevice() failed on a later error path that already ran dev->priv_destructor. Fixes: 0ba269933f73 ("geneve: convert config to RCU-protected pointer") Signed-off-by: Eric Dumazet <edumazet@google.com> Link: https://patch.msgid.link/20260721163950.1483019-1-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'tools/testing/selftests/net')
0 files changed, 0 insertions, 0 deletions