Skip to content

Commit 51b8258

Browse files
tdzgregkh
authored andcommitted
fbcon: Fix OOB access in font allocation
commit 9b2f5ef upstream. Commit 1a194e6 ("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 <[email protected]> Fixes: 1a194e6 ("fbcon: fix integer overflow in fbcon_do_set_font") Reported-by: Jani Nikula <[email protected]> Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15020 Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/6201 Cc: Samasth Norway Ananda <[email protected]> Cc: Thomas Zimmermann <[email protected]> Cc: George Kennedy <[email protected]> Cc: Greg Kroah-Hartman <[email protected]> Cc: Simona Vetter <[email protected]> Cc: Helge Deller <[email protected]> Cc: "Ville Syrjälä" <[email protected]> Cc: Sam Ravnborg <[email protected]> Cc: Qianqiang Liu <[email protected]> Cc: Shixiong Ou <[email protected]> Cc: Kees Cook <[email protected]> Cc: <[email protected]> # v5.9+ Cc: Zsolt Kajtar <[email protected]> Reviewed-by: Lucas De Marchi <[email protected]> Reviewed-by: Qianqiang Liu <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 4a4bac8 commit 51b8258

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

drivers/video/fbdev/core/fbcon.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2492,7 +2492,7 @@ static int fbcon_set_font(struct vc_data *vc, const struct console_font *font,
24922492
unsigned charcount = font->charcount;
24932493
int w = font->width;
24942494
int h = font->height;
2495-
int size;
2495+
int size, alloc_size;
24962496
int i, csum;
24972497
u8 *new_data, *data = font->data;
24982498
int pitch = PITCH(font->width);
@@ -2525,10 +2525,10 @@ static int fbcon_set_font(struct vc_data *vc, const struct console_font *font,
25252525
return -EINVAL;
25262526

25272527
/* Check for overflow in allocation size calculation */
2528-
if (check_add_overflow(FONT_EXTRA_WORDS * sizeof(int), size, &size))
2528+
if (check_add_overflow(FONT_EXTRA_WORDS * sizeof(int), size, &alloc_size))
25292529
return -EINVAL;
25302530

2531-
new_data = kmalloc(size, GFP_USER);
2531+
new_data = kmalloc(alloc_size, GFP_USER);
25322532

25332533
if (!new_data)
25342534
return -ENOMEM;

0 commit comments

Comments
 (0)