Thread (2 messages) flat view 2 messages, 2 authors, 3d ago

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help