Memory allocated by sym and sym->name isn't being freed if some error
occurs in elf_create_undef_symbol(). Free the sym and sym->name if error
is detected before returning NULL.
Addresses-Coverity: ("Prevent memory leak")
Fixes: 2f2f7e47f052 ("objtool: Add elf_create_undef_symbol()")
Signed-off-by: Muhammad Usama Anjum <[email protected]>
---
Only build has been tested.
tools/objtool/elf.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/tools/objtool/elf.c b/tools/objtool/elf.c
index d08f5f3670f8..17ee265a6c6b 100644
--- a/tools/objtool/elf.c
+++ b/tools/objtool/elf.c
@@ -733,7 +733,7 @@ struct symbol *elf_create_undef_symbol(struct elf *elf, const char *name)
sym->sym.st_name = elf_add_string(elf, NULL, sym->name);
if (sym->sym.st_name == -1)
- return NULL;
+ goto err;
sym->sym.st_info = GELF_ST_INFO(STB_GLOBAL, STT_NOTYPE);
// st_other 0
@@ -744,19 +744,19 @@ struct symbol *elf_create_undef_symbol(struct elf *elf, const char *name)
symtab = find_section_by_name(elf, ".symtab");
if (!symtab) {
WARN("can't find .symtab");
- return NULL;
+ goto err;
}
s = elf_getscn(elf->elf, symtab->idx);
if (!s) {
WARN_ELF("elf_getscn");
- return NULL;
+ goto err;
}
data = elf_newdata(s);
if (!data) {
WARN_ELF("elf_newdata");
- return NULL;
+ goto err;
}
data->d_buf = &sym->sym;
@@ -773,6 +773,10 @@ struct symbol *elf_create_undef_symbol(struct elf *elf, const char *name)
elf_add_symbol(elf, sym);
return sym;
+err:
+ free(sym->name);
+ free(sym);
+ return NULL;
}
struct section *elf_create_section(struct elf *elf, const char *name,
--
2.25.1
On Wed, Apr 14, 2021 at 01:45:11AM +0500, Muhammad Usama Anjum wrote:
> Memory allocated by sym and sym->name isn't being freed if some error
> occurs in elf_create_undef_symbol(). Free the sym and sym->name if error
> is detected before returning NULL.
>
> Addresses-Coverity: ("Prevent memory leak")
-EDONTCARE, objtool is single-shot by design, on error we quit, which
frees all memory. Please exclude all of objtool from this class of
problems in your Coverity thing.
On Wed, Apr 14, 2021 at 01:45:11AM +0500, Muhammad Usama Anjum wrote:
> Memory allocated by sym and sym->name isn't being freed if some error
> occurs in elf_create_undef_symbol(). Free the sym and sym->name if error
> is detected before returning NULL.
>
> Addresses-Coverity: ("Prevent memory leak")
> Fixes: 2f2f7e47f052 ("objtool: Add elf_create_undef_symbol()")
> Signed-off-by: Muhammad Usama Anjum <[email protected]>
> ---
> Only build has been tested.
>
Just ignore leaks from the tools/ directory. These things run and then
exit and all the memory is freed. #OldSchoolGarbageCollector
regards,
dan carpenter
On Wed, Apr 14, 2021 at 11:47:09AM +0300, Dan Carpenter wrote:
> On Wed, Apr 14, 2021 at 01:45:11AM +0500, Muhammad Usama Anjum wrote:
> > Memory allocated by sym and sym->name isn't being freed if some error
> > occurs in elf_create_undef_symbol(). Free the sym and sym->name if error
> > is detected before returning NULL.
> >
> > Addresses-Coverity: ("Prevent memory leak")
> > Fixes: 2f2f7e47f052 ("objtool: Add elf_create_undef_symbol()")
> > Signed-off-by: Muhammad Usama Anjum <[email protected]>
> > ---
> > Only build has been tested.
> >
>
> Just ignore leaks from the tools/ directory. These things run and then
> exit and all the memory is freed. #OldSchoolGarbageCollector
Mostly true; but I suspect tools/perf might care, it has some longer
running things in.
Em Thu, Apr 15, 2021 at 09:24:41AM +0200, Peter Zijlstra escreveu:
> On Wed, Apr 14, 2021 at 11:47:09AM +0300, Dan Carpenter wrote:
> > On Wed, Apr 14, 2021 at 01:45:11AM +0500, Muhammad Usama Anjum wrote:
> > > Memory allocated by sym and sym->name isn't being freed if some error
> > > occurs in elf_create_undef_symbol(). Free the sym and sym->name if error
> > > is detected before returning NULL.
> > >
> > > Addresses-Coverity: ("Prevent memory leak")
> > > Fixes: 2f2f7e47f052 ("objtool: Add elf_create_undef_symbol()")
> > > Signed-off-by: Muhammad Usama Anjum <[email protected]>
> > > ---
> > > Only build has been tested.
> > >
> >
> > Just ignore leaks from the tools/ directory. These things run and then
> > exit and all the memory is freed. #OldSchoolGarbageCollector
>
> Mostly true; but I suspect tools/perf might care, it has some longer
> running things in.
Yes, and now we have 'perf daemon' that is long running.
- Arnaldo