From: Yuqiang Sun <izaiahsun@gmail.com>
To: haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com
Cc: mhklinux@outlook.com, stephen@networkplumber.org,
linmq006@gmail.com, linux-hyperv@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH 0/2] Drivers: hv: vmbus: Fix the error paths of channel setup
Date: Mon, 2 Nov 2026 17:47:17 +0800 [thread overview]
Message-ID: <20261102094719.35760-1-izaiahsun@gmail.com> (raw)
When setting up a channel fails, vmbus_add_channel_work() and
vmbus_device_register() do not agree on who cleans up:
- vmbus_add_channel_kobj() drops the channel's last reference when it
fails, and its callers then use the channel and drop it again (patch 1;
this is what our static analysis reported, for the sub-channel path).
Paths that fail before it put a kobject that was never initialized.
- When vmbus_device_register() fails, the device's release calls
hv_process_channel_removal() on a channel that was not rescinded, which
hits BUG_ON(!channel->rescind); vmbus_add_channel_work() would then
clean the channel up a second time (patch 2).
Testing: QEMU (x86_64, KVM, kvm=off with the hv-* enlightenments,
vmbus-bridge and hv-balloon) with KASAN, hv_vmbus and hv_balloon as
modules loaded from init after failslab is armed, on mainline
d135ab453a74. failslab is limited to allocations under
vmbus_device_register(), and fails the N-th one when the hv-balloon
offer is processed. Without the series, every run hits the BUG_ON:
24 of 24 with the failure in device_register(), and 30 of 30 with it in
the channels kset, the channel's kobject_add() or its sysfs group.
With both patches, all 54 runs leave the offer unbound with "unable to
add child device object" and report nothing (no BUG, KASAN, WARNING or
refcount_t message). The sub-channel path of patch 1 is not covered:
QEMU's VMBus offers no sub-channels.
The failures need an allocation failure while the guest processes a
channel offer from the host.
Yuqiang Sun (2):
Drivers: hv: vmbus: Keep the channel when vmbus_add_channel_kobj()
fails
Drivers: hv: vmbus: Do not remove the channel when device registration
fails
drivers/hv/channel_mgmt.c | 5 +++--
drivers/hv/hyperv_vmbus.h | 1 +
drivers/hv/vmbus_drv.c | 43 +++++++++++++++++++++++++++++----------
3 files changed, 36 insertions(+), 13 deletions(-)
base-commit: d135ab453a7400a34930bdda1ef4bdc8acfac80e
--
2.53.0
next reply other threads:[~2026-11-02 9:47 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-02 9:47 Yuqiang Sun [this message]
2026-11-02 9:47 ` [PATCH 1/2] Drivers: hv: vmbus: Keep the channel when vmbus_add_channel_kobj() fails Yuqiang Sun
2026-11-02 9:47 ` [PATCH 2/2] Drivers: hv: vmbus: Do not remove the channel when device registration fails Yuqiang Sun
2026-11-02 10:06 ` sashiko-bot
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=20261102094719.35760-1-izaiahsun@gmail.com \
--to=izaiahsun@gmail.com \
--cc=decui@microsoft.com \
--cc=haiyangz@microsoft.com \
--cc=linmq006@gmail.com \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mhklinux@outlook.com \
--cc=stephen@networkplumber.org \
--cc=wei.liu@kernel.org \
/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.