binfmt: Fix memory leak in ELF loader
Summary: - I noticed that the hello (ELF) application causes a memory leak. - Finally, I found that the data section is not deallocated. - This commit fixes this issue. Impact: - ELF loader with CONFIG_ARCH_ADDRENV=n Testing: - Tested with the following configs - sprensense:elf, esp32-devkitc:elf, sabre-6quad:elf - spresense:wifi_smp, rv-virt:nsh64, sabre-6quad:netnsh Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
This commit is contained in:
parent
79952163c1
commit
0cef7b765e
|
@ -167,10 +167,15 @@ int unload_module(FAR struct binary_s *binp)
|
|||
{
|
||||
binfo("Freeing alloc[%d]: %p\n", i, binp->alloc[i]);
|
||||
#if defined(CONFIG_ARCH_USE_TEXT_HEAP)
|
||||
up_textheap_free((FAR void *)binp->alloc[i]);
|
||||
#else
|
||||
kumm_free((FAR void *)binp->alloc[i]);
|
||||
if (i == 0)
|
||||
{
|
||||
up_textheap_free((FAR void *)binp->alloc[i]);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
kumm_free((FAR void *)binp->alloc[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -277,9 +277,10 @@ static int elf_loadbinary(FAR struct binary_s *binp,
|
|||
up_addrenv_clone(&loadinfo.addrenv, &binp->addrenv);
|
||||
#else
|
||||
binp->alloc[0] = (FAR void *)loadinfo.textalloc;
|
||||
binp->alloc[1] = (FAR void *)loadinfo.dataalloc;
|
||||
#ifdef CONFIG_BINFMT_CONSTRUCTORS
|
||||
binp->alloc[1] = loadinfo.ctoralloc;
|
||||
binp->alloc[2] = loadinfo.dtoralloc;
|
||||
binp->alloc[2] = loadinfo.ctoralloc;
|
||||
binp->alloc[3] = loadinfo.dtoralloc;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
#define BINFMT_NALLOC 3
|
||||
#define BINFMT_NALLOC 4
|
||||
|
||||
/****************************************************************************
|
||||
* Public Types
|
||||
|
|
Loading…
Reference in New Issue