2017-12-04 06:02:56

by wangyunjian

[permalink] [raw]
Subject: [PATCH net] virtio_net: fix return value check in receive_mergeable()

From: Yunjian Wang <[email protected]>

The function virtqueue_get_buf_ctx() could return NULL, the return
value 'buf' need to be checked with NULL, not value 'ctx'.

Signed-off-by: Yunjian Wang <[email protected]>
---
drivers/net/virtio_net.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 19a985e..559b215 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -756,7 +756,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
int num_skb_frags;

buf = virtqueue_get_buf_ctx(rq->vq, &len, &ctx);
- if (unlikely(!ctx)) {
+ if (unlikely(!buf)) {
pr_debug("%s: rx error: %d buffers out of %d missing\n",
dev->name, num_buf,
virtio16_to_cpu(vi->vdev,
--
1.8.3.1



2017-12-04 07:10:36

by Jason Wang

[permalink] [raw]
Subject: Re: [PATCH net] virtio_net: fix return value check in receive_mergeable()



On 2017年12月04日 14:02, wangyunjian wrote:
> From: Yunjian Wang <[email protected]>
>
> The function virtqueue_get_buf_ctx() could return NULL, the return
> value 'buf' need to be checked with NULL, not value 'ctx'.
>
> Signed-off-by: Yunjian Wang <[email protected]>
> ---
> drivers/net/virtio_net.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index 19a985e..559b215 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -756,7 +756,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
> int num_skb_frags;
>
> buf = virtqueue_get_buf_ctx(rq->vq, &len, &ctx);
> - if (unlikely(!ctx)) {
> + if (unlikely(!buf)) {
> pr_debug("%s: rx error: %d buffers out of %d missing\n",
> dev->name, num_buf,
> virtio16_to_cpu(vi->vdev,

Hi:

The path looks good but I'm not sure this is a real fix since we add
data and ctx simultaneously in virtqueue_add_inbuf_ctx().

Any bad result you see without this patch?

Thanks

2017-12-04 11:25:27

by wangyunjian

[permalink] [raw]
Subject: RE: [PATCH net] virtio_net: fix return value check in receive_mergeable()



> -----Original Message-----
> From: Jason Wang [mailto:[email protected]]
> Sent: Monday, December 04, 2017 3:10 PM
> To: wangyunjian <[email protected]>; linux-
> [email protected]
> Cc: [email protected]; caihe <[email protected]>
> Subject: Re: [PATCH net] virtio_net: fix return value check in
> receive_mergeable()
>
>
>
> On 2017年12月04日 14:02, wangyunjian wrote:
> > From: Yunjian Wang <[email protected]>
> >
> > The function virtqueue_get_buf_ctx() could return NULL, the return
> > value 'buf' need to be checked with NULL, not value 'ctx'.
> >
> > Signed-off-by: Yunjian Wang <[email protected]>
> > ---
> > drivers/net/virtio_net.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> > index 19a985e..559b215 100644
> > --- a/drivers/net/virtio_net.c
> > +++ b/drivers/net/virtio_net.c
> > @@ -756,7 +756,7 @@ static struct sk_buff *receive_mergeable(struct
> net_device *dev,
> > int num_skb_frags;
> >
> > buf = virtqueue_get_buf_ctx(rq->vq, &len, &ctx);
> > - if (unlikely(!ctx)) {
> > + if (unlikely(!buf)) {
> > pr_debug("%s: rx error: %d buffers out of %d
> missing\n",
> > dev->name, num_buf,
> > virtio16_to_cpu(vi->vdev,
>
> Hi:
>
> The path looks good but I'm not sure this is a real fix since we add
> data and ctx simultaneously in virtqueue_add_inbuf_ctx().
>
> Any bad result you see without this patch?
>

Now no problem has been found yet, and I found it when reviewing the code.

Thanks

> Thanks

2017-12-05 02:59:27

by Jason Wang

[permalink] [raw]
Subject: Re: [PATCH net] virtio_net: fix return value check in receive_mergeable()



On 2017年12月04日 19:25, wangyunjian wrote:
>
>> -----Original Message-----
>> From: Jason Wang [mailto:[email protected]]
>> Sent: Monday, December 04, 2017 3:10 PM
>> To: wangyunjian <[email protected]>; linux-
>> [email protected]
>> Cc: [email protected]; caihe <[email protected]>
>> Subject: Re: [PATCH net] virtio_net: fix return value check in
>> receive_mergeable()
>>
>>
>>
>> On 2017年12月04日 14:02, wangyunjian wrote:
>>> From: Yunjian Wang <[email protected]>
>>>
>>> The function virtqueue_get_buf_ctx() could return NULL, the return
>>> value 'buf' need to be checked with NULL, not value 'ctx'.
>>>
>>> Signed-off-by: Yunjian Wang <[email protected]>
>>> ---
>>> drivers/net/virtio_net.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
>>> index 19a985e..559b215 100644
>>> --- a/drivers/net/virtio_net.c
>>> +++ b/drivers/net/virtio_net.c
>>> @@ -756,7 +756,7 @@ static struct sk_buff *receive_mergeable(struct
>> net_device *dev,
>>> int num_skb_frags;
>>>
>>> buf = virtqueue_get_buf_ctx(rq->vq, &len, &ctx);
>>> - if (unlikely(!ctx)) {
>>> + if (unlikely(!buf)) {
>>> pr_debug("%s: rx error: %d buffers out of %d
>> missing\n",
>>> dev->name, num_buf,
>>> virtio16_to_cpu(vi->vdev,
>> Hi:
>>
>> The path looks good but I'm not sure this is a real fix since we add
>> data and ctx simultaneously in virtqueue_add_inbuf_ctx().
>>
>> Any bad result you see without this patch?
>>
> Now no problem has been found yet, and I found it when reviewing the code.
>
> Thanks

Then I think it's better to go net-next. Michael, any idea on this?

Thanks

>
>> Thanks