diff --git a/vl-Don-t-mismatch-g_strsplit-g_free.patch b/vl-Don-t-mismatch-g_strsplit-g_free.patch new file mode 100644 index 0000000..dc1f4cc --- /dev/null +++ b/vl-Don-t-mismatch-g_strsplit-g_free.patch @@ -0,0 +1,56 @@ +From cad4a99e8cab2fe581fb2c6c1421f5547b451e96 Mon Sep 17 00:00:00 2001 +From: Pan Nengyuan +Date: Fri, 10 Jan 2020 17:17:09 +0800 +Subject: [PATCH] vl: Don't mismatch g_strsplit()/g_free() + +It's a mismatch between g_strsplit and g_free, it will cause a memory leak as follow: + +[root@localhost]# ./aarch64-softmmu/qemu-system-aarch64 -accel help +Accelerators supported in QEMU binary: +tcg +kvm +================================================================= +==1207900==ERROR: LeakSanitizer: detected memory leaks + +Direct leak of 8 byte(s) in 2 object(s) allocated from: + #0 0xfffd700231cb in __interceptor_malloc (/lib64/libasan.so.4+0xd31cb) + #1 0xfffd6ec57163 in g_malloc (/lib64/libglib-2.0.so.0+0x57163) + #2 0xfffd6ec724d7 in g_strndup (/lib64/libglib-2.0.so.0+0x724d7) + #3 0xfffd6ec73d3f in g_strsplit (/lib64/libglib-2.0.so.0+0x73d3f) + #4 0xaaab66be5077 in main /mnt/sdc/qemu-master/qemu-4.2.0-rc0/vl.c:3517 + #5 0xfffd6e140b9f in __libc_start_main (/lib64/libc.so.6+0x20b9f) + #6 0xaaab66bf0f53 (./build/aarch64-softmmu/qemu-system-aarch64+0x8a0f53) + +Direct leak of 2 byte(s) in 2 object(s) allocated from: + #0 0xfffd700231cb in __interceptor_malloc (/lib64/libasan.so.4+0xd31cb) + #1 0xfffd6ec57163 in g_malloc (/lib64/libglib-2.0.so.0+0x57163) + #2 0xfffd6ec7243b in g_strdup (/lib64/libglib-2.0.so.0+0x7243b) + #3 0xfffd6ec73e6f in g_strsplit (/lib64/libglib-2.0.so.0+0x73e6f) + #4 0xaaab66be5077 in main /mnt/sdc/qemu-master/qemu-4.2.0-rc0/vl.c:3517 + #5 0xfffd6e140b9f in __libc_start_main (/lib64/libc.so.6+0x20b9f) + #6 0xaaab66bf0f53 (./build/aarch64-softmmu/qemu-system-aarch64+0x8a0f53) + +Reported-by: Euler Robot +Signed-off-by: Pan Nengyuan +Message-Id: <20200110091710.53424-2-pannengyuan@huawei.com> +Signed-off-by: Paolo Bonzini +--- + vl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/vl.c b/vl.c +index b426b32134..cec0bfdb44 100644 +--- a/vl.c ++++ b/vl.c +@@ -3532,7 +3532,7 @@ int main(int argc, char **argv, char **envp) + gchar **optname = g_strsplit(typename, + ACCEL_CLASS_SUFFIX, 0); + printf("%s\n", optname[0]); +- g_free(optname); ++ g_strfreev(optname); + } + g_free(typename); + } +-- +2.27.0 +