Commit e55744879fa56bdd257beb05de3163c917470731
1 parent
f2f1ac82
Fix previous Linux userland emulation breakage.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2423 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
17 additions
and
2 deletions
linux-user/syscall.c
| ... | ... | @@ -2952,7 +2952,9 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, |
| 2952 | 2952 | #endif |
| 2953 | 2953 | |
| 2954 | 2954 | case TARGET_NR_syslog: |
| 2955 | - ret = get_errno(sys_syslog((int)arg1, (char*)arg2, (int)arg3)); | |
| 2955 | + p = lock_user_string(arg2); | |
| 2956 | + ret = get_errno(sys_syslog((int)arg1, p, (int)arg3)); | |
| 2957 | + unlock_user(p, arg2, 0); | |
| 2956 | 2958 | break; |
| 2957 | 2959 | |
| 2958 | 2960 | case TARGET_NR_setitimer: |
| ... | ... | @@ -3423,7 +3425,20 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, |
| 3423 | 3425 | case TARGET_NR_nfsservctl: |
| 3424 | 3426 | goto unimplemented; |
| 3425 | 3427 | case TARGET_NR_prctl: |
| 3426 | - ret = get_errno(prctl(arg1, arg2, arg3, arg4, arg5)); | |
| 3428 | + switch (arg1) | |
| 3429 | + { | |
| 3430 | + case PR_GET_PDEATHSIG: | |
| 3431 | + { | |
| 3432 | + int deathsig; | |
| 3433 | + ret = get_errno(prctl(arg1, &deathsig, arg3, arg4, arg5)); | |
| 3434 | + if (!is_error(ret) && arg2) | |
| 3435 | + tput32(arg2, deathsig); | |
| 3436 | + } | |
| 3437 | + break; | |
| 3438 | + default: | |
| 3439 | + ret = get_errno(prctl(arg1, arg2, arg3, arg4, arg5)); | |
| 3440 | + break; | |
| 3441 | + } | |
| 3427 | 3442 | break; |
| 3428 | 3443 | #ifdef TARGET_NR_pread |
| 3429 | 3444 | case TARGET_NR_pread: | ... | ... |