diff --git a/lib/liblaunch/launch.c b/lib/liblaunch/launch.c index 0463843..682e3e5 100644 --- a/lib/liblaunch/launch.c +++ b/lib/liblaunch/launch.c @@ -70,15 +70,14 @@ static virt_addr_t write_bootstrap_data( bs->bs_argv = (const char **)remote_argv; } - if (bs->bs_envc > 0) { - virt_addr_t remote_envp; - envp = stack_writer_put( - stack, - NULL, - bs->bs_envc * sizeof(char *), - &remote_envp); - bs->bs_envp = (const char **)remote_envp; - } + /* envc+1 so there is space for a null terminator */ + virt_addr_t remote_envp; + envp = stack_writer_put( + stack, + NULL, + (bs->bs_envc + 1) * sizeof(char *), + &remote_envp); + bs->bs_envp = (const char **)remote_envp; size_t i = 0, j = 0; if (interpreter) { @@ -95,11 +94,12 @@ static virt_addr_t write_bootstrap_data( argv[i] = (const char *)arg_ptr; } - for (size_t i = 0; i < bs->bs_envc; i++) { - virt_addr_t env_ptr; + virt_addr_t env_ptr; + for (i = 0; i < bs->bs_envc; i++) { stack_writer_put_string(stack, params->p_envp[i], &env_ptr); envp[i] = (const char *)env_ptr; } + envp[i] = NULL; return bs_remote; }