]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/video/efi_gop.c (grub_video_gop_setup): Reject invalid
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 2 Jun 2012 18:15:11 +0000 (20:15 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 2 Jun 2012 18:15:11 +0000 (20:15 +0200)
resolutions.
* grub-core/video/i386/pc/vbe.c (grub_vbe_get_preferred_mode): Likewise.
* grub-core/video/video.c (grub_video_edid_preferred_mode): Likewise.

ChangeLog
grub-core/video/efi_gop.c
grub-core/video/i386/pc/vbe.c
grub-core/video/video.c

index 78eaed17ed7551339b83e9d6ad7cbcc885e712f5..00f062165072ea781f29c1485567c9185545167c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-06-02  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/video/efi_gop.c (grub_video_gop_setup): Reject invalid
+       resolutions.
+       * grub-core/video/i386/pc/vbe.c (grub_vbe_get_preferred_mode): Likewise.
+       * grub-core/video/video.c (grub_video_edid_preferred_mode): Likewise.
+
 2012-06-02  Isao Shimizu  <isaoshimizu@gmail.com>
 
        * util/ieee1275/ofpath.c (check_sas): Fix sas path.
index 3e1cc2357b0eb3ee529d491b8b9680e6b94e415e..37a0015c2fa72450befbc1e5e096a5d9e96bf625 100644 (file)
@@ -368,7 +368,7 @@ grub_video_gop_setup (unsigned int width, unsigned int height,
     {
       err = 1;
       grub_gop_get_preferred_mode (&preferred_width, &preferred_height);
-      if (err)
+      if (err || preferred_width >= 4096 || preferred_height >= 4096)
        {
          preferred_width = 800;
          preferred_height = 600;
index 5656388a6cbe397745ca1081d31f31c9324446c2..81e5a8e94618c99870166870d25895ee75bf94a4 100644 (file)
@@ -581,7 +581,6 @@ grub_vbe_get_preferred_mode (unsigned int *width, unsigned int *height)
   /* Use low memory scratch area as temporary storage for VESA BIOS calls.  */
   flat_panel_info = (struct grub_vbe_flat_panel_info *)
     (GRUB_MEMORY_MACHINE_SCRATCH_ADDR + sizeof (struct grub_video_edid_info));
-  grub_memset (flat_panel_info, 0, sizeof (*flat_panel_info));
 
   if (controller_info.version >= 0x200
       && (grub_vbe_bios_get_ddc_capabilities (&ddc_level) & 0xff)
@@ -590,14 +589,18 @@ grub_vbe_get_preferred_mode (unsigned int *width, unsigned int *height)
       if (grub_video_vbe_get_edid (&edid_info) == GRUB_ERR_NONE
          && grub_video_edid_checksum (&edid_info) == GRUB_ERR_NONE
          && grub_video_edid_preferred_mode (&edid_info, width, height)
-             == GRUB_ERR_NONE)
+             == GRUB_ERR_NONE && *width < 4096 && *height < 4096)
        return GRUB_ERR_NONE;
 
       grub_errno = GRUB_ERR_NONE;
     }
 
+  grub_memset (flat_panel_info, 0, sizeof (*flat_panel_info));
   status = grub_vbe_bios_get_flat_panel_info (flat_panel_info);
-  if (status == GRUB_VBE_STATUS_OK)
+  if (status == GRUB_VBE_STATUS_OK
+      && flat_panel_info->horizontal_size && flat_panel_info->vertical_size
+      && flat_panel_info->horizontal_size < 4096
+      && flat_panel_info->vertical_size < 4096)
     {
       *width = flat_panel_info->horizontal_size;
       *height = flat_panel_info->vertical_size;
index 67de85ad959af4984401c3d6e71245c2fe926719..c36994f55031a49e45fa7912215b0710455cc75c 100644 (file)
@@ -415,7 +415,8 @@ grub_video_edid_preferred_mode (struct grub_video_edid_info *edid_info,
                | (((unsigned int)
                    (edid_info->detailed_timings[0].vertical_hi & 0xf0))
                   << 4);
-      return GRUB_ERR_NONE;
+      if (*width && *height)
+       return GRUB_ERR_NONE;
     }
 
   return grub_error (GRUB_ERR_BAD_DEVICE, "no preferred mode available");