DF-1178 / fix.diff
diff --git a/sys/dev/drm/amd/amdgpu/gfx_v9_0.c b/sys/dev/drm/amd/amdgpu/gfx_v9_0.c --- a/sys/dev/drm/amd/amdgpu/gfx_v9_0.c +++ b/sys/dev/drm/amd/amdgpu/gfx_v9_0.c @@ -2093,13 +2093,18 @@ int idx; for (; indirect_offset < list_size; indirect_offset++) { - WARN_ON(*indirect_start_offsets_count >= max_start_offsets_count); + if (*indirect_start_offsets_count >= max_start_offsets_count) + break; indirect_start_offsets[*indirect_start_offsets_count] = indirect_offset; *indirect_start_offsets_count = *indirect_start_offsets_count + 1; - while (register_list_format[indirect_offset] != 0xFFFFFFFF) { + while (indirect_offset < list_size && + register_list_format[indirect_offset] != 0xFFFFFFFF) { indirect_offset += 2; + if (indirect_offset >= list_size) + break; + /* look for the matching indice */ for (idx = 0; idx < unique_indirect_reg_count; idx++) { if (unique_indirect_regs[idx] == @@ -2108,7 +2113,8 @@ break; } - BUG_ON(idx >= unique_indirect_reg_count); + if (idx >= unique_indirect_reg_count) + break; if (!unique_indirect_regs[idx]) unique_indirect_regs[idx] = register_list_format[indirect_offset]; |