Commit 1ff9b00
committed
fix memory leak in elf_init
When running with -fsanitize=leak enabled nasm prints this error:
Direct leak of 31 byte(s) in 1 object(s) allocated from:
#0 0x7faadfc56867 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145
netwide-assembler#1 0x7faadf3ecaac in __GI___libc_scratch_buffer_dupfree malloc/scratch_buffer_dupfree.c:32
netwide-assembler#2 0x7faadf395eed in scratch_buffer_dupfree ../include/scratch_buffer.h:147
netwide-assembler#3 0x7faadf395eed in realpath_stk stdlib/canonicalize.c:424
netwide-assembler#4 0x7faadf3964f5 in __GI___realpath stdlib/canonicalize.c:446
netwide-assembler#5 0x7faadfbe6b7c in __interceptor_canonicalize_file_name ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:3682
netwide-assembler#6 0x5643cfb1b058 in nasm_realpath nasmlib/realpath.c:58
netwide-assembler#7 0x5643cfaaaef5 in elf_init output/outelf.c:547
netwide-assembler#8 0x5643cfaaade7 in elf32_init output/outelf.c:496
netwide-assembler#9 0x5643cf9d1454 in main asm/nasm.c:716
netwide-assembler#10 0x7faadf36ed8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
netwide-assembler#11 0x7faadf36ee3f in __libc_start_main_impl ../csu/libc-start.c:392
netwide-assembler#12 0x5643cf9cce04 in _start (/home/ivan/d/nasm/nasm+0x2e2e04)
Direct leak of 24 byte(s) in 1 object(s) allocated from:
#0 0x7faadfc56867 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145
netwide-assembler#1 0x5643cf9dcbc4 in nasm_malloc nasmlib/alloc.c:55
netwide-assembler#2 0x5643cf9dced4 in nasm_strndup nasmlib/alloc.c:127
netwide-assembler#3 0x5643cfb1b4e4 in nasm_dirname nasmlib/path.c:152
netwide-assembler#4 0x5643cfaaaf4d in elf_init output/outelf.c:550
netwide-assembler#5 0x5643cfaaade7 in elf32_init output/outelf.c:496
netwide-assembler#6 0x5643cf9d1454 in main asm/nasm.c:716
netwide-assembler#7 0x7faadf36ed8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
netwide-assembler#8 0x7faadf36ee3f in __libc_start_main_impl ../csu/libc-start.c:392
netwide-assembler#9 0x5643cf9cce04 in _start (/home/ivan/d/nasm/nasm+0x2e2e04)
This error is reproducible on any test that is run with -felf.
The problem is fixed by calling nasm_free appropriately. I had to
remove const from pointers because I get -Wdiscarded-qualifiers
warning otherwise, because nasm_free takes non-const pointer.
Signed-off-by: Ivan Sorokin <[email protected]>1 parent a916e41 commit 1ff9b00
1 file changed
+5
-2
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
544 | 544 | | |
545 | 545 | | |
546 | 546 | | |
547 | | - | |
| 547 | + | |
| 548 | + | |
548 | 549 | | |
549 | 550 | | |
550 | | - | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
551 | 554 | | |
552 | 555 | | |
553 | 556 | | |
| |||
0 commit comments