DragonFlyBSD Kernel Audit
DF-1305 / trigger_path.c
← back to finding ↓ download raw
/*
 * DF-1305 trigger-path documentation (NOT runnable on this guest).
 *
 * The OOB is in kv_init_graphics_levels() at
 *   sys/dev/drm/radeon/kv_dpm.c:2344
 * reached during radeon Kaveri/Kabini/Mullins DPM init
 * (kv_dpm_enable -> kv_dpm_hw_init -> ... -> kv_init_graphics_levels),
 * consuming vddc_dependency_on_sclk.count parsed from VBIOS.
 *
 * Trigger (requires an affected radeon KV-family APU whose VBIOS reports
 * vddc_dependency_on_sclk.ucNumEntries > 5 (OOB read of at[]) or > 8
 * (OOB write of graphics_level[])):
 *   - load radeon.ko on such hardware; DPM init corrupts kv_power_info heap.
 *
 * The QEMU audit guest has NO AMD GPU; radeon.ko is not loaded, so the DPM
 * path never runs here.
 *
 * Vulnerable signature:
 *   kv_dpm.c:2355  for (i=0; i<table->count; i++) {   // count from VBIOS u8
 *   kv_dpm.c:2366      kv_set_at(rdev, i, pi->at[i]); // at[5], i can be > 4
 *   kv_dpm.c:2361      kv_set_divider_value(... i ...) // writes graphics_level[i], i can be > 7
 *
 * fix.diff bounds the loops to SMU__NUM_SCLK_DPM_STATE/SUMO_MAX_HARDWARE_POWERLEVELS.
 */
int main(void) { return 0; }