Third argument represents lenght not second. If second argument is NULL it should be passed without using lock_user function which would, in that case, return EFAULT, and system call supports passing NULL as second argument.
Signed-off-by: Lena Djokic <lena.djo...@rt-rk.com> --- linux-user/syscall.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 61c4126..3faf4f0 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -9426,7 +9426,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, #if defined(TARGET_NR_syslog) case TARGET_NR_syslog: { - int len = arg2; + int len = arg3; switch (arg1) { case TARGET_SYSLOG_ACTION_CLOSE: /* Close log */ @@ -9450,13 +9450,13 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, goto fail; } ret = 0; - if (len == 0) { - break; - } - p = lock_user(VERIFY_WRITE, arg2, arg3, 0); - if (!p) { - ret = -TARGET_EFAULT; - goto fail; + p = NULL; + if (arg2) { + p = lock_user(VERIFY_WRITE, arg2, arg3, 0); + if (!p) { + ret = -TARGET_EFAULT; + goto fail; + } } ret = get_errno(sys_syslog((int)arg1, p, (int)arg3)); unlock_user(p, arg2, arg3); -- 2.7.4