Memory leak in the virtual device applesmc
Host environment
-
Operating system: Ubuntu 22.04.4 LTS
-
OS/kernel version: Linux 6.5.0-25-generic
-
Architecture: x86_64
-
QEMU flavor: 8.2.92
-
QEMU version: commit ce64e622
-
QEMU command line:
./qemu-system-x86_64 -m 2G -enable-kvm -hda ./buster.img -kernel ./kernel/arch/x86/boot/bzImage -display none -serial mon:stdio -device isa-applesmc
Emulated/Virtualized environment
- Operating system: Debian GNU/Linux 10 (buster)
- OS/kernel version: Linux syzkaller 6.6.0
- Architecture: x86_64
Description of problem
In the function qdev_applesmc_isa_reset, the device mallocs the AppleSMCData but does not free them, causing a memory leak.
The following log reveals it:
==1029295==ERROR: LeakSanitizer: detected memory leaksDirect leak of 80 byte(s) in 2 object(s) allocated from:
#0 0x5574dc600a82 in __interceptor_calloc compiler-rt/lib/asan/asan_malloc_linux.cpp:138:3
#1 0x7f4919b22c50 in g_malloc0 (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x5ec50)
#2 0x5574dcdb0dfe in qdev_applesmc_isa_reset qemu/hw/misc/applesmc.c:285:5
#3 0x5574de30e099 in resettable_phase_hold qemu/hw/core/resettable.c
#4 0x5574de2ef753 in bus_reset_child_foreach qemu/hw/core/bus.c:97:13
#5 0x5574de30dcfe in resettable_child_foreach qemu/hw/core/resettable.c:96:9
#6 0x5574de30dcfe in resettable_phase_hold qemu/hw/core/resettable.c:173:5
#7 0x5574de3059b3 in device_reset_child_foreach qemu/hw/core/qdev.c:276:9
Steps to reproduce
- Build qemu with the sanitizer
- Boot the Linux kernel with the above command line.
- Stop the qemu process