Subject: CVE-2024-38567: wifi: carl9170: add a proper sanity check for endpoints

From: Greg Kroah-Hartman <[email-masked]>

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

wifi: carl9170: add a proper sanity check for endpoints

Syzkaller reports [1] hitting a warning which is caused by presence
of a wrong endpoint type at the URB sumbitting stage. While there
was a check for a specific 4th endpoint, since it can switch types
between bulk and interrupt, other endpoints are trusted implicitly.
Similar warning is triggered in a couple of other syzbot issues [2].

Fix the issue by doing a comprehensive check of all endpoints
taking into account difference between high- and full-speed
configuration.

[1] Syzkaller report:
...
WARNING: CPU: 0 PID: 4721 at drivers/usb/core/urb.c:504 usb_submit_urb+0xed6/0x1880 drivers/usb/core/urb.c:504
...
Call Trace:
 <TASK>
 carl9170_usb_send_rx_irq_urb+0x273/0x340 drivers/net/wireless/ath/carl9170/usb.c:504
 carl9170_usb_init_device drivers/net/wireless/ath/carl9170/usb.c:939 [inline]
 carl9170_usb_firmware_finish drivers/net/wireless/ath/carl9170/usb.c:999 [inline]
 carl9170_usb_firmware_step2+0x175/0x240 drivers/net/wireless/ath/carl9170/usb.c:1028
 request_firmware_work_func+0x130/0x240 drivers/base/firmware_loader/main.c:1107
 process_one_work+0x9bf/0x1710 kernel/workqueue.c:2289
 worker_thread+0x669/0x1090 kernel/workqueue.c:2436
 kthread+0x2e8/0x3a0 kernel/kthread.c:376
 ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:308
 </TASK>

[2] Related syzkaller crashes:

The Linux kernel CVE team has assigned CVE-2024-38567 to this issue.

Affected and fixed versions
===========================

	Issue introduced in 2.6.37 with commit a84fab3cbfdc and fixed in 4.19.316 with commit eb0f2fc3ff58
	Issue introduced in 2.6.37 with commit a84fab3cbfdc and fixed in 5.4.278 with commit ac3ed46a8741
	Issue introduced in 2.6.37 with commit a84fab3cbfdc and fixed in 5.10.219 with commit 8650725bb0a4
	Issue introduced in 2.6.37 with commit a84fab3cbfdc and fixed in 5.15.161 with commit 6a9892bf24c9
	Issue introduced in 2.6.37 with commit a84fab3cbfdc and fixed in 6.1.93 with commit 265c3cda471c
	Issue introduced in 2.6.37 with commit a84fab3cbfdc and fixed in 6.6.33 with commit 62eb07923f36
	Issue introduced in 2.6.37 with commit a84fab3cbfdc and fixed in 6.8.12 with commit 03ddc74bdfd7
	Issue introduced in 2.6.37 with commit a84fab3cbfdc and fixed in 6.9.3 with commit 0fa08a55201a
	Issue introduced in 2.6.37 with commit a84fab3cbfdc and fixed in 6.10 with commit b6dd09b3dac8

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2024-38567
will be updated if fixes are backported, please check that for the most
up to date information about this issue.

Affected files
==============

The file(s) affected by this issue are:
	drivers/net/wireless/ath/carl9170/usb.c

Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/eb0f2fc3ff5806cc572cd9055ce7c52a01e97645
	https://git.kernel.org/stable/c/ac3ed46a8741d464bc70ebdf7433c1d786cf329d
	https://git.kernel.org/stable/c/8650725bb0a48b206d5a8ddad3a7488f9a5985b7
	https://git.kernel.org/stable/c/6a9892bf24c906b4d6b587f8759ca38bff672582
	https://git.kernel.org/stable/c/265c3cda471c26e0f25d0c755da94e1eb15d7a0c
	https://git.kernel.org/stable/c/62eb07923f3693d55b0c2d9a5a4f1ad72cb6b8fd
	https://git.kernel.org/stable/c/03ddc74bdfd71b84a55c9f2185d8787f258422cd
	https://git.kernel.org/stable/c/0fa08a55201ab9be72bacb8ea93cf752d338184f
	https://git.kernel.org/stable/c/b6dd09b3dac89b45d1ea3e3bd035a3859c0369a0