drm/radeon: possible buffer overflow
authorKonstantin Meskhidze <konstantin.meskhidze@huawei.com>
Thu, 17 Aug 2023 11:33:49 +0000 (19:33 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Nov 2023 10:51:58 +0000 (11:51 +0100)
[ Upstream commit dd05484f99d16715a88eedfca363828ef9a4c2d4 ]

Buffer 'afmt_status' of size 6 could overflow, since index 'afmt_idx' is
checked after access.

Fixes: 5cc4e5fc293b ("drm/radeon: Cleanup HDMI audio interrupt handling for evergreen")
Co-developed-by: Ivanov Mikhail <ivanov.mikhail1@huawei-partners.com>
Signed-off-by: Konstantin Meskhidze <konstantin.meskhidze@huawei.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/radeon/evergreen.c

index 4f06356..f0ae087 100644 (file)
@@ -4821,14 +4821,15 @@ restart_ih:
                        break;
                case 44: /* hdmi */
                        afmt_idx = src_data;
-                       if (!(afmt_status[afmt_idx] & AFMT_AZ_FORMAT_WTRIG))
-                               DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
-
                        if (afmt_idx > 5) {
                                DRM_ERROR("Unhandled interrupt: %d %d\n",
                                          src_id, src_data);
                                break;
                        }
+
+                       if (!(afmt_status[afmt_idx] & AFMT_AZ_FORMAT_WTRIG))
+                               DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
+
                        afmt_status[afmt_idx] &= ~AFMT_AZ_FORMAT_WTRIG;
                        queue_hdmi = true;
                        DRM_DEBUG("IH: HDMI%d\n", afmt_idx + 1);