From 218824866beb9669e198101c7fda4c8bcce7c11c Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Fri, 3 Nov 2017 19:22:13 +0100 Subject: qemu: check for memory leaks --- src/tests/qemu/init.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/tests/qemu/init.c') diff --git a/src/tests/qemu/init.c b/src/tests/qemu/init.c index afbc611..8f46e6c 100644 --- a/src/tests/qemu/init.c +++ b/src/tests/qemu/init.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -207,6 +208,28 @@ static void ensure_console(void) panic("Unable to open console device"); } +static void check_leaks(void) +{ + int fd; + + if (mount("none", "/sys/kernel/debug", "debugfs", 0, NULL) < 0) + return; + fd = open("/sys/kernel/debug/kmemleak", O_WRONLY); + if (fd < 0) + return; + pretty_message("[+] Scanning for memory leaks..."); + sleep(2); /* Wait for any grace periods. */ + write(fd, "scan\n", 5); + close(fd); + + fd = open("/sys/kernel/debug/kmemleak", O_RDONLY); + if (fd < 0) + return; + if (sendfile(1, fd, NULL, 0x7ffff000) > 0) + panic("Memory leaks encountered"); + close(fd); +} + int main(int argc, char *argv[]) { seed_rng(); @@ -216,6 +239,7 @@ int main(int argc, char *argv[]) kmod_selftests(); enable_logging(); launch_tests(); + check_leaks(); poweroff(); return 1; } -- cgit v1.2.3-59-g8ed1b