summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorShixiong Ou <oushixiong@kylinos.cn>2026-07-29 16:48:15 +0800
committerJocelyn Falempe <jfalempe@redhat.com>2026-08-13 15:49:40 +0200
commitf4f2bba28df9b9aaa00262a462139dbbcdc38d9f (patch)
treed20e3bd7c46cd02a28ace2e2281502d53484725b /drivers
parent60baa179ed1333535f6e2da4133511db55278ee4 (diff)
drm/log: Fix infinite loop when scale is too large for display
When scale is large enough that scaled_font exceeds the display dimensions, rows or columns become 0. A columns value of 0 causes an infinite loop in drm_log_draw_kmsg_record() because the loop never decrements len. Check for zero rows/columns in drm_log_setup_modeset() and return an error, cleaning up the already allocated buffer to avoid a leak. Fixes: 8a4b913df427 ("drm/log: Add integer scaling support") Signed-off-by: Shixiong Ou <oushixiong@kylinos.cn> Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com> Link: https://patch.msgid.link/20260729084815.692944-1-oushixiong1025@163.com Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/clients/drm_log.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/drm/clients/drm_log.c b/drivers/gpu/drm/clients/drm_log.c
index f23a92f826c9..467cdce57dd3 100644
--- a/drivers/gpu/drm/clients/drm_log.c
+++ b/drivers/gpu/drm/clients/drm_log.c
@@ -218,6 +218,12 @@ static int drm_log_setup_modeset(struct drm_client_dev *client,
scanout->scaled_font_w = scanout->font->width * scale;
scanout->rows = height / scanout->scaled_font_h;
scanout->columns = width / scanout->scaled_font_w;
+ if (!scanout->rows || !scanout->columns) {
+ drm_client_buffer_delete(scanout->buffer);
+ scanout->buffer = NULL;
+ mode_set->fb = NULL;
+ return -EINVAL;
+ }
scanout->front_color = drm_draw_color_from_xrgb8888(0xffffff, format);
scanout->prefix_color = drm_draw_color_from_xrgb8888(0x4e9a06, format);
return 0;