From 91a4aaa5ccca11fcb7a678436ddeff90f9d1b80a Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Mon, 12 Feb 2018 10:56:06 +0100 Subject: qemu: more granular memleak detection --- src/tests/qemu/init.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src/tests/qemu/init.c') diff --git a/src/tests/qemu/init.c b/src/tests/qemu/init.c index de0b0eb..8d783e9 100644 --- a/src/tests/qemu/init.c +++ b/src/tests/qemu/init.c @@ -98,6 +98,8 @@ static void mount_filesystems(void) panic("tmpfs mount"); if (mount("none", "/run", "tmpfs", 0, NULL)) panic("tmpfs mount"); + if (mount("none", "/sys/kernel/debug", "debugfs", 0, NULL)) + ; /* Not a problem if it fails.*/ if (symlink("/run", "/var/run")) panic("run symlink"); if (symlink("/proc/self/fd", "/dev/fd")) @@ -217,12 +219,22 @@ static void ensure_console(void) panic("Unable to open console device"); } -static void check_leaks(void) +static void clear_leaks(void) { int fd; - if (mount("none", "/sys/kernel/debug", "debugfs", 0, NULL) < 0) + fd = open("/sys/kernel/debug/kmemleak", O_WRONLY); + if (fd < 0) return; + pretty_message("[+] Starting memory leak detection..."); + write(fd, "clear\n", 5); + close(fd); +} + +static void check_leaks(void) +{ + int fd; + fd = open("/sys/kernel/debug/kmemleak", O_WRONLY); if (fd < 0) return; @@ -247,6 +259,7 @@ int main(int argc, char *argv[]) mount_filesystems(); kmod_selftests(); enable_logging(); + clear_leaks(); launch_tests(); check_leaks(); poweroff(); -- cgit v1.2.3-59-g8ed1b