Patchwork qemu-kvm: avoid strlen of NULL pointer

login
register
mail settings
Submitter Jens Osterkamp
Date March 3, 2010, 2:32 p.m.
Message ID <201003031532.43257.jens@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/46808/
State New
Headers show

Comments

Jens Osterkamp - March 3, 2010, 2:32 p.m.
If the user wants to create a chardev of type socket but forgets to give a
host= option, qemu_opt_get returns NULL. This NULL pointer is then fed into
strlen a few lines below without a check which results in a segfault.
This fixes it.

Signed-off-by: Jens Osterkamp <jens@linux.vnet.ibm.com>
---
 qemu-sockets.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
Aurelien Jarno - March 27, 2010, 12:33 p.m.
On Wed, Mar 03, 2010 at 03:32:43PM +0100, Jens Osterkamp wrote:
> If the user wants to create a chardev of type socket but forgets to give a
> host= option, qemu_opt_get returns NULL. This NULL pointer is then fed into
> strlen a few lines below without a check which results in a segfault.
> This fixes it.

While this correctly fixes the segfault, it doesn't output any error
message. The best would probably be to fold that with the test of
"port", as the error message already mentions "host and/or port".

> Signed-off-by: Jens Osterkamp <jens@linux.vnet.ibm.com>
> ---
>  qemu-sockets.c |    3 +++
>  1 files changed, 3 insertions(+), 0 deletions(-)
> 
> diff --git a/qemu-sockets.c b/qemu-sockets.c
> index 23c3def..a191304 100644
> --- a/qemu-sockets.c
> +++ b/qemu-sockets.c
> @@ -137,6 +137,9 @@ int inet_listen_opts(QemuOpts *opts, int port_offset)
>      pstrcpy(port, sizeof(port), qemu_opt_get(opts, "port"));
>      addr = qemu_opt_get(opts, "host");
>  
> +    if (!addr)
> +	    return -1;
> +
>      to = qemu_opt_get_number(opts, "to", 0);
>      if (qemu_opt_get_bool(opts, "ipv4", 0))
>          ai.ai_family = PF_INET;
> -- 
> 1.5.6.3
> 
> 
> -- 
> Best regards, 
> 
> Jens Osterkamp
> --------------------------------------------------------------------------------
> IBM Deutschland Research & Development GmbH
> Vorsitzender des Aufsichtsrats: Martin Jetter
> Geschäftsführung: Dirk Wittkopp
> Sitz der Gesellschaft: Böblingen
> Registergericht: Amtsgericht Stuttgart, HRB 243294
> 
> 
> 
>

Patch

diff --git a/qemu-sockets.c b/qemu-sockets.c
index 23c3def..a191304 100644
--- a/qemu-sockets.c
+++ b/qemu-sockets.c
@@ -137,6 +137,9 @@  int inet_listen_opts(QemuOpts *opts, int port_offset)
     pstrcpy(port, sizeof(port), qemu_opt_get(opts, "port"));
     addr = qemu_opt_get(opts, "host");
 
+    if (!addr)
+	    return -1;
+
     to = qemu_opt_get_number(opts, "to", 0);
     if (qemu_opt_get_bool(opts, "ipv4", 0))
         ai.ai_family = PF_INET;