DF-1305 / trigger_path.c
/* * 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; } |