weston-launch: Fix failure to exec weston due to initalized argv values
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Wed, 22 May 2013 19:55:33 +0000 (22:55 +0300)
committerKristian Høgsberg <krh@bitplanet.net>
Wed, 22 May 2013 20:39:36 +0000 (16:39 -0400)
The array of arguments supplied to execv must be NULL terminated. If
unitialized values are used as pointers the exec call may fail with a
EFAULT error ("Bad address").

https://bugs.freedesktop.org/show_bug.cgi?id=64874

src/weston-launch.c

index 42b2506..ad77476 100644 (file)
@@ -570,7 +570,7 @@ main(int argc, char *argv[])
                }
        }
 
-       if ((argc - optind) > (MAX_ARGV_SIZE - 5))
+       if ((argc - optind) > (MAX_ARGV_SIZE - 6))
                error(1, E2BIG, "Too many arguments to pass to weston");
 
        if (new_user)
@@ -586,7 +586,8 @@ main(int argc, char *argv[])
        child_argv[3] = BINDIR "/weston \"$@\"";
        child_argv[4] = "weston";
        for (i = 0; i < (argc - optind); ++i)
-               child_argv[5+i] = argv[optind+i];
+               child_argv[5 + i] = argv[optind + i];
+       child_argv[5 + i] = NULL;
 
        term = getenv("TERM");
        clearenv();