* [PATCH 1/2] fbcon: Rebuild rotated font buffer on font change
@ 2026-10-14 8:51 Yao Yiqi
2026-10-14 8:51 ` [PATCH 2/2] fbcon: Retry rotated font allocation after failure Yao Yiqi
2026-10-14 19:58 ` [PATCH 1/2] fbcon: Rebuild rotated font buffer on font change Helge Deller
0 siblings, 2 replies; 3+ messages in thread
From: Yao Yiqi @ 2026-10-14 8:51 UTC (permalink / raw)
To: deller, tzimmermann, simona; +Cc: dri-devel, linux-fbdev, linux-kernel
fbcon_rotate_font() caches a rotated copy of the console font in
par->rotated.buf. The buffer is sized from the font's width, height and
charcount, and is rebuilt in fbcon_init(), fbcon_switch() and
fbcon_modechanged(), but not in fbcon_do_set_font().
When the console font is changed through KDFONTOP/KD_FONT_OP_SET, the new
font data and geometry are installed and vc_resize() is called. The
resulting redraw reaches the rotated bitops before the buffer is rebuilt:
hide_cursor() drives both con_cursor() -> soft_cursor() and fbcon_putc()
-> *_putcs(), and they index par->rotated.buf with the new cell size and
character codes. A stale, too-small buffer is read out of bounds.
KASAN reports, for example:
BUG: KASAN: slab-out-of-bounds in soft_cursor
Read of size 64 at addr ...
memcpy
soft_cursor
cw_cursor
fbcon_cursor
hide_cursor
redraw_screen
vc_do_resize
fbcon_do_set_font
fbcon_set_font
con_font_op
vt_ioctl
Rebuild the buffer for the visible console right after the new font
geometry has been installed and before any redraw, as fbcon_switch() and
fbcon_modechanged() already do.
Unlike those callers, this one does not fall back to unrotated rendering
on failure. The "par->rotate = FB_ROTATE_UR; set_blitting_type(vc, info);"
fallback they use does not actually switch to unrotated rendering:
set_blitting_type() calls fbcon_set_rotation(), which immediately
re-derives par->rotate from par->p->con_rotate. Replicating that pattern
here would not change the outcome; a failed rebuild leaves
par->rotated.buf NULL, so the rotated ops skip drawing, and the following
patch retries the allocation on the next call.
Fixes: 6cc50e1c5b57 ("[PATCH] fbcon: Console Rotation - Add support to rotate font bitmap")
Cc: stable@vger.kernel.org
Signed-off-by: Yao Yiqi <yaoyiqi3@huawei.com>
---
drivers/video/fbdev/core/fbcon.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
index 01715873ea49..5cef18043bdb 100644
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
@@ -2432,6 +2432,17 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, int charcount,
else if (!vc->vc_hi_font_mask && charcount == 512)
set_vc_hi_font(vc, true);
+ /*
+ * The rotated font buffer is sized from the new font's width, height
+ * and charcount. Rebuild it for the visible console before the redraw
+ * below, as fbcon_switch() and fbcon_modechanged() already do. The
+ * redraw reaches the rotated bitops through hide_cursor(), and those
+ * index the buffer with the new cell size and character codes, so a
+ * stale, too-small buffer is read out of bounds.
+ */
+ if (con_is_visible(vc) && par->bitops->rotate_font)
+ par->bitops->rotate_font(info, vc);
+
if (resize) {
int cols, rows;
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] fbcon: Retry rotated font allocation after failure
2026-10-14 8:51 [PATCH 1/2] fbcon: Rebuild rotated font buffer on font change Yao Yiqi
@ 2026-10-14 8:51 ` Yao Yiqi
2026-10-14 19:58 ` [PATCH 1/2] fbcon: Rebuild rotated font buffer on font change Helge Deller
1 sibling, 0 replies; 3+ messages in thread
From: Yao Yiqi @ 2026-10-14 8:51 UTC (permalink / raw)
To: deller, tzimmermann, simona; +Cc: dri-devel, linux-fbdev, linux-kernel
fbcon_rotate_font() records the font and rotation it is about to handle in
par->rotated.fontdata and par->rotated.buf_rotate before calling
font_data_rotate(). If that allocation fails it clears par->rotated.buf,
but the cached font/rotation state already looks up to date, so the next
call takes the early-out and never retries. The rotated putcs/cursor ops
keep returning early on the NULL buffer and the console stays blank until
the font or the rotation is changed, even once memory is available again.
Also test par->rotated.buf in the early-out so a failed allocation is
retried the next time fbcon_rotate_font() runs.
Fixes: e4ef723d8975 ("fbcon: Avoid OOB font access if console rotation fails")
Cc: stable@vger.kernel.org
Signed-off-by: Yao Yiqi <yaoyiqi3@huawei.com>
---
drivers/video/fbdev/core/fbcon_rotate.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/video/fbdev/core/fbcon_rotate.c b/drivers/video/fbdev/core/fbcon_rotate.c
index 6cdbc96eeca6..6b148e0e81e6 100644
--- a/drivers/video/fbdev/core/fbcon_rotate.c
+++ b/drivers/video/fbdev/core/fbcon_rotate.c
@@ -21,7 +21,9 @@ int fbcon_rotate_font(struct fb_info *info, struct vc_data *vc)
unsigned char *buf;
int ret;
- if (par->p->fontdata == par->rotated.fontdata && par->rotate == par->rotated.buf_rotate)
+ if (par->p->fontdata == par->rotated.fontdata &&
+ par->rotate == par->rotated.buf_rotate &&
+ par->rotated.buf)
return 0;
par->rotated.fontdata = par->p->fontdata;
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 1/2] fbcon: Rebuild rotated font buffer on font change
2026-10-14 8:51 [PATCH 1/2] fbcon: Rebuild rotated font buffer on font change Yao Yiqi
2026-10-14 8:51 ` [PATCH 2/2] fbcon: Retry rotated font allocation after failure Yao Yiqi
@ 2026-10-14 19:58 ` Helge Deller
1 sibling, 0 replies; 3+ messages in thread
From: Helge Deller @ 2026-10-14 19:58 UTC (permalink / raw)
To: Yao Yiqi, tzimmermann, simona; +Cc: dri-devel, linux-fbdev, linux-kernel
On 10/14/26 10:51, Yao Yiqi wrote:
> fbcon_rotate_font() caches a rotated copy of the console font in
> par->rotated.buf. The buffer is sized from the font's width, height and
> charcount, and is rebuilt in fbcon_init(), fbcon_switch() and
> fbcon_modechanged(), but not in fbcon_do_set_font().
>
> When the console font is changed through KDFONTOP/KD_FONT_OP_SET, the new
> font data and geometry are installed and vc_resize() is called. The
> resulting redraw reaches the rotated bitops before the buffer is rebuilt:
> hide_cursor() drives both con_cursor() -> soft_cursor() and fbcon_putc()
> -> *_putcs(), and they index par->rotated.buf with the new cell size and
> character codes. A stale, too-small buffer is read out of bounds.
>
> KASAN reports, for example:
>
> BUG: KASAN: slab-out-of-bounds in soft_cursor
> Read of size 64 at addr ...
> memcpy
> soft_cursor
> cw_cursor
> fbcon_cursor
> hide_cursor
> redraw_screen
> vc_do_resize
> fbcon_do_set_font
> fbcon_set_font
> con_font_op
> vt_ioctl
>
> Rebuild the buffer for the visible console right after the new font
> geometry has been installed and before any redraw, as fbcon_switch() and
> fbcon_modechanged() already do.
>
> Unlike those callers, this one does not fall back to unrotated rendering
> on failure. The "par->rotate = FB_ROTATE_UR; set_blitting_type(vc, info);"
> fallback they use does not actually switch to unrotated rendering:
> set_blitting_type() calls fbcon_set_rotation(), which immediately
> re-derives par->rotate from par->p->con_rotate. Replicating that pattern
> here would not change the outcome; a failed rebuild leaves
> par->rotated.buf NULL, so the rotated ops skip drawing, and the following
> patch retries the allocation on the next call.
>
> Fixes: 6cc50e1c5b57 ("[PATCH] fbcon: Console Rotation - Add support to rotate font bitmap")
> Cc: stable@vger.kernel.org
> Signed-off-by: Yao Yiqi <yaoyiqi3@huawei.com>
> ---
> drivers/video/fbdev/core/fbcon.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
series applied for further testing to fbdev/for-next.
Thanks!
Helge
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-14 19:58 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-14 8:51 [PATCH 1/2] fbcon: Rebuild rotated font buffer on font change Yao Yiqi
2026-10-14 8:51 ` [PATCH 2/2] fbcon: Retry rotated font allocation after failure Yao Yiqi
2026-10-14 19:58 ` [PATCH 1/2] fbcon: Rebuild rotated font buffer on font change Helge Deller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox