From mboxrd@z Thu Jan 1 00:00:00 1970 From: AL-KERNEL To: kernel-cve@kernelcve.org Subject: [CVE-2026-74640][IMPORTANT] ALSA: FCP: fix OOB write in fcp_meter_ctl_get() Date: Sat, 22 Aug 2026 18:07:43 -0400 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-AL-KERNEL-CVE: CVE-2026-74640 X-AL-KERNEL-Priority: IMPORTANT X-AL-KERNEL-Severity: IMPORTANT X-AL-KERNEL-Base-Severity: IMPORTANT X-AL-KERNEL-KPANIC: YES X-AL-KERNEL-ActionableScore: 7 X-AL-KERNEL-ActionableScore-Lower: 5 X-AL-KERNEL-Commit: bb30e35c36ed00f24fa39aded811f64230a913b0 List-Id: CVE: CVE-2026-74640 Priority: IMPORTANT AL-KERNEL base severity: IMPORTANT KPANIC flag: YES Patch: ALSA: FCP: fix OOB write in fcp_meter_ctl_get() Commit: bb30e35c36ed00f24fa39aded811f64230a913b0 Upstream patch: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=bb30e35c36ed00f24fa39aded811f64230a913b0 Original CVE announcement: https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-74640 Analysis date: Sat, 22 Aug 2026 18:07:43 -0400 ActionableScore: 7 ActionableScore lower bound: 5 Actionable bucket: Strong Important candidate / Actionable Moderate at minimum Manual review required: YES Summary: An ALSA FCP meter control bug allows an oversized device meter map to make `fcp_meter_ctl_get()` write past the fixed 128-entry `snd_ctl_elem_value` array during a control read, causing kernel heap corruption and possible local privilege escalation after privileged setup. ====================================================================== ABOUT THIS REPORT ====================================================================== The original Linux kernel CVE announcement for CVE-2026-74640 is available here: https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-74640 The original announcement does not normally provide a security severity estimate, CVSS assessment, or enough information to determine whether the reported kernel bug represents a practically relevant security issue. This report was generated by AL-KERNEL, an AI-assisted Linux kernel vulnerability analysis system developed by Alexander Larkin. It combines an autonomous classifier with LLM-assisted technical analysis and a separate ActionableScore mechanism. The purpose of this report is to prioritize Linux kernel CVEs before manual review, identify cases that require prompt investigation, and support automatic closure of issues that are unlikely to have meaningful security impact. Published priority for this report: IMPORTANT Manual review required: YES A detailed explanation of the methodology and priority rules is included at the end of this message. ====================================================================== AL-KERNEL CLASSIFICATION RESULT ====================================================================== CVE-2026-74640 IMPORTANT CHECK WITH IMPACT FROM ORIG NN IMPORTANT Maybe valid. Check manually. Hints by AL-KERNEL: The best (paranoid) CVSS is 'AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H';*CWE-787;CWE-122;*CWE-20;Other CVSS 'AV:L/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H';BEST CVSS score: '7';DESCR 'An out-of-bounds write in the ALSA/FCP meter control path occurs because fcp_meter_ctl_get() writes one long value per elem channel into struct snd_ctl_elem_value, but the ABI array has only 128 entries while the driver allowed a meter map size up to 255. A local attacker who can cause an oversized meter map and then read the affected ALSA control can trigger slab memory corruption during the control read path. For the CVSS the PR:L is selected in the paranoid score because after an oversized meter map exists, any local process able to read ALSA controls can trigger the vulnerable get callback, even though installing the map normally requires CAP_SYS_RAWIO. The issue is not network reachable. Impact is at least local denial of service via kernel memory corruption and in the worst case may allow privilege escalation because the overwrite length and stored values are influenced by the meter map and device supplied data.';YES REQUIRES MANUAL CHECK; ,and ActionableScore result is Strong Important candidate / Actionable Moderate at minimum (with actual score 7) YES WRITE KASAN OOB USB HARDWARE LINUS KPANIC YES NO checked ====================================================================== ACTIONABLESCORE ANALYSIS ====================================================================== ActionableScore=7 ActionableScoreLower=5 ## 1. ActionableScore * Conservative score: **5** * Paranoid score: **7** * Final recommended bucket: **Strong Important candidate / Actionable Moderate at minimum**:: ## 2. Signal breakdown **Triggered positive signals:** * **Local unprivileged trigger: +1** The oversized meter map installation requires `CAP_SYS_RAWIO`, but the vulnerable OOB write is later triggered by ordinary ALSA control reads on `/dev/snd/controlC0` once the malformed control exists. * **Memory corruption, strong corruption primitive: +2** This is a concrete slab out-of-bounds write in `fcp_meter_ctl_get()`, writing beyond `struct snd_ctl_elem_value.value.integer.value[128]`. * **Privilege escalation plausible: +2** The overwrite is not merely a NULL dereference or invalid read. The extent is controlled by `elem->channels`, and the written values are influenced by device-provided meter data and `meter_level_map[]`. This makes LPE technically plausible, although not demonstrated. * **Reliable kernel crash / strong DoS: +1** KASAN reports a reproducible slab-out-of-bounds write from an unprivileged control read. * **Integrity impact plausible: +1** Kernel heap corruption can corrupt adjacent slab objects. Integrity impact is plausible in the paranoid interpretation. * **Firmware/device-mediated external influence: +1** The stored words come from device responses, so a malicious or compromised device can influence the written payload. **Triggered negative signals:** * **Requires admin/root/CAP_* for setup: -1 conservative / reduced penalty in paranoid view** Installing the oversized map requires `CAP_SYS_RAWIO`, but the vulnerable control outlives the creating descriptor and can later be triggered by less privileged readers. Therefore a full `-2` penalty would understate the reduced-privilege trigger condition. * **Rare hardware/device-specific exposure: -1** The bug is limited to ALSA FCP / Focusrite Control Protocol hardware and is not a generic ALSA core path. ## 3. Reachability analysis The setup phase requires access to the FCP hwdep ioctl and normally `CAP_SYS_RAWIO` to install an oversized meter map. However, after such a malformed control exists, the actual OOB write occurs during an ALSA control read and can be triggered by any process allowed to read `/dev/snd/controlC0`. This is **not network reachable**. It requires local access and an affected ALSA FCP USB device or equivalent device path. Containers and namespaces depend on device passthrough and `/dev/snd` exposure. If a container or service has access to the sound control device but not full host privileges, the practical PR can be closer to low privilege than full root. Call-site confidence: **high**, because the patch and commit text include the relevant sink, the object size, the write loop, and the user-triggered read path. ## 4. Severity interpretation This behaves more like an **Important candidate** than an ordinary Moderate issue. The bug is a concrete OOB write into a kmalloc-backed object, not a warning, resource leak, or DoS-only validation bug. Realistic exploitation is constrained by the need to install an oversized map, typically requiring `CAP_SYS_RAWIO`, and by device-specific exposure. However, the later trigger path is available to less privileged ALSA control readers, and the overwrite size and data source make this unsuitable for auto-closure. The conservative score is Actionable Moderate, while the paranoid score reaches Strong Important candidate. ## 5. One-sentence report phrase An ALSA FCP meter control bug allows an oversized device meter map to make `fcp_meter_ctl_get()` write past the fixed 128-entry `snd_ctl_elem_value` array during a control read, causing kernel heap corruption and possible local privilege escalation after privileged setup. ## 6. Manual review recommendation **MANUAL CHECK REQUIRED** This is a real slab OOB write with partially controlled extent and payload, reachable through an unprivileged read path after privileged setup. It should not be auto-closed. ====================================================================== UPSTREAM PATCH SUMMARY ====================================================================== Patch: ALSA: FCP: fix OOB write in fcp_meter_ctl_get() Commit: bb30e35c36ed00f24fa39aded811f64230a913b0 Upstream URL: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=bb30e35c36ed00f24fa39aded811f64230a913b0 Commit description: fcp_ioctl_set_meter_map() bounds the user-supplied Level Meter map size by the driver's own limit of 255 if (map.map_size < 1 || map.map_size > 255 || map.meter_slots < 1 || map.meter_slots > 255) return -EINVAL; and passes it to fcp_add_new_ctl() as the control's channel count, where it is stored as elem->channels. Every control read writes into struct snd_ctl_elem_value, whose integer array is declared long value[128], so the limit is 128, not 255. fcp_meter_ctl_get() stores one 64-bit word per channel into that array with no bound of its own: for (i = 0; i < elem->channels; i++) { int idx = private->meter_level_map[i]; int value = idx < 0 ? 0 : le32_to_cpu(resp[idx]); ucontrol->value.integer.value[i] = value; } snd_ctl_elem_read_user() serves that object from memdup_user(_control, sizeof(*control)), 1224 bytes on LP64 out of kmalloc-2048. offsetof(struct snd_ctl_elem_value, value) is 72, so element i is written at byte 72 + 8 * i and element 144 already lands past the allocation. At map_size 255 the last store ends at byte 2112, 888 bytes past the object and 64 bytes into the adjacent slab object. The stored words come from the device and meter_level_map[] selects which word lands in which slot, so extent and contents are both controlled. The core does not catch this. snd_ctl_check_elem_info() is reached only from __snd_ctl_elem_info(), which snd_ctl_elem_read() calls under CONFIG_SND_CTL_DEBUG; without that option snd_ctl_skip_validation() is a compile-time true. __snd_ctl_add_replace() validates kcontrol->count and never inspects elem->channels. Installing an oversized map needs CAP_SYS_RAWIO, but the control outlives the hwdep descriptor that created it, so the out-of-bounds stores are issued by any process able to read controls on /dev/snd/controlC0. KASAN on 7.2.0-rc5 (arm64), triggered by an unprivileged control read: BUG: KASAN: slab-out-of-bounds in fcp_meter_ctl_get Write of size 8 at addr ffff000017af04c8 by task fcp_trigger/185 __asan_store8 fcp_meter_ctl_get snd_ctl_elem_read snd_ctl_ioctl Allocated by task 185: memdup_user snd_ctl_ioctl The buggy address is located 0 bytes to the right of allocated 1224-byte region [ffff000017af0000, ffff000017af04c8) Bound the map size by the ABI limit rather than by 255, and bound the store loop at the sink so it cannot run past the value array whatever elem->channels holds. Discovered by XBOW, triaged by Baul Lee Fixes: 46757a3 ("ALSA: FCP: Add Focusrite Control Protocol driver") Reported-by: Federico Kirschbaum Reported-by: Baul Lee Cc: stable@vger.kernel.org Signed-off-by: Baul Lee Link: https://patch.msgid.link/20260804123611.91715-1-baul.lee@xbow.com Signed-off-by: Takashi Iwai Signed-off-by: Greg Kroah-Hartman Changed files: sound/usb/fcp.c Diff excerpt: Not included in this email. See the upstream URL for the full patch. Full patch: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=bb30e35c36ed00f24fa39aded811f64230a913b0 ====================================================================== DETAILED REPORT METHODOLOGY ====================================================================== The original Linux kernel CVE announcement for CVE-2026-74640 can be found here: https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-74640 The original CVE announcement normally does not include a security-level estimate. In particular, it may not contain a CVSS assessment, an impact level, or enough information to determine whether the reported bug is a practically relevant security issue. One purpose of this parallel CVE list is to provide that missing technical and prioritization information. The original goal of the AL-KERNEL project was to prioritize Linux kernel CVE analysis automatically before manual review. The system can also help identify non-security issues that may be suitable for automatic closure. This report was generated by AL-KERNEL, an AI-assisted Linux kernel vulnerability analysis system developed by Alexander Larkin. The first analysis stage combines an autonomous classifier with additional LLM-based analysis. The autonomous classifier runs locally on a CPU and is based on a backpropagation neural network. Together, these mechanisms produce a technical vulnerability description, identify likely weakness types, estimate CVSS severity, and provide input for ActionableScore. Two CVSS estimates are retained because incomplete kernel vulnerability information often permits more than one defensible interpretation: Conservative CVSS vector: AV:L/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H The Best / paranoid CVSS vector: AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H The Best / paranoid CVSS score: 7 The conservative vector represents a lower-impact interpretation. The Best/paranoid vector intentionally represents a plausible upper-bound interpretation and should not automatically be treated as demonstrated real-world impact. CVSS may also need to be adjusted for a particular Linux deployment, because actual reachability, privileges, enabled kernel configuration, hardware, namespaces, exposed device nodes, and other environmental conditions can differ significantly between systems. A separate ActionableScore mechanism evaluates practical remediation urgency. Its analysis may include reachability, attack prerequisites, subsystem exposure, memory-corruption characteristics, denial-of-service reliability, and possible confidentiality, integrity, or privilege-escalation impact. Conservative ActionableScore: 5 Paranoid ActionableScore: 7 The final base severity is taken directly from the second tab-separated field of the AL-KERNEL classification result. ActionableScore does not replace or independently override that final AL-KERNEL decision, and if ActionableScore adjusted impact level of ALKERNEL, then you would see self-readable flags above like INCREASED_TO_HIGH_BASED_ON_ACTIONABLESCOREHIGHEREQTHAN7. For an AL-KERNEL result of MODERATE, this report uses the following additional presentation split: ActionableScore below 5 -> MODERATE REGULAR ActionableScore 5 or more -> MODERATE 7.0 The distinction between MODERATE REGULAR and MODERATE 7.0 makes it possible to identify Moderate issues that should receive manual analysis and fixes before lower-priority MODERATE REGULAR issues. In many cases, MODERATE REGULAR fixes may wait for a later rebase or routine update. There is one override in which MODERATE REGULAR becomes MODERATE 7.0 even when the ActionableScore is below 5. When the AL-KERNEL result contains the KPANIC flag, a MODERATE result is always presented as MODERATE 7.0. The KPANIC flag selected with few regexps without usage of AI at all, so it helps to detect cases when Kernel Crash happens and similar (to filter False-Negative results from the LLM usage). KPANIC indicates that a reliable kernel crash, kernel panic, or similarly serious kernel availability impact was identified by the classification workflow. AL-KERNEL base severity for this report: IMPORTANT KPANIC detected for this report: YES Published priority for this report (same as in Subject): IMPORTANT These results are intended to support engineering triage. They are machine-generated estimates, and cases marked for manual review should be validated by a human security engineer before final disposition. For more info read docs linked from here: https://kernelcve.org/ (and you can submit you own patch there to generate such a report for non-existant CVE-id yet). Note that in many cases this AI tool selects higher severity, than real is (means you can expect Importants instead of Moderate 7.0 or Moderates 7.0 instead of regular Moderates). If you see such cases, please use reply email interface to add additional manual analyses info to this particular CVE. And please, please, let me know when you see Lows instead of Importants or Important instead of Low (because particular for such cases I need to tune this AI tool to make it better for this one and next similar). My contact email for such notifications is alexanjelausa@gmail.com (and both send reply to CVE record itself too and see "reply" button below for howto reply).