mirror of https://github.com/xemu-project/xemu.git
linux-user: Flush out implementation of gettimeofday
The first argument, timeval, is allowed to be NULL. The second argument, timezone, was missing. While its use is deprecated, it is still present in the syscall. Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20200213032223.14643-6-richard.henderson@linaro.org> [lv: add "#if defined(TARGET_NR_gettimeofday)"] Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
bf02adcd88
commit
a52f5f87be
|
@ -1273,6 +1273,25 @@ static inline abi_long host_to_target_timespec64(abi_ulong target_addr,
|
|||
return 0;
|
||||
}
|
||||
|
||||
#if defined(TARGET_NR_gettimeofday)
|
||||
static inline abi_long copy_to_user_timezone(abi_ulong target_tz_addr,
|
||||
struct timezone *tz)
|
||||
{
|
||||
struct target_timezone *target_tz;
|
||||
|
||||
if (!lock_user_struct(VERIFY_WRITE, target_tz, target_tz_addr, 1)) {
|
||||
return -TARGET_EFAULT;
|
||||
}
|
||||
|
||||
__put_user(tz->tz_minuteswest, &target_tz->tz_minuteswest);
|
||||
__put_user(tz->tz_dsttime, &target_tz->tz_dsttime);
|
||||
|
||||
unlock_user_struct(target_tz, target_tz_addr, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_NR_settimeofday)
|
||||
static inline abi_long copy_from_user_timezone(struct timezone *tz,
|
||||
abi_ulong target_tz_addr)
|
||||
|
@ -8710,10 +8729,16 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
|
|||
case TARGET_NR_gettimeofday:
|
||||
{
|
||||
struct timeval tv;
|
||||
ret = get_errno(gettimeofday(&tv, NULL));
|
||||
struct timezone tz;
|
||||
|
||||
ret = get_errno(gettimeofday(&tv, &tz));
|
||||
if (!is_error(ret)) {
|
||||
if (copy_to_user_timeval(arg1, &tv))
|
||||
if (arg1 && copy_to_user_timeval(arg1, &tv)) {
|
||||
return -TARGET_EFAULT;
|
||||
}
|
||||
if (arg2 && copy_to_user_timezone(arg2, &tz)) {
|
||||
return -TARGET_EFAULT;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
|
|
Loading…
Reference in New Issue