Skip to content

Conversation

@frozencemetery
Copy link

For the first, I've opted for a more invasive change to the function since the control was harder to reason about, but I could provide a more minimal fix to the problems reported if that would be preferred.

Static analyzer notes about the issues are in the commit messages, which I can also remove if that would be preferred.

Flatten control flow to use a single exit path.  Fixes leaks, including
of dmi_fname and entry_fname.  Reported by Coverity:

    libsmbios-2.4.3/src/libsmbios_c/smbios/smbios_linux.c:104: alloc_arg: "asprintf" allocates memory that is stored into "dmi_fname". [Note: The source code implementation of the function has been overridden by a builtin model.]
    libsmbios-2.4.3/src/libsmbios_c/smbios/smbios_linux.c:131: noescape: Resource "dmi_fname" is not freed or pointed-to in "read_file".
    libsmbios-2.4.3/src/libsmbios_c/smbios/smbios_linux.c:160: leaked_storage: Variable "dmi_fname" going out of scope leaks the storage it points to.
    #  158|       free(entry_buffer);
    #  159|       fnprintf(" out: %d\n", retval);
    #  160|->     return retval;
    #  161|   }
    #  162|

    libsmbios-2.4.3/src/libsmbios_c/smbios/smbios_linux.c:100: alloc_arg: "asprintf" allocates memory that is stored into "entry_fname". [Note: The source code implementation of the function has been overridden by a builtin model.]
    libsmbios-2.4.3/src/libsmbios_c/smbios/smbios_linux.c:111: noescape: Resource "entry_fname" is not freed or pointed-to in "read_file".
    libsmbios-2.4.3/src/libsmbios_c/smbios/smbios_linux.c:160: leaked_storage: Variable "entry_fname" going out of scope leaks the storage it points to.
    #  158|       free(entry_buffer);
    #  159|       fnprintf(" out: %d\n", retval);
    #  160|->     return retval;
    #  161|   }
    #  162|

Signed-off-by: Robbie Harwood <rharwood@redhat.com>
Reported by Coverity:

    libsmbios-2.4.3/src/libsmbios_c/smbios/smbios_obj.c:82: address: Taking address of "singleton".
    libsmbios-2.4.3/src/libsmbios_c/smbios/smbios_obj.c:82: assign: Assigning: "toReturn" = "&singleton".
    libsmbios-2.4.3/src/libsmbios_c/smbios/smbios_obj.c:103: incorrect_free: "init_smbios_struct" frees incorrect pointer "toReturn".
    #  101|       }
    #  102|
    #  103|->     ret = init_smbios_struct(toReturn);
    #  104|       if (ret)
    #  105|           goto out_init_fail;

Signed-off-by: Robbie Harwood <rharwood@redhat.com>
@frozencemetery frozencemetery changed the title Two static analyzer fixes Three static analyzer fixes Sep 8, 2021
@frozencemetery frozencemetery changed the title Three static analyzer fixes Various static analyzer fixes Sep 8, 2021
In the failure case, toReturn has been freed already, so dereferencing
it to write to a struct member (initialized) is not valid.

Signed-off-by: Robbie Harwood <rharwood@redhat.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant