From patchwork Mon Dec 1 17:05:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 799 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=1764608961; bh=rgEG9HVAl013VhOfYC9kXaY11Yq03pbFMg95pIA6CSI=; 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=sZgt4PJwo57TNbecleuCKb3Z8ERAhXJenrKTl2ibo420jK9gArneVVtXBlZAqCwwW czVsYu+LJszqdZ6rb/6qu81RbMfvEm5aUkUNTWqt6rGuOcTyIq2iX4MaefaS2WQF+4 Yv8+QWVA8s/UYHSaTrEP1p0CipwGPM5z387+q4xWOQdiMfJxmsWwtv1Yh7TOVEprI4 dOmPKjwJHig9fWv7XUt5+o1n5nY+Fs7mf0a6UffsjZ8SHMhDDifCPDjBN/sU3QibYs acnj94D1/tEwrnZZlcIIvtw+svRaEz9JzE8zfei3+VtvAhwaTBOH3ZNlDzqn7QHNQq mNb9rYcqrbjzQ== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 43CDD688CD for ; Mon, 1 Dec 2025 10:09: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 10024) with ESMTP id Vp10ls9gzQmm for ; Mon, 1 Dec 2025 10:09:21 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1764608961; bh=rgEG9HVAl013VhOfYC9kXaY11Yq03pbFMg95pIA6CSI=; 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=sZgt4PJwo57TNbecleuCKb3Z8ERAhXJenrKTl2ibo420jK9gArneVVtXBlZAqCwwW czVsYu+LJszqdZ6rb/6qu81RbMfvEm5aUkUNTWqt6rGuOcTyIq2iX4MaefaS2WQF+4 Yv8+QWVA8s/UYHSaTrEP1p0CipwGPM5z387+q4xWOQdiMfJxmsWwtv1Yh7TOVEprI4 dOmPKjwJHig9fWv7XUt5+o1n5nY+Fs7mf0a6UffsjZ8SHMhDDifCPDjBN/sU3QibYs acnj94D1/tEwrnZZlcIIvtw+svRaEz9JzE8zfei3+VtvAhwaTBOH3ZNlDzqn7QHNQq mNb9rYcqrbjzQ== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 2D6C3688C5 for ; Mon, 1 Dec 2025 10:09:21 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1764608959; bh=XvBG194SjJZOKMN3I5GdsCpd8SzJYSIZjHadihhd1I4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jjPYCD2SJY0cGMKpcmfOG4IhrpdPPfYnBiBd4I0dAu4JsZ8u9lh3JWLvp6Og4W1A8 /y9PvMRatNkRnVb0UrSlgsP5aO/ePtOc9EKXv9GNplYbqjibPBN0vA4l61fadHMOIA eBBFkFzu9O07wGIUn/KmG8nexkNIEzYqjlfuAYo4tx90mYOWVVsiRf9FntqImzZE8B V+uPTkValTAZz3fNWDut5CVc0YbvHOZONeLF0aRoBX6DBrE0TaYjiQBo9bpinBpCd2 HKk1X/yzw/t3271XHUy0d0kAeIFQjgrsDugXp2QHzmCBaBaWCAfnS7HS7PEGeAa1vK l+Gyv9lrE2kNg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 8D2B8688A4; Mon, 1 Dec 2025 10:09:19 -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 SFx9QcKu4JYw; Mon, 1 Dec 2025 10:09:19 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1764608953; bh=4Wrw3+62aBs/YE8tL0u43NYcaumnIDMUA91DIm7MaAg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fIKCUE4JyGQbgv7vREaRhU73cWgInc0ooblGlbd5gx3l7Usr+r4C211A8SAfzlzEv 9WWHkNZQPUeJkuFNkGgcadd4eYLnWAc5U3VIDNXgpTT0W7D6j6ULCNDTxWELGnHVCQ LMCdoVFA8n8UTKC9nPm4I6M9UuXfedK63QdWVUa3vFjHRRQm7YaJBk5c4jhWaN8HLB +t5mONMCq8ccSAHy4cN+wBamDa24acWRcleI+X9Ou5SrllwFcGeC+IPmvwtI8Q+qPa PTydnmA7kA4R4UhSF7AEh8/bQN53ufIGITrbf/y21DA3BNm9TfdRteR/u5nJT6M92O iPj+OOgon3wsw== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id BD7425E439; Mon, 1 Dec 2025 10:09:12 -0700 (MST) From: Simon Glass To: U-Boot Concept Date: Mon, 1 Dec 2025 10:05:03 -0700 Message-ID: <20251201170529.3237986-25-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251201170529.3237986-1-sjg@u-boot.org> References: <20251201170529.3237986-1-sjg@u-boot.org> MIME-Version: 1.0 Message-ID-Hash: HNNS4VYV3BWBDGY424JELV346VUD7OQR X-Message-ID-Hash: HNNS4VYV3BWBDGY424JELV346VUD7OQR 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 , Eugene Uriev , Claude X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH 24/37] mcheck: integrate mcheck into dlmalloc.c 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 Add mcheck wrapper functions for dlmalloc, dlfree, dlrealloc, dlmemalign, and dlcalloc. When MCHECK_HEAP_PROTECTION is enabled, these wrappers call the mcheck hooks around the internal *_impl functions to provide heap corruption detection. Also add the mcheck() and mprobe() API functions. Changes from original commit: - Adapted for dlmalloc 2.8.6 function names (dl* instead of mALLOc) - Updated function signatures (void* instead of Void_t*) Signed-off-by: Eugene Uriev Co-developed-by: Claude Signed-off-by: Simon Glass (cherry picked from commit 151493a875071448e2582489f6fa84d1630b3368) --- common/dlmalloc.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/common/dlmalloc.c b/common/dlmalloc.c index 4f88e48f4b0..102b6c2bf8d 100644 --- a/common/dlmalloc.c +++ b/common/dlmalloc.c @@ -5591,6 +5591,69 @@ size_t dlmalloc_usable_size(const void* mem) { return 0; } +#ifdef MCHECK_HEAP_PROTECTION +#include "mcheck_core.inc.h" + +void *dlmalloc(size_t bytes) +{ + size_t fullsz = mcheck_alloc_prehook(bytes); + void *p = dlmalloc_impl(fullsz); + + if (!p) + return p; + return mcheck_alloc_posthook(p, bytes); +} + +void dlfree(void *mem) { dlfree_impl(mcheck_free_prehook(mem)); } + +void *dlrealloc(void *oldmem, size_t bytes) +{ + if (bytes == 0) { + if (oldmem) + dlfree(oldmem); + return NULL; + } + + if (oldmem == NULL) + return dlmalloc(bytes); + + void *p = mcheck_reallocfree_prehook(oldmem); + size_t newsz = mcheck_alloc_prehook(bytes); + + p = dlrealloc_impl(p, newsz); + if (!p) + return p; + return mcheck_alloc_noclean_posthook(p, bytes); +} + +void *dlmemalign(size_t alignment, size_t bytes) +{ + return NULL; +} + +/* dlpvalloc, dlvalloc redirect to dlmemalign, so they need no wrapping */ + +void *dlcalloc(size_t n, size_t elem_size) +{ + /* NB: no overflow check here */ + size_t fullsz = mcheck_alloc_prehook(n * elem_size); + void *p = dlcalloc_impl(1, fullsz); + + if (!p) + return p; + return mcheck_alloc_noclean_posthook(p, n * elem_size); +} + +/* mcheck API */ +int mcheck(mcheck_abortfunc_t f) +{ + mcheck_initialize(f, 0); + return 0; +} + +enum mcheck_status mprobe(void *__ptr) { return mcheck_mprobe(__ptr); } +#endif /* MCHECK_HEAP_PROTECTION */ + #endif /* !ONLY_MSPACES */ /* ----------------------------- user mspaces ---------------------------- */