From 049826aa3256a39361535bfcd461f633128af82a Mon Sep 17 00:00:00 2001 From: Volker Ruppert Date: Tue, 13 Apr 2021 11:56:41 +0000 Subject: [PATCH] Fixed possible segfault in case of invalid filename based on patch #559. Since this save/restore list exists in all devices, it's safe to move the new code to the usb_device_c destructor. --- bochs/iodev/usb/usb_common.cc | 6 ++++++ bochs/iodev/usb/usb_common.h | 2 +- bochs/iodev/usb/usb_floppy.cc | 1 - bochs/iodev/usb/usb_hid.cc | 1 - bochs/iodev/usb/usb_hub.cc | 1 - bochs/iodev/usb/usb_msd.cc | 1 - bochs/iodev/usb/usb_printer.cc | 1 - 7 files changed, 7 insertions(+), 6 deletions(-) diff --git a/bochs/iodev/usb/usb_common.cc b/bochs/iodev/usb/usb_common.cc index a835c37be..90a078c6c 100644 --- a/bochs/iodev/usb/usb_common.cc +++ b/bochs/iodev/usb/usb_common.cc @@ -285,6 +285,12 @@ usb_device_c::usb_device_c(void) d.async_mode = 1; } +usb_device_c::~usb_device_c() +{ + if (d.sr != NULL) + d.sr->clear(); +} + // Find device with given address usb_device_c* usb_device_c::find_device(Bit8u addr) { diff --git a/bochs/iodev/usb/usb_common.h b/bochs/iodev/usb/usb_common.h index e751654c0..9cf30d0e6 100644 --- a/bochs/iodev/usb/usb_common.h +++ b/bochs/iodev/usb/usb_common.h @@ -164,7 +164,7 @@ BOCHSAPI extern bx_usbdev_ctl_c bx_usbdev_ctl; class BOCHSAPI usb_device_c : public logfunctions { public: usb_device_c(void); - virtual ~usb_device_c() {} + virtual ~usb_device_c(); virtual bool init() {return d.connected;} virtual const char* get_info() {return NULL;} diff --git a/bochs/iodev/usb/usb_floppy.cc b/bochs/iodev/usb/usb_floppy.cc index 1253a47d8..93904f1ba 100644 --- a/bochs/iodev/usb/usb_floppy.cc +++ b/bochs/iodev/usb/usb_floppy.cc @@ -374,7 +374,6 @@ usb_floppy_device_c::usb_floppy_device_c() usb_floppy_device_c::~usb_floppy_device_c(void) { - d.sr->clear(); bx_gui->unregister_statusitem(s.statusbar_id); set_inserted(0); if (s.dev_buffer != NULL) diff --git a/bochs/iodev/usb/usb_hid.cc b/bochs/iodev/usb/usb_hid.cc index 38a956e74..a92cd2e76 100644 --- a/bochs/iodev/usb/usb_hid.cc +++ b/bochs/iodev/usb/usb_hid.cc @@ -736,7 +736,6 @@ usb_hid_device_c::usb_hid_device_c(const char *devname) usb_hid_device_c::~usb_hid_device_c(void) { - d.sr->clear(); if ((d.type == USB_HID_TYPE_MOUSE) || (d.type == USB_HID_TYPE_TABLET)) { bx_gui->set_mouse_mode_absxy(0); diff --git a/bochs/iodev/usb/usb_hub.cc b/bochs/iodev/usb/usb_hub.cc index 5b4c89008..9892a8b95 100644 --- a/bochs/iodev/usb/usb_hub.cc +++ b/bochs/iodev/usb/usb_hub.cc @@ -226,7 +226,6 @@ usb_hub_device_c::~usb_hub_device_c(void) for (int i = 0; i < hub.n_ports; i++) { remove_device(i); } - d.sr->clear(); if (SIM->is_wx_selected()) { bx_list_c *usb = (bx_list_c*)SIM->get_param("ports.usb"); usb->remove(hub.config->get_name()); diff --git a/bochs/iodev/usb/usb_msd.cc b/bochs/iodev/usb/usb_msd.cc index ad99fb0ac..409894b75 100644 --- a/bochs/iodev/usb/usb_msd.cc +++ b/bochs/iodev/usb/usb_msd.cc @@ -393,7 +393,6 @@ usb_msd_device_c::usb_msd_device_c(const char *devname) usb_msd_device_c::~usb_msd_device_c(void) { - d.sr->clear(); if (s.scsi_dev != NULL) delete s.scsi_dev; if (s.hdimage != NULL) { diff --git a/bochs/iodev/usb/usb_printer.cc b/bochs/iodev/usb/usb_printer.cc index d1ccb8028..789067770 100644 --- a/bochs/iodev/usb/usb_printer.cc +++ b/bochs/iodev/usb/usb_printer.cc @@ -171,7 +171,6 @@ usb_printer_device_c::usb_printer_device_c() usb_printer_device_c::~usb_printer_device_c(void) { - d.sr->clear(); if (s.fp != NULL) { fclose(s.fp); }