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....@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index a0ea6fe8d060..977cde6d1362 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -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;
                }
 
-- 
2.34.1

Reply via email to