==22022== Address 0x4caf710 is 0 bytes inside a block of size 200 free'd ==22022== at 0x4A0804B: free (vg_replace_malloc.c:534) ==22022== by 0x41EC52: read_all_makefiles (read.c:210)
That was helpful, thanks. Reproduced with: martind@swiftboat:~/tmp/make-50790$ cat first.make default:; false martind@swiftboat:~/tmp/make-50790$ cat Makefile real: default martind@swiftboat:~/tmp/make-50790$ MAKEFILES=first.make valgrind make ==23084== Memcheck, a memory error detector ==23084== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==23084== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info ==23084== Command: make ==23084== false ==23084== Invalid read of size 1 ==23084== at 0x4C2C1A2: strlen (vg_replace_strmem.c:412) ==23084== by 0x4138B3: child_error (job.c:500) ==23084== by 0x415B43: reap_children (job.c:869) ==23084== by 0x415F83: new_job (job.c:1857) ==23084== by 0x4212FF: remake_file (remake.c:1234) ==23084== by 0x4212FF: update_file_1 (remake.c:835) ==23084== by 0x4212FF: update_file (remake.c:336) ==23084== by 0x4213F2: check_dep (remake.c:1024) ==23084== by 0x4203FA: update_file_1 (remake.c:572) ==23084== by 0x4203FA: update_file (remake.c:336) ==23084== by 0x42191F: update_goal_chain (remake.c:151) ==23084== by 0x407C96: main (main.c:2555) ==23084== Address 0x5842100 is 0 bytes inside a block of size 200 free'd ==23084== at 0x4C29E90: free (vg_replace_malloc.c:473) ==23084== by 0x41EC2E: read_all_makefiles (read.c:210) ==23084== by 0x407884: main (main.c:1967) ==23084== ==23084== Invalid read of size 1 ==23084== at 0x4C2C1B4: strlen (vg_replace_strmem.c:412) ==23084== by 0x4138B3: child_error (job.c:500) ==23084== by 0x415B43: reap_children (job.c:869) ==23084== by 0x415F83: new_job (job.c:1857) ==23084== by 0x4212FF: remake_file (remake.c:1234) ==23084== by 0x4212FF: update_file_1 (remake.c:835) ==23084== by 0x4212FF: update_file (remake.c:336) ==23084== by 0x4213F2: check_dep (remake.c:1024) ==23084== by 0x4203FA: update_file_1 (remake.c:572) ==23084== by 0x4203FA: update_file (remake.c:336) ==23084== by 0x42191F: update_goal_chain (remake.c:151) ==23084== by 0x407C96: main (main.c:2555) ==23084== Address 0x5842101 is 1 bytes inside a block of size 200 free'd ==23084== at 0x4C29E90: free (vg_replace_malloc.c:473) ==23084== by 0x41EC2E: read_all_makefiles (read.c:210) ==23084== by 0x407884: main (main.c:1967) ==23084== ==23084== Invalid read of size 1 ==23084== at 0x528BDCC: vfprintf (vfprintf.c:1642) ==23084== by 0x52AD3FA: vsprintf (iovsprintf.c:42) ==23084== by 0x5291EB6: sprintf (sprintf.c:32) ==23084== by 0x4138E6: child_error (job.c:501) ==23084== by 0x415B43: reap_children (job.c:869) ==23084== by 0x415F83: new_job (job.c:1857) ==23084== by 0x4212FF: remake_file (remake.c:1234) ==23084== by 0x4212FF: update_file_1 (remake.c:835) ==23084== by 0x4212FF: update_file (remake.c:336) ==23084== by 0x4213F2: check_dep (remake.c:1024) ==23084== by 0x4203FA: update_file_1 (remake.c:572) ==23084== by 0x4203FA: update_file (remake.c:336) ==23084== by 0x42191F: update_goal_chain (remake.c:151) ==23084== by 0x407C96: main (main.c:2555) ==23084== Address 0x5842100 is 0 bytes inside a block of size 200 free'd ==23084== at 0x4C29E90: free (vg_replace_malloc.c:473) ==23084== by 0x41EC2E: read_all_makefiles (read.c:210) ==23084== by 0x407884: main (main.c:1967) ==23084== ==23084== Invalid read of size 1 ==23084== at 0x52B7240: _IO_default_xsputn (genops.c:475) ==23084== by 0x528BD86: vfprintf (vfprintf.c:1642) ==23084== by 0x52AD3FA: vsprintf (iovsprintf.c:42) ==23084== by 0x5291EB6: sprintf (sprintf.c:32) ==23084== by 0x4138E6: child_error (job.c:501) ==23084== by 0x415B43: reap_children (job.c:869) ==23084== by 0x415F83: new_job (job.c:1857) ==23084== by 0x4212FF: remake_file (remake.c:1234) ==23084== by 0x4212FF: update_file_1 (remake.c:835) ==23084== by 0x4212FF: update_file (remake.c:336) ==23084== by 0x4213F2: check_dep (remake.c:1024) ==23084== by 0x4203FA: update_file_1 (remake.c:572) ==23084== by 0x4203FA: update_file (remake.c:336) ==23084== by 0x42191F: update_goal_chain (remake.c:151) ==23084== by 0x407C96: main (main.c:2555) ==23084== Address 0x5842100 is 0 bytes inside a block of size 200 free'd ==23084== at 0x4C29E90: free (vg_replace_malloc.c:473) ==23084== by 0x41EC2E: read_all_makefiles (read.c:210) ==23084== by 0x407884: main (main.c:1967) ==23084== ==23084== Invalid read of size 1 ==23084== at 0x52B724E: _IO_default_xsputn (genops.c:474) ==23084== by 0x528BD86: vfprintf (vfprintf.c:1642) ==23084== by 0x52AD3FA: vsprintf (iovsprintf.c:42) ==23084== by 0x5291EB6: sprintf (sprintf.c:32) ==23084== by 0x4138E6: child_error (job.c:501) ==23084== by 0x415B43: reap_children (job.c:869) ==23084== by 0x415F83: new_job (job.c:1857) ==23084== by 0x4212FF: remake_file (remake.c:1234) ==23084== by 0x4212FF: update_file_1 (remake.c:835) ==23084== by 0x4212FF: update_file (remake.c:336) ==23084== by 0x4213F2: check_dep (remake.c:1024) ==23084== by 0x4203FA: update_file_1 (remake.c:572) ==23084== by 0x4203FA: update_file (remake.c:336) ==23084== by 0x42191F: update_goal_chain (remake.c:151) ==23084== by 0x407C96: main (main.c:2555) ==23084== Address 0x5842102 is 2 bytes inside a block of size 200 free'd ==23084== at 0x4C29E90: free (vg_replace_malloc.c:473) ==23084== by 0x41EC2E: read_all_makefiles (read.c:210) ==23084== by 0x407884: main (main.c:1967) ==23084== make: *** [first.make:1: default] Error 1 ==23084== ==23084== HEAP SUMMARY: ==23084== in use at exit: 156,321 bytes in 1,750 blocks ==23084== total heap usage: 2,759 allocs, 1,009 frees, 390,456 bytes allocated ==23084== ==23084== LEAK SUMMARY: ==23084== definitely lost: 0 bytes in 0 blocks ==23084== indirectly lost: 0 bytes in 0 blocks ==23084== possibly lost: 0 bytes in 0 blocks ==23084== still reachable: 156,321 bytes in 1,750 blocks ==23084== suppressed: 0 bytes in 0 blocks ==23084== Rerun with --leak-check=full to see details of leaked memory ==23084== ==23084== For counts of detected and suppressed errors, rerun with: -v ==23084== ERROR SUMMARY: 32 errors from 5 contexts (suppressed: 0 from 0) martind@swiftboat:~/tmp/make-50790$ With a putative "fix", to leak that one-off allocation: diff --git a/read.c b/read.c index 047807a..edba6f8 100644 --- a/read.c +++ b/read.c @@ -207,7 +207,8 @@ read_all_makefiles (const char **makefiles) eval_makefile (name, RM_NO_DEFAULT_GOAL|RM_INCLUDED|RM_DONTCARE); } - free (value); + /* We may have retained a pointer to the memory, per bug #50790. */ + /* free (value); */ } /* Read makefiles specified with -f switches. */ ... the problem goes: martind@swiftboat:~/tmp/make-50790$ MAKEFILES=first.make valgrind ~/download/make-git/make ==25294== Memcheck, a memory error detector ==25294== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==25294== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info ==25294== Command: /home/martind/download/make-git/make ==25294== false make: *** [first.make:1: default] Error 1 ==25294== ==25294== HEAP SUMMARY: ==25294== in use at exit: 156,553 bytes in 1,751 blocks ==25294== total heap usage: 2,759 allocs, 1,008 frees, 390,488 bytes allocated ==25294== ==25294== LEAK SUMMARY: ==25294== definitely lost: 0 bytes in 0 blocks ==25294== indirectly lost: 0 bytes in 0 blocks ==25294== possibly lost: 0 bytes in 0 blocks ==25294== still reachable: 156,553 bytes in 1,751 blocks ==25294== suppressed: 0 bytes in 0 blocks ==25294== Rerun with --leak-check=full to see details of leaked memory ==25294== ==25294== For counts of detected and suppressed errors, rerun with: -v ==25294== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) martind@swiftboat:~/tmp/make-50790$ I don't see the valgrind symptom in (Debian's) 3.81 but I do in (Debian's) 4.0. I didn't see an obvious introducer in the source. The line I nobbled was from the first revision in source control. _______________________________________________ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make