drm/amdgpu: Fix uninitialized variable warning in amdgpu_info_ioctl
authorMa Jun <Jun.Ma2@amd.com>
Mon, 6 May 2024 06:01:33 +0000 (14:01 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 8 May 2024 19:17:07 +0000 (15:17 -0400)
Check the return value of amdgpu_xcp_get_inst_details, otherwise we
may use an uninitialized variable inst_mask

Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c

index a0ea6fe..977cde6 100644 (file)
@@ -623,25 +623,32 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
                        switch (type) {
                        case AMD_IP_BLOCK_TYPE_GFX:
                                ret = amdgpu_xcp_get_inst_details(xcp, AMDGPU_XCP_GFX, &inst_mask);
+                               if (ret)
+                                       return ret;
                                count = hweight32(inst_mask);
                                break;
                        case AMD_IP_BLOCK_TYPE_SDMA:
                                ret = amdgpu_xcp_get_inst_details(xcp, AMDGPU_XCP_SDMA, &inst_mask);
+                               if (ret)
+                                       return ret;
                                count = hweight32(inst_mask);
                                break;
                        case AMD_IP_BLOCK_TYPE_JPEG:
                                ret = amdgpu_xcp_get_inst_details(xcp, AMDGPU_XCP_VCN, &inst_mask);
+                               if (ret)
+                                       return ret;
                                count = hweight32(inst_mask) * adev->jpeg.num_jpeg_rings;
                                break;
                        case AMD_IP_BLOCK_TYPE_VCN:
                                ret = amdgpu_xcp_get_inst_details(xcp, AMDGPU_XCP_VCN, &inst_mask);
+                               if (ret)
+                                       return ret;
                                count = hweight32(inst_mask);
                                break;
                        default:
                                return -EINVAL;
                        }
-                       if (ret)
-                               return ret;
+
                        return copy_to_user(out, &count, min(size, 4u)) ? -EFAULT : 0;
                }