check the upper and lower limits of first record offset

Signed-off-by: Gangliang Xie <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
index 0c57fe259894..33a251979042 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
@@ -1632,6 +1632,14 @@ int amdgpu_ras_eeprom_init(struct 
amdgpu_ras_eeprom_control *control)
        }
 
        control->ras_fri = RAS_OFFSET_TO_INDEX(control, hdr->first_rec_offset);
+       if (hdr->first_rec_offset < control->ras_record_offset ||
+           control->ras_fri >= control->ras_max_record_count) {
+               dev_err(adev->dev,
+                       "RAS header invalid, ras_fri: %u, 
first_rec_offset:0x%x",
+                       control->ras_fri, hdr->first_rec_offset);
+               return -EINVAL;
+       }
+
        control->ras_num_mca_recs = 0;
        control->ras_num_pa_recs = 0;
        return 0;
-- 
2.34.1

Reply via email to