From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS3215 2.6.0.0/16 X-Spam-Status: No, score=-3.3 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,SPF_HELO_PASS,SPF_PASS,URIBL_BLACK shortcircuit=no autolearn=no autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id 951C21F5AE for ; Mon, 19 Jul 2021 18:48:47 +0000 (UTC) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 85A68395C068 for ; Mon, 19 Jul 2021 18:48:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 85A68395C068 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1626720526; bh=4GAB3iEYlng4Ih/99Ob3SgMqcD0jA5961F74jlK0XJI=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=WI5fcsieU6AyVRKvQdv8Kta9ae6U5F2S7DNp8FGgxJgFgHlEFahE/4Dd7SVEaqRxH VpM/ZrYWlxjLDbUPWy3l/ul4XIajmHzaOVI2IKddFkkrAbU5ZERlznTF64EFWadJjM 9L0lNWssWcFLXvfHyDeonPKD9IS9r2yuyRMF3u4k= Received: from gecko.ash.relay.mailchannels.net (gecko.ash.relay.mailchannels.net [23.83.222.66]) by sourceware.org (Postfix) with ESMTPS id E13B7396E06F for ; Mon, 19 Jul 2021 18:47:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E13B7396E06F X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id F37EA840121; Mon, 19 Jul 2021 18:47:10 +0000 (UTC) Received: from pdx1-sub0-mail-a73.g.dreamhost.com (100-96-13-112.trex-nlb.outbound.svc.cluster.local [100.96.13.112]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id A37D98400B3; Mon, 19 Jul 2021 18:46:59 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from pdx1-sub0-mail-a73.g.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384) by 100.96.13.112 (trex/6.3.3); Mon, 19 Jul 2021 18:47:10 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|siddhesh@gotplt.org X-MailChannels-Auth-Id: dreamhost X-Minister-Arithmetic: 3057a62d534ba1fa_1626720420340_2275865440 X-MC-Loop-Signature: 1626720420340:1204734938 X-MC-Ingress-Time: 1626720420340 Received: from pdx1-sub0-mail-a73.g.dreamhost.com (localhost [127.0.0.1]) by pdx1-sub0-mail-a73.g.dreamhost.com (Postfix) with ESMTP id 9010C8A6A2; Mon, 19 Jul 2021 11:46:57 -0700 (PDT) Received: from rhbox.intra.reserved-bit.com (unknown [1.186.101.110]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: siddhesh@gotplt.org) by pdx1-sub0-mail-a73.g.dreamhost.com (Postfix) with ESMTPSA id C729C7EC9D; Mon, 19 Jul 2021 11:46:52 -0700 (PDT) X-DH-BACKEND: pdx1-sub0-mail-a73 To: libc-alpha@sourceware.org Subject: [PATCH v10 00/11] malloc hooks removal Date: Tue, 20 Jul 2021 00:16:26 +0530 Message-Id: <20210719184637.1225275-1-siddhesh@sourceware.org> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Siddhesh Poyarekar via Libc-alpha Reply-To: Siddhesh Poyarekar Cc: fweimer@redhat.com Errors-To: libc-alpha-bounces+e=80x24.org@sourceware.org Sender: "Libc-alpha" 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: - x86_64 - --prefix=3D/usr: No new failures - x86_64, i686, s390x, ppc64le, armv7l, aarch64 - Fedora config: No new failures - build-many-glibcs: In progress Changes from v9: - Moved malloc_{g,s}et_state to libc_malloc_debug.so - Moved undumping support to libc_malloc_debug.so - Reverted reallocarray interposition Changes from v8: - Make hook-dependent tests conditional on GLIBC_2.23 instead of GLIBC_2.24 - Interpose reallocarray. 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 (11): Make mcheck tests conditional on GLIBC_2.23 or earlier Remove __after_morecore_hook Remove __morecore and __default_morecore Move malloc hooks into a compat DSO mcheck: Wean away from malloc hooks [BZ #23489] Simplify __malloc_initialized mtrace: Wean away from malloc hooks glibc.malloc.check: Wean away from malloc hooks Move malloc_{g,s}et_state to libc_malloc_debug Remove malloc hooks [BZ #23328] mcheck Fix malloc_usable_size [BZ #22057] NEWS | 26 + 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 | 63 +- malloc/Versions | 47 +- malloc/arena.c | 48 +- malloc/hooks.c | 177 +---- malloc/malloc-check.c | 63 +- malloc/malloc-debug.c | 671 ++++++++++++++++++ malloc/malloc-hooks.h | 24 - malloc/malloc.c | 218 ++---- 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 + sysdeps/mach/hurd/i386/libc.abilist | 2 - .../mach/hurd/i386/libc_malloc_debug.abilist | 28 + sysdeps/mach/hurd/i386/localplt.data | 1 - sysdeps/pthread/Makefile | 3 +- sysdeps/unix/sysv/linux/aarch64/libc.abilist | 2 - .../linux/aarch64/libc_malloc_debug.abilist | 28 + sysdeps/unix/sysv/linux/aarch64/localplt.data | 1 - sysdeps/unix/sysv/linux/alpha/libc.abilist | 2 - .../linux/alpha/libc_malloc_debug.abilist | 28 + sysdeps/unix/sysv/linux/alpha/localplt.data | 1 - .../sysv/linux/arc/libc_malloc_debug.abilist | 26 + sysdeps/unix/sysv/linux/arc/localplt.data | 1 - sysdeps/unix/sysv/linux/arm/be/libc.abilist | 2 - .../linux/arm/be/libc_malloc_debug.abilist | 28 + sysdeps/unix/sysv/linux/arm/le/libc.abilist | 2 - .../linux/arm/le/libc_malloc_debug.abilist | 28 + sysdeps/unix/sysv/linux/arm/localplt.data | 1 - .../sysv/linux/csky/libc_malloc_debug.abilist | 26 + sysdeps/unix/sysv/linux/csky/localplt.data | 1 - sysdeps/unix/sysv/linux/hppa/libc.abilist | 2 - .../sysv/linux/hppa/libc_malloc_debug.abilist | 28 + sysdeps/unix/sysv/linux/hppa/localplt.data | 1 - sysdeps/unix/sysv/linux/hppa/shlib-versions | 2 + sysdeps/unix/sysv/linux/i386/libc.abilist | 2 - .../sysv/linux/i386/libc_malloc_debug.abilist | 28 + sysdeps/unix/sysv/linux/i386/localplt.data | 1 - sysdeps/unix/sysv/linux/ia64/libc.abilist | 2 - .../sysv/linux/ia64/libc_malloc_debug.abilist | 28 + sysdeps/unix/sysv/linux/ia64/localplt.data | 1 - sysdeps/unix/sysv/linux/ia64/shlib-versions | 2 + .../sysv/linux/m68k/coldfire/libc.abilist | 2 - .../m68k/coldfire/libc_malloc_debug.abilist | 28 + .../sysv/linux/m68k/coldfire/localplt.data | 1 - .../unix/sysv/linux/m68k/m680x0/libc.abilist | 2 - .../m68k/m680x0/libc_malloc_debug.abilist | 28 + .../unix/sysv/linux/m68k/m680x0/localplt.data | 1 - .../sysv/linux/microblaze/be/libc.abilist | 2 - .../microblaze/be/libc_malloc_debug.abilist | 28 + .../sysv/linux/microblaze/le/libc.abilist | 2 - .../microblaze/le/libc_malloc_debug.abilist | 28 + .../unix/sysv/linux/microblaze/localplt.data | 1 - .../sysv/linux/mips/mips32/fpu/libc.abilist | 2 - .../mips/mips32/fpu/libc_malloc_debug.abilist | 28 + .../sysv/linux/mips/mips32/nofpu/libc.abilist | 2 - .../mips32/nofpu/libc_malloc_debug.abilist | 28 + .../sysv/linux/mips/mips64/n32/libc.abilist | 2 - .../mips/mips64/n32/libc_malloc_debug.abilist | 28 + .../sysv/linux/mips/mips64/n64/libc.abilist | 2 - .../mips/mips64/n64/libc_malloc_debug.abilist | 28 + sysdeps/unix/sysv/linux/mips/shlib-versions | 2 + sysdeps/unix/sysv/linux/nios2/libc.abilist | 2 - .../linux/nios2/libc_malloc_debug.abilist | 28 + sysdeps/unix/sysv/linux/nios2/localplt.data | 1 - .../linux/powerpc/powerpc32/fpu/libc.abilist | 2 - .../powerpc32/fpu/libc_malloc_debug.abilist | 28 + .../linux/powerpc/powerpc32/fpu/localplt.data | 1 - .../powerpc/powerpc32/nofpu/libc.abilist | 2 - .../powerpc32/nofpu/libc_malloc_debug.abilist | 28 + .../powerpc/powerpc32/nofpu/localplt.data | 1 - .../linux/powerpc/powerpc64/be/libc.abilist | 2 - .../powerpc64/be/libc_malloc_debug.abilist | 28 + .../linux/powerpc/powerpc64/le/libc.abilist | 2 - .../powerpc64/le/libc_malloc_debug.abilist | 28 + .../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 - .../unix/sysv/linux/s390/s390-32/libc.abilist | 2 - .../s390/s390-32/libc_malloc_debug.abilist | 28 + .../unix/sysv/linux/s390/s390-64/libc.abilist | 2 - .../s390/s390-64/libc_malloc_debug.abilist | 28 + sysdeps/unix/sysv/linux/sh/be/libc.abilist | 2 - .../linux/sh/be/libc_malloc_debug.abilist | 28 + sysdeps/unix/sysv/linux/sh/le/libc.abilist | 2 - .../linux/sh/le/libc_malloc_debug.abilist | 28 + sysdeps/unix/sysv/linux/sh/localplt.data | 1 - sysdeps/unix/sysv/linux/sh/shlib-versions | 1 + .../sysv/linux/sparc/sparc32/libc.abilist | 2 - .../sparc/sparc32/libc_malloc_debug.abilist | 28 + .../sysv/linux/sparc/sparc32/localplt.data | 1 - .../sysv/linux/sparc/sparc64/libc.abilist | 2 - .../sparc/sparc64/libc_malloc_debug.abilist | 28 + .../sysv/linux/sparc/sparc64/localplt.data | 1 - .../sysv/linux/sparc/sparc64/shlib-versions | 1 + .../unix/sysv/linux/x86_64/64/libc.abilist | 2 - .../linux/x86_64/64/libc_malloc_debug.abilist | 28 + .../unix/sysv/linux/x86_64/x32/libc.abilist | 2 - .../x86_64/x32/libc_malloc_debug.abilist | 28 + sysdeps/x86_64/localplt.data | 1 - 133 files changed, 2775 insertions(+), 1489 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.abi= list create mode 100644 sysdeps/unix/sysv/linux/alpha/libc_malloc_debug.abili= st create mode 100644 sysdeps/unix/sysv/linux/arc/libc_malloc_debug.abilist create mode 100644 sysdeps/unix/sysv/linux/arm/be/libc_malloc_debug.abil= ist create mode 100644 sysdeps/unix/sysv/linux/arm/le/libc_malloc_debug.abil= ist create mode 100644 sysdeps/unix/sysv/linux/csky/libc_malloc_debug.abilis= t create mode 100644 sysdeps/unix/sysv/linux/hppa/libc_malloc_debug.abilis= t create mode 100644 sysdeps/unix/sysv/linux/i386/libc_malloc_debug.abilis= t create mode 100644 sysdeps/unix/sysv/linux/ia64/libc_malloc_debug.abilis= t create mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/libc_malloc_deb= ug.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_deb= ug.abilist create mode 100644 sysdeps/unix/sysv/linux/microblaze/le/libc_malloc_deb= ug.abilist create mode 100644 sysdeps/unix/sysv/linux/mips/mips32/fpu/libc_malloc_d= ebug.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_d= ebug.abilist create mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/libc_malloc_d= ebug.abilist create mode 100644 sysdeps/unix/sysv/linux/nios2/libc_malloc_debug.abili= st create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc_ma= lloc_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_mal= loc_debug.abilist create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc_mal= loc_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_debu= g.abilist create mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/libc_malloc_debu= g.abilist create mode 100644 sysdeps/unix/sysv/linux/sh/be/libc_malloc_debug.abili= st create mode 100644 sysdeps/unix/sysv/linux/sh/le/libc_malloc_debug.abili= st create mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/libc_malloc_deb= ug.abilist create mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/libc_malloc_deb= ug.abilist create mode 100644 sysdeps/unix/sysv/linux/x86_64/64/libc_malloc_debug.a= bilist create mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/libc_malloc_debug.= abilist --=20 2.31.1