• Srinivasan Shanmugam's avatar
    drm/amdgpu: Fix snprintf usage in amdgpu_gfx_kiq_init_ring · 0ea55445
    Srinivasan Shanmugam authored
    This commit fixes a format truncation issue arosed by the snprintf
    function potentially writing more characters into the ring->name buffer
    than it can hold, in the amdgpu_gfx_kiq_init_ring function
    
    The issue occurred because the '%d' format specifier could write between
    1 and 10 bytes into a region of size between 0 and 8, depending on the
    values of xcc_id, ring->me, ring->pipe, and ring->queue. The snprintf
    function could output between 12 and 41 bytes into a destination of size
    16, leading to potential truncation.
    
    To resolve this, the snprintf line was modified to use the '%hhu' format
    specifier for xcc_id, ring->me, ring->pipe, and ring->queue. The '%hhu'
    specifier is used for unsigned char variables and ensures that these
    values are printed as unsigned decimal integers.
    
    Fixes the below with gcc W=1:
    drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c: In function ‘amdgpu_gfx_kiq_init_ring’:
    drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c:332:61: warning: ‘%d’ directive output may be truncated writing between 1 and 10 bytes into a region of size between 0 and 8 [-Wformat-truncation=]
      332 |         snprintf(ring->name, sizeof(ring->name), "kiq_%d.%d.%d.%d",
          |                                                             ^~
    drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c:332:50: note: directive argument in the range [0, 2147483647]
      332 |         snprintf(ring->name, sizeof(ring->name), "kiq_%d.%d.%d.%d",
          |                                                  ^~~~~~~~~~~~~~~~~
    drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c:332:9: note: ‘snprintf’ output between 12 and 41 bytes into a destination of size 16
      332 |         snprintf(ring->name, sizeof(ring->name), "kiq_%d.%d.%d.%d",
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      333 |                  xcc_id, ring->me, ring->pipe, ring->queue);
          |                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Fixes: 345a36c4 ("drm/amdgpu: prefer snprintf over sprintf")
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Cc: Christian König <christian.koenig@amd.com>
    Signed-off-by: default avatarSrinivasan Shanmugam <srinivasan.shanmugam@amd.com>
    Reviewed-by: default avatarLijo Lazar <lijo.lazar@amd.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    0ea55445
amdgpu_gfx.c 38.2 KB