__get_user() and __put_user() have certain advantages over tswapal(). There was also a previous commit for equivalent change for converting structure timespec.
Signed-off-by: Dejan Jovicevic <dejan.jovice...@rt-rk.com> --- linux-user/syscall.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 898f774..b4f53b1 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -6731,42 +6731,37 @@ static inline abi_long host_to_target_timespec(abi_ulong target_addr, return 0; } -static inline abi_long target_to_host_itimerspec(struct itimerspec *host_itspec, +static inline abi_long target_to_host_itimerspec(struct itimerspec *host_its, abi_ulong target_addr) { - struct target_itimerspec *target_itspec; + struct target_itimerspec *target_its; - if (!lock_user_struct(VERIFY_READ, target_itspec, target_addr, 1)) { + if (!lock_user_struct(VERIFY_READ, target_its, target_addr, 1)) { return -TARGET_EFAULT; } - - host_itspec->it_interval.tv_sec = - tswapal(target_itspec->it_interval.tv_sec); - host_itspec->it_interval.tv_nsec = - tswapal(target_itspec->it_interval.tv_nsec); - host_itspec->it_value.tv_sec = tswapal(target_itspec->it_value.tv_sec); - host_itspec->it_value.tv_nsec = tswapal(target_itspec->it_value.tv_nsec); - - unlock_user_struct(target_itspec, target_addr, 1); + __get_user(host_its->it_interval.tv_sec, &target_its->it_interval.tv_sec); + __get_user(host_its->it_interval.tv_nsec, + &target_its->it_interval.tv_nsec); + __get_user(host_its->it_value.tv_sec, &target_its->it_value.tv_sec); + __get_user(host_its->it_value.tv_nsec, &target_its->it_value.tv_nsec); + unlock_user_struct(target_its, target_addr, 1); return 0; } static inline abi_long host_to_target_itimerspec(abi_ulong target_addr, struct itimerspec *host_its) { - struct target_itimerspec *target_itspec; + struct target_itimerspec *target_its; - if (!lock_user_struct(VERIFY_WRITE, target_itspec, target_addr, 0)) { + if (!lock_user_struct(VERIFY_WRITE, target_its, target_addr, 0)) { return -TARGET_EFAULT; } - - target_itspec->it_interval.tv_sec = tswapal(host_its->it_interval.tv_sec); - target_itspec->it_interval.tv_nsec = tswapal(host_its->it_interval.tv_nsec); - - target_itspec->it_value.tv_sec = tswapal(host_its->it_value.tv_sec); - target_itspec->it_value.tv_nsec = tswapal(host_its->it_value.tv_nsec); - - unlock_user_struct(target_itspec, target_addr, 0); + __put_user(host_its->it_interval.tv_sec, &target_its->it_interval.tv_sec); + __put_user(host_its->it_interval.tv_nsec, + &target_its->it_interval.tv_nsec); + __put_user(host_its->it_value.tv_sec, &target_its->it_value.tv_sec); + __put_user(host_its->it_value.tv_nsec, &target_its->it_value.tv_nsec); + unlock_user_struct(target_its, target_addr, 0); return 0; } -- 1.9.1