[Concept,04/35] test: dm: Fix delta usage in dm_test_devres_free()

Message ID 20251210000737.180797-5-sjg@u-boot.org
State New
Headers
Series malloc: Add heap debugging commands and mcheck caller tracking |

Commit Message

Simon Glass Dec. 10, 2025, 12:06 a.m. UTC
  From: Simon Glass <simon.glass@canonical.com>

This test passes delta values to ut_check_delta() where it expects
absolute values. ut_check_delta(last) computes (current - last), so
'last' must be an absolute reference point from a previous
ut_check_delta(0) call, not a delta.

The bug causes incorrect memory accounting that happens to work with
smaller allocation overhead but fails when mcheck header size increases.

Use ut_check_delta(0) to capture absolute reference points before each
operation.

Co-developed-by: Claude <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
---

 test/dm/devres.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)
  

Patch

diff --git a/test/dm/devres.c b/test/dm/devres.c
index efc5c72ae2a..353353767b4 100644
--- a/test/dm/devres.c
+++ b/test/dm/devres.c
@@ -44,23 +44,21 @@  DM_TEST(dm_test_devres_alloc, UTF_SCAN_PDATA);
 /* Test devm_kfree() can be used to free memory too */
 static int dm_test_devres_free(struct unit_test_state *uts)
 {
-	ulong mem_start, mem_dev, mem_kmalloc;
+	ulong mem_start, mem_alloc;
 	struct udevice *dev;
 	void *ptr;
 
 	mem_start = ut_check_delta(0);
 	ut_assertok(uclass_first_device_err(UCLASS_TEST, &dev));
-	mem_dev = ut_check_delta(mem_start);
-	ut_assert(mem_dev > 0);
+	ut_assert(ut_check_delta(mem_start) > 0);
 
 	ptr = devm_kmalloc(dev, TEST_DEVRES_SIZE, 0);
 	ut_assert(ptr != NULL);
-	mem_kmalloc = ut_check_delta(mem_dev);
-	ut_assert(mem_kmalloc > 0);
 
 	/* Free the ptr and check that memory usage goes down */
+	mem_alloc = ut_check_delta(0);
 	devm_kfree(dev, ptr);
-	ut_assert(ut_check_delta(mem_kmalloc) < 0);
+	ut_assert(ut_check_delta(mem_alloc) < 0);
 
 	device_remove(dev, DM_REMOVE_NORMAL);
 	ut_asserteq(0, ut_check_delta(mem_start));