From 4b1537387f0246c081fb96ceb974a63ea7f74c6a Mon Sep 17 00:00:00 2001 From: b14ckcat Date: Tue, 26 Jul 2022 21:35:35 -0400 Subject: Kernel: Fix USB hotplug crash Currently the SysFS node for USB devices is only initialized for USB hubs, which means it will cause a kernel crash upon being dereferenced in a non-hub device. This fixes the problem by making initialization happen for all USB devices. --- Kernel/Bus/USB/USBDevice.cpp | 2 ++ Kernel/Bus/USB/USBHub.cpp | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'Kernel/Bus') diff --git a/Kernel/Bus/USB/USBDevice.cpp b/Kernel/Bus/USB/USBDevice.cpp index 6309047e8a..1aa049dd50 100644 --- a/Kernel/Bus/USB/USBDevice.cpp +++ b/Kernel/Bus/USB/USBDevice.cpp @@ -20,6 +20,8 @@ ErrorOr> Device::try_create(USBController const& controlle { auto pipe = TRY(Pipe::try_create_pipe(controller, Pipe::Type::Control, Pipe::Direction::Bidirectional, 0, 8, 0)); auto device = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) Device(controller, port, speed, move(pipe)))); + auto sysfs_node = TRY(SysFSUSBDeviceInformation::create(*device)); + device->m_sysfs_device_info_node = move(sysfs_node); TRY(device->enumerate_device()); return device; } diff --git a/Kernel/Bus/USB/USBHub.cpp b/Kernel/Bus/USB/USBHub.cpp index fa9563d23d..8c0bf5e701 100644 --- a/Kernel/Bus/USB/USBHub.cpp +++ b/Kernel/Bus/USB/USBHub.cpp @@ -45,8 +45,6 @@ ErrorOr Hub::enumerate_and_power_on_hub() // USBDevice::enumerate_device must be called before this. VERIFY(m_address > 0); - m_sysfs_device_info_node = TRY(SysFSUSBDeviceInformation::create(*this)); - if (m_device_descriptor.device_class != USB_CLASS_HUB) { dbgln("USB Hub: Trying to enumerate and power on a device that says it isn't a hub."); return EINVAL; -- cgit v1.2.3