Commit da94d26390b292f2b9d90aee2936d8545364d5a2

Authored by pbrook
1 parent f0cbb613

Handle NULL argp/envp in execve syscall.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4627 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 4 additions and 4 deletions
linux-user/syscall.c
@@ -3248,7 +3248,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, @@ -3248,7 +3248,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
3248 3248
3249 argc = 0; 3249 argc = 0;
3250 guest_argp = arg2; 3250 guest_argp = arg2;
3251 - for (gp = guest_argp; ; gp += sizeof(abi_ulong)) { 3251 + for (gp = guest_argp; gp; gp += sizeof(abi_ulong)) {
3252 if (get_user_ual(addr, gp)) 3252 if (get_user_ual(addr, gp))
3253 goto efault; 3253 goto efault;
3254 if (!addr) 3254 if (!addr)
@@ -3257,7 +3257,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, @@ -3257,7 +3257,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
3257 } 3257 }
3258 envc = 0; 3258 envc = 0;
3259 guest_envp = arg3; 3259 guest_envp = arg3;
3260 - for (gp = guest_envp; ; gp += sizeof(abi_ulong)) { 3260 + for (gp = guest_envp; gp; gp += sizeof(abi_ulong)) {
3261 if (get_user_ual(addr, gp)) 3261 if (get_user_ual(addr, gp))
3262 goto efault; 3262 goto efault;
3263 if (!addr) 3263 if (!addr)
@@ -3268,7 +3268,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, @@ -3268,7 +3268,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
3268 argp = alloca((argc + 1) * sizeof(void *)); 3268 argp = alloca((argc + 1) * sizeof(void *));
3269 envp = alloca((envc + 1) * sizeof(void *)); 3269 envp = alloca((envc + 1) * sizeof(void *));
3270 3270
3271 - for (gp = guest_argp, q = argp; ; 3271 + for (gp = guest_argp, q = argp; gp;
3272 gp += sizeof(abi_ulong), q++) { 3272 gp += sizeof(abi_ulong), q++) {
3273 if (get_user_ual(addr, gp)) 3273 if (get_user_ual(addr, gp))
3274 goto execve_efault; 3274 goto execve_efault;
@@ -3279,7 +3279,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, @@ -3279,7 +3279,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
3279 } 3279 }
3280 *q = NULL; 3280 *q = NULL;
3281 3281
3282 - for (gp = guest_envp, q = envp; ; 3282 + for (gp = guest_envp, q = envp; gp;
3283 gp += sizeof(abi_ulong), q++) { 3283 gp += sizeof(abi_ulong), q++) {
3284 if (get_user_ual(addr, gp)) 3284 if (get_user_ual(addr, gp))
3285 goto execve_efault; 3285 goto execve_efault;