mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-06 14:31:46 +00:00
vmbus: hvsock: add proper sync for vmbus_hvsock_device_unregister()
Without the patch, vmbus_hvsock_device_unregister() can destroy the device prematurely when close() is called, and can cause NULl dereferencing or potential data loss (the last portion of the data stream may be dropped prematurely). Signed-off-by: Dexuan Cui <decui@microsoft.com> Cc: Haiyang Zhang <haiyangz@microsoft.com> Cc: Stephen Hemminger <sthemmin@microsoft.com> Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
66b83a4cdd
commit
9d35593b4f
1 changed files with 4 additions and 1 deletions
|
@ -937,7 +937,10 @@ void vmbus_hvsock_device_unregister(struct vmbus_channel *channel)
|
||||||
{
|
{
|
||||||
BUG_ON(!is_hvsock_channel(channel));
|
BUG_ON(!is_hvsock_channel(channel));
|
||||||
|
|
||||||
channel->rescind = true;
|
/* We always get a rescind msg when a connection is closed. */
|
||||||
|
while (!READ_ONCE(channel->probe_done) || !READ_ONCE(channel->rescind))
|
||||||
|
msleep(1);
|
||||||
|
|
||||||
vmbus_device_unregister(channel->device_obj);
|
vmbus_device_unregister(channel->device_obj);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(vmbus_hvsock_device_unregister);
|
EXPORT_SYMBOL_GPL(vmbus_hvsock_device_unregister);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue