From patchwork Wed Dec 10 00:07:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 879 Return-Path: X-Original-To: u-boot-concept@u-boot.org Delivered-To: u-boot-concept@u-boot.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1765325385; bh=0MHfWf39LlKBKmS0RG+mBUeBhCKq92QwxAvgZYKszX0=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=bLHqGPf0wzTzIs/EMcWTC4KtF3ImfTKZxzqDGVRChDSbnith5gxYSbkMTELWqPs1x vkvDA7H5OomI5R7j1gIl/JrgdblWoy6x1iEKB6N0qyl+zCocfuC+EfK6o3bidd59j+ Fu6+xq4HJFBnqkZqWD1lLrHQVWgl+QrQ620TlVZc4FCfvLF25Y8Gvb2SY+JsRENVEo Tu3bblMSFd82zaRiIRrBuefjr+Z3QqxsNZAPLYYsgNBQfA+LN91yV/i6x8WEYK2Mf/ 8son7pgyKPCjpF7HFmfFYQSCcXC1NvdIzNIxl14DnlJSyYJrQH2SuTnX6o9fTp3WJf yAUbq6nMPDm+w== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 1098C68A22 for ; Tue, 9 Dec 2025 17:09:45 -0700 (MST) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id soYS3BLDhYga for ; Tue, 9 Dec 2025 17:09:45 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1765325384; bh=0MHfWf39LlKBKmS0RG+mBUeBhCKq92QwxAvgZYKszX0=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=tc4bN3nMSJbmwzwFXjKaklpprv2l6qaJF8eVapT7u1k4WvYCEKs6d9WRrocVCV+GC LPvymtDDmf23HYoC1vvPcy0y8JPdrGGkVFqTInDkR3zLMDa7RHKE71m4K8/IS5eQKk xCZ5cj4l/A7wNtfYYVxyhkE92hSrAYc7OOkdcMw9PCxzwxpEDDeTg0+XfRHIO04B0y lmnuZLxKCb2xquxdEzeAoGHXZjvbKuQ5+30a/I/RBMVu6loNQIN1HIgLZI6THuPNQC 5tS5SO85qvtdn9dCmHsK6EIXJKRWXvs/DMSFM8w/3Nd3Tbs83v8rxN7857Q2kqqNqU dbXiolnrTigDg== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id F30806884F for ; Tue, 9 Dec 2025 17:09:44 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1765325382; bh=BBWm3Kna+hb+ZJHkyJp9xEk0M7dqYZQ98Jb/45e8ZCc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PUqZ/5wYUq22fjBqDWQyHtgikT40piNlm7I37qg0s7Cv8lSw1mEtWGPaYaa3GEjDz BmHNpg01JQlvgtUjryvjRDxkPYZtN5KI4nq3GG5b9g5HGPoN6WQN+9hNv9+gVUuCkM ujKOM5Tn9HwHBSzyDWCgIAposSqr1Tb8c0bK8ePLZ//6rjJqb88yLIvnuR7v+lMvo4 fv69C+yPNbc18xcrU/gfGaDCeOUWQ3qHaF4ObOZM57DSDkz0vWLlUN4kWq1KXjuSG+ aSr8+oPE6VKobDI3JC4hbfCYaeB72H9QRnGXp3twuk9aiXObi5HWHNjy4vzjTtB6Pg TzZAR+H9Do68w== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id D7F9868973; Tue, 9 Dec 2025 17:09:42 -0700 (MST) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10026) with ESMTP id UzHmUAGkh9Vi; Tue, 9 Dec 2025 17:09:42 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1765325377; bh=51Sl7KNf8f8AqTBIb0+FzR9WJq1kddOl0CuV2weYBBs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OnOJOB+FM9J3alzAYISfQyiKJuOylbCuzoLICW15yIije3MLL3k1JdfSAW1eLj/hS /PdmVXdPbm3UCHFHaa/wG8psWBVke1zqD1sBHZXHeS8qAx7GTUs3dC82MwJRtyULG9 1tfkKXXPsQrd9gECGdFVhGhXM5RFmSK+ThZzLjECxWn9HClJtE5Dpr+BhYQK1JjQ+x 1ffG2JMveM8l6HpQ7/gCrMS5+4Pg41q+oEX+lJrZuA7hKNzI96sE+AfZ1kvP62U9aU YuYXd9QZl5AmTxBXDQzjkPYK1LghVjO53mrO1qMo5b3rZXhU484UUO+Ufomx3LMlh1 9WodvACzY4+Bw== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 204AA687A7; Tue, 9 Dec 2025 17:09:37 -0700 (MST) From: Simon Glass To: U-Boot Concept Date: Tue, 9 Dec 2025 17:07:13 -0700 Message-ID: <20251210000737.180797-23-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251210000737.180797-1-sjg@u-boot.org> References: <20251210000737.180797-1-sjg@u-boot.org> MIME-Version: 1.0 Message-ID-Hash: 6VMAHSCQNPUOHFH7AKIIMENOLMZ4623P X-Message-ID-Hash: 6VMAHSCQNPUOHFH7AKIIMENOLMZ4623P X-MailFrom: sjg@u-boot.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Heinrich Schuchardt , Simon Glass , Claude X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH 22/35] malloc: Fix internal calls and memalign for mcheck List-Id: Discussion and patches related to U-Boot Concept Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Simon Glass With mcheck enabled, internal_malloc and internal_free go through mcheck wrappers which expect user pointers (after mcheck header), not raw allocator pointers. Also, dlmemalign_impl() needs a properly aligned base pointer for mcheck to place its header correctly. Use _impl functions directly for internal_malloc/internal_free. Call internal_memalign() for alignments greater than MALLOC_ALIGNMENT. Co-developed-by: Claude Signed-off-by: Simon Glass --- common/dlmalloc.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/common/dlmalloc.c b/common/dlmalloc.c index f59b1151606..bcdb4d29424 100644 --- a/common/dlmalloc.c +++ b/common/dlmalloc.c @@ -4092,8 +4092,17 @@ static void unlink_large_chunk(mstate M, tchunkptr X) { #define internal_free(m, mem)\ if (m == gm) dlfree(mem); else mspace_free(m,mem); #else /* MSPACES */ +/* + * When mcheck is enabled, internal calls must use the _impl functions + * to avoid going through the mcheck wrappers which expect user pointers. + */ +#ifdef CONFIG_MCHECK_HEAP_PROTECTION +#define internal_malloc(m, b) dlmalloc_impl(b) +#define internal_free(m, mem) dlfree_impl(mem) +#else #define internal_malloc(m, b) dlmalloc(b) #define internal_free(m, mem) dlfree(mem) +#endif #endif /* MSPACES */ #endif /* ONLY_MSPACES */ @@ -5339,7 +5348,6 @@ static mchunkptr try_realloc_chunk(mstate m, mchunkptr p, size_t nb, } #endif /* !defined(__UBOOT__) || !NO_REALLOC_IN_PLACE */ -#if !CONFIG_IS_ENABLED(MCHECK_HEAP_PROTECTION) || MSPACES static void* internal_memalign(mstate m, size_t alignment, size_t bytes) { void* mem = 0; if (alignment < MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */ @@ -5453,7 +5461,6 @@ static void* internal_memalign(mstate m, size_t alignment, size_t bytes) { } return mem; } -#endif /* !MCHECK_HEAP_PROTECTION || MSPACES */ /* Common support for independent_X routines, handling @@ -5808,9 +5815,13 @@ void* dlmemalign_impl(size_t alignment, size_t bytes) { return memalign_simple(alignment, bytes); #endif #endif - if (alignment <= MALLOC_ALIGNMENT) { + /* + * With mcheck, the wrapper handles alignment via mcheck_memalign_prehook() + * which adds space for the header aligned to the requested alignment. + * The base pointer must still be properly aligned for this to work. + */ + if (alignment <= MALLOC_ALIGNMENT) return dlmalloc_impl(bytes); - } return internal_memalign(gm, alignment, bytes); }