On 2/27/2024 10:05 PM, Srinivasan Shanmugam wrote:
> Fixes snprintf function by writing more bytes into various buffers than
> they can hold.
> 
> In several files - smu_v13_0.c, gfx_v11_0.c, gfx_v10_0.c, gfx_v9_0.c,
> and amdgpu_mes.c. They were related to different directives, such as
> '%s', '_pfp.bin', '_me.bin', '_rlc.bin', '_mec.bin', '_mec2', and
> '_mes.bin'.
> 
> The buffers sizes have been adjusted to accommodate the maximum possible
> string size.
> 
> Fixes the below with gcc W=1:
> drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0.c:108:52: warning: 
> ‘%s’ directive output may be truncated writing up to 29 bytes into a region 
> of size 23 [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c:523:54: warning: ‘_pfp.bin’ directive 
> output may be truncated writing 8 bytes into a region of size between 4 and 
> 33 [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c:540:54: warning: ‘_me.bin’ directive 
> output may be truncated writing 7 bytes into a region of size between 4 and 
> 33 [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c:557:70: warning: ‘_rlc.bin’ directive 
> output may be truncated writing 8 bytes into a region of size between 4 and 
> 33 [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c:569:54: warning: ‘_mec.bin’ directive 
> output may be truncated writing 8 bytes into a region of size between 4 and 
> 33 [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c:3979:58: warning: ‘%s’ directive 
> output may be truncated writing up to 4 bytes into a region of size between 0 
> and 29 [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c:3985:57: warning: ‘%s’ directive 
> output may be truncated writing up to 4 bytes into a region of size between 1 
> and 30 [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c:3991:57: warning: ‘%s’ directive 
> output may be truncated writing up to 4 bytes into a region of size between 1 
> and 30 [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c:3998:62: warning: ‘_rlc.bin’ directive 
> output may be truncated writing 8 bytes into a region of size between 4 and 
> 33 [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c:4014:58: warning: ‘%s’ directive 
> output may be truncated writing up to 4 bytes into a region of size between 0 
> and 29 [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c:4021:54: warning: ‘_mec2’ directive 
> output may be truncated writing 5 bytes into a region of size between 4 and 
> 33 [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:1255:52: warning: ‘%s’ directive output 
> may be truncated writing up to 29 bytes into a region of size 23 
> [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:1261:52: warning: ‘%s’ directive output 
> may be truncated writing up to 29 bytes into a region of size 23 
> [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:1267:52: warning: ‘%s’ directive output 
> may be truncated writing up to 29 bytes into a region of size 23 
> [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:1303:60: warning: ‘%s’ directive output 
> may be truncated writing up to 29 bytes into a region of size 23 
> [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:1309:60: warning: ‘%s’ directive output 
> may be truncated writing up to 29 bytes into a region of size 23 
> [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:1311:60: warning: ‘%s’ directive output 
> may be truncated writing up to 29 bytes into a region of size 23 
> [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:1344:60: warning: ‘%s’ directive output 
> may be truncated writing up to 29 bytes into a region of size 23 
> [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:1346:60: warning: ‘%s’ directive output 
> may be truncated writing up to 29 bytes into a region of size 23 
> [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:1356:68: warning: ‘%s’ directive output 
> may be truncated writing up to 29 bytes into a region of size 23 
> [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:1358:68: warning: ‘%s’ directive output 
> may be truncated writing up to 29 bytes into a region of size 23 
> [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c:1486:66: warning: ‘%s’ directive 
> output may be truncated writing up to 1 bytes into a region of size between 0 
> and 29 [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c:1481:66: warning: ‘%s’ directive 
> output may be truncated writing 1 byte into a region of size between 0 and 29 
> [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c:1481:66: warning: ‘%s’ directive 
> output may be truncated writing 2 bytes into a region of size between 0 and 
> 29 [-Wformat-truncation=]
> drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c:1493:62: warning: ‘_mes.bin’ 
> directive output may be truncated writing 8 bytes into a region of size 
> between 4 and 33 [-Wformat-truncation=]
> 
> Cc: Christian König <christian.koe...@amd.com>
> Cc: Alex Deucher <alexander.deuc...@amd.com>
> Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmu...@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c        | 2 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c        | 2 +-
>  drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c         | 2 +-
>  drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c         | 2 +-
>  drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c          | 6 +++---
>  drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 2 +-
>  6 files changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> index dd2b8f3fa2f1..cfe82f399558 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> @@ -1471,7 +1471,7 @@ int amdgpu_mes_init_microcode(struct amdgpu_device 
> *adev, int pipe)
>       const struct mes_firmware_header_v1_0 *mes_hdr;
>       struct amdgpu_firmware_info *info;
>       char ucode_prefix[30];
> -     char fw_name[40];
> +     char fw_name[47];
>       bool need_retry = false;
>       int r;
>  
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
> index b2535023764f..8e8cf44acfcf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
> @@ -92,7 +92,7 @@ static void amdgpu_vcn_idle_work_handler(struct work_struct 
> *work);
>  int amdgpu_vcn_early_init(struct amdgpu_device *adev)
>  {
>       char ucode_prefix[30];
> -     char fw_name[40];
> +     char fw_name[42];
>       int r;
>  
>       amdgpu_ucode_ip_version_decode(adev, UVD_HWIP, ucode_prefix, 
> sizeof(ucode_prefix));
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c 
> b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
> index 691fa40e4e01..c91283b38b02 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
> @@ -3961,7 +3961,7 @@ static void gfx_v10_0_check_gfxoff_flag(struct 
> amdgpu_device *adev)
>  
>  static int gfx_v10_0_init_microcode(struct amdgpu_device *adev)
>  {
> -     char fw_name[40];
> +     char fw_name[50];
>       char ucode_prefix[30];
>       const char *wks = "";
>       int err;
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c 
> b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
> index 0d90d60a21d6..9cde763bbc3e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
> @@ -509,7 +509,7 @@ static void gfx_v11_0_check_fw_cp_gfx_shadow(struct 
> amdgpu_device *adev)
>  
>  static int gfx_v11_0_init_microcode(struct amdgpu_device *adev)
>  {
> -     char fw_name[40];
> +     char fw_name[46];
>       char ucode_prefix[30];
>       int err;
>       const struct rlc_firmware_header_v2_0 *rlc_hdr;
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c 
> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> index 7669f82aa1da..ad2a5c6ecb93 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> @@ -1249,7 +1249,7 @@ static void gfx_v9_0_check_if_need_gfxoff(struct 
> amdgpu_device *adev)
>  static int gfx_v9_0_init_cp_gfx_microcode(struct amdgpu_device *adev,
>                                         char *chip_name)
>  {
> -     char fw_name[30];
> +     char fw_name[46];
>       int err;
>  
>       snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", chip_name);
> @@ -1282,7 +1282,7 @@ static int gfx_v9_0_init_cp_gfx_microcode(struct 
> amdgpu_device *adev,
>  static int gfx_v9_0_init_rlc_microcode(struct amdgpu_device *adev,
>                                      char *chip_name)
>  {
> -     char fw_name[30];
> +     char fw_name[53];
>       int err;
>       const struct rlc_firmware_header_v2_0 *rlc_hdr;
>       uint16_t version_major;
> @@ -1337,7 +1337,7 @@ static bool gfx_v9_0_load_mec2_fw_bin_support(struct 
> amdgpu_device *adev)
>  static int gfx_v9_0_init_cp_compute_microcode(struct amdgpu_device *adev,
>                                             char *chip_name)
>  {
> -     char fw_name[30];
> +     char fw_name[50];
>       int err;
>  
>       if (amdgpu_sriov_vf(adev) && (adev->asic_type == CHIP_ALDEBARAN))
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c 
> b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
> index 48170bb5112e..93a1b730726d 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
> @@ -92,7 +92,7 @@ const int pmfw_decoded_link_width[7] = {0, 1, 2, 4, 8, 12, 
> 16};
>  int smu_v13_0_init_microcode(struct smu_context *smu)
>  {
>       struct amdgpu_device *adev = smu->adev;
> -     char fw_name[30];
> +     char fw_name[42];
>       char ucode_prefix[30];

At least for swsmu, we don't expect fw_name to require more than 30
chars. Instead, expectation ucode_prefix to be shorter like
"smu_v13_0_7", "smu_v13_0_0" etc.

You may refer a similar fix done here -

        5575ce213241 drm/amd/pm: Fix warnings

Thanks,
Lijo

>       int err = 0;
>       const struct smc_firmware_header_v1_0 *hdr;

Reply via email to