DF-2021 / fix.diff
diff --git a/sys/dev/drm/amd/powerplay/smumgr/vega12_smumgr.c b/sys/dev/drm/amd/powerplay/smumgr/vega12_smumgr.c --- a/sys/dev/drm/amd/powerplay/smumgr/vega12_smumgr.c +++ b/sys/dev/drm/amd/powerplay/smumgr/vega12_smumgr.c @@ -43,7 +43,9 @@ struct vega12_smumgr *priv = (struct vega12_smumgr *)(hwmgr->smu_backend); - PP_ASSERT_WITH_CODE(table_id < TABLE_COUNT, + /* DF-2021: table_id is int16_t; reject negatives to prevent + * negative-index OOB on entry[] (only the upper bound was checked). */ + PP_ASSERT_WITH_CODE(table_id >= 0 && table_id < TABLE_COUNT, "Invalid SMU Table ID!", return -EINVAL); PP_ASSERT_WITH_CODE(priv->smu_tables.entry[table_id].version != 0, "Invalid SMU Table version!", return -EINVAL); @@ -81,7 +83,8 @@ struct vega12_smumgr *priv = (struct vega12_smumgr *)(hwmgr->smu_backend); - PP_ASSERT_WITH_CODE(table_id < TABLE_COUNT, + /* DF-2021: table_id is int16_t; reject negatives (see copy_from_smc). */ + PP_ASSERT_WITH_CODE(table_id >= 0 && table_id < TABLE_COUNT, "Invalid SMU Table ID!", return -EINVAL); PP_ASSERT_WITH_CODE(priv->smu_tables.entry[table_id].version != 0, "Invalid SMU Table version!", return -EINVAL); |