From: Adriano Cordova <adrianox@gmail.com>
To: Jakub Kicinski <kuba@kernel.org>, netdev@vger.kernel.org
Cc: Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>,
linux-kernel@vger.kernel.org,
Adriano Cordova <adrianox@gmail.com>,
syzbot+989ff6506f5c6d1ff56b@syzkaller.appspot.com
Subject: [PATCH net] netdevsim: take bus device refcount before registering device
Date: Mon, 31 Aug 2026 14:39:52 -0400 [thread overview]
Message-ID: <20260831183952.1345042-1-adrianox@gmail.com> (raw)
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.
Reported-by: syzbot+989ff6506f5c6d1ff56b@syzkaller.appspot.com
Closes: https://syzkaller.appspot.com/bug?extid=989ff6506f5c6d1ff56b
Fixes: 6aff7cbfe7bfa ("netdevsim: Block until all devices are released")
Signed-off-by: Adriano Cordova <adrianox@gmail.com>
---
drivers/net/netdevsim/bus.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/netdevsim/bus.c b/drivers/net/netdevsim/bus.c
index 5c55c308487b..426fb438b922 100644
--- a/drivers/net/netdevsim/bus.c
+++ b/drivers/net/netdevsim/bus.c
@@ -194,7 +194,6 @@ new_device_store(const struct bus_type *bus, const char *buf, size_t count)
goto err;
}
- refcount_inc(&nsim_bus_devs);
/* Allow using nsim_bus_dev */
smp_store_release(&nsim_bus_dev->init, true);
@@ -465,6 +464,7 @@ nsim_bus_dev_new(unsigned int id, unsigned int port_count, unsigned int num_queu
/* Disallow using nsim_bus_dev */
smp_store_release(&nsim_bus_dev->init, false);
+ refcount_inc(&nsim_bus_devs);
err = device_register(&nsim_bus_dev->dev);
if (err)
goto err_nsim_bus_dev_id_free;
--
2.51.0
next reply other threads:[~2026-08-31 18:40 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-31 18:39 Adriano Cordova [this message]
2026-09-02 0:06 ` [PATCH net] netdevsim: take bus device refcount before registering device Jakub Kicinski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260831183952.1345042-1-adrianox@gmail.com \
--to=adrianox@gmail.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=syzbot+989ff6506f5c6d1ff56b@syzkaller.appspot.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.