]> git.apps.os.sepia.ceph.com Git - ceph-client.git/commitdiff
fbcon: Fix OOB access in font allocation
authorThomas Zimmermann <tzimmermann@suse.de>
Mon, 22 Sep 2025 13:45:54 +0000 (15:45 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Tue, 23 Sep 2025 09:36:14 +0000 (11:36 +0200)
Commit 1a194e6c8e1e ("fbcon: fix integer overflow in fbcon_do_set_font")
introduced an out-of-bounds access by storing data and allocation sizes
in the same variable. Restore the old size calculation and use the new
variable 'alloc_size' for the allocation.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Fixes: 1a194e6c8e1e ("fbcon: fix integer overflow in fbcon_do_set_font")
Reported-by: Jani Nikula <jani.nikula@linux.intel.com>
Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15020
Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/6201
Cc: Samasth Norway Ananda <samasth.norway.ananda@oracle.com>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: George Kennedy <george.kennedy@oracle.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Simona Vetter <simona@ffwll.ch>
Cc: Helge Deller <deller@gmx.de>
Cc: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Qianqiang Liu <qianqiang.liu@163.com>
Cc: Shixiong Ou <oushixiong@kylinos.cn>
Cc: Kees Cook <kees@kernel.org>
Cc: <stable@vger.kernel.org> # v5.9+
Cc: Zsolt Kajtar <soci@c64.rulez.org>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Qianqiang Liu <qianqiang.liu@163.com>
Link: https://lore.kernel.org/r/20250922134619.257684-1-tzimmermann@suse.de
drivers/video/fbdev/core/fbcon.c

index a507d05f8feaa8085af60fd5639c6ad7dac9a40f..5940e2eb92316c3cbc1043e0a7dd6d9e3cb71bc3 100644 (file)
@@ -2504,7 +2504,7 @@ static int fbcon_set_font(struct vc_data *vc, const struct console_font *font,
        unsigned charcount = font->charcount;
        int w = font->width;
        int h = font->height;
-       int size;
+       int size, alloc_size;
        int i, csum;
        u8 *new_data, *data = font->data;
        int pitch = PITCH(font->width);
@@ -2537,10 +2537,10 @@ static int fbcon_set_font(struct vc_data *vc, const struct console_font *font,
                return -EINVAL;
 
        /* Check for overflow in allocation size calculation */
-       if (check_add_overflow(FONT_EXTRA_WORDS * sizeof(int), size, &size))
+       if (check_add_overflow(FONT_EXTRA_WORDS * sizeof(int), size, &alloc_size))
                return -EINVAL;
 
-       new_data = kmalloc(size, GFP_USER);
+       new_data = kmalloc(alloc_size, GFP_USER);
 
        if (!new_data)
                return -ENOMEM;