From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936536AbdJRJJq (ORCPT ); Wed, 18 Oct 2017 05:09:46 -0400 Received: from a2nlsmtp01-05.prod.iad2.secureserver.net ([198.71.225.49]:47820 "EHLO a2nlsmtp01-05.prod.iad2.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932715AbdJRJJo (ORCPT ); Wed, 18 Oct 2017 05:09:44 -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 V2 1/1] vmbus: hvsock: add proper sync for vmbus_hvsock_device_unregister() Date: Wed, 18 Oct 2017 02:08:40 -0700 Message-Id: <20171018090840.4603-1-kys@exchange.microsoft.com> X-Mailer: git-send-email 2.14.1 Reply-To: kys@microsoft.com X-CMAE-Envelope: MS4wfH4kTj/EAxzYBy/HYvMSUrKouNmsUo3ReliE+C7moEYuABZGEvGudR0j/niMeFZlfPFn8DdzSilxuQlUnXMv0528kc3wdKLwuz/PjGyW1LIUi2uDK/IC T34hnCYOae3H2PW+VTubYQ+USH9aMEn6OV9SmwxCa7tblGnKqTXf4G5goKt4z+tWMzgCrQXic3xvit4WxfYmAYFsxaqgR/aRXcgC0PBJ1IPM/4wPOOraigJl WpfuDyyJ3WFOl5zoqXpkxMHkwCZsikSjFDCfENPnyj6+cWVsqqJ+5VtNscAS/r5TESTXiQBJn2rlRX905s6vNwHtopbcW8XqEVyDgcQj/05nmPADcn1tRt+F K+GqBkH0Sc+HFPBouD02lEocGPTUbfehC0USS0dxSozEu7HA0CpxLX9CiwBURJpNIRvw2cN9dh8xubFAIjqD8Bj3PVoS+LD+ps+7At052KY41XFLMOr4IsSK nRlSglfgOOIA1TXetQB1feePjTPT06nzxrjmVH7k7WIfjvyRg9/F3LgRRVx2mlYbtEhhNZQzb7yHZzzLJ0RVgOFkO49Mx5gZNTm01L023pzaaptBHlaEAi4i oNSzTwfJ9BwydZSCj5hXCQtk 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). Signed-off-by: Dexuan Cui Cc: Haiyang Zhang Cc: Stephen Hemminger Signed-off-by: K. Y. Srinivasan --- Please consider this for 4.14. V2: Moved some comments around (Dan Carpenter) 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