Re: [PATCH net] netdevsim: take bus device refcount before registering device
From: Jakub Kicinski <kuba@kernel.org>
Date: 2026-09-02 00:06:27
Also in:
lkml
On Mon, 31 Aug 2026 14:39:52 -0400 Adriano Cordova wrote:
nsim_bus_dev_release() drops nsim_bus_devs when a device is freed, but the matching increment was done in new_device_store() only after nsim_bus_dev_new() returned successfully. When device_register() failed inside nsim_bus_dev_new(), put_device() invoked the release callback and decremented nsim_bus_devs without the increment, driving the refcount to zero. A later successful device creation then incremented from zero and triggered: refcount_t: addition on 0; use-after-free. Increment nsim_bus_devs in nsim_bus_dev_new() before device_register() so the release callback's decrement is balanced on both the success and error paths.
This is still racy, please squash this into v2:
@@ -520,8 +520,6 @@ void nsim_bus_exit(void) /* Disallow using resources */ smp_store_release(&nsim_bus_enable, false); - if (refcount_dec_and_test(&nsim_bus_devs)) - complete(&nsim_bus_devs_released); mutex_lock(&nsim_bus_dev_list_lock); list_for_each_entry_safe(nsim_bus_dev, tmp, &nsim_bus_dev_list, list) {
@@ -530,6 +528,9 @@ void nsim_bus_exit(void) } mutex_unlock(&nsim_bus_dev_list_lock); + if (refcount_dec_and_test(&nsim_bus_devs)) + complete(&nsim_bus_devs_released); + wait_for_completion(&nsim_bus_devs_released); driver_unregister(&nsim_driver);
--
pw-bot: cr