From patchwork Sat Jan 3 01:18:53 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 1211 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=1767403226; bh=bxMLNlKbRAcG3Tf23pRpe7O7bVtxtpUl40DPQ3HlxZI=; 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=JGTqVLFUNf7B93DGbp2NL/RsDWJevNBPW6zmqNEKy7HttDTTFbPE439q9ptn1aJ7w 79vnbOx2o4OJDyieyTgYYXfp5B7eqjKv2u+gb9mDqPg4PBYiTlEI3EYXHtCQY3Skpq rOPdACXBPycwy0DeHc2z2y1QTRFqrMVYyIW2qbwm3mcgDGWHrOZYJ0E4A60sugLvpd qMkkFs455LBT1K8ihXLmnXjepjBwWhnxCMJzY+ddKT62Kp1joAR0hJkDA3k3fQb7XZ bo/hCocJNUOTvot26WswkYwTwXtgSNHzjZrklFGjT1dtADz2obXHE9WE1UnOp/uIYw 01ylVjm+dy/BA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 0D18E6904E for ; Fri, 2 Jan 2026 18:20:26 -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 Q4QfNYH1c26b for ; Fri, 2 Jan 2026 18:20:25 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1767403224; bh=bxMLNlKbRAcG3Tf23pRpe7O7bVtxtpUl40DPQ3HlxZI=; 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=bn63zBNqJzLOxkYfK1MyUcsJIYB2iTXf6zFOEgDbvHUEKqMfyAxoHeL8sQpczKBJd h4upZ3glNjQCvpZ9xXNPWXnFf4D1y20WSW+qhI6R433wUqwprzS3qhy1kVagc4Mbz/ ip6ygIpCXoCuoZr67U5q4Nx9viir5hRcnIF+RlBcvtSUW/qI0eddKmd8Ntu3jyNwv6 ZtDibnRPt8o+bEcTIcJNzYIjTcgYfLkl6U/0FGe70UDauVapnrymIQL7R2v0tRfU+V O7MIMDouaLTGvpKoyDh4rdTHdqP2hKoa/QK7/h+5PLp6DfjtFcxxzdGnjGU7pA/zxq nZp4CIvkMkw5g== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 2716D6905F for ; Fri, 2 Jan 2026 18:20:24 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1767403221; bh=7i4sI/P1X2xIOtLJPNcZZP/96jIIckznubR1cDt9Pl0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZGCTV7wuqFpoELnaW302xB5viYbdxenZOAQKIj1j8+84lMiZpOUyvqT9riTcaotgc yCN9zTo7u5T3IRs1ZudK3sNycEoSQ0R7j2u7XCqEQhwwwlypYAGDDkTtZ0TjkgrtqS 3RJRrVJl9Ut9uAQ7PauaOQMHDONQeOaJXv6JE+KKt+y1OEbZKNPe16K6RshiYarhtf OEgmbwPOKiH8uc2LyIn80HJQtnayKSH+btls1FjFXadQdyWWtojk2XDe4JdePTaJwK xbXI88sNW9Z9O3ykhgd+AYdEzviMlmMtwlRziZMxu/Tmr8I9trqm1FQflMJsBlBKLK wNtFEoQDc91vA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 9D76B68F87; Fri, 2 Jan 2026 18:20:21 -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 xjRWY1VpitkQ; Fri, 2 Jan 2026 18:20:21 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1767403221; bh=VnzNjG7G+XP+LasvX3qNRVApn+29rC3Lpe4EafWuC5I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aVcChwnl579G5AgvMq5I8aU3mAElw52NIobQFHnmtRl5FSu57xoLRaDQRjLBbXEVE 6qEC4Oa7fDY5unadhyadCdtihqb1PhRv32Z+tHr933B1Dl3nNbGXosixUJpUqCRIQ+ QHdve5BTgJyrfWObLM79y3eSiHPoQxFfTRepYKusYh3tiD9Hro5LH6wuNWxi15N6XB uns6Woo1VThtJgigrzXTrkbS9CKFzLrE29bktDbNpaphIr/C1ragfdd1RpIhrRI5Gi lBoS7YBxhBJ9Xs1HP7CDHOSRNEAd2dO8x4Q0uvGxAzFWwpEjQud3wMJagjtOF2EBqw 1IUdOA9mwtXwA== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 0781068BF2; Fri, 2 Jan 2026 18:20:20 -0700 (MST) From: Simon Glass To: U-Boot Concept Date: Fri, 2 Jan 2026 18:18:53 -0700 Message-ID: <20260103011908.149445-18-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260103011908.149445-1-sjg@u-boot.org> References: <20260103011908.149445-1-sjg@u-boot.org> MIME-Version: 1.0 Message-ID-Hash: EQQZZN4TNOFDYCWZK6AIOCQMWXYI66QJ X-Message-ID-Hash: EQQZZN4TNOFDYCWZK6AIOCQMWXYI66QJ 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 17/24] malloc: Add an option to disable mcheck-backtrace collection 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 Backtrace collection is relatively expensive and can significantly slow down malloc()-heavy code when mcheck is enabled. Add a new CONFIG_MCHECK_BACKTRACE option (default y) to allow disabling backtrace collection while keeping the other mcheck features (canaries, double-free detection, etc.) enabled. This allows using mcheck with less overhead when caller information is not needed. Co-developed-by: Claude Signed-off-by: Simon Glass --- Kconfig | 10 ++++++++++ common/dlmalloc.c | 8 ++++++++ doc/develop/malloc.rst | 7 +++++++ 3 files changed, 25 insertions(+) diff --git a/Kconfig b/Kconfig index d47077d43bc..a058bd1a2aa 100644 --- a/Kconfig +++ b/Kconfig @@ -355,6 +355,16 @@ config MCHECK_HEAP_PROTECTION significantly increases memory overhead and should only be used for debugging. +config MCHECK_BACKTRACE + bool "Enable backtrace for mcheck caller info" + depends on MCHECK_HEAP_PROTECTION + default y + help + Enable collection of stack backtrace for each allocation. This + records the function/file/line that allocated the memory, useful + for debugging memory leaks. Disable this to reduce the overhead + of mcheck, since backtrace collection is relatively expensive. + config MCHECK_CALLER_LEN int "Length of caller string in mcheck header" depends on MCHECK_HEAP_PROTECTION diff --git a/common/dlmalloc.c b/common/dlmalloc.c index 6f10a980d6e..7f00dea6eb1 100644 --- a/common/dlmalloc.c +++ b/common/dlmalloc.c @@ -5960,6 +5960,7 @@ STATIC_IF_MCHECK size_t dlmalloc_usable_size_impl(const void *mem) #include #include "mcheck_core.inc.h" +#if CONFIG_IS_ENABLED(MCHECK_BACKTRACE) /* Guard against recursive backtrace calls during malloc */ static bool in_backtrace __section(".data"); @@ -5968,6 +5969,7 @@ static bool in_backtrace __section(".data"); * Set via malloc_backtrace_skip() before calling panic(). */ static bool mcheck_skip_backtrace __section(".data"); +#endif /* Runtime flag to disable mcheck - allows bypassing heap protection */ static bool mcheck_disabled __section(".data"); @@ -5979,11 +5981,14 @@ void mcheck_set_disabled(bool disabled) void malloc_backtrace_skip(bool skip) { +#if CONFIG_IS_ENABLED(MCHECK_BACKTRACE) mcheck_skip_backtrace = skip; +#endif } static const char *mcheck_caller(void) { +#if CONFIG_IS_ENABLED(MCHECK_BACKTRACE) const char *caller = NULL; if (!in_backtrace && !mcheck_skip_backtrace) { @@ -5992,6 +5997,9 @@ static const char *mcheck_caller(void) in_backtrace = false; } return caller; +#else + return NULL; +#endif } #if CONFIG_IS_ENABLED(MCHECK_LOG) diff --git a/doc/develop/malloc.rst b/doc/develop/malloc.rst index b9ab884d419..776294809b8 100644 --- a/doc/develop/malloc.rst +++ b/doc/develop/malloc.rst @@ -130,6 +130,13 @@ Main U-Boot (post-relocation) ``malloc dump``. This significantly increases memory overhead and should only be used for debugging. Default: n +``CONFIG_MCHECK_BACKTRACE`` + Bool to enable backtrace collection for mcheck caller information. When + enabled (the default), each allocation records a stack backtrace showing + where it was made. This is useful for debugging memory leaks but adds + overhead to every malloc call. Disable this to reduce mcheck overhead + while keeping the canary checks and double-free detection. Default: y + xPL Boot Phases ~~~~~~~~~~~~~~~