Hi Anton,

On Thu, Feb 13, 2025 at 08:19:44PM +0300, Anton Moryakov wrote:
> Static analyzer reported:
> Return value of a function 'elf_getdata' is dereferenced at unstrip.c:1977
> without checking for NULL, but it is usually checked for this function 
> (97/101).
> 
> Corrections explained:
> - Added a check for NULL for the symstrdata variable before calling 
> dwelf_strtab_finalize.
> - If symstrdata is NULL, the program exits with an error.
> 
> Triggers found by static analyzer Svace.
> 
> Signed-off-by: Anton Moryakov <ant.v.morya...@gmail.com>
> ---
>  src/unstrip.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/src/unstrip.c b/src/unstrip.c
> index d70053de..35c04700 100644
> --- a/src/unstrip.c
> +++ b/src/unstrip.c
> @@ -1974,6 +1974,9 @@ more sections in stripped file than debug file -- 
> arguments reversed?"));
>           }
>       }
>  
> +      if (symstrdata == NULL)
> +     error_exit (0, "Failed to get data from symbol string table");
> +
>        if (dwelf_strtab_finalize (symstrtab, symstrdata) == NULL)
>       error_exit (0, "Not enough memory to create symbol table");

If you check this why not at the point where elf_getdata is called
(symstrdata is assigned?). And then you should also check the other
elf_getdata call at the same time here:

      symdata = elf_getdata (unstripped_symtab, NULL);
      symstrdata = elf_getdata (unstripped_strtab, NULL);

Thanks,

Mark

Reply via email to