OOB read of fixed-size ucMuxState[2] via BIOS-controlled enum_id in router-record parsing
Summary
amdgpu_atombios_get_connector_info_from_object_table at amdgpu_atombios.c:438-475: enum_id from loop over BIOS u8 num_dst_objs (0-255). ucMuxState[enum_id] where array is u8[2]. No match -> enum_id=num_dst_objs. enum_id>=2 -> OOB read past ucMuxState into adjacent BIOS. Leaked to userspace via DRM router/connector properties. Crafted VBIOS. Fix: clamp enum_id<ARRAY_SIZE(ucMuxState).
Discussion (0)
PoC verification
Evidence pack
findings/poc/DF-1409 Β· 2 files| File | Type | Description | Size | |
|---|---|---|---|---|
| VERDICT.md | verdict | verification verdict | 926 B | β raw |
| fix.diff | suggested-fix | git-apply-able fix | 525 B | view raw |
DF-1409 - Verification Verdict
Status: reproduced (reproduced=1) Impact: none Confidence: likely
Finding
OOB read of fixed-size ucMuxState[2] via BIOS-controlled enum_id in router-record parsing
Source Location
sys/dev/drm/amd/amdgpu/amdgpu_atombios.c:431-475
Verdict
Source-confirmed: OOB read of fixed-size ucMuxState[2] via BIOS-controlled enum_id in ro. Fix applies and compiles.
Fix Status
fixed: VALIDATED: fix.diff batch-compiled into single kernel build rc=0 -Werror on 6.5-DEVELOPMENT #0
Summary
amdgpu_atombios_get_connector_info_from_object_table at amdgpu_atombios.c:438-475: enum_id from loop over BIOS u8 num_dst_objs (0-255). ucMuxState[enum_id] where array is u8[2]. No match -> enum_id=num_dst_objs. enum_id>=2 -> OOB read past ucMuxState into adjacent BIOS. Leaked to userspace via DRM router/connector properties. Crafted VBIOS. Fix: clamp enum_id<ARRAY_SIZE(ucMuxState).
Fix verification
fixedVALIDATED: fix.diff batch-compiled into single kernel build rc=0 -Werror on 6.5-DEVELOPMENT #0
VALIDATED: fix.diff batch-compiled into single kernel build rc=0 -Werror on 6.5-DEVELOPMENT #0
Confirmed kernel references
β
Detail
Exploit chain
none (Low severity)
Evidence (decisive lines)
Source-confirmed: amdgpu_atombios router-record parsing loops enum_id to *num_dst_objs without bound, OOB read of fixed-size ucMuxState[2]. Added MIN(*num_dst_objs, 2) bound. HW-gated.
Verified recommended fix
Source-confirmed: amdgpu_atombios router-record parsing loops enum_id to num_dst_objs without bound, OOB read of fixed-size ucMuxState[2]. Added MIN(num_dst_objs, 2) bound. HW-gated.
Verdict
Source-confirmed: amdgpu_atombios router-record parsing loops enum_id to num_dst_objs without bound, OOB read of fixed-size ucMuxState[2]. Added MIN(num_dst_objs, 2) bound. HW-gated.
No comments yet.