β¬’ DragonFlyBSD Kernel Audit
← triage Β· dashboard
DF-1380

Unbounded VBIOS LVDS record-parsing loop enables OOB read of kernel heap

Summary

amdgpu_atombios_encoder_get_lcd_info at atombios_encoders.c:2156: while(*record!=ATOM_RECORD_END_TYPE) advances record through VBIOS data without bounds check vs bios_size (256KB). Record ptr from usModePatchTableOffset. Advances by fixed sizes or fake_edid_length+2 (up to 257B). Past bios_end -> OOB read. fake_edid memcpy copies up to 255B OOB into EDID buffer -> potentially exposed to unprivileged users via connector EDID ioctl. Crafted VBIOS (root flash or malicious PCIe). Sibling of radeon/atombios_encoders.c identical pattern. Fix: bound record < bios_end in while and before memcpy.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-1380 Β· 1 files
FileTypeDescriptionSize
VERDICT.md verdict verification verdict 1018 B ↓ raw
VERDICT.md verdict verification verdict
↓ download raw

DF-1380 - Verification Verdict

Status: reproduced (reproduced=1) Impact: none Confidence: speculative

Finding

Unbounded VBIOS LVDS record-parsing loop enables OOB read of kernel heap

Source Location

sys/dev/drm/amd/amdgpu/atombios_encoders.c:2156-2202

Verdict

Source-confirmed (complex fix): Unbounded VBIOS LVDS record-parsing loop enables OOB read of kernel he. No diff in batch.

Fix Status

not_applicable: source defect confirmed; complex fix not included in batch build

Summary

amdgpu_atombios_encoder_get_lcd_info at atombios_encoders.c:2156: while(*record!=ATOM_RECORD_END_TYPE) advances record through VBIOS data without bounds check vs bios_size (256KB). Record ptr from usModePatchTableOffset. Advances by fixed sizes or fake_edid_length+2 (up to 257B). Past bios_end -> OOB read. fake_edid memcpy copies up to 255B OOB into EDID buffer -> potentially exposed to unprivileged users via connector EDID ioctl. Crafted VBIOS (root flash or malicious PCIe). Sibling of radeon/a

Fix verification

not_testable
baseline reproduced→ patch + rebuild →patched clean

source defect confirmed; complex fix not included in batch build

source defect confirmed; complex fix not included in batch build
combined build rc=0

Confirmed kernel references

β€”

Detail

Exploit chain

none (Low severity)

Evidence (decisive lines)

Source-confirmed: atombios_encoders VBIOS LVDS record-parsing while loop has no bounds on record pointer, unbounded OOB heap read. Complex fix (atom_context has no length member). HW-gated.

Verified recommended fix

Source-confirmed: atombios_encoders VBIOS LVDS record-parsing while loop has no bounds on record pointer, unbounded OOB heap read. Complex fix (atom_context has no length member). HW-gated.

Verdict

Source-confirmed: atombios_encoders VBIOS LVDS record-parsing while loop has no bounds on record pointer, unbounded OOB heap read. Complex fix (atom_context has no length member). HW-gated.