Patchwork console: Fix crash with missing active_console (null pointer access)

login
register
mail settings
Submitter Stefan Weil
Date Sept. 29, 2010, 7:29 p.m.
Message ID <1285788578-18540-1-git-send-email-weil@mail.berlios.de>
Download mbox | patch
Permalink /patch/66091/
State New
Headers show

Comments

Stefan Weil - Sept. 29, 2010, 7:29 p.m.
Console selection crashed qemu when there was no active console.
Run "qemu -nodefaults" with SDL configured and press alt-ctrl-2
to reproduce this bug.

Check active_console before trying to get the dimensions of it
(this was obviously the last location which did not do this check).

Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 console.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)
Andreas Färber - Sept. 29, 2010, 8:25 p.m.
Hi,

Am 29.09.2010 um 21:29 schrieb Stefan Weil:

> Console selection crashed qemu when there was no active console.
> Run "qemu -nodefaults" with SDL configured and press alt-ctrl-2
> to reproduce this bug.
>
> Check active_console before trying to get the dimensions of it
> (this was obviously the last location which did not do this check).
>
> Signed-off-by: Stefan Weil <weil@mail.berlios.de>

Same patch has been submitted by Stefan Hajnoczi!

Andreas

> ---
> console.c |    6 ++++--
> 1 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/console.c b/console.c
> index 698bc10..c1728b1 100644
> --- a/console.c
> +++ b/console.c
> @@ -1060,8 +1060,10 @@ void console_select(unsigned int index)
>
>     if (index >= MAX_CONSOLES)
>         return;
> -    active_console->g_width = ds_get_width(active_console->ds);
> -    active_console->g_height = ds_get_height(active_console->ds);
> +    if (active_console) {
> +        active_console->g_width = ds_get_width(active_console->ds);
> +        active_console->g_height = ds_get_height(active_console->ds);
> +    }
>     s = consoles[index];
>     if (s) {
>         DisplayState *ds = s->ds;
> -- 
> 1.7.1

Patch

diff --git a/console.c b/console.c
index 698bc10..c1728b1 100644
--- a/console.c
+++ b/console.c
@@ -1060,8 +1060,10 @@  void console_select(unsigned int index)
 
     if (index >= MAX_CONSOLES)
         return;
-    active_console->g_width = ds_get_width(active_console->ds);
-    active_console->g_height = ds_get_height(active_console->ds);
+    if (active_console) {
+        active_console->g_width = ds_get_width(active_console->ds);
+        active_console->g_height = ds_get_height(active_console->ds);
+    }
     s = consoles[index];
     if (s) {
         DisplayState *ds = s->ds;