qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] virtio: vdpa: omit check return of g_malloc
@ 2020-08-19 14:43 Li Qiang
  2020-08-19 15:07 ` Philippe Mathieu-Daudé
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Li Qiang @ 2020-08-19 14:43 UTC (permalink / raw)
  To: mst, jasowang; +Cc: Li Qiang, liq3ea, qemu-devel

If g_malloc fails, the application will be terminated.
No need to check the return value of g_malloc.

Signed-off-by: Li Qiang <liq3ea@163.com>
---
 hw/virtio/vhost-vdpa.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
index 4580f3efd8..403ae3ae07 100644
--- a/hw/virtio/vhost-vdpa.c
+++ b/hw/virtio/vhost-vdpa.c
@@ -320,10 +320,8 @@ static int vhost_vdpa_set_config(struct vhost_dev *dev, const uint8_t *data,
     struct vhost_vdpa_config *config;
     int ret;
     unsigned long config_size = offsetof(struct vhost_vdpa_config, buf);
+
     config = g_malloc(size + config_size);
-    if (config == NULL) {
-        return -1;
-    }
     config->off = offset;
     config->len = size;
     memcpy(config->buf, data, size);
@@ -340,9 +338,6 @@ static int vhost_vdpa_get_config(struct vhost_dev *dev, uint8_t *config,
     int ret;
 
     v_config = g_malloc(config_len + config_size);
-    if (v_config == NULL) {
-        return -1;
-    }
     v_config->len = config_len;
     v_config->off = 0;
     ret = vhost_vdpa_call(dev, VHOST_VDPA_GET_CONFIG, v_config);
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] virtio: vdpa: omit check return of g_malloc
  2020-08-19 14:43 [PATCH] virtio: vdpa: omit check return of g_malloc Li Qiang
@ 2020-08-19 15:07 ` Philippe Mathieu-Daudé
  2020-08-20  1:26   ` Li Qiang
  2020-09-18 12:53 ` Laurent Vivier
  2020-09-18 13:14 ` Alex Bennée
  2 siblings, 1 reply; 8+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-08-19 15:07 UTC (permalink / raw)
  To: Li Qiang, mst, jasowang; +Cc: liq3ea, qemu-devel

On 8/19/20 4:43 PM, Li Qiang wrote:
> If g_malloc fails, the application will be terminated.

Which we don't want... better to use g_try_malloc() instead?

> No need to check the return value of g_malloc.
> 
> Signed-off-by: Li Qiang <liq3ea@163.com>
> ---
>  hw/virtio/vhost-vdpa.c | 7 +------
>  1 file changed, 1 insertion(+), 6 deletions(-)
> 
> diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
> index 4580f3efd8..403ae3ae07 100644
> --- a/hw/virtio/vhost-vdpa.c
> +++ b/hw/virtio/vhost-vdpa.c
> @@ -320,10 +320,8 @@ static int vhost_vdpa_set_config(struct vhost_dev *dev, const uint8_t *data,
>      struct vhost_vdpa_config *config;
>      int ret;
>      unsigned long config_size = offsetof(struct vhost_vdpa_config, buf);
> +
>      config = g_malloc(size + config_size);
> -    if (config == NULL) {
> -        return -1;
> -    }
>      config->off = offset;
>      config->len = size;
>      memcpy(config->buf, data, size);
> @@ -340,9 +338,6 @@ static int vhost_vdpa_get_config(struct vhost_dev *dev, uint8_t *config,
>      int ret;
>  
>      v_config = g_malloc(config_len + config_size);
> -    if (v_config == NULL) {
> -        return -1;
> -    }
>      v_config->len = config_len;
>      v_config->off = 0;
>      ret = vhost_vdpa_call(dev, VHOST_VDPA_GET_CONFIG, v_config);
> 



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] virtio: vdpa: omit check return of g_malloc
  2020-08-19 15:07 ` Philippe Mathieu-Daudé
@ 2020-08-20  1:26   ` Li Qiang
  2020-09-18 13:12     ` Alex Bennée
  0 siblings, 1 reply; 8+ messages in thread
From: Li Qiang @ 2020-08-20  1:26 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: Jason Wang, Li Qiang, Qemu Developers, Michael S. Tsirkin

Philippe Mathieu-Daudé <philmd@redhat.com> 于2020年8月19日周三 下午11:07写道:
>
> On 8/19/20 4:43 PM, Li Qiang wrote:
> > If g_malloc fails, the application will be terminated.
>
> Which we don't want... better to use g_try_malloc() instead?

I don't think so. If g_malloc return NULL it means a critical
situation I think terminate the application
is OK. Though I don't find any rule/practices the qemu code base uses
g_malloc far more than
g_try_malloc.

Thanks,
Li Qiang

>
> > No need to check the return value of g_malloc.
> >
> > Signed-off-by: Li Qiang <liq3ea@163.com>
> > ---
> >  hw/virtio/vhost-vdpa.c | 7 +------
> >  1 file changed, 1 insertion(+), 6 deletions(-)
> >
> > diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
> > index 4580f3efd8..403ae3ae07 100644
> > --- a/hw/virtio/vhost-vdpa.c
> > +++ b/hw/virtio/vhost-vdpa.c
> > @@ -320,10 +320,8 @@ static int vhost_vdpa_set_config(struct vhost_dev *dev, const uint8_t *data,
> >      struct vhost_vdpa_config *config;
> >      int ret;
> >      unsigned long config_size = offsetof(struct vhost_vdpa_config, buf);
> > +
> >      config = g_malloc(size + config_size);
> > -    if (config == NULL) {
> > -        return -1;
> > -    }
> >      config->off = offset;
> >      config->len = size;
> >      memcpy(config->buf, data, size);
> > @@ -340,9 +338,6 @@ static int vhost_vdpa_get_config(struct vhost_dev *dev, uint8_t *config,
> >      int ret;
> >
> >      v_config = g_malloc(config_len + config_size);
> > -    if (v_config == NULL) {
> > -        return -1;
> > -    }
> >      v_config->len = config_len;
> >      v_config->off = 0;
> >      ret = vhost_vdpa_call(dev, VHOST_VDPA_GET_CONFIG, v_config);
> >
>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] virtio: vdpa: omit check return of g_malloc
  2020-08-19 14:43 [PATCH] virtio: vdpa: omit check return of g_malloc Li Qiang
  2020-08-19 15:07 ` Philippe Mathieu-Daudé
@ 2020-09-18 12:53 ` Laurent Vivier
  2020-09-23 17:08   ` Laurent Vivier
  2020-09-18 13:14 ` Alex Bennée
  2 siblings, 1 reply; 8+ messages in thread
From: Laurent Vivier @ 2020-09-18 12:53 UTC (permalink / raw)
  To: Li Qiang, mst, jasowang
  Cc: QEMU Trivial, Philippe Mathieu-Daudé, liq3ea, qemu-devel, Cindy Lu

On 19/08/2020 16:43, Li Qiang wrote:
> If g_malloc fails, the application will be terminated.
> No need to check the return value of g_malloc.
> 
> Signed-off-by: Li Qiang <liq3ea@163.com>
> ---
>  hw/virtio/vhost-vdpa.c | 7 +------
>  1 file changed, 1 insertion(+), 6 deletions(-)
> 
> diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
> index 4580f3efd8..403ae3ae07 100644
> --- a/hw/virtio/vhost-vdpa.c
> +++ b/hw/virtio/vhost-vdpa.c
> @@ -320,10 +320,8 @@ static int vhost_vdpa_set_config(struct vhost_dev *dev, const uint8_t *data,
>      struct vhost_vdpa_config *config;
>      int ret;
>      unsigned long config_size = offsetof(struct vhost_vdpa_config, buf);
> +
>      config = g_malloc(size + config_size);
> -    if (config == NULL) {
> -        return -1;
> -    }
>      config->off = offset;
>      config->len = size;
>      memcpy(config->buf, data, size);
> @@ -340,9 +338,6 @@ static int vhost_vdpa_get_config(struct vhost_dev *dev, uint8_t *config,
>      int ret;
>  
>      v_config = g_malloc(config_len + config_size);
> -    if (v_config == NULL) {
> -        return -1;
> -    }
>      v_config->len = config_len;
>      v_config->off = 0;
>      ret = vhost_vdpa_call(dev, VHOST_VDPA_GET_CONFIG, v_config);
> 

Reviewed-by: Laurent Vivier <lvivier@redhat.com>



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] virtio: vdpa: omit check return of g_malloc
  2020-08-20  1:26   ` Li Qiang
@ 2020-09-18 13:12     ` Alex Bennée
  2020-09-23 18:06       ` Eric Blake
  0 siblings, 1 reply; 8+ messages in thread
From: Alex Bennée @ 2020-09-18 13:12 UTC (permalink / raw)
  To: Li Qiang
  Cc: Li Qiang, Jason Wang, Philippe Mathieu-Daudé,
	qemu-devel, Michael S. Tsirkin


Li Qiang <liq3ea@gmail.com> writes:

> Philippe Mathieu-Daudé <philmd@redhat.com> 于2020年8月19日周三 下午11:07写道:
>>
>> On 8/19/20 4:43 PM, Li Qiang wrote:
>> > If g_malloc fails, the application will be terminated.
>>
>> Which we don't want... better to use g_try_malloc() instead?
>
> I don't think so. If g_malloc return NULL it means a critical
> situation I think terminate the application
> is OK. Though I don't find any rule/practices the qemu code base uses
> g_malloc far more than
> g_try_malloc.

g_try_malloc is only for cases you could recover from, by either
deferring or doing something else. A straight out of memory failure is
fatal.

Arguably a bunch of the try_malloc's in the code base should be straight
mallocs. The ELF loaders load_symbols does it because I guess having the
symbols is a bonus and you could still run the program if a) there was
enough memory to run and b) your symbol table was very large.

>
> Thanks,
> Li Qiang
>
>>
>> > No need to check the return value of g_malloc.
>> >
>> > Signed-off-by: Li Qiang <liq3ea@163.com>
>> > ---
>> >  hw/virtio/vhost-vdpa.c | 7 +------
>> >  1 file changed, 1 insertion(+), 6 deletions(-)
>> >
>> > diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
>> > index 4580f3efd8..403ae3ae07 100644
>> > --- a/hw/virtio/vhost-vdpa.c
>> > +++ b/hw/virtio/vhost-vdpa.c
>> > @@ -320,10 +320,8 @@ static int vhost_vdpa_set_config(struct vhost_dev *dev, const uint8_t *data,
>> >      struct vhost_vdpa_config *config;
>> >      int ret;
>> >      unsigned long config_size = offsetof(struct vhost_vdpa_config, buf);
>> > +
>> >      config = g_malloc(size + config_size);
>> > -    if (config == NULL) {
>> > -        return -1;
>> > -    }
>> >      config->off = offset;
>> >      config->len = size;
>> >      memcpy(config->buf, data, size);
>> > @@ -340,9 +338,6 @@ static int vhost_vdpa_get_config(struct vhost_dev *dev, uint8_t *config,
>> >      int ret;
>> >
>> >      v_config = g_malloc(config_len + config_size);
>> > -    if (v_config == NULL) {
>> > -        return -1;
>> > -    }
>> >      v_config->len = config_len;
>> >      v_config->off = 0;
>> >      ret = vhost_vdpa_call(dev, VHOST_VDPA_GET_CONFIG, v_config);
>> >
>>


-- 
Alex Bennée


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] virtio: vdpa: omit check return of g_malloc
  2020-08-19 14:43 [PATCH] virtio: vdpa: omit check return of g_malloc Li Qiang
  2020-08-19 15:07 ` Philippe Mathieu-Daudé
  2020-09-18 12:53 ` Laurent Vivier
@ 2020-09-18 13:14 ` Alex Bennée
  2 siblings, 0 replies; 8+ messages in thread
From: Alex Bennée @ 2020-09-18 13:14 UTC (permalink / raw)
  To: Li Qiang; +Cc: jasowang, liq3ea, qemu-devel, mst


Li Qiang <liq3ea@163.com> writes:

> If g_malloc fails, the application will be terminated.
> No need to check the return value of g_malloc.
>
> Signed-off-by: Li Qiang <liq3ea@163.com>

I think this is fine because a failure to config the dev would just
cause an error_report later and it's extremely unlikely you don't have
enough memory to get that far anyway.

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>

-- 
Alex Bennée


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] virtio: vdpa: omit check return of g_malloc
  2020-09-18 12:53 ` Laurent Vivier
@ 2020-09-23 17:08   ` Laurent Vivier
  0 siblings, 0 replies; 8+ messages in thread
From: Laurent Vivier @ 2020-09-23 17:08 UTC (permalink / raw)
  To: Laurent Vivier, Li Qiang, mst, jasowang
  Cc: QEMU Trivial, liq3ea, Philippe Mathieu-Daudé, qemu-devel, Cindy Lu

Le 18/09/2020 à 14:53, Laurent Vivier a écrit :
> On 19/08/2020 16:43, Li Qiang wrote:
>> If g_malloc fails, the application will be terminated.
>> No need to check the return value of g_malloc.
>>
>> Signed-off-by: Li Qiang <liq3ea@163.com>
>> ---
>>  hw/virtio/vhost-vdpa.c | 7 +------
>>  1 file changed, 1 insertion(+), 6 deletions(-)
>>
>> diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
>> index 4580f3efd8..403ae3ae07 100644
>> --- a/hw/virtio/vhost-vdpa.c
>> +++ b/hw/virtio/vhost-vdpa.c
>> @@ -320,10 +320,8 @@ static int vhost_vdpa_set_config(struct vhost_dev *dev, const uint8_t *data,
>>      struct vhost_vdpa_config *config;
>>      int ret;
>>      unsigned long config_size = offsetof(struct vhost_vdpa_config, buf);
>> +
>>      config = g_malloc(size + config_size);
>> -    if (config == NULL) {
>> -        return -1;
>> -    }
>>      config->off = offset;
>>      config->len = size;
>>      memcpy(config->buf, data, size);
>> @@ -340,9 +338,6 @@ static int vhost_vdpa_get_config(struct vhost_dev *dev, uint8_t *config,
>>      int ret;
>>  
>>      v_config = g_malloc(config_len + config_size);
>> -    if (v_config == NULL) {
>> -        return -1;
>> -    }
>>      v_config->len = config_len;
>>      v_config->off = 0;
>>      ret = vhost_vdpa_call(dev, VHOST_VDPA_GET_CONFIG, v_config);
>>
> 
> Reviewed-by: Laurent Vivier <lvivier@redhat.com>
> 
> 

Applied to my trivial-patches branch.

Thanks,
Laurent



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] virtio: vdpa: omit check return of g_malloc
  2020-09-18 13:12     ` Alex Bennée
@ 2020-09-23 18:06       ` Eric Blake
  0 siblings, 0 replies; 8+ messages in thread
From: Eric Blake @ 2020-09-23 18:06 UTC (permalink / raw)
  To: Alex Bennée, Li Qiang
  Cc: Philippe Mathieu-Daudé,
	Jason Wang, Li Qiang, qemu-devel, Michael S. Tsirkin

On 9/18/20 8:12 AM, Alex Bennée wrote:
> 
> Li Qiang <liq3ea@gmail.com> writes:
> 
>> Philippe Mathieu-Daudé <philmd@redhat.com> 于2020年8月19日周三 下午11:07写道:
>>>
>>> On 8/19/20 4:43 PM, Li Qiang wrote:
>>>> If g_malloc fails, the application will be terminated.
>>>
>>> Which we don't want... better to use g_try_malloc() instead?
>>
>> I don't think so. If g_malloc return NULL it means a critical
>> situation I think terminate the application
>> is OK. Though I don't find any rule/practices the qemu code base uses
>> g_malloc far more than
>> g_try_malloc.
> 
> g_try_malloc is only for cases you could recover from, by either
> deferring or doing something else. A straight out of memory failure is
> fatal.
> 
> Arguably a bunch of the try_malloc's in the code base should be straight
> mallocs. The ELF loaders load_symbols does it because I guess having the
> symbols is a bonus and you could still run the program if a) there was
> enough memory to run and b) your symbol table was very large.

If the amount of memory being allocated is under user control (such as 
from an elf header or qcow2 image), you want g_try_malloc() to prevent 
against malicious users requesting outrageous amounts.  But if it is 
solely under programmer control, where the maximum amount requested is 
not going to be a problem unless you are already truly out of memory for 
other reasons, g_malloc() is appropriate.  A potential rule of thumb 
might be that if you know it is less than 1M of memory, it's not worth 
trying to recover from.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-09-23 18:07 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-19 14:43 [PATCH] virtio: vdpa: omit check return of g_malloc Li Qiang
2020-08-19 15:07 ` Philippe Mathieu-Daudé
2020-08-20  1:26   ` Li Qiang
2020-09-18 13:12     ` Alex Bennée
2020-09-23 18:06       ` Eric Blake
2020-09-18 12:53 ` Laurent Vivier
2020-09-23 17:08   ` Laurent Vivier
2020-09-18 13:14 ` Alex Bennée

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).