[PATCH v12 1/2] malloc: add tcache support for large chunk caching

Florian Weimer fweimer@redhat.com
Tue Jul 8 14:48:10 GMT 2025


* Cupertino Miranda:

> Existing tcache implementation in glibc seems to focus in caching
> smaller data size allocations, limiting the size of the allocation to
> 1KB.
>
> This patch changes tcache implementation to allow to cache any chunk
> size allocations.  The implementation adds extra bins (linked-lists)
> which store chunks with different ranges of allocation sizes. Bin
> selection is done in multiples in powers of 2 and chunks are inserted in
> growing size ordering within the bin.  The last bin contains all other
> sizes of allocations.
>
> This patch although by default preserves the same implementation,
> limitting caches to 1KB chunks, it now allows to increase the max size
> for the cached chunks with the tunable glibc.malloc.tcache_max.
>
> It also now verifies if chunk was mmapped, in which case __libc_free
> will not add it to tcache.

This change appears to cause heap corruption in the default
configuration:

  glibc: tcache support for large chunk caching is broken
  <https://bugzilla.redhat.com/show_bug.cgi?id=2377132>

It reproduces on Fedora 42 with glibc built upstream sources, like this:

while bash `pwd`/testrun.sh /usr/bin/scanimage --verbose --device=test --batch-count=2; do :; done

I tried to track it down further.  Even if I fix things up so that I can
build with !USE_TCACHE, and even then, the bug reproduces.  So some size
calculation is probably off somewhere.

Thanks,
Florian



More information about the Libc-alpha mailing list