Skip to content

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

  1. Build qemu with the sanitizer
  2. Boot the Linux kernel with the above command line.
  3. Stop the qemu process
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information