Commit b67d8031 authored by Paul Burton's avatar Paul Burton Committed by Riku Voipio
Browse files

linux-user: allow NULL tv argument for settimeofday



The tv argument to the settimeofday syscall is allowed to be NULL, if
the program only wishes to provide the timezone. QEMU previously
returned -EFAULT when tv was NULL. Instead, execute the syscall &
provide NULL to the kernel as the target program expected.

Signed-off-by: default avatarPaul Burton <paul@archlinuxmips.org>
Signed-off-by: default avatarRiku Voipio <riku.voipio@linaro.org>
parent ef4467e9
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -6401,11 +6401,15 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
        break;
    case TARGET_NR_settimeofday:
        {
            struct timeval tv;
            struct timeval tv, *ptv = NULL;
            struct timezone tz, *ptz = NULL;

            if (copy_from_user_timeval(&tv, arg1))
            if (arg1) {
                if (copy_from_user_timeval(&tv, arg1)) {
                    goto efault;
                }
                ptv = &tv;
            }

            if (arg2) {
                if (copy_from_user_timezone(&tz, arg2)) {
@@ -6414,7 +6418,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
                ptz = &tz;
            }

            ret = get_errno(settimeofday(&tv, ptz));
            ret = get_errno(settimeofday(ptv, ptz));
        }
        break;
#if defined(TARGET_NR_select)