diff mbox series

[v1,1/1] riscv/boot: Fix possible memory leak

Message ID 4cba4d80e570372183b6685a26c72fa3e907bb51.1570051975.git.alistair.francis@wdc.com
State New
Headers show
Series [v1,1/1] riscv/boot: Fix possible memory leak | expand

Commit Message

Alistair Francis Oct. 2, 2019, 9:34 p.m. UTC
Coverity (CID 1405786) thinks that there is a possible memory leak as
we don't guarentee that the memory allocatd from riscv_find_firmware()
is freed. This is a false positive, but let's tidy up the code to fix
the warning.

Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
---
 hw/riscv/boot.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

Comments

Richard Henderson Oct. 2, 2019, 11:08 p.m. UTC | #1
On 10/2/19 2:34 PM, Alistair Francis wrote:
> Coverity (CID 1405786) thinks that there is a possible memory leak as
> we don't guarentee that the memory allocatd from riscv_find_firmware()
> is freed. This is a false positive, but let's tidy up the code to fix
> the warning.
> 
> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> ---
>  hw/riscv/boot.c | 11 ++++-------
>  1 file changed, 4 insertions(+), 7 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~
Bin Meng Oct. 3, 2019, 12:52 a.m. UTC | #2
On Thu, Oct 3, 2019 at 5:38 AM Alistair Francis
<alistair.francis@wdc.com> wrote:
>
> Coverity (CID 1405786) thinks that there is a possible memory leak as
> we don't guarentee that the memory allocatd from riscv_find_firmware()
> is freed. This is a false positive, but let's tidy up the code to fix
> the warning.
>
> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> ---
>  hw/riscv/boot.c | 11 ++++-------
>  1 file changed, 4 insertions(+), 7 deletions(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

Thanks for the patch. I am not sure how I can easily run Coverity to
verify the fix though.

Regards,
Bin
Philippe Mathieu-Daudé Oct. 3, 2019, 7:04 a.m. UTC | #3
On 10/2/19 11:34 PM, Alistair Francis wrote:
> Coverity (CID 1405786) thinks that there is a possible memory leak as
> we don't guarentee that the memory allocatd from riscv_find_firmware()

typos: 'guarantee', 'allocated'

> is freed. This is a false positive, but let's tidy up the code to fix
> the warning.
> 
> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> ---
>   hw/riscv/boot.c | 11 ++++-------
>   1 file changed, 4 insertions(+), 7 deletions(-)
> 
> diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
> index 2e92fb0680..7fee98d2f8 100644
> --- a/hw/riscv/boot.c
> +++ b/hw/riscv/boot.c
> @@ -38,7 +38,7 @@ void riscv_find_and_load_firmware(MachineState *machine,
>                                     const char *default_machine_firmware,
>                                     hwaddr firmware_load_addr)
>   {
> -    char *firmware_filename;
> +    char *firmware_filename = NULL;
>   
>       if (!machine->firmware) {
>           /*
> @@ -70,14 +70,11 @@ void riscv_find_and_load_firmware(MachineState *machine,
>            * if no -bios option is set without breaking anything.
>            */
>           firmware_filename = riscv_find_firmware(default_machine_firmware);
> -    } else {
> -        firmware_filename = machine->firmware;
> -        if (strcmp(firmware_filename, "none")) {
> -            firmware_filename = riscv_find_firmware(firmware_filename);
> -        }
> +    } else if (strcmp(machine->firmware, "none")) {
> +        firmware_filename = riscv_find_firmware(machine->firmware);
>       }
>   
> -    if (strcmp(firmware_filename, "none")) {
> +    if (firmware_filename) {
>           /* If not "none" load the firmware */
>           riscv_load_firmware(firmware_filename, firmware_load_addr);
>           g_free(firmware_filename);
> 

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Peter Maydell Oct. 3, 2019, 9:48 a.m. UTC | #4
On Thu, 3 Oct 2019 at 01:53, Bin Meng <bmeng.cn@gmail.com> wrote:
>
> On Thu, Oct 3, 2019 at 5:38 AM Alistair Francis
> <alistair.francis@wdc.com> wrote:
> >
> > Coverity (CID 1405786) thinks that there is a possible memory leak as
> > we don't guarentee that the memory allocatd from riscv_find_firmware()
> > is freed. This is a false positive, but let's tidy up the code to fix
> > the warning.
> >
> > Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> > ---
> >  hw/riscv/boot.c | 11 ++++-------
> >  1 file changed, 4 insertions(+), 7 deletions(-)
> >
>
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
>
> Thanks for the patch. I am not sure how I can easily run Coverity to
> verify the fix though.

You can't; we use the free 'coverity scan' service which just
checks QEMU git master. So we make the fixes we think will
deal with the issues, commit them to master in the usual way,
and then when the scan is rerun we can have another go if
the coverity issue hasn't gone away.

thanks
-- PMM
diff mbox series

Patch

diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
index 2e92fb0680..7fee98d2f8 100644
--- a/hw/riscv/boot.c
+++ b/hw/riscv/boot.c
@@ -38,7 +38,7 @@  void riscv_find_and_load_firmware(MachineState *machine,
                                   const char *default_machine_firmware,
                                   hwaddr firmware_load_addr)
 {
-    char *firmware_filename;
+    char *firmware_filename = NULL;
 
     if (!machine->firmware) {
         /*
@@ -70,14 +70,11 @@  void riscv_find_and_load_firmware(MachineState *machine,
          * if no -bios option is set without breaking anything.
          */
         firmware_filename = riscv_find_firmware(default_machine_firmware);
-    } else {
-        firmware_filename = machine->firmware;
-        if (strcmp(firmware_filename, "none")) {
-            firmware_filename = riscv_find_firmware(firmware_filename);
-        }
+    } else if (strcmp(machine->firmware, "none")) {
+        firmware_filename = riscv_find_firmware(machine->firmware);
     }
 
-    if (strcmp(firmware_filename, "none")) {
+    if (firmware_filename) {
         /* If not "none" load the firmware */
         riscv_load_firmware(firmware_filename, firmware_load_addr);
         g_free(firmware_filename);