automated: linux: modules: add kmemleak-based cumulative leak detection

Enhance cumulative leak detection by integrating kmemleak scanning as the
primary detection method, with MemAvailable fallback for systems without
kmemleak support.

The function now:
- Uses kmemleak scan after all iterations complete to detect cumulative leaks
- Reports kmemleak_{module} results instead of memcheck_{module} when available
- Clears kmemleak state after each module to prevent cross-contamination
- Falls back to MemAvailable-based detection when kmemleak unavailable

This provides more accurate memory leak detection using the kernel's native
leak detector while maintaining backward compatibility with systems that
don't have kmemleak enabled.

Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
diff --git a/automated/linux/modules/modules.sh b/automated/linux/modules/modules.sh
index 0f926c0..63fead8 100755
--- a/automated/linux/modules/modules.sh
+++ b/automated/linux/modules/modules.sh
@@ -49,13 +49,33 @@
 	local module=$1
 	local mem_start=$2
 	local mem_end=$3
-	local diff_kb
-	diff_kb=$((mem_start - mem_end))
-	echo "memcheck cumulative: start ${mem_start}, end ${mem_end}, diff ${diff_kb}"
-	if [ "$diff_kb" -lt "-${MEMORY_TOLERANCE}" ]; then
-		report_fail "memcheck_${module}"
+
+	if [ -e /sys/kernel/debug/kmemleak ]; then
+		# Trigger scan after all iterations complete
+		echo scan > /sys/kernel/debug/kmemleak
+		sleep 3
+
+		# Check for cumulative leaks from all iterations
+		if grep -q "." /sys/kernel/debug/kmemleak; then
+			echo "Cumulative memory leak detected for module ${module}:"
+			cat /sys/kernel/debug/kmemleak
+			report_fail "kmemleak_${module}"
+		else
+			report_pass "kmemleak_${module}"
+		fi
+
+		# Clear leaks for next module
+		echo clear > /sys/kernel/debug/kmemleak
 	else
-		report_pass "memcheck_${module}"
+		# Fallback: aggregate memory check (not per-iteration)
+		local diff_kb
+		diff_kb=$((mem_start - mem_end))
+		echo "memcheck cumulative: start ${mem_start}, end ${mem_end}, diff ${diff_kb}"
+		if [ "$diff_kb" -lt "-${MEMORY_TOLERANCE}" ]; then
+			report_fail "memcheck_${module}"
+		else
+			report_pass "memcheck_${module}"
+		fi
 	fi
 }