From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932540AbdJKFj5 (ORCPT ); Wed, 11 Oct 2017 01:39:57 -0400 Received: from a2nlsmtp01-03.prod.iad2.secureserver.net ([198.71.225.37]:40082 "EHLO a2nlsmtp01-03.prod.iad2.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750729AbdJKFj4 (ORCPT ); Wed, 11 Oct 2017 01:39:56 -0400 x-originating-ip: 107.180.71.197 From: kys@exchange.microsoft.com To: gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, devel@linuxdriverproject.org, olaf@aepfle.de, apw@canonical.com, vkuznets@redhat.com, jasowang@redhat.com, leann.ogasawara@canonical.com, marcelo.cerri@canonical.com, sthemmin@microsoft.com Cc: Dexuan Cui , Haiyang Zhang , "K . Y . Srinivasan" Subject: [PATCH 1/1] vmbus: hvsock: add proper sync for vmbus_hvsock_device_unregister() Date: Tue, 10 Oct 2017 22:38:51 -0700 Message-Id: <20171011053851.4857-1-kys@exchange.microsoft.com> X-Mailer: git-send-email 2.14.1 Reply-To: kys@microsoft.com X-CMAE-Envelope: MS4wfJjzHPFFyKQA3hSSsdGqKJcwZPkRHxtaiY/y4iK6BhgBWLfRW0BAd3Bd860Di9wMENp68RJPV2sYLBZTrNu1nhq82MoT8UtHXFx6SrLlEmD1xk7qwpnT 8SR0qhcmY5nsRKQmyLseRWM7pgWALaMR8S/vI1zr0QdT9yuw/kSJYx0Xk4lyQiJF8jpm0mnPRYevY+IFj4RxkypQzrhodzQWkvFS1dOLjlDO/cdGCVz+L4vn pbW8GSB41lksrpmKb9M8LKNSmBXKtJ6bGCRLGPeQrBU74pNT+JZ3OH3RnybKAbTgSrjh8ZI6aRSNYvT5XNF7FTJs3w47XHVStnei6Q8rM598/NY+rlg9tGDr XnnPVF6NiHn987ODHvKxr57nud+bKpgZ2TXrjvem8IeFmmfNn38nH+5KZojcLusqORv/wmVyk7yQrJMdYB6Gb62Wn8qYon5nBzDQrIWZhHXF4sjw3cYZENvr XjqdAbKjzX6P3UhzZDxV75A2KeF7SomC7Qvh8VJkzxiimJeeJoALbQYYNJomNcC6XgZrd/USUBhJ5sC+RYkJMDNCjDJdViYOIkpEf718FHe3oB5cfA15i61P 0cECHMYfGFZ0WcWSWfWLp1gL Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dexuan Cui 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). Please consider this for 4.14. Signed-off-by: Dexuan Cui Cc: Haiyang Zhang Cc: Stephen Hemminger Signed-off-by: K. Y. Srinivasan --- drivers/hv/channel_mgmt.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c index 018d2e0f8ec5..379b0df123be 100644 --- a/drivers/hv/channel_mgmt.c +++ b/drivers/hv/channel_mgmt.c @@ -937,7 +937,10 @@ void vmbus_hvsock_device_unregister(struct vmbus_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); } EXPORT_SYMBOL_GPL(vmbus_hvsock_device_unregister); -- 2.14.1