diff mbox series

[07/18] vhost-vdpa: tweak the error label in vhost_vdpa_add()

Message ID 20210621041650.5826-8-jasowang@redhat.com (mailing list archive)
State New, archived
Headers show
Series vhost-vDPA multiqueue | expand

Commit Message

Jason Wang June 21, 2021, 4:16 a.m. UTC
Introduce new error label to avoid the unnecessary checking of net
pointer.

Fixes: 1e0a84ea49b68 ("vhost-vdpa: introduce vhost-vdpa net client")
Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 net/vhost-vdpa.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

Comments

Stefano Garzarella June 23, 2021, 3:03 p.m. UTC | #1
On Mon, Jun 21, 2021 at 12:16:39PM +0800, Jason Wang wrote:
>Introduce new error label to avoid the unnecessary checking of net
>pointer.
>
>Fixes: 1e0a84ea49b68 ("vhost-vdpa: introduce vhost-vdpa net client")
>Signed-off-by: Jason Wang <jasowang@redhat.com>
>---
> net/vhost-vdpa.c | 13 ++++++-------
> 1 file changed, 6 insertions(+), 7 deletions(-)
>
>diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
>index 21f09c546f..0da7bc347a 100644
>--- a/net/vhost-vdpa.c
>+++ b/net/vhost-vdpa.c
>@@ -100,19 +100,18 @@ static int vhost_vdpa_add(NetClientState *ncs, void *be)
>     net = vhost_net_init(&options);
>     if (!net) {
>         error_report("failed to init vhost_net for queue");
>-        goto err;
>+        goto err_init;
>     }
>     s->vhost_net = net;
>     ret = vhost_vdpa_net_check_device_id(net);
>     if (ret) {
>-        goto err;
>+        goto err_check;
>     }
>     return 0;
>-err:
>-    if (net) {
>-        vhost_net_cleanup(net);
>-        g_free(net);
>-    }
>+err_check:
>+    vhost_net_cleanup(net);
>+    g_free(net);

Should we set s->vhost_net to NULL to avoid use after free?

Then we should also remove the `assert(s->vhost_net)` in 
net_vhost_vdpa_init() since we can fail.

>+err_init:
>     return -1;
> }
>
>-- 
>2.25.1
>
>
Jason Wang July 6, 2021, 8:03 a.m. UTC | #2
在 2021/6/23 下午11:03, Stefano Garzarella 写道:
> On Mon, Jun 21, 2021 at 12:16:39PM +0800, Jason Wang wrote:
>> Introduce new error label to avoid the unnecessary checking of net
>> pointer.
>>
>> Fixes: 1e0a84ea49b68 ("vhost-vdpa: introduce vhost-vdpa net client")
>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>> ---
>> net/vhost-vdpa.c | 13 ++++++-------
>> 1 file changed, 6 insertions(+), 7 deletions(-)
>>
>> diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
>> index 21f09c546f..0da7bc347a 100644
>> --- a/net/vhost-vdpa.c
>> +++ b/net/vhost-vdpa.c
>> @@ -100,19 +100,18 @@ static int vhost_vdpa_add(NetClientState *ncs, 
>> void *be)
>>     net = vhost_net_init(&options);
>>     if (!net) {
>>         error_report("failed to init vhost_net for queue");
>> -        goto err;
>> +        goto err_init;
>>     }
>>     s->vhost_net = net;
>>     ret = vhost_vdpa_net_check_device_id(net);
>>     if (ret) {
>> -        goto err;
>> +        goto err_check;
>>     }
>>     return 0;
>> -err:
>> -    if (net) {
>> -        vhost_net_cleanup(net);
>> -        g_free(net);
>> -    }
>> +err_check:
>> +    vhost_net_cleanup(net);
>> +    g_free(net);
>
> Should we set s->vhost_net to NULL to avoid use after free?
>
> Then we should also remove the `assert(s->vhost_net)` in 
> net_vhost_vdpa_init() since we can fail.


Right, will do this in a separate patch.

Thanks


>
>> +err_init:
>>     return -1;
>> }
>>
>> -- 
>> 2.25.1
>>
>>
>
Jason Wang July 6, 2021, 8:10 a.m. UTC | #3
在 2021/7/6 下午4:03, Jason Wang 写道:
>
> 在 2021/6/23 下午11:03, Stefano Garzarella 写道:
>> On Mon, Jun 21, 2021 at 12:16:39PM +0800, Jason Wang wrote:
>>> Introduce new error label to avoid the unnecessary checking of net
>>> pointer.
>>>
>>> Fixes: 1e0a84ea49b68 ("vhost-vdpa: introduce vhost-vdpa net client")
>>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>>> ---
>>> net/vhost-vdpa.c | 13 ++++++-------
>>> 1 file changed, 6 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
>>> index 21f09c546f..0da7bc347a 100644
>>> --- a/net/vhost-vdpa.c
>>> +++ b/net/vhost-vdpa.c
>>> @@ -100,19 +100,18 @@ static int vhost_vdpa_add(NetClientState *ncs, 
>>> void *be)
>>>     net = vhost_net_init(&options);
>>>     if (!net) {
>>>         error_report("failed to init vhost_net for queue");
>>> -        goto err;
>>> +        goto err_init;
>>>     }
>>>     s->vhost_net = net;
>>>     ret = vhost_vdpa_net_check_device_id(net);
>>>     if (ret) {
>>> -        goto err;
>>> +        goto err_check;
>>>     }
>>>     return 0;
>>> -err:
>>> -    if (net) {
>>> -        vhost_net_cleanup(net);
>>> -        g_free(net);
>>> -    }
>>> +err_check:
>>> +    vhost_net_cleanup(net);
>>> +    g_free(net);
>>
>> Should we set s->vhost_net to NULL to avoid use after free?
>>
>> Then we should also remove the `assert(s->vhost_net)` in 
>> net_vhost_vdpa_init() since we can fail.
>
>
> Right, will do this in a separate patch.


I just forget the job has been done in the next patch :)

So we are fine here.

Thanks


>
> Thanks
>
>
>>
>>> +err_init:
>>>     return -1;
>>> }
>>>
>>> -- 
>>> 2.25.1
>>>
>>>
>>
Stefano Garzarella July 6, 2021, 8:27 a.m. UTC | #4
On Tue, Jul 06, 2021 at 04:10:22PM +0800, Jason Wang wrote:
>
>在 2021/7/6 下午4:03, Jason Wang 写道:
>>
>>在 2021/6/23 下午11:03, Stefano Garzarella 写道:
>>>On Mon, Jun 21, 2021 at 12:16:39PM +0800, Jason Wang wrote:
>>>>Introduce new error label to avoid the unnecessary checking of net
>>>>pointer.
>>>>
>>>>Fixes: 1e0a84ea49b68 ("vhost-vdpa: introduce vhost-vdpa net client")
>>>>Signed-off-by: Jason Wang <jasowang@redhat.com>
>>>>---
>>>>net/vhost-vdpa.c | 13 ++++++-------
>>>>1 file changed, 6 insertions(+), 7 deletions(-)
>>>>
>>>>diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
>>>>index 21f09c546f..0da7bc347a 100644
>>>>--- a/net/vhost-vdpa.c
>>>>+++ b/net/vhost-vdpa.c
>>>>@@ -100,19 +100,18 @@ static int vhost_vdpa_add(NetClientState 
>>>>*ncs, void *be)
>>>>    net = vhost_net_init(&options);
>>>>    if (!net) {
>>>>        error_report("failed to init vhost_net for queue");
>>>>-        goto err;
>>>>+        goto err_init;
>>>>    }
>>>>    s->vhost_net = net;
>>>>    ret = vhost_vdpa_net_check_device_id(net);
>>>>    if (ret) {
>>>>-        goto err;
>>>>+        goto err_check;
>>>>    }
>>>>    return 0;
>>>>-err:
>>>>-    if (net) {
>>>>-        vhost_net_cleanup(net);
>>>>-        g_free(net);
>>>>-    }
>>>>+err_check:
>>>>+    vhost_net_cleanup(net);
>>>>+    g_free(net);
>>>
>>>Should we set s->vhost_net to NULL to avoid use after free?
>>>
>>>Then we should also remove the `assert(s->vhost_net)` in 
>>>net_vhost_vdpa_init() since we can fail.
>>
>>
>>Right, will do this in a separate patch.
>
>
>I just forget the job has been done in the next patch :)

I saw it later too ;-)

>
>So we are fine here.

Yep for the assert(), but what about setting s->vhost_net to NULL?
Or just move the s->vhost_net assignment just before the `return 0`.

Thanks,
Stefano
Jason Wang July 6, 2021, 8:28 a.m. UTC | #5
On Tue, Jul 6, 2021 at 4:27 PM Stefano Garzarella <sgarzare@redhat.com> wrote:
>
> On Tue, Jul 06, 2021 at 04:10:22PM +0800, Jason Wang wrote:
> >
> >在 2021/7/6 下午4:03, Jason Wang 写道:
> >>
> >>在 2021/6/23 下午11:03, Stefano Garzarella 写道:
> >>>On Mon, Jun 21, 2021 at 12:16:39PM +0800, Jason Wang wrote:
> >>>>Introduce new error label to avoid the unnecessary checking of net
> >>>>pointer.
> >>>>
> >>>>Fixes: 1e0a84ea49b68 ("vhost-vdpa: introduce vhost-vdpa net client")
> >>>>Signed-off-by: Jason Wang <jasowang@redhat.com>
> >>>>---
> >>>>net/vhost-vdpa.c | 13 ++++++-------
> >>>>1 file changed, 6 insertions(+), 7 deletions(-)
> >>>>
> >>>>diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
> >>>>index 21f09c546f..0da7bc347a 100644
> >>>>--- a/net/vhost-vdpa.c
> >>>>+++ b/net/vhost-vdpa.c
> >>>>@@ -100,19 +100,18 @@ static int vhost_vdpa_add(NetClientState
> >>>>*ncs, void *be)
> >>>>    net = vhost_net_init(&options);
> >>>>    if (!net) {
> >>>>        error_report("failed to init vhost_net for queue");
> >>>>-        goto err;
> >>>>+        goto err_init;
> >>>>    }
> >>>>    s->vhost_net = net;
> >>>>    ret = vhost_vdpa_net_check_device_id(net);
> >>>>    if (ret) {
> >>>>-        goto err;
> >>>>+        goto err_check;
> >>>>    }
> >>>>    return 0;
> >>>>-err:
> >>>>-    if (net) {
> >>>>-        vhost_net_cleanup(net);
> >>>>-        g_free(net);
> >>>>-    }
> >>>>+err_check:
> >>>>+    vhost_net_cleanup(net);
> >>>>+    g_free(net);
> >>>
> >>>Should we set s->vhost_net to NULL to avoid use after free?
> >>>
> >>>Then we should also remove the `assert(s->vhost_net)` in
> >>>net_vhost_vdpa_init() since we can fail.
> >>
> >>
> >>Right, will do this in a separate patch.
> >
> >
> >I just forget the job has been done in the next patch :)
>
> I saw it later too ;-)
>
> >
> >So we are fine here.
>
> Yep for the assert(), but what about setting s->vhost_net to NULL?
> Or just move the s->vhost_net assignment just before the `return 0`.

We can do, I've posted V2. If it has comment, I will do that in V3.
Otherwise I will send a separate patch for this.

Thanks

>
> Thanks,
> Stefano
>
diff mbox series

Patch

diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
index 21f09c546f..0da7bc347a 100644
--- a/net/vhost-vdpa.c
+++ b/net/vhost-vdpa.c
@@ -100,19 +100,18 @@  static int vhost_vdpa_add(NetClientState *ncs, void *be)
     net = vhost_net_init(&options);
     if (!net) {
         error_report("failed to init vhost_net for queue");
-        goto err;
+        goto err_init;
     }
     s->vhost_net = net;
     ret = vhost_vdpa_net_check_device_id(net);
     if (ret) {
-        goto err;
+        goto err_check;
     }
     return 0;
-err:
-    if (net) {
-        vhost_net_cleanup(net);
-        g_free(net);
-    }
+err_check:
+    vhost_net_cleanup(net);
+    g_free(net);
+err_init:
     return -1;
 }