mbox series

[v3,0/4] fbcon: Fixes for screen resolution changes

Message ID 20220706150253.2186-1-deller@gmx.de
Headers show
Series fbcon: Fixes for screen resolution changes | expand

Message

Helge Deller July 6, 2022, 3:02 p.m. UTC
This series fixes possible out-of-bound memory accesses when users trigger
screen resolutions changes with invalid input parameters, e.g. reconfigures
screen which is smaller than the current font size, or if the virtual screen
size is smaller than the physical screen size.

Changes in v3 (all feedback from Geert):
- Drop WARNING, instead just use pr_warn() to report if driver failed
  to adjust xres_virtual or yres_virtual
- Use EXPORT_SYMBOL_GPL()
- fbcon_modechange_possible() allows changes for non-text screens

Changes in v2:
- don't fixup wrong xy_vres values, but instead print warning.
- add Reviewed-by tags, minor variable name fixes

Helge Deller (4):
  fbcon: Disallow setting font bigger than screen size
  fbcon: Prevent that screen size is smaller than font size
  fbmem: Check virtual screen sizes in fb_set_var()
  fbcon: Use fbcon_info_from_console() in fbcon_modechange_possible()

 drivers/video/fbdev/core/fbcon.c | 33 ++++++++++++++++++++++++++++++++
 drivers/video/fbdev/core/fbmem.c | 15 ++++++++++++++-
 include/linux/fbcon.h            |  4 ++++
 3 files changed, 51 insertions(+), 1 deletion(-)

--
2.35.3

Comments

Geert Uytterhoeven July 7, 2022, 8:20 a.m. UTC | #1
Hi Helge,

On Wed, Jul 6, 2022 at 5:02 PM Helge Deller <deller@gmx.de> wrote:
> Verify that the fbdev or drm driver correctly adjusted the virtual
> screen sizes. On failure report the failing driver and reject the screen
> size change.
>
> Signed-off-by: Helge Deller <deller@gmx.de>

> --- a/drivers/video/fbdev/core/fbmem.c
> +++ b/drivers/video/fbdev/core/fbmem.c
> @@ -1016,6 +1016,17 @@ fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var)
>         if (ret)
>                 return ret;
>
> +       /* verify that virtual resolution >= physical resolution */
> +       if (var->xres_virtual < var->xres ||
> +           var->yres_virtual < var->yres) {
> +               pr_warn("WARNING: fbcon: Driver '%s' missed to adjust virtual"
> +                       " screen size (%dx%d vs. %dx%d)\n",

%ux%u cs. %ux%u

Please don't split messages, for easier grepping.

> +                       info->fix.id,
> +                       var->xres_virtual, var->yres_virtual,
> +                       var->xres, var->yres);
> +               return -EINVAL;
> +       }
> +
>         if ((var->activate & FB_ACTIVATE_MASK) != FB_ACTIVATE_NOW)
>                 return 0;

With the above fixed:
Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds