qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 3/4] linux-user: correct conversion of itimerspec st


From: Dejan Jovicevic
Subject: [Qemu-devel] [PATCH 3/4] linux-user: correct conversion of itimerspec structure
Date: Tue, 25 Oct 2016 13:46:16 +0200

__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 <address@hidden>
---
 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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]