From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Haiyang Zhang <haiyangz@microsoft.com>
Cc: davem@davemloft.net, netdev@vger.kernel.org, olaf@aepfle.de,
jasowang@redhat.com, driverdev-devel@linuxdriverproject.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH net-next] hv_netvsc: Fix race condition on Multi-Send Data field
Date: Fri, 11 Dec 2015 14:52:32 +0100 [thread overview]
Message-ID: <87vb85xfbz.fsf@vitty.brq.redhat.com> (raw)
In-Reply-To: <877fklyxiu.fsf@vitty.brq.redhat.com> (Vitaly Kuznetsov's message of "Fri, 11 Dec 2015 13:34:17 +0100")
Vitaly Kuznetsov <vkuznets@redhat.com> writes:
> Haiyang Zhang <haiyangz@microsoft.com> writes:
>
>> In commit 2a04ae8acb14 ("hv_netvsc: remove locking in netvsc_send()"), the
>> locking for MSD (Multi-Send Data) field was removed. This could cause a
>> race condition between RNDIS control messages and data packets processing,
>> because these two types of traffic are not synchronized.
>> This patch fixes this issue by sending control messages out directly
>> without reading MSD field.
>>
>> Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
>> Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>
>> ---
>> drivers/net/hyperv/netvsc.c | 9 +++++++++
>> 1 files changed, 9 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
>> index 02bab9a..059fc52 100644
>> --- a/drivers/net/hyperv/netvsc.c
>> +++ b/drivers/net/hyperv/netvsc.c
>> @@ -867,6 +867,14 @@ int netvsc_send(struct hv_device *device,
>> packet->send_buf_index = NETVSC_INVALID_INDEX;
>> packet->cp_partial = false;
>>
>> + /* Send control message directly without accessing msd (Multi-Send
>> + * Data) field which may be changed during data packet processing.
>> + */
>> + if (!skb) {
>> + cur_send = packet;
>> + goto send_now;
>> + }
>> +
>
> Is is supposed to be applied on top of some other patches? It doesn't
> compile on top of current net-next:
>
> drivers/net/hyperv/netvsc.c: In function ‘netvsc_send’:
> drivers/net/hyperv/netvsc.c:865:7: error: ‘skb’ undeclared (first use in
> this function)
> if (!skb) {
> ^
>
> Did you mean to check rndis_msg instead (as skb is not defined here)?
Oh, my bad, it was me who was looking at the wrong branch... Sorry for
the noise.
>
>> msdp = &net_device->msd[q_idx];
>>
>> /* batch packets in send buffer if possible */
>> @@ -939,6 +947,7 @@ int netvsc_send(struct hv_device *device,
>> }
>> }
>>
>> +send_now:
>> if (cur_send)
>> ret = netvsc_send_pkt(cur_send, net_device, pb, skb);
>
> I suppose we untangle these two pathes completely: let
> rndis_filter_send_request() call netvsc_send_pkt() directly. Please see
> my patch attached (note: it should be split in 3 patches if
> submitted). If you like the idea I can send it.
This patch will need some changes but the suggestion still stands: let's
untangle sending data and control messages.
--
Vitaly
next prev parent reply other threads:[~2015-12-11 13:52 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-10 20:19 [PATCH net-next] hv_netvsc: Fix race condition on Multi-Send Data field Haiyang Zhang
2015-12-10 20:19 ` Haiyang Zhang
2015-12-11 12:34 ` Vitaly Kuznetsov
2015-12-11 13:52 ` Vitaly Kuznetsov [this message]
2015-12-11 15:42 ` Haiyang Zhang
2015-12-11 15:42 ` Haiyang Zhang
2015-12-11 16:00 ` KY Srinivasan
2015-12-11 16:00 ` KY Srinivasan
2015-12-14 5:02 ` David Miller
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=87vb85xfbz.fsf@vitty.brq.redhat.com \
--to=vkuznets@redhat.com \
--cc=davem@davemloft.net \
--cc=driverdev-devel@linuxdriverproject.org \
--cc=haiyangz@microsoft.com \
--cc=jasowang@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=olaf@aepfle.de \
/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.