mirror of
https://github.com/torvalds/linux.git
synced 2026-10-23 15:32:04 +02:00
usb: storage: sierra_ms: reject short SWoC info transfers
sierra_get_swoc_info() requests sizeof(struct swoc_info) (60) bytes
from the device via usb_control_msg(), but its callers only treat a
negative return value as failure. A device that answers the
vendor-specific GetSwocInfo request with a short IN transfer is
therefore accepted, leaving the tail of the freshly allocated
(kmalloc(), non-zeroing) swoc_info buffer uninitialized.
truinst_show() subsequently prints swocInfo->rev, swocInfo->LinuxSKU
and swocInfo->LinuxVer from that buffer into the world-readable
(0444) "truinst" sysfs attribute. An emulated/malicious USB device
(VID 0x1199, PID 0x0fff) can exploit this to disclose up to 5 bytes
of stale kernel heap memory (kmalloc-64) to unprivileged userspace,
once per sysfs read, indefinitely. On kernels built without
init_on_alloc this leaks recently freed heap contents.
Only accept the transfer when the full structure was received.
sierra_ms_init() already retries failed queries, so well-behaved
devices are unaffected.
Fixes: 32fe5e3934 ("USB Storage Sierra: TRU-Install feature update")
Cc: stable <stable@kernel.org>
Signed-off-by: Syed Labeeq Sajid Bukhari <syedlabeeq@gmail.com>
Assisted-by: Kimi:K2 [Kimi Code CLI]
Link: https://patch.msgid.link/20260910140343.49371-1-syedlabeeq@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
9015658576
commit
8a0200d14a
|
|
@ -77,6 +77,13 @@ static int sierra_get_swoc_info(struct usb_device *udev,
|
|||
sizeof(struct swoc_info), /* __u16 size */
|
||||
USB_CTRL_SET_TIMEOUT); /* int timeout */
|
||||
|
||||
/*
|
||||
* A short IN transfer leaves the tail of swocInfo uninitialized;
|
||||
* only a full transfer is valid.
|
||||
*/
|
||||
if (result != sizeof(struct swoc_info))
|
||||
return -EIO;
|
||||
|
||||
swocInfo->LinuxSKU = le16_to_cpu(swocInfo->LinuxSKU);
|
||||
swocInfo->LinuxVer = le16_to_cpu(swocInfo->LinuxVer);
|
||||
return result;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user