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

Re: [PATCH v2 1/2] tree-diff: fix leak when not HAVE_ALLOCA_H

From
Jeff King <peff@peff.net>
Date
Sep 16, 2021, 15:00 UTC
Message-ID
<YUNcDsMkSPhIsFoI@coredump.intra.peff.net>
In-Reply-To
<20210916085523.68581-2-carenas@gmail.com>
On Thu, Sep 16, 2021 at 01:55:22AM -0700, Carlo Marcelo Arenas Belón wrote:
Show 10 quoted lines
> b8ba412bf7 (tree-diff: avoid alloca for large allocations, 2016-06-07)
> adds a way to route some bigger allocations out of the stack and free
> them through the addition of two conveniently named macros, but leaves
> the calls to free the xalloca part, which could be also in the heap,
> if the system doesn't HAVE_ALLOCA_H (ex: macOS and other BSD).
> 
> Add the missing free call, xalloca_free(), which is a noop if we
> allocated memory in the stack frame, but a real free() if we
> allocated in the heap instead, and while at it, change the expression
> to match in both macros for ease of readability.

Thanks, this is definitely my bug introduced by b8ba412bf7 and this is the right fix.

I continue to find the whole xalloca() thing pretty gross, and doubly so now that there are _two_ layers of "maybe alloca(), and maybe malloc()" logic (one in xalloca(), and one in this FAST_ARRAY stuff).

We should definitely take this fix to address the immediate problem, but I wonder if this size logic should be pushed into xalloca to make this kind of problem harder. Of course this is the only caller, so it might not matter much either way.

(I'd also be really happy to see it go away entirely, as alloca() is a foot-gun in the first place. But I think it did make things slightly faster. It might be worth re-measuring).

-Peff
Previous: Carlo Marcelo Arenas BelónNext: Carlo Marcelo Arenas Belón
Message 13 of 15 in “t0000: truly leak free”
  1. 0/2 t0000: truly leak freeCarlo Marcelo Arenas Belón, Sep 16, 2021
  2. 1/2 tree-diff: fix leak when not HAVE_ALLOCACarlo Marcelo Arenas Belón, Sep 16, 2021
  3. Taylor BlauSep 16, 2021
  4. Junio C HamanoSep 16, 2021
  5. 2/2 t0000: avoid masking git exit value through pipesCarlo Marcelo Arenas Belón, Sep 16, 2021
  6. Taylor BlauSep 16, 2021
  7. Junio C HamanoSep 16, 2021
  8. Taylor BlauSep 16, 2021
  9. Junio C HamanoSep 16, 2021
  10. Ævar Arnfjörð BjarmasonSep 16, 2021
  11. 0/2 reroll for cb/plug-leaks-in-alloca-emu-usersCarlo Marcelo Arenas Belón, Sep 16, 2021
  12. 1/2 tree-diff: fix leak when not HAVE_ALLOCA_HCarlo Marcelo Arenas Belón, Sep 16, 2021
  13. Jeff KingSep 16, 2021
  14. 2/2 t0000: avoid masking git exit value through pipesCarlo Marcelo Arenas Belón, Sep 16, 2021
  15. Taylor BlauSep 16, 2021

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.