Re: [PATCH v3 22/26] arm/stm32f205 arm/stm32f405: Fix realize error API violation

2020-07-01 Thread Markus Armbruster
Philippe Mathieu-Daudé  writes:

> On 6/30/20 11:03 AM, Markus Armbruster wrote:
>> The Error ** argument must be NULL, &error_abort, &error_fatal, or a
>> pointer to a variable containing NULL.  Passing an argument of the
>> latter kind twice without clearing it in between is wrong: if the
>> first call sets an error, it no longer points to NULL for the second
>> call.
>> 
>> stm32f205_soc_realize() and stm32f405_soc_realize() are wrong that
>> way: they pass &err to object_property_set_int() without checking it,
>> and then to qdev_realize().  Harmless, because the former can't
>> actually fail here.
>> 
>> Fix by passing &error_abort instead.
>> 
>> Cc: Alistair Francis 
>> Cc: Peter Maydell 
>> Cc: qemu-...@nongnu.org
>> Signed-off-by: Markus Armbruster 
>> Reviewed-by: Alistair Francis 
>> ---
>>  hw/arm/stm32f205_soc.c | 2 +-
>>  hw/arm/stm32f405_soc.c | 2 +-
>>  2 files changed, 2 insertions(+), 2 deletions(-)
>> 
>> diff --git a/hw/arm/stm32f205_soc.c b/hw/arm/stm32f205_soc.c
>> index 19487544f0..56aef686c9 100644
>> --- a/hw/arm/stm32f205_soc.c
>> +++ b/hw/arm/stm32f205_soc.c
>> @@ -154,7 +154,7 @@ static void stm32f205_soc_realize(DeviceState *dev_soc, 
>> Error **errp)
>>  
>>  /* ADC 1 to 3 */
>>  object_property_set_int(OBJECT(s->adc_irqs), STM_NUM_ADCS,
>> -"num-lines", &err);
>> +"num-lines", &error_abort);
>>  qdev_realize(DEVICE(s->adc_irqs), NULL, &err);
>
> qdev_realize() coult take &error_abort too then.

Think so.  I went for the minimal patch.

> Anyway:
> Reviewed-by: Philippe Mathieu-Daudé 

Thanks!

>>  if (err != NULL) {
>>  error_propagate(errp, err);
>> diff --git a/hw/arm/stm32f405_soc.c b/hw/arm/stm32f405_soc.c
>> index c12d9f999d..cf9228d8e7 100644
>> --- a/hw/arm/stm32f405_soc.c
>> +++ b/hw/arm/stm32f405_soc.c
>> @@ -172,7 +172,7 @@ static void stm32f405_soc_realize(DeviceState *dev_soc, 
>> Error **errp)
>>  return;
>>  }
>>  object_property_set_int(OBJECT(&s->adc_irqs), STM_NUM_ADCS,
>> -"num-lines", &err);
>> +"num-lines", &error_abort);
>>  qdev_realize(DEVICE(&s->adc_irqs), NULL, &err);
>>  if (err != NULL) {
>>  error_propagate(errp, err);
>> 




Re: [PATCH v3 22/26] arm/stm32f205 arm/stm32f405: Fix realize error API violation

2020-06-30 Thread Philippe Mathieu-Daudé
On 6/30/20 11:03 AM, Markus Armbruster wrote:
> The Error ** argument must be NULL, &error_abort, &error_fatal, or a
> pointer to a variable containing NULL.  Passing an argument of the
> latter kind twice without clearing it in between is wrong: if the
> first call sets an error, it no longer points to NULL for the second
> call.
> 
> stm32f205_soc_realize() and stm32f405_soc_realize() are wrong that
> way: they pass &err to object_property_set_int() without checking it,
> and then to qdev_realize().  Harmless, because the former can't
> actually fail here.
> 
> Fix by passing &error_abort instead.
> 
> Cc: Alistair Francis 
> Cc: Peter Maydell 
> Cc: qemu-...@nongnu.org
> Signed-off-by: Markus Armbruster 
> Reviewed-by: Alistair Francis 
> ---
>  hw/arm/stm32f205_soc.c | 2 +-
>  hw/arm/stm32f405_soc.c | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/arm/stm32f205_soc.c b/hw/arm/stm32f205_soc.c
> index 19487544f0..56aef686c9 100644
> --- a/hw/arm/stm32f205_soc.c
> +++ b/hw/arm/stm32f205_soc.c
> @@ -154,7 +154,7 @@ static void stm32f205_soc_realize(DeviceState *dev_soc, 
> Error **errp)
>  
>  /* ADC 1 to 3 */
>  object_property_set_int(OBJECT(s->adc_irqs), STM_NUM_ADCS,
> -"num-lines", &err);
> +"num-lines", &error_abort);
>  qdev_realize(DEVICE(s->adc_irqs), NULL, &err);

qdev_realize() coult take &error_abort too then.

Anyway:
Reviewed-by: Philippe Mathieu-Daudé 

>  if (err != NULL) {
>  error_propagate(errp, err);
> diff --git a/hw/arm/stm32f405_soc.c b/hw/arm/stm32f405_soc.c
> index c12d9f999d..cf9228d8e7 100644
> --- a/hw/arm/stm32f405_soc.c
> +++ b/hw/arm/stm32f405_soc.c
> @@ -172,7 +172,7 @@ static void stm32f405_soc_realize(DeviceState *dev_soc, 
> Error **errp)
>  return;
>  }
>  object_property_set_int(OBJECT(&s->adc_irqs), STM_NUM_ADCS,
> -"num-lines", &err);
> +"num-lines", &error_abort);
>  qdev_realize(DEVICE(&s->adc_irqs), NULL, &err);
>  if (err != NULL) {
>  error_propagate(errp, err);
> 




[PATCH v3 22/26] arm/stm32f205 arm/stm32f405: Fix realize error API violation

2020-06-30 Thread Markus Armbruster
The Error ** argument must be NULL, &error_abort, &error_fatal, or a
pointer to a variable containing NULL.  Passing an argument of the
latter kind twice without clearing it in between is wrong: if the
first call sets an error, it no longer points to NULL for the second
call.

stm32f205_soc_realize() and stm32f405_soc_realize() are wrong that
way: they pass &err to object_property_set_int() without checking it,
and then to qdev_realize().  Harmless, because the former can't
actually fail here.

Fix by passing &error_abort instead.

Cc: Alistair Francis 
Cc: Peter Maydell 
Cc: qemu-...@nongnu.org
Signed-off-by: Markus Armbruster 
Reviewed-by: Alistair Francis 
---
 hw/arm/stm32f205_soc.c | 2 +-
 hw/arm/stm32f405_soc.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/hw/arm/stm32f205_soc.c b/hw/arm/stm32f205_soc.c
index 19487544f0..56aef686c9 100644
--- a/hw/arm/stm32f205_soc.c
+++ b/hw/arm/stm32f205_soc.c
@@ -154,7 +154,7 @@ static void stm32f205_soc_realize(DeviceState *dev_soc, 
Error **errp)
 
 /* ADC 1 to 3 */
 object_property_set_int(OBJECT(s->adc_irqs), STM_NUM_ADCS,
-"num-lines", &err);
+"num-lines", &error_abort);
 qdev_realize(DEVICE(s->adc_irqs), NULL, &err);
 if (err != NULL) {
 error_propagate(errp, err);
diff --git a/hw/arm/stm32f405_soc.c b/hw/arm/stm32f405_soc.c
index c12d9f999d..cf9228d8e7 100644
--- a/hw/arm/stm32f405_soc.c
+++ b/hw/arm/stm32f405_soc.c
@@ -172,7 +172,7 @@ static void stm32f405_soc_realize(DeviceState *dev_soc, 
Error **errp)
 return;
 }
 object_property_set_int(OBJECT(&s->adc_irqs), STM_NUM_ADCS,
-"num-lines", &err);
+"num-lines", &error_abort);
 qdev_realize(DEVICE(&s->adc_irqs), NULL, &err);
 if (err != NULL) {
 error_propagate(errp, err);
-- 
2.26.2