From 922624afa69530722995b574b577111fe480117e Mon Sep 17 00:00:00 2001 From: Timm Steinbeck Date: Fri, 28 Jun 2024 21:45:36 +0200 Subject: [PATCH] USB: Add nullpointer checks to USB Device destructor It seems to be possible that in case of USB issues a Device is destroyed before it is registered with the device manager. In such a case fNode of the device is NULL and there is a page fault followed by a panic. Fixes #18922. Change-Id: I0a363a0ff85e6a74788701738e0cb85a90e99a05 Reviewed-on: https://review.haiku-os.org/c/haiku/+/7821 Reviewed-by: waddlesplash --- src/add-ons/kernel/bus_managers/usb/Device.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/add-ons/kernel/bus_managers/usb/Device.cpp b/src/add-ons/kernel/bus_managers/usb/Device.cpp index c0b69cbca8..2ebca76d9e 100644 --- a/src/add-ons/kernel/bus_managers/usb/Device.cpp +++ b/src/add-ons/kernel/bus_managers/usb/Device.cpp @@ -341,10 +341,12 @@ Device::~Device() // though, since we may be deleted because the device was unplugged already. Unconfigure(false); - status_t error = gDeviceManager->unregister_node(fNode); - if (error != B_OK && error != B_BUSY) - TRACE_ERROR("failed to unregister device node\n"); - fNode = NULL; + if (fNode != NULL) { + status_t error = gDeviceManager->unregister_node(fNode); + if (error != B_OK && error != B_BUSY) + TRACE_ERROR("failed to unregister device node\n"); + fNode = NULL; + } // Destroy all Interfaces in the Configurations hierarchy. for (int32 i = 0; fConfigurations != NULL