From 241ec5977a41151093d6d47738d1a7f291b9e91f Mon Sep 17 00:00:00 2001 From: Andrea Fioraldi Date: Mon, 16 Jan 2023 16:45:58 +0100 Subject: [PATCH] Fix snapshot mem leak --- libafl_extras/syx-snapshot/device-save.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/libafl_extras/syx-snapshot/device-save.c b/libafl_extras/syx-snapshot/device-save.c index 6b8cf2f671..ab330f35aa 100644 --- a/libafl_extras/syx-snapshot/device-save.c +++ b/libafl_extras/syx-snapshot/device-save.c @@ -113,12 +113,15 @@ device_save_state_t* device_save_all(void) { return dss; } -void device_restore_all(device_save_state_t* device_save_state) { +void device_restore_all(device_save_state_t* dss) { bool must_unlock_iothread = false; Error* errp = NULL; - qio_channel_io_seek(QIO_CHANNEL(device_save_state->save_buffer), 0, SEEK_SET, &errp); - QEMUFile* f = qemu_file_new_input(QIO_CHANNEL(device_save_state->save_buffer)); + qio_channel_io_seek(QIO_CHANNEL(dss->save_buffer), 0, SEEK_SET, &errp); + + if(!dss->save_file) { + dss->save_file = qemu_file_new_input(QIO_CHANNEL(dss->save_buffer)); + } if (!qemu_mutex_iothread_locked()) { qemu_mutex_lock_iothread(); @@ -128,7 +131,7 @@ void device_restore_all(device_save_state_t* device_save_state) { int save_libafl_restoring_devices = libafl_restoring_devices; libafl_restoring_devices = 1; - qemu_load_device_state(f); + qemu_load_device_state(dss->save_file); libafl_restoring_devices = save_libafl_restoring_devices; @@ -144,4 +147,6 @@ void device_free_all(device_save_state_t* dss) { Error* errp = NULL; qio_channel_close(QIO_CHANNEL(dss->save_buffer), &errp); object_unref(OBJECT(dss->save_buffer)); + if (dss->save_file) + qemu_fclose(dss->save_file); }