git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 4/4] Makefile: turn on NO_MMAP when building with LSan

From
Jacob Keller <jacob.e.keller@intel.com>
Date
Mar 6, 2026, 09:17 UTC
Message-ID
<796110ee-d795-4445-9d82-7026370a88cf@intel.com>
In-Reply-To
<20260305231305.GD2901305@coredump.intra.peff.net>
On 3/5/2026 3:13 PM, Jeff King wrote:
Show 31 quoted lines
> The past few commits fixed some cases where we leak memory allocated by
> mmap(). Building with SANITIZE=leak doesn't detect these because it
> covers only heap buffers allocated by malloc().
> 
> But if we build with NO_MMAP, our compat mmap() implementation will
> allocate a heap buffer and pread() into it. And thus Lsan will detect
> these leaks for free.
> 
> Using NO_MMAP is less performant, of course, since we have to use extra
> memory and read in the whole file, rather than faulting in pages from
> disk. But LSan builds are already slow, and this doesn't make them
> measurably worse. Getting extra coverage for our leak-checking is worth
> it.
> 
> Signed-off-by: Jeff King <peff@peff.net>
> ---
>  Makefile | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/Makefile b/Makefile
> index f3264d0a37..4cf1afd395 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1600,6 +1600,7 @@ BASIC_CFLAGS += -DSHA1DC_FORCE_ALIGNED_ACCESS
>  endif
>  ifneq ($(filter leak,$(SANITIZERS)),)
>  BASIC_CFLAGS += -O0
> +NO_MMAP = CatchMapLeaks
>  SANITIZE_LEAK = YesCompiledWithIt
>  endif
>  ifneq ($(filter address,$(SANITIZERS)),)
Should this patch also affect the meson.build?
There is the following in meson.build:
if host_machine.system() == 'windows'
  libgit_c_args += '-DUSE_WIN32_MMAP'
else
  checkfuncs += {
    # provided by compat/mingw.c.
    'unsetenv' : ['unsetenv.c'],
    # provided by compat/mingw.c.
    'getpagesize' : [],
  }
  if get_option('b_sanitize').contains('address')
    libgit_c_args += '-DNO_MMAP'
    libgit_sources += 'compat/mmap.c'
  else
    checkfuncs += { 'mmap': ['mmap.c'] }
  endif
endif
This probably needs to also check if it contains leak, no?

Also I think this might be somewhat less flexible than Make since you can't forcibly enable mmap even with sanitizers enabled. I suppose thats not a big deal since enabling sanitizers already has a high cost.

Thanks, Jake

Previous: Jeff KingNext: Jeff King
Message 10 of 25 in “memory leak when cloning a repository”
  1. Jacob KellerMar 5, 2026
  2. Jeff KingMar 5, 2026
  3. 0/4 plugging some mmap() leaksJeff King, Mar 5, 2026
  4. 1/4 check_connected(): delay opening new_packJeff King, Mar 5, 2026
  5. Jacob KellerMar 5, 2026
  6. 2/4 check_connected(): fix leak of pack-index mmapJeff King, Mar 5, 2026
  7. Jacob KellerMar 5, 2026
  8. 3/4 pack-revindex: avoid double-loading .rev filesJeff King, Mar 5, 2026
  9. 4/4 Makefile: turn on NO_MMAP when building with LSanJeff King, Mar 5, 2026
  10. Jacob KellerMar 6, 2026
  11. 5/4 meson: turn on NO_MMAP when building with LSanJeff King, Mar 6, 2026
  12. Ramsay JonesMar 6, 2026
  13. Junio C HamanoMar 7, 2026
  14. 5/4 object-file: fix mmap() leak in odb_source_loose_read_object_stream()Jeff King, Mar 7, 2026
  15. Junio C HamanoMar 7, 2026
  16. Patrick SteinhardtMar 10, 2026
  17. Ramsay JonesMar 6, 2026
  18. Jeff KingMar 6, 2026
  19. Ramsay JonesMar 6, 2026
  20. Junio C HamanoMar 6, 2026
  21. Ramsay JonesMar 6, 2026
  22. Junio C HamanoMar 6, 2026
  23. Ramsay JonesMar 6, 2026
  24. Junio C HamanoMar 7, 2026
  25. Jacob KellerMar 5, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.