drm/amd/display: fix a NULL pointer dereference in amdgpu_dm_i2c_xfer()
authorMario Limonciello <mario.limonciello@amd.com>
Wed, 8 Nov 2023 19:31:57 +0000 (13:31 -0600)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 17 Nov 2023 05:50:15 +0000 (00:50 -0500)
When ddc_service_construct() is called, it explicitly checks both the
link type and whether there is something on the link which will
dictate whether the pin is marked as hw_supported.

If the pin isn't set or the link is not set (such as from
unloading/reloading amdgpu in an IGT test) then fail the
amdgpu_dm_i2c_xfer() call.

Cc: stable@vger.kernel.org
Fixes: 22676bc500c2 ("drm/amd/display: Fix dmub soft hang for PSR 1")
Link: https://github.com/fwupd/fwupd/issues/6327
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 6f99f6754c119efddf9cc97e2db21f57bd9ad8bb..5ec7acf65ee1ca90eb3669524b9c38e7d765e2ae 100644 (file)
@@ -7481,6 +7481,9 @@ static int amdgpu_dm_i2c_xfer(struct i2c_adapter *i2c_adap,
        int i;
        int result = -EIO;
 
+       if (!ddc_service->ddc_pin || !ddc_service->ddc_pin->hw_info.hw_supported)
+               return result;
+
        cmd.payloads = kcalloc(num, sizeof(struct i2c_payload), GFP_KERNEL);
 
        if (!cmd.payloads)