[PATCH v2] drm/amdgpu: Fix memcpy() in sienna_cichlid_append_powerplay_table function.

Deucher, Alexander Alexander.Deucher at amd.com
Fri Jun 9 17:55:44 UTC 2023


[Public]

Acked-by: Alex Deucher <alexander.deucher at amd.com>
________________________________
From: SHANMUGAM, SRINIVASAN <SRINIVASAN.SHANMUGAM at amd.com>
Sent: Friday, June 9, 2023 4:45 AM
To: Deucher, Alexander <Alexander.Deucher at amd.com>; Koenig, Christian <Christian.Koenig at amd.com>; Quan, Evan <Evan.Quan at amd.com>; Gui, Jack <Jack.Gui at amd.com>
Cc: amd-gfx at lists.freedesktop.org <amd-gfx at lists.freedesktop.org>; SHANMUGAM, SRINIVASAN <SRINIVASAN.SHANMUGAM at amd.com>
Subject: [PATCH v2] drm/amdgpu: Fix memcpy() in sienna_cichlid_append_powerplay_table function.

Fixes the following gcc with W=1:

In file included from ./include/linux/string.h:253,
                 from ./include/linux/bitmap.h:11,
                 from ./include/linux/cpumask.h:12,
                 from ./arch/x86/include/asm/cpumask.h:5,
                 from ./arch/x86/include/asm/msr.h:11,
                 from ./arch/x86/include/asm/processor.h:22,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:60,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:78,
                 from ./include/linux/spinlock.h:56,
                 from ./include/linux/mmzone.h:8,
                 from ./include/linux/gfp.h:7,
                 from ./include/linux/firmware.h:7,
                 from drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/sienna_cichlid_ppt.c:26:
In function ‘fortify_memcpy_chk’,
    inlined from ‘sienna_cichlid_append_powerplay_table’ at drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/sienna_cichlid_ppt.c:444:2,
    inlined from ‘sienna_cichlid_setup_pptable’ at drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/sienna_cichlid_ppt.c:506:8,
    inlined from ‘sienna_cichlid_setup_pptable’ at drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/sienna_cichlid_ppt.c:494:12:
./include/linux/fortify-string.h:413:4: warning: call to ‘__read_overflow2_field’ declared with attribute warning: detected read beyond size of field (2nd parameter); maybe use struct_group()? [-Wattribute-warning]
  413 |    __read_overflow2_field(q_size_field, size);
      |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

the compiler complains about the size calculation in the memcpy() -
"sizeof(*smc_dpm_table) - sizeof(smc_dpm_table->table_header)" is much
larger than what fits into table_member.

'Fixes: 7077b19a38240 ("drm/amd/pm: use macro to get pptable members")'
Suggested-by: Evan Quan <Evan.Quan at amd.com>
Cc: Evan Quan <Evan.Quan at amd.com>
Cc: Chengming Gui <Jack.Gui at amd.com>
Cc: Christian König <christian.koenig at amd.com>
Cc: Alex Deucher <alexander.deucher at amd.com>
Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam at amd.com>
---

v2:
 - turned to the way used for nv1x (Evan)

 .../amd/pm/swsmu/smu11/sienna_cichlid_ppt.c    | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
index 85d53597eb07..f7ed3e655e39 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
@@ -431,7 +431,13 @@ static int sienna_cichlid_append_powerplay_table(struct smu_context *smu)
 {
         struct atom_smc_dpm_info_v4_9 *smc_dpm_table;
         int index, ret;
-       I2cControllerConfig_t *table_member;
+       PPTable_beige_goby_t *ppt_beige_goby;
+       PPTable_t *ppt;
+
+       if (smu->adev->ip_versions[MP1_HWIP][0] == IP_VERSION(11, 0, 13))
+               ppt_beige_goby = smu->smu_table.driver_pptable;
+       else
+               ppt = smu->smu_table.driver_pptable;

         index = get_index_into_master_table(atom_master_list_of_data_tables_v2_1,
                                             smc_dpm_info);
@@ -440,9 +446,13 @@ static int sienna_cichlid_append_powerplay_table(struct smu_context *smu)
                                       (uint8_t **)&smc_dpm_table);
         if (ret)
                 return ret;
-       GET_PPTABLE_MEMBER(I2cControllers, &table_member);
-       memcpy(table_member, smc_dpm_table->I2cControllers,
-                       sizeof(*smc_dpm_table) - sizeof(smc_dpm_table->table_header));
+
+       if (smu->adev->ip_versions[MP1_HWIP][0] == IP_VERSION(11, 0, 13))
+               smu_memcpy_trailing(ppt_beige_goby, I2cControllers, BoardReserved,
+                                   smc_dpm_table, I2cControllers);
+       else
+               smu_memcpy_trailing(ppt, I2cControllers, BoardReserved,
+                                   smc_dpm_table, I2cControllers);

         return 0;
 }
--
2.25.1

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20230609/8644117e/attachment-0001.htm>


More information about the amd-gfx mailing list