Vulnerability · Published Aug 21, 2024 · Assigned by Linux
CVE-2023-52894usb: gadget: f_ncm: fix potential NULL ptr deref in ncm_bitrate()
Medium 5.5
In plain English
A medium-severity security flaw in Linux from Linux. There are no confirmed reports of exploitation so far. The chance it is exploited in the next 30 days is estimated at 0.2% (higher than 16% of all known vulnerabilities). Fixed versions are available - upgrade the affected package.
Official description
In the Linux kernel, the following vulnerability has been resolved: usb: gadget: f_ncm: fix potential NULL ptr deref in ncm_bitrate() In Google internal bug 265639009 we've received an (as yet) unreproducible crash report from an aarch64 GKI 5.10.149-android13 running device. AFAICT the source code is at: https://android.googlesource.com/kernel/common/+/refs/tags/ASB-2022-12-05_13-5.10 The call stack is: ncm_close() -> ncm_notify() -> ncm_do_notify() with the crash at: ncm_do_notify+0x98/0x270 Code: 79000d0b b9000a6c f940012a f9400269 (b9405d4b) Which I believe disassembles to (I don't know ARM assembly, but it looks sane enough to me...): // halfword (16-bit) store presumably to event->wLength (at offset 6 of struct usb_cdc_notification) 0B 0D 00 79 strh w11, [x8, #6] // word (32-bit) store presumably to req->Length (at offset 8 of struct usb_request) 6C 0A 00 B9 str w12, [x19, #8] // x10 (NULL) was read here from offset 0 of valid pointer x9 // IMHO we're reading 'cdev->gadget' and getting NULL // gadget is indeed at offset 0 of struct usb_composite_dev 2A 01 40 F9 ldr x10, [x9] // loading req->buf pointer, which is at offset 0 of struct usb_request 69 02 40 F9 ldr x9, [x19] // x10 is null, crash, appears to be attempt to read cdev->gadget->max_speed 4B 5D 40 B9 ldr w11, [x10, #0x5c] which seems to line up with ncm_do_notify() case NCM_NOTIFY_SPEED code fragment: event->wLength = cpu_to_le16(8); req->length = NCM_STATUS_BYTECOUNT; /* SPEED_CHANGE data is up/down speeds in bits/sec */ data = req->buf + sizeof *event; data[0] = cpu_to_le32(ncm_bitrate(cdev->gadget)); My analysis of registers and NULL ptr deref crash offset (Unable to handle kernel NULL pointer dereference at virtual address 000000000000005c) heavily suggests that the crash is due to 'cdev->gadget' being NULL when executing: data[0] = cpu_to_le32(ncm_bitrate(cdev->gadget)); which calls: ncm_bitrate(NULL) which then calls: gadget_is_superspeed(NULL) which reads ((struct usb_gadget *)NULL)->max_speed and hits a panic. AFAICT, if I'm counting right, the offset of max_speed is indeed 0x5C. (remember there's a GKI KABI reservation of 16 bytes in struct work_struct) It's not at all clear to me how this is all supposed to work... but returning 0 seems much better than panic-ing...
Affected packages & fixed versions
| Ecosystem | Package | Fixed in | Advisory |
|---|---|---|---|
| Debian:12 | linux | 6.1.8-1 | DEBIAN-CVE-2023-52894 |
| Debian:13 | linux | 6.1.8-1 | DEBIAN-CVE-2023-52894 |
| Debian:14 | linux | 6.1.8-1 | DEBIAN-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux | 5.15.0-70.77 | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-allwinner-5.19 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-aws | 5.15.0-1034.38 | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-aws-5.19 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-aws-6.2 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-aws-6.5 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-azure | 5.15.0-1036.43 | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-azure-5.19 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-azure-6.2 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-azure-6.5 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-azure-fde | 5.15.0-1036.43.1 | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-azure-fde-5.19 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-azure-fde-6.2 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-gcp | 5.15.0-1032.40 | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-gcp-5.19 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-gcp-6.2 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-gcp-6.5 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-gke | 5.15.0-1031.36 | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-gkeop | 5.15.0-1018.23 | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-hwe-5.19 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-hwe-6.2 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-hwe-6.5 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-ibm | 5.15.0-1028.31 | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-intel-iotg | 5.15.0-1028.33 | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-kvm | 5.15.0-1031.36 | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-lowlatency | 5.15.0-70.77 | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-lowlatency-hwe-5.19 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-lowlatency-hwe-6.2 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-lowlatency-hwe-6.5 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-nvidia | 5.15.0-1023.23 | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-nvidia-6.2 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-oem-5.17 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-oem-6.0 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-oem-6.1 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-oem-6.5 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-oracle | 5.15.0-1033.39 | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-oracle-6.5 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-raspi | 5.15.0-1027.29 | UBUNTU-CVE-2023-52894 |
| Ubuntu:24.04:LTS | linux-raspi-realtime | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-realtime | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-riscv | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-riscv-5.19 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-riscv-6.5 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-starfive-5.19 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-starfive-6.2 | no fix listed | UBUNTU-CVE-2023-52894 |
| Ubuntu:22.04:LTS | linux-starfive-6.5 | no fix listed | UBUNTU-CVE-2023-52894 |
Affected products (as reported)
| Vendor | Product | Versions |
|---|---|---|
| Linux | Linux | 1650113888fe7b7e16604a5019c32dd3ddeb3af2 – before fef6b29671b66dfb71f17e337c1ad14b5a2cedae1650113888fe7b7e16604a5019c32dd3ddeb3af2 – before 63d161f29cd39c050e8873aa36e0c9fc013bb7631650113888fe7b7e16604a5019c32dd3ddeb3af2 – before a21da7f7aae618c785f7e4a275d43c06dc8412b61650113888fe7b7e16604a5019c32dd3ddeb3af2 – before e92c70059178da751e5af7de02384b7dfadb5ec71650113888fe7b7e16604a5019c32dd3ddeb3af2 – before a69c8dfb85b44be9cc223be07d35cc3a9baefbea1650113888fe7b7e16604a5019c32dd3ddeb3af2 – before 09e4507ec8ef2d44da6ba4092b8ee2d81f2164971650113888fe7b7e16604a5019c32dd3ddeb3af2 – before c6ec929595c7443250b2a4faea988c62019d5cd2 |
| Linux | Linux | 4.9 |
References
- https://git.kernel.org/stable/c/fef6b29671b66dfb71f17e337c1ad14b5a2cedae
- https://git.kernel.org/stable/c/63d161f29cd39c050e8873aa36e0c9fc013bb763
- https://git.kernel.org/stable/c/a21da7f7aae618c785f7e4a275d43c06dc8412b6
- https://git.kernel.org/stable/c/e92c70059178da751e5af7de02384b7dfadb5ec7
- https://git.kernel.org/stable/c/a69c8dfb85b44be9cc223be07d35cc3a9baefbea
- https://git.kernel.org/stable/c/09e4507ec8ef2d44da6ba4092b8ee2d81f216497
- https://git.kernel.org/stable/c/c6ec929595c7443250b2a4faea988c62019d5cd2