From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755402AbcCWPGZ (ORCPT ); Wed, 23 Mar 2016 11:06:25 -0400 Received: from p3plsmtps2ded02.prod.phx3.secureserver.net ([208.109.80.59]:55878 "EHLO p3plsmtps2ded02.prod.phx3.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752415AbcCWPGX (ORCPT ); Wed, 23 Mar 2016 11:06:23 -0400 x-originating-ip: 72.167.245.219 From: Haiyang Zhang To: davem@davemloft.net, netdev@vger.kernel.org Cc: haiyangz@microsoft.com, kys@microsoft.com, olaf@aepfle.de, vkuznets@redhat.com, linux-kernel@vger.kernel.org, driverdev-devel@linuxdriverproject.org Subject: [PATCH net-next,1/2] hv_netvsc: Fix accessing freed memory in netvsc_change_mtu() Date: Wed, 23 Mar 2016 09:43:09 -0700 Message-Id: <1458751390-26971-1-git-send-email-haiyangz@microsoft.com> X-Mailer: git-send-email 1.7.4.1 X-CMAE-Envelope: MS4wfJss8l4GDwcPR2vtQ/VOXdQdxMmTC1SMSxHX1stXRKXduOOnGD3enQ06dErFNNVQe2+Wv6m5J2RDyQxJuok9ULXE8LvwZUFMQOFfMR2EreP9QtoAfsi9 gzJdUlkc84gDp3ND4RtcYJ+DGQqNilHr8Rw5SOid908mtj13AQF+G3Q9Vq5rLIHkLmtwO5vr9X+28SPO8ypMb0wi6mVrbBxWuJaoKiUALs5SZPhvD40lN1kb brBTZlZA1NXoYV+8FtULJEt2mJ0Hrf0GdFwcaBaUUD+aoJ2KNjgGf7ChY/ot0awOUeEm2YEvC22A35DsvbIPGHd/DlAYA5iEqY5KYUTyOz3ysUloN6Tv9D8s EbpWXXjIoKbEXpvd2uF7/Ox/sVGtW2wQPOFkrd+AXY+YCsDuT/xICazcqz4nA2r7NAW42wdz/rUYU+BOHMhOWU/zJs+k2A== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org struct netvsc_device is freed in rndis_filter_device_remove(). So we save the nvdev->num_chn into a temp variable for later usage. (Please also include this patch into stable branch.) Signed-off-by: Haiyang Zhang Reviewed-by: K. Y. Srinivasan --- drivers/net/hyperv/netvsc_drv.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index 0860849..b8121eb 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -858,6 +858,7 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu) struct netvsc_device *nvdev = hv_get_drvdata(hdev); struct netvsc_device_info device_info; int limit = ETH_DATA_LEN; + u32 num_chn; int ret = 0; if (nvdev == NULL || nvdev->destroy) @@ -873,6 +874,8 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu) if (ret) goto out; + num_chn = nvdev->num_chn; + nvdev->start_remove = true; rndis_filter_device_remove(hdev); @@ -883,7 +886,7 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu) memset(&device_info, 0, sizeof(device_info)); device_info.ring_size = ring_size; - device_info.num_chn = nvdev->num_chn; + device_info.num_chn = num_chn; device_info.max_num_vrss_chns = max_num_vrss_chns; rndis_filter_device_add(hdev, &device_info); -- 1.7.4.1