]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
drm/amd/display: Fix a NULL pointer dereference in amdgpu_dm_connector_add_common_modes()
authorZhou Qingyang <zhou1615@umn.edu>
Mon, 24 Jan 2022 16:57:29 +0000 (00:57 +0800)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 20 May 2022 12:38:42 +0000 (14:38 +0200)
BugLink: https://bugs.launchpad.net/bugs/1969110
[ Upstream commit 588a70177df3b1777484267584ef38ab2ca899a2 ]

In amdgpu_dm_connector_add_common_modes(), amdgpu_dm_create_common_mode()
is assigned to mode and is passed to drm_mode_probed_add() directly after
that. drm_mode_probed_add() passes &mode->head to list_add_tail(), and
there is a dereference of it in list_add_tail() without recoveries, which
could lead to NULL pointer dereference on failure of
amdgpu_dm_create_common_mode().

Fix this by adding a NULL check of mode.

This bug was found by a static analyzer.

Builds with 'make allyesconfig' show no new warnings,
and our static analyzer no longer warns about this code.

Fixes: e7b07ceef2a6 ("drm/amd/display: Merge amdgpu_dm_types and amdgpu_dm")
Signed-off-by: Zhou Qingyang <zhou1615@umn.edu>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
(cherry picked from commit bdc7429708a0772d90c208975694f7c2133b1202)
Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index e1479f3a5d3d7be3d7eebffb6289a190943f951b..9c863cfe8adfbec635f0538a3ac80ffe06998391 100644 (file)
@@ -7761,6 +7761,9 @@ static void amdgpu_dm_connector_add_common_modes(struct drm_encoder *encoder,
                mode = amdgpu_dm_create_common_mode(encoder,
                                common_modes[i].name, common_modes[i].w,
                                common_modes[i].h);
+               if (!mode)
+                       continue;
+
                drm_mode_probed_add(connector, mode);
                amdgpu_dm_connector->num_modes++;
        }