diff --git a/sys/dev/drm/amd/powerplay/hwmgr/ppatomfwctrl.c b/sys/dev/drm/amd/powerplay/hwmgr/ppatomfwctrl.c --- a/sys/dev/drm/amd/powerplay/hwmgr/ppatomfwctrl.c +++ b/sys/dev/drm/amd/powerplay/hwmgr/ppatomfwctrl.c @@ -32,6 +32,7 @@ { unsigned int size = le16_to_cpu( voltage_object_info_table->table_header.structuresize); + unsigned int obj_size; unsigned int offset = offsetof(struct atom_voltage_objects_info_v4_1, voltage_object[0]); unsigned long start = (unsigned long)voltage_object_info_table; @@ -44,7 +45,10 @@ voltage_mode == voltage_object->gpio_voltage_obj.header.voltage_mode) return voltage_object; - offset += le16_to_cpu(voltage_object->gpio_voltage_obj.header.object_size); + obj_size = le16_to_cpu(voltage_object->gpio_voltage_obj.header.object_size); + if (obj_size == 0) + break; + offset += obj_size; }