[PATCH v8 00/10] malloc hooks removal

H.J. Lu hjl.tools@gmail.com
Tue Jul 13 14:48:24 GMT 2021


On Tue, Jul 13, 2021 at 12:39 AM Siddhesh Poyarekar via Libc-alpha
<libc-alpha@sourceware.org> wrote:
>
> This patchset removes the malloc hooks __malloc_hook, __free_hook,
> __realloc_hook and __memalign_hook from the API and leaves compatibility
> symbols so that existing applications can continue to link to them.  The
> reading and execution of the hooks has been moved to a DSO
> libc_malloc_debug.so, which can be preloaded for applications that need
> it.  By default these hooks no longer have any effect in the library.
>
> Further, debugging features such as MALLOC_CHECK_, mcheck() and mtrace
> have been weaned away from these hooks and also moved to
> libc_malloc_debug.so.  With this change, these features are only enabled
> when libc_malloc_debug.so is preloaded using LD_PRELOAD.
>
> Finally, the __morecore, __morecore_after_hook and __default_morecore
> hooks have also been moved to compat symbols and removed from the API.
> Existing applications will continue to link to them but they won't have
> any effect on malloc behaviour.
>
> Testing:
>
> The patchset has gone through a full build and test on x86_64, i686,
> s390x, ppc64le, armv7l and aarch64 through a scratch build on Fedora
> rawhide.  I also installed a test package on x86_64 and rebooted to make
> sure the system boots to shell.  I did a build-many-glibcs run with
> the patchset and it ran clean on all targets.

Does this series fix posix_memalign:

https://sourceware.org/bugzilla/show_bug.cgi?id=23489

> Changes from v7:
> - Made mcheck tests conditional on GLIBC_2.24
> - Added SHLIB_COMPAT guard around __malloc_initialize_hook usage in
>   libc_malloc_debug.so
> - Fixed hurd build failure.
> - Add another patch to fix malloc_usable_size to mcheck
>
> Changes from v6:
> - Moved malloc-check into libc_malloc_debug.so. Tweaked malloc.c to
>   allow building twice, once inside libc.so and next in
>   libc_malloc_debug.so
> - Included morecore.c into malloc.c
> - Moved hook initialization too into libc_malloc_debug.so.
> - Interposed more functions in libc_malloc_debug.so
> - Versioned all symbols exported from libc_malloc_debug.so and finalized
>   them so that the library cannot be linked against
>
> Changes from v5:
> - Rebased on latest master
> - Fixed realloc-mcheck
> - Removed residual mention of libmalloc_compathooks
> - Removed LD_PRELOAD from elf/tst-setuid
>
> Changes from v4:
> - Patchset has a different approach, starting with moving out hooks
>   first to restrict all major malloc.c changes to the first patch
> - Renamed libmalloc_compathooks.so to libc_malloc_debug.so
> - Moved all debugging features into libc_malloc_debug.so
> - Made more documentation updates
> - Simplified __malloc_initialized variable use
> - Removed debugging tests on static variables since that is no longer
>   supported
>
> Changes from v3:
> - Remove source file dependencies
> - Commit mcheck tests
>
> Changes from v2:
> - Move hooks dependencies to malloc.o{,sS}
>
> Changes from v1:
>
> - Added makefile dependencies for the new hooks files
> - Fixed memset call in calloc debugging hooks
> - Added the tr_break deprecation patch and mcheck test patch to this
>   series
>
>
> Siddhesh Poyarekar (10):
>   Make mcheck tests conditional on GLIBC_2.24 or earlier
>   Remove __after_morecore_hook
>   Remove __morecore and __default_morecore
>   Move malloc hooks into a compat DSO
>   mcheck: Wean away from malloc hooks
>   Simplify __malloc_initialized
>   mtrace: Wean away from malloc hooks
>   glibc.malloc.check: Wean away from malloc hooks
>   Remove malloc hooks
>   mcheck Fix malloc_usable_size [BZ #22057]
>
>  NEWS                                          |  21 +
>  Rules                                         |   9 +-
>  catgets/Makefile                              |   4 +-
>  elf/Makefile                                  |  15 +-
>  elf/tst-leaks1-static.c                       |   1 -
>  iconvdata/Makefile                            |   3 +-
>  include/malloc.h                              |   6 -
>  include/mcheck.h                              |   4 -
>  include/stdlib.h                              |   3 -
>  intl/tst-gettext.sh                           |   1 +
>  libio/Makefile                                |  12 +-
>  localedata/Makefile                           |   3 +-
>  malloc/Makefile                               |  56 +-
>  malloc/Versions                               |  44 ++
>  malloc/arena.c                                |  48 +-
>  malloc/hooks.c                                |  71 ++-
>  malloc/malloc-check.c                         |  63 ++-
>  malloc/malloc-debug.c                         | 522 ++++++++++++++++++
>  malloc/malloc-hooks.h                         |  24 -
>  malloc/malloc.c                               | 163 ++----
>  malloc/malloc.h                               |  27 -
>  malloc/mcheck-impl.c                          | 412 ++++++++++++++
>  malloc/mcheck.c                               | 397 +------------
>  malloc/morecore.c                             |  34 +-
>  malloc/mtrace-impl.c                          | 226 ++++++++
>  malloc/mtrace.c                               | 313 +----------
>  malloc/tst-compathooks-off.c                  | 145 +++++
>  malloc/tst-compathooks-on.c                   |   2 +
>  malloc/tst-malloc-usable-static-tunables.c    |   1 -
>  malloc/tst-malloc-usable-static.c             |   1 -
>  malloc/tst-mtrace.sh                          |   1 +
>  manual/memory.texi                            | 207 +------
>  manual/tunables.texi                          |   4 +-
>  misc/Makefile                                 |   6 +-
>  nptl/Makefile                                 |   3 +-
>  posix/Makefile                                |  48 +-
>  resolv/Makefile                               |   9 +-
>  shlib-versions                                |   3 +
>  stdio-common/Makefile                         |  15 +-
>  sysdeps/aarch64/Makefile                      |   3 +
>  sysdeps/generic/libc_malloc_debug.abilist     |   0
>  sysdeps/generic/localplt.data                 |   1 -
>  sysdeps/mach/hurd/Makefile                    |   1 +
>  .../mach/hurd/i386/libc_malloc_debug.abilist  |  26 +
>  sysdeps/mach/hurd/i386/localplt.data          |   1 -
>  sysdeps/pthread/Makefile                      |   3 +-
>  .../linux/aarch64/libc_malloc_debug.abilist   |  26 +
>  sysdeps/unix/sysv/linux/aarch64/localplt.data |   1 -
>  .../linux/alpha/libc_malloc_debug.abilist     |  26 +
>  sysdeps/unix/sysv/linux/alpha/localplt.data   |   1 -
>  .../sysv/linux/arc/libc_malloc_debug.abilist  |  26 +
>  sysdeps/unix/sysv/linux/arc/localplt.data     |   1 -
>  .../linux/arm/be/libc_malloc_debug.abilist    |  26 +
>  .../linux/arm/le/libc_malloc_debug.abilist    |  26 +
>  sysdeps/unix/sysv/linux/arm/localplt.data     |   1 -
>  .../sysv/linux/csky/libc_malloc_debug.abilist |  26 +
>  sysdeps/unix/sysv/linux/csky/localplt.data    |   1 -
>  .../sysv/linux/hppa/libc_malloc_debug.abilist |  26 +
>  sysdeps/unix/sysv/linux/hppa/localplt.data    |   1 -
>  sysdeps/unix/sysv/linux/hppa/shlib-versions   |   2 +
>  .../sysv/linux/i386/libc_malloc_debug.abilist |  26 +
>  sysdeps/unix/sysv/linux/i386/localplt.data    |   1 -
>  .../sysv/linux/ia64/libc_malloc_debug.abilist |  26 +
>  sysdeps/unix/sysv/linux/ia64/localplt.data    |   1 -
>  sysdeps/unix/sysv/linux/ia64/shlib-versions   |   2 +
>  .../m68k/coldfire/libc_malloc_debug.abilist   |  26 +
>  .../sysv/linux/m68k/coldfire/localplt.data    |   1 -
>  .../m68k/m680x0/libc_malloc_debug.abilist     |  26 +
>  .../unix/sysv/linux/m68k/m680x0/localplt.data |   1 -
>  .../microblaze/be/libc_malloc_debug.abilist   |  26 +
>  .../microblaze/le/libc_malloc_debug.abilist   |  26 +
>  .../unix/sysv/linux/microblaze/localplt.data  |   1 -
>  .../mips/mips32/fpu/libc_malloc_debug.abilist |  26 +
>  .../mips32/nofpu/libc_malloc_debug.abilist    |  26 +
>  .../mips/mips64/n32/libc_malloc_debug.abilist |  26 +
>  .../mips/mips64/n64/libc_malloc_debug.abilist |  26 +
>  sysdeps/unix/sysv/linux/mips/shlib-versions   |   2 +
>  .../linux/nios2/libc_malloc_debug.abilist     |  26 +
>  sysdeps/unix/sysv/linux/nios2/localplt.data   |   1 -
>  .../powerpc32/fpu/libc_malloc_debug.abilist   |  26 +
>  .../linux/powerpc/powerpc32/fpu/localplt.data |   1 -
>  .../powerpc32/nofpu/libc_malloc_debug.abilist |  26 +
>  .../powerpc/powerpc32/nofpu/localplt.data     |   1 -
>  .../powerpc64/be/libc_malloc_debug.abilist    |  26 +
>  .../powerpc64/le/libc_malloc_debug.abilist    |  26 +
>  .../linux/powerpc/powerpc64/localplt.data     |   1 -
>  sysdeps/unix/sysv/linux/riscv/localplt.data   |   1 -
>  .../riscv/rv32/libc_malloc_debug.abilist      |  26 +
>  .../riscv/rv64/libc_malloc_debug.abilist      |  26 +
>  sysdeps/unix/sysv/linux/s390/localplt.data    |   1 -
>  .../s390/s390-32/libc_malloc_debug.abilist    |  26 +
>  .../s390/s390-64/libc_malloc_debug.abilist    |  26 +
>  .../linux/sh/be/libc_malloc_debug.abilist     |  26 +
>  .../linux/sh/le/libc_malloc_debug.abilist     |  26 +
>  sysdeps/unix/sysv/linux/sh/localplt.data      |   1 -
>  sysdeps/unix/sysv/linux/sh/shlib-versions     |   1 +
>  .../sparc/sparc32/libc_malloc_debug.abilist   |  26 +
>  .../sysv/linux/sparc/sparc32/localplt.data    |   1 -
>  .../sparc/sparc64/libc_malloc_debug.abilist   |  26 +
>  .../sysv/linux/sparc/sparc64/localplt.data    |   1 -
>  .../sysv/linux/sparc/sparc64/shlib-versions   |   1 +
>  .../linux/x86_64/64/libc_malloc_debug.abilist |  26 +
>  .../x86_64/x32/libc_malloc_debug.abilist      |  26 +
>  sysdeps/x86_64/localplt.data                  |   1 -
>  104 files changed, 2557 insertions(+), 1266 deletions(-)
>  delete mode 100644 elf/tst-leaks1-static.c
>  create mode 100644 malloc/malloc-debug.c
>  delete mode 100644 malloc/malloc-hooks.h
>  create mode 100644 malloc/mcheck-impl.c
>  create mode 100644 malloc/mtrace-impl.c
>  create mode 100644 malloc/tst-compathooks-off.c
>  create mode 100644 malloc/tst-compathooks-on.c
>  delete mode 100644 malloc/tst-malloc-usable-static-tunables.c
>  delete mode 100644 malloc/tst-malloc-usable-static.c
>  create mode 100644 sysdeps/generic/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/mach/hurd/i386/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/alpha/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/arc/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/arm/be/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/arm/le/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/csky/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/hppa/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/i386/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/ia64/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/microblaze/be/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/microblaze/le/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/mips/mips32/fpu/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/nios2/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/riscv/rv64/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/sh/be/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/sh/le/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/x86_64/64/libc_malloc_debug.abilist
>  create mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/libc_malloc_debug.abilist
>
> --
> 2.31.1
>


-- 
H.J.


More information about the Libc-alpha mailing list