Files
vuln-cve/data/2025/39xxx/CVE-2025-39696.json
T

138 lines
8.2 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"cveMetadata": {
"cveId": "CVE-2025-39696",
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"state": "PUBLISHED",
"assignerShortName": "Linux",
"dateReserved": "2025-04-16T07:20:57.114Z",
"datePublished": "2025-09-05T17:21:02.068Z",
"dateUpdated": "2026-08-05T12:04:37.787Z"
},
"containers": {
"cna": {
"providerMetadata": {
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux",
"dateUpdated": "2026-08-05T12:04:37.787Z"
},
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nALSA: hda: tas2781: Fix wrong reference of tasdevice_priv\n\nDuring the conversion to unify the calibration data management, the\nreference to tasdevice_priv was wrongly set to h->hda_priv instead of\nh->priv. This resulted in memory corruption and crashes eventually.\nUnfortunately it's a void pointer, hence the compiler couldn't know\nthat it's wrong."
}
],
"metrics": [
{
"cvssV3_1": {
"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"
},
"scenarios": [
{
"lang": "en",
"value": "AV:L - The corruption occurs in the tas2781 HDA I2C codec driver's firmware-ready callback during local driver bind; there is no network, adjacent-network, or peer-supplied data path into `tas2563_save_calibration()`. Exploiting the resulting kernel heap corruption requires local presence on the affected machine.\nAC:L - The wrong pointer is dereferenced unconditionally every time `tasdev_fw_ready()` runs on a TAS2563 (ACPI HID INT8866) system — no race, no timing window, and no memory-layout precondition the attacker cannot influence. The driver is enabled in stock distro kernels and the hardware is common in consumer Lenovo laptops, so this is not a rare-config case.\nPR:L - No capability, credential, or privilege check exists anywhere on the path — the corruption fires from a kernel firmware-load worker at boot, before any authentication. A plain unprivileged local account on the affected system is sufficient to be positioned to leverage the resulting heap damage, so Low rather than High.\nUI:N - The vulnerable code is reached automatically from the asynchronous `request_firmware_nowait()` completion callback during device probe/bind; no victim must log in, mount anything, open a device node, or take any other action.\nS:U - The type confusion corrupts kernel heap memory belonging to the same kernel that hosts the vulnerable driver, with no crossing of a VM, IOMMU, or sandbox boundary. Impact and vulnerable component share one security authority.\nC:H - The function performs OOB reads of `p->dev` and `p->ndev` hundreds/thousands of bytes past a 24-byte allocation and writes a live kernel heap pointer (`cd->data`) into an unrelated adjacent object, which can surface kernel addresses to userspace and defeat KASLR. Heap corruption of this kind is leverageable into broader memory disclosure.\nI:H - This is an out-of-bounds write: `cali_dat_sz_per_dev`, `total_sz`, `data`, and the five `cali_reg` fields are written ~790–810 bytes beyond the object, and `devm_kzalloc()` performs a list insertion through an uncontrolled `struct device *`, giving a write through a wild pointer. OOB write plus type confusion is High integrity impact under the standard treatment.\nA:H - The maintainer explicitly states this \"resulted in memory corruption and crashes eventually\"; dereferencing the garbage `p->dev` inside `devm_kzalloc()` (spinlock acquisition and list_add at an arbitrary address) reliably produces an oops or panic, and the corrupted neighbouring heap objects cause later crashes. Any kernel crash is High."
}
]
}
],
"affected": [
{
"product": "Linux",
"vendor": "Linux",
"defaultStatus": "unaffected",
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"programFiles": [
"sound/hda/codecs/side-codecs/tas2781_hda_i2c.c"
],
"versions": [
{
"version": "4fe238513407d83f38bf5782e8bcdd7b8baeb85d",
"lessThan": "2812815aa79637d39d4398ecd7e58f65d1c79231",
"status": "affected",
"versionType": "git"
},
{
"version": "4fe238513407d83f38bf5782e8bcdd7b8baeb85d",
"lessThan": "3f4422e7c9436abf81a00270be7e4d6d3760ec0e",
"status": "affected",
"versionType": "git"
}
]
},
{
"product": "Linux",
"vendor": "Linux",
"defaultStatus": "affected",
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"programFiles": [
"sound/hda/codecs/side-codecs/tas2781_hda_i2c.c"
],
"versions": [
{
"version": "6.16",
"status": "affected"
},
{
"version": "0",
"lessThan": "6.16",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.16.4",
"lessThanOrEqual": "6.16.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.17",
"lessThanOrEqual": "*",
"status": "unaffected",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"operator": "OR",
"negate": false,
"cpeMatch": [
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.16",
"versionEndExcluding": "6.16.4"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.16",
"versionEndExcluding": "6.17"
}
]
}
]
}
],
"references": [
{
"url": "https://git.kernel.org/stable/c/2812815aa79637d39d4398ecd7e58f65d1c79231"
},
{
"url": "https://git.kernel.org/stable/c/3f4422e7c9436abf81a00270be7e4d6d3760ec0e"
}
],
"title": "ALSA: hda: tas2781: Fix wrong reference of tasdevice_priv",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
}
}