From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 88C3932E13E; Wed, 3 Dec 2025 16:08:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764778107; cv=none; b=ColURRr5dNqtOcQy2751a0iy6Ib8Al8PzVnZHOy5WKQ/X8Zf5n2SzSEzu3TFC+QdsCWGh5EWnw9c2jwKjNy283vjPj5fPkVW6V3TmF3fMIyEbWnGwXZtOXivXhmgZ9tP90M1FCAyEWVAZfPu2m9iXt6OEAPY+xFwzu0aDHfFzzs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764778107; c=relaxed/simple; bh=li206/yMDeslhq1JN7apptddKVWcrx4+brpMnV4EWFI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eD9xAcpPCWthk/aFubTcrs5MTisQ8e0KjeKKDxQNIRhegnA/QJVoeG3cuGUQM3faV14JjKmAb/4qIBrJARUWsXBDiBJ/XeH9V62vR4VrbmMG/podZ6DetKlqZ+UVcNK98AONJGZTc8VTaPQph1jnfpNsFCtO4L5nBHYGxrXQZyw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=KwKh4VFi; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="KwKh4VFi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0B3B3C4CEF5; Wed, 3 Dec 2025 16:08:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1764778107; bh=li206/yMDeslhq1JN7apptddKVWcrx4+brpMnV4EWFI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KwKh4VFip/BRife4xRLcuT/IunJBtE+hCk5ixFaWt2i4srebHYtc+qePA6f2Dj5B2 xMkooQoYnBOYaVtoiC8gIzr8OfKRcBCmlx3v/rHi9CVcN5m2xVqATruP+Em9b0kCpX 75VC9k+SMjeoOksk9gR5f3I0SMTNt9WTnRkzv3S8= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, syzbot+2fc81b50a4f8263a159b@syzkaller.appspotmail.com, Raphael Pinsonneault-Thibeault , Luiz Augusto von Dentz , Sasha Levin Subject: [PATCH 5.15 238/392] Bluetooth: btusb: reorder cleanup in btusb_disconnect to avoid UAF Date: Wed, 3 Dec 2025 16:26:28 +0100 Message-ID: <20251203152422.934561813@linuxfoundation.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251203152414.082328008@linuxfoundation.org> References: <20251203152414.082328008@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 5.15-stable review patch. If anyone has any objections, please let me know. ------------------ From: Raphael Pinsonneault-Thibeault [ Upstream commit 23d22f2f71768034d6ef86168213843fc49bf550 ] There is a KASAN: slab-use-after-free read in btusb_disconnect(). Calling "usb_driver_release_interface(&btusb_driver, data->intf)" will free the btusb data associated with the interface. The same data is then used later in the function, hence the UAF. Fix by moving the accesses to btusb data to before the data is free'd. Reported-by: syzbot+2fc81b50a4f8263a159b@syzkaller.appspotmail.com Closes: https://syzkaller.appspot.com/bug?extid=2fc81b50a4f8263a159b Tested-by: syzbot+2fc81b50a4f8263a159b@syzkaller.appspotmail.com Fixes: fd913ef7ce619 ("Bluetooth: btusb: Add out-of-band wakeup support") Signed-off-by: Raphael Pinsonneault-Thibeault Signed-off-by: Luiz Augusto von Dentz Signed-off-by: Sasha Levin --- drivers/bluetooth/btusb.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 4a5b937f78d91..c8c638aa47262 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -4126,6 +4126,11 @@ static void btusb_disconnect(struct usb_interface *intf) hci_unregister_dev(hdev); + if (data->oob_wake_irq) + device_init_wakeup(&data->udev->dev, false); + if (data->reset_gpio) + gpiod_put(data->reset_gpio); + if (intf == data->intf) { if (data->isoc) usb_driver_release_interface(&btusb_driver, data->isoc); @@ -4136,17 +4141,11 @@ static void btusb_disconnect(struct usb_interface *intf) usb_driver_release_interface(&btusb_driver, data->diag); usb_driver_release_interface(&btusb_driver, data->intf); } else if (intf == data->diag) { - usb_driver_release_interface(&btusb_driver, data->intf); if (data->isoc) usb_driver_release_interface(&btusb_driver, data->isoc); + usb_driver_release_interface(&btusb_driver, data->intf); } - if (data->oob_wake_irq) - device_init_wakeup(&data->udev->dev, false); - - if (data->reset_gpio) - gpiod_put(data->reset_gpio); - hci_free_dev(hdev); } -- 2.51.0