All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1
@ 2014-06-29 12:14 riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 01/13] Add support for MAP_NORESERVE mmap flag riku.voipio
                   ` (13 more replies)
  0 siblings, 14 replies; 15+ messages in thread
From: riku.voipio @ 2014-06-29 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Riku Voipio, Anthony Liguori

From: Riku Voipio <riku.voipio@linaro.org>

The following changes since commit de6793e8c2a4d34e28e5ea385276249fc98109ec:

  Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20140627' into staging (2014-06-29 11:43:31 +0100)

are available in the git repository at:

  git://git.linaro.org/people/riku.voipio/qemu.git linux-user-for-upstream

for you to fetch changes up to f63eb01ac7a5b4437d5589ad4343527534bf9d0b:

  linux-user: support the SIOCGIFINDEX ioctl (2014-06-29 14:19:59 +0300)

Changes since v1 - dropped those patches from Paul that add new syscalls from
this round, since the won't compile with older libc's.

Christophe Lyon (1):
  Add support for MAP_NORESERVE mmap flag.

Paul Burton (11):
  linux-user: translate the result of getsockopt SO_TYPE
  linux-user: support SO_ACCEPTCONN getsockopt option
  linux-user: support SO_{SND, RCV}BUFFORCE setsockopt options
  linux-user: support SO_PASSSEC setsockopt option
  linux-user: allow NULL arguments to mount
  linux-user: support strace of epoll_create1
  linux-user: fix struct target_epoll_event layout for MIPS
  linux-user: respect timezone for settimeofday
  linux-user: allow NULL tv argument for settimeofday
  linux-user: support the KDSIGACCEPT ioctl
  linux-user: support the SIOCGIFINDEX ioctl

Wim Vander Schelden (1):
  linux-user: added fake open() for /proc/self/cmdline

 linux-user/ioctls.h       |   2 +
 linux-user/socket.h       |   5 ++
 linux-user/strace.list    |   3 +
 linux-user/syscall.c      | 215 ++++++++++++++++++++++++++++++++++++++++------
 linux-user/syscall_defs.h |   9 +-
 5 files changed, 207 insertions(+), 27 deletions(-)

-- 
2.0.0.rc2

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PULL v2 01/13] Add support for MAP_NORESERVE mmap flag.
  2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
@ 2014-06-29 12:14 ` riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 02/13] linux-user: added fake open() for /proc/self/cmdline riku.voipio
                   ` (12 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: riku.voipio @ 2014-06-29 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Christophe Lyon, Anthony Liguori

From: Christophe Lyon <christophe.lyon@linaro.org>

mmap_flags_tbl contains a list of mmap flags, and how to map them to
the target. This patch adds MAP_NORESERVE, which was missing to the
list.

Signed-off-by: Christophe Lyon <christophe.lyon@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 linux-user/syscall.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 7d74079..007d59d 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -3908,6 +3908,8 @@ static bitmask_transtbl mmap_flags_tbl[] = {
 	{ TARGET_MAP_DENYWRITE, TARGET_MAP_DENYWRITE, MAP_DENYWRITE, MAP_DENYWRITE },
 	{ TARGET_MAP_EXECUTABLE, TARGET_MAP_EXECUTABLE, MAP_EXECUTABLE, MAP_EXECUTABLE },
 	{ TARGET_MAP_LOCKED, TARGET_MAP_LOCKED, MAP_LOCKED, MAP_LOCKED },
+        { TARGET_MAP_NORESERVE, TARGET_MAP_NORESERVE, MAP_NORESERVE,
+          MAP_NORESERVE },
 	{ 0, 0, 0, 0 }
 };
 
-- 
2.0.0.rc2

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PULL v2 02/13] linux-user: added fake open() for /proc/self/cmdline
  2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 01/13] Add support for MAP_NORESERVE mmap flag riku.voipio
@ 2014-06-29 12:14 ` riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 03/13] linux-user: translate the result of getsockopt SO_TYPE riku.voipio
                   ` (11 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: riku.voipio @ 2014-06-29 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Wim Vander Schelden, Anthony Liguori

From: Wim Vander Schelden <wim@fixnum.org>

Signed-off-by: Wim Vander Schelden <wim@fixnum.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 linux-user/syscall.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 007d59d..5c175ba 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -4949,6 +4949,51 @@ int host_to_target_waitstatus(int status)
     return status;
 }
 
+static int open_self_cmdline(void *cpu_env, int fd)
+{
+    int fd_orig = -1;
+    bool word_skipped = false;
+
+    fd_orig = open("/proc/self/cmdline", O_RDONLY);
+    if (fd_orig < 0) {
+        return fd_orig;
+    }
+
+    while (true) {
+        ssize_t nb_read;
+        char buf[128];
+        char *cp_buf = buf;
+
+        nb_read = read(fd_orig, buf, sizeof(buf));
+        if (nb_read < 0) {
+            fd_orig = close(fd_orig);
+            return -1;
+        } else if (nb_read == 0) {
+            break;
+        }
+
+        if (!word_skipped) {
+            /* Skip the first string, which is the path to qemu-*-static
+               instead of the actual command. */
+            cp_buf = memchr(buf, 0, sizeof(buf));
+            if (cp_buf) {
+                /* Null byte found, skip one string */
+                cp_buf++;
+                nb_read -= cp_buf - buf;
+                word_skipped = true;
+            }
+        }
+
+        if (word_skipped) {
+            if (write(fd, cp_buf, nb_read) != nb_read) {
+                return -1;
+            }
+        }
+    }
+
+    return close(fd_orig);
+}
+
 static int open_self_maps(void *cpu_env, int fd)
 {
 #if defined(TARGET_ARM) || defined(TARGET_M68K) || defined(TARGET_UNICORE32)
@@ -5150,6 +5195,7 @@ static int do_open(void *cpu_env, const char *pathname, int flags, mode_t mode)
         { "maps", open_self_maps, is_proc_myself },
         { "stat", open_self_stat, is_proc_myself },
         { "auxv", open_self_auxv, is_proc_myself },
+        { "cmdline", open_self_cmdline, is_proc_myself },
 #if defined(HOST_WORDS_BIGENDIAN) != defined(TARGET_WORDS_BIGENDIAN)
         { "/proc/net/route", open_net_route, is_proc },
 #endif
-- 
2.0.0.rc2

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PULL v2 03/13] linux-user: translate the result of getsockopt SO_TYPE
  2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 01/13] Add support for MAP_NORESERVE mmap flag riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 02/13] linux-user: added fake open() for /proc/self/cmdline riku.voipio
@ 2014-06-29 12:14 ` riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 04/13] linux-user: support SO_ACCEPTCONN getsockopt option riku.voipio
                   ` (10 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: riku.voipio @ 2014-06-29 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Anthony Liguori, Paul Burton

From: Paul Burton <paul@archlinuxmips.org>

QEMU previously passed the result of the host syscall directly to the
target program. This is a problem if the host & target have different
representations of socket types, as is the case when running a MIPS
target program on an x86 host. Introduce a host_to_target_sock_type
helper function mirroring the existing target_to_host_sock_type, and
call it to translate the value provided by getsockopt when called for
the SO_TYPE option.

Signed-off-by: Paul Burton <paul@archlinuxmips.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 linux-user/syscall.c | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 5c175ba..8d13781 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -592,6 +592,37 @@ char *target_strerror(int err)
     return strerror(target_to_host_errno(err));
 }
 
+static inline int host_to_target_sock_type(int host_type)
+{
+    int target_type;
+
+    switch (host_type & 0xf /* SOCK_TYPE_MASK */) {
+    case SOCK_DGRAM:
+        target_type = TARGET_SOCK_DGRAM;
+        break;
+    case SOCK_STREAM:
+        target_type = TARGET_SOCK_STREAM;
+        break;
+    default:
+        target_type = host_type & 0xf /* SOCK_TYPE_MASK */;
+        break;
+    }
+
+#if defined(SOCK_CLOEXEC)
+    if (host_type & SOCK_CLOEXEC) {
+        target_type |= TARGET_SOCK_CLOEXEC;
+    }
+#endif
+
+#if defined(SOCK_NONBLOCK)
+    if (host_type & SOCK_NONBLOCK) {
+        target_type |= TARGET_SOCK_NONBLOCK;
+    }
+#endif
+
+    return target_type;
+}
+
 static abi_ulong target_brk;
 static abi_ulong target_original_brk;
 static abi_ulong brk_page;
@@ -1636,6 +1667,9 @@ static abi_long do_getsockopt(int sockfd, int level, int optname,
         ret = get_errno(getsockopt(sockfd, level, optname, &val, &lv));
         if (ret < 0)
             return ret;
+        if (optname == SO_TYPE) {
+            val = host_to_target_sock_type(val);
+        }
         if (len > lv)
             len = lv;
         if (len == 4) {
-- 
2.0.0.rc2

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PULL v2 04/13] linux-user: support SO_ACCEPTCONN getsockopt option
  2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
                   ` (2 preceding siblings ...)
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 03/13] linux-user: translate the result of getsockopt SO_TYPE riku.voipio
@ 2014-06-29 12:14 ` riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 05/13] linux-user: support SO_{SND, RCV}BUFFORCE setsockopt options riku.voipio
                   ` (9 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: riku.voipio @ 2014-06-29 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Anthony Liguori, Paul Burton

From: Paul Burton <paul@archlinuxmips.org>

Translate the SO_ACCEPTCONN option to the host value & execute the
syscall as expected.

Signed-off-by: Paul Burton <paul@archlinuxmips.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 linux-user/syscall.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 8d13781..b1e57df 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -1652,6 +1652,9 @@ static abi_long do_getsockopt(int sockfd, int level, int optname,
         case TARGET_SO_RCVLOWAT:
             optname = SO_RCVLOWAT;
             goto int_case;
+        case TARGET_SO_ACCEPTCONN:
+            optname = SO_ACCEPTCONN;
+            goto int_case;
         default:
             goto int_case;
         }
-- 
2.0.0.rc2

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PULL v2 05/13] linux-user: support SO_{SND, RCV}BUFFORCE setsockopt options
  2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
                   ` (3 preceding siblings ...)
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 04/13] linux-user: support SO_ACCEPTCONN getsockopt option riku.voipio
@ 2014-06-29 12:14 ` riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 06/13] linux-user: support SO_PASSSEC setsockopt option riku.voipio
                   ` (8 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: riku.voipio @ 2014-06-29 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Anthony Liguori, Paul Burton

From: Paul Burton <paul@archlinuxmips.org>

Translate the SO_SNDBUFFORCE & SO_RCVBUFFORCE options to setsockopt to
the host values & perform the syscall as expected, allowing use of those
options by target programs.

Signed-off-by: Paul Burton <paul@archlinuxmips.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 linux-user/syscall.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index b1e57df..bdc60fe 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -1502,9 +1502,15 @@ set_timeout:
         case TARGET_SO_SNDBUF:
 		optname = SO_SNDBUF;
 		break;
+        case TARGET_SO_SNDBUFFORCE:
+                optname = SO_SNDBUFFORCE;
+                break;
         case TARGET_SO_RCVBUF:
 		optname = SO_RCVBUF;
 		break;
+        case TARGET_SO_RCVBUFFORCE:
+                optname = SO_RCVBUFFORCE;
+                break;
         case TARGET_SO_KEEPALIVE:
 		optname = SO_KEEPALIVE;
 		break;
-- 
2.0.0.rc2

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PULL v2 06/13] linux-user: support SO_PASSSEC setsockopt option
  2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
                   ` (4 preceding siblings ...)
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 05/13] linux-user: support SO_{SND, RCV}BUFFORCE setsockopt options riku.voipio
@ 2014-06-29 12:14 ` riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 07/13] linux-user: allow NULL arguments to mount riku.voipio
                   ` (7 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: riku.voipio @ 2014-06-29 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Anthony Liguori, Paul Burton

From: Paul Burton <paul@archlinuxmips.org>

Translate the SO_PASSSEC option to setsockopt to the host value &
perform the syscall as expected, allowing use of the option by target
programs.

Signed-off-by: Paul Burton <paul@archlinuxmips.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 linux-user/socket.h  | 5 +++++
 linux-user/syscall.c | 3 +++
 2 files changed, 8 insertions(+)

diff --git a/linux-user/socket.h b/linux-user/socket.h
index ae17959..4dacae6 100644
--- a/linux-user/socket.h
+++ b/linux-user/socket.h
@@ -63,6 +63,7 @@
     #define TARGET_SO_PEERSEC              30
     #define TARGET_SO_SNDBUFFORCE          31
     #define TARGET_SO_RCVBUFFORCE          33
+    #define TARGET_SO_PASSSEC              34
 
     /** sock_type - Socket types
      *
@@ -242,6 +243,10 @@
 
     #define TARGET_SOCK_MAX (TARGET_SOCK_PACKET + 1)
     #define TARGET_SOCK_TYPE_MASK    0xf  /* Covers up to TARGET_SOCK_MAX-1. */
+
+    #define TARGET_SO_PASSSEC        31
+#else
+    #define TARGET_SO_PASSSEC        34
 #endif
 
     /* For setsockopt(2) */
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index bdc60fe..3971cb5 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -1531,6 +1531,9 @@ set_timeout:
         case TARGET_SO_PASSCRED:
 		optname = SO_PASSCRED;
 		break;
+        case TARGET_SO_PASSSEC:
+                optname = SO_PASSSEC;
+                break;
         case TARGET_SO_TIMESTAMP:
 		optname = SO_TIMESTAMP;
 		break;
-- 
2.0.0.rc2

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PULL v2 07/13] linux-user: allow NULL arguments to mount
  2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
                   ` (5 preceding siblings ...)
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 06/13] linux-user: support SO_PASSSEC setsockopt option riku.voipio
@ 2014-06-29 12:14 ` riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 08/13] linux-user: support strace of epoll_create1 riku.voipio
                   ` (6 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: riku.voipio @ 2014-06-29 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Anthony Liguori, Paul Burton

From: Paul Burton <paul@archlinuxmips.org>

Calls to the mount syscall can legitimately provide NULL as the value
for the source of filesystemtype arguments, which QEMU would previously
reject & return -EFAULT to the target program. An example of this is
remounting an already mounted filesystem with different properties.

Instead of rejecting such syscalls with -EFAULT, pass NULL along to the
kernel as the target program expects.

Additionally this patch fixes a potential memory leak when DEBUG_REMAP
is enabled and lock_user_string fails on the target or filesystemtype
arguments but a prior argument was non-NULL and already locked.

Since the patch already touched most lines of the TARGET_NR_mount case,
it fixes the indentation & coding style for good measure.

Signed-off-by: Paul Burton <paul@archlinuxmips.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 linux-user/syscall.c | 75 +++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 53 insertions(+), 22 deletions(-)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 3971cb5..4e48af6 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -5614,29 +5614,60 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
         break;
 #endif
     case TARGET_NR_mount:
-		{
-			/* need to look at the data field */
-			void *p2, *p3;
-			p = lock_user_string(arg1);
-			p2 = lock_user_string(arg2);
-			p3 = lock_user_string(arg3);
-                        if (!p || !p2 || !p3)
-                            ret = -TARGET_EFAULT;
-                        else {
-                            /* FIXME - arg5 should be locked, but it isn't clear how to
-                             * do that since it's not guaranteed to be a NULL-terminated
-                             * string.
-                             */
-                            if ( ! arg5 )
-                                ret = get_errno(mount(p, p2, p3, (unsigned long)arg4, NULL));
-                            else
-                                ret = get_errno(mount(p, p2, p3, (unsigned long)arg4, g2h(arg5)));
-                        }
+        {
+            /* need to look at the data field */
+            void *p2, *p3;
+
+            if (arg1) {
+                p = lock_user_string(arg1);
+                if (!p) {
+                    goto efault;
+                }
+            } else {
+                p = NULL;
+            }
+
+            p2 = lock_user_string(arg2);
+            if (!p2) {
+                if (arg1) {
+                    unlock_user(p, arg1, 0);
+                }
+                goto efault;
+            }
+
+            if (arg3) {
+                p3 = lock_user_string(arg3);
+                if (!p3) {
+                    if (arg1) {
                         unlock_user(p, arg1, 0);
-                        unlock_user(p2, arg2, 0);
-                        unlock_user(p3, arg3, 0);
-			break;
-		}
+                    }
+                    unlock_user(p2, arg2, 0);
+                    goto efault;
+                }
+            } else {
+                p3 = NULL;
+            }
+
+            /* FIXME - arg5 should be locked, but it isn't clear how to
+             * do that since it's not guaranteed to be a NULL-terminated
+             * string.
+             */
+            if (!arg5) {
+                ret = mount(p, p2, p3, (unsigned long)arg4, NULL);
+            } else {
+                ret = mount(p, p2, p3, (unsigned long)arg4, g2h(arg5));
+            }
+            ret = get_errno(ret);
+
+            if (arg1) {
+                unlock_user(p, arg1, 0);
+            }
+            unlock_user(p2, arg2, 0);
+            if (arg3) {
+                unlock_user(p3, arg3, 0);
+            }
+        }
+        break;
 #ifdef TARGET_NR_umount
     case TARGET_NR_umount:
         if (!(p = lock_user_string(arg1)))
-- 
2.0.0.rc2

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PULL v2 08/13] linux-user: support strace of epoll_create1
  2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
                   ` (6 preceding siblings ...)
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 07/13] linux-user: allow NULL arguments to mount riku.voipio
@ 2014-06-29 12:14 ` riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 09/13] linux-user: fix struct target_epoll_event layout for MIPS riku.voipio
                   ` (5 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: riku.voipio @ 2014-06-29 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Anthony Liguori, Paul Burton

From: Paul Burton <paul@archlinuxmips.org>

Add the epoll_create1 syscall to strace.list in order to display that
syscall when it occurs, rather than a message about the syscall being
unknown despite QEMU already implementing support for it.

Signed-off-by: Paul Burton <paul@archlinuxmips.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 linux-user/strace.list | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/linux-user/strace.list b/linux-user/strace.list
index cf5841a..fcb258d 100644
--- a/linux-user/strace.list
+++ b/linux-user/strace.list
@@ -114,6 +114,9 @@
 #ifdef TARGET_NR_epoll_create
 { TARGET_NR_epoll_create, "epoll_create" , NULL, NULL, NULL },
 #endif
+#ifdef TARGET_NR_epoll_create1
+{ TARGET_NR_epoll_create1, "epoll_create1" , NULL, NULL, NULL },
+#endif
 #ifdef TARGET_NR_epoll_ctl
 { TARGET_NR_epoll_ctl, "epoll_ctl" , NULL, NULL, NULL },
 #endif
-- 
2.0.0.rc2

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PULL v2 09/13] linux-user: fix struct target_epoll_event layout for MIPS
  2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
                   ` (7 preceding siblings ...)
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 08/13] linux-user: support strace of epoll_create1 riku.voipio
@ 2014-06-29 12:14 ` riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 10/13] linux-user: respect timezone for settimeofday riku.voipio
                   ` (4 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: riku.voipio @ 2014-06-29 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Anthony Liguori, Paul Burton

From: Paul Burton <paul@archlinuxmips.org>

MIPS requires the pad field to 64b-align the data field just as ARM
does.

Signed-off-by: Paul Burton <paul@archlinuxmips.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 linux-user/syscall_defs.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index 69c3982..e379b45 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -2528,7 +2528,7 @@ typedef union target_epoll_data {
 
 struct target_epoll_event {
     uint32_t events;
-#ifdef TARGET_ARM
+#if defined(TARGET_ARM) || defined(TARGET_MIPS) || defined(TARGET_MIPS64)
     uint32_t __pad;
 #endif
     target_epoll_data_t data;
-- 
2.0.0.rc2

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PULL v2 10/13] linux-user: respect timezone for settimeofday
  2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
                   ` (8 preceding siblings ...)
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 09/13] linux-user: fix struct target_epoll_event layout for MIPS riku.voipio
@ 2014-06-29 12:14 ` riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 11/13] linux-user: allow NULL tv argument " riku.voipio
                   ` (3 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: riku.voipio @ 2014-06-29 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Anthony Liguori, Paul Burton

From: Paul Burton <paul@archlinuxmips.org>

The settimeofday syscall accepts a tz argument indicating the desired
timezone to the kernel. QEMU previously ignored any argument provided
by the target program & always passed NULL to the kernel. Instead,
translate the argument & pass along the data userland provided.

Although this argument is described by the settimeofday man page as
obsolete, it is used by systemd as of version 213.

Signed-off-by: Paul Burton <paul@archlinuxmips.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 linux-user/syscall.c      | 29 ++++++++++++++++++++++++++++-
 linux-user/syscall_defs.h |  5 +++++
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 4e48af6..0ce1a4e 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -935,6 +935,23 @@ static inline abi_long copy_to_user_timeval(abi_ulong target_tv_addr,
     return 0;
 }
 
+static inline abi_long copy_from_user_timezone(struct timezone *tz,
+                                               abi_ulong target_tz_addr)
+{
+    struct target_timezone *target_tz;
+
+    if (!lock_user_struct(VERIFY_READ, target_tz, target_tz_addr, 1)) {
+        return -TARGET_EFAULT;
+    }
+
+    __get_user(tz->tz_minuteswest, &target_tz->tz_minuteswest);
+    __get_user(tz->tz_dsttime, &target_tz->tz_dsttime);
+
+    unlock_user_struct(target_tz, target_tz_addr, 0);
+
+    return 0;
+}
+
 #if defined(TARGET_NR_mq_open) && defined(__NR_mq_open)
 #include <mqueue.h>
 
@@ -6385,9 +6402,19 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
     case TARGET_NR_settimeofday:
         {
             struct timeval tv;
+            struct timezone tz, *ptz = NULL;
+
             if (copy_from_user_timeval(&tv, arg1))
                 goto efault;
-            ret = get_errno(settimeofday(&tv, NULL));
+
+            if (arg2) {
+                if (copy_from_user_timezone(&tz, arg2)) {
+                    goto efault;
+                }
+                ptz = &tz;
+            }
+
+            ret = get_errno(settimeofday(&tv, ptz));
         }
         break;
 #if defined(TARGET_NR_select)
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index e379b45..a1f1fce 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -165,6 +165,11 @@ struct target_timespec {
     abi_long tv_nsec;
 };
 
+struct target_timezone {
+    abi_int tz_minuteswest;
+    abi_int tz_dsttime;
+};
+
 struct target_itimerval {
     struct target_timeval it_interval;
     struct target_timeval it_value;
-- 
2.0.0.rc2

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PULL v2 11/13] linux-user: allow NULL tv argument for settimeofday
  2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
                   ` (9 preceding siblings ...)
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 10/13] linux-user: respect timezone for settimeofday riku.voipio
@ 2014-06-29 12:14 ` riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 12/13] linux-user: support the KDSIGACCEPT ioctl riku.voipio
                   ` (2 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: riku.voipio @ 2014-06-29 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Anthony Liguori, Paul Burton

From: Paul Burton <paul@archlinuxmips.org>

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: Paul Burton <paul@archlinuxmips.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 linux-user/syscall.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 0ce1a4e..8e2762b 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -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))
-                goto efault;
+            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)
-- 
2.0.0.rc2

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PULL v2 12/13] linux-user: support the KDSIGACCEPT ioctl
  2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
                   ` (10 preceding siblings ...)
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 11/13] linux-user: allow NULL tv argument " riku.voipio
@ 2014-06-29 12:14 ` riku.voipio
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 13/13] linux-user: support the SIOCGIFINDEX ioctl riku.voipio
  2014-06-29 17:09 ` [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 Peter Maydell
  13 siblings, 0 replies; 15+ messages in thread
From: riku.voipio @ 2014-06-29 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Anthony Liguori, Paul Burton

From: Paul Burton <paul@archlinuxmips.org>

Add a definition of the KDSIGACCEPT ioctl & allow its use by target
programs.

Signed-off-by: Paul Burton <paul@archlinuxmips.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 linux-user/ioctls.h       | 1 +
 linux-user/syscall.c      | 7 +++++++
 linux-user/syscall_defs.h | 1 +
 3 files changed, 9 insertions(+)

diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
index 309fb21..f278d3e 100644
--- a/linux-user/ioctls.h
+++ b/linux-user/ioctls.h
@@ -64,6 +64,7 @@
      IOCTL(KDSKBLED, 0, TYPE_INT)
      IOCTL(KDGETLED, 0, TYPE_INT)
      IOCTL(KDSETLED, 0, TYPE_INT)
+     IOCTL_SPECIAL(KDSIGACCEPT, 0, do_ioctl_kdsigaccept, TYPE_INT)
 
      IOCTL(BLKROSET, IOC_W, MK_PTR(TYPE_INT))
      IOCTL(BLKROGET, IOC_R, MK_PTR(TYPE_INT))
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 8e2762b..5a272d3 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -3689,6 +3689,13 @@ static abi_long do_ioctl_rt(const IOCTLEntry *ie, uint8_t *buf_temp,
     return ret;
 }
 
+static abi_long do_ioctl_kdsigaccept(const IOCTLEntry *ie, uint8_t *buf_temp,
+                                     int fd, abi_long cmd, abi_long arg)
+{
+    int sig = target_to_host_signal(arg);
+    return get_errno(ioctl(fd, ie->host_cmd, sig));
+}
+
 static IOCTLEntry ioctl_entries[] = {
 #define IOCTL(cmd, access, ...) \
     { TARGET_ ## cmd, cmd, #cmd, access, 0, {  __VA_ARGS__ } },
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index a1f1fce..4adfd3a 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -831,6 +831,7 @@ struct target_pollfd {
 #define TARGET_KDSKBLED        0x4B65	/* set led flags (not lights) */
 #define TARGET_KDGETLED        0x4B31	/* return current led state */
 #define TARGET_KDSETLED        0x4B32	/* set led state [lights, not flags] */
+#define TARGET_KDSIGACCEPT     0x4B4E
 
 #define TARGET_SIOCATMARK      0x8905
 
-- 
2.0.0.rc2

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PULL v2 13/13] linux-user: support the SIOCGIFINDEX ioctl
  2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
                   ` (11 preceding siblings ...)
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 12/13] linux-user: support the KDSIGACCEPT ioctl riku.voipio
@ 2014-06-29 12:14 ` riku.voipio
  2014-06-29 17:09 ` [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 Peter Maydell
  13 siblings, 0 replies; 15+ messages in thread
From: riku.voipio @ 2014-06-29 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Anthony Liguori, Paul Burton

From: Paul Burton <paul@archlinuxmips.org>

Add a definition of the SIOCGIFINDEX ioctl, allowing its use by target
programs.

Signed-off-by: Paul Burton <paul@archlinuxmips.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 linux-user/ioctls.h       | 1 +
 linux-user/syscall_defs.h | 1 +
 2 files changed, 2 insertions(+)

diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
index f278d3e..07a00da 100644
--- a/linux-user/ioctls.h
+++ b/linux-user/ioctls.h
@@ -118,6 +118,7 @@
   IOCTL(SIOCSIFMEM, IOC_W, MK_PTR(MK_STRUCT(STRUCT_ptr_ifreq)))
   IOCTL(SIOCADDMULTI, IOC_W, MK_PTR(MK_STRUCT(STRUCT_sockaddr_ifreq)))
   IOCTL(SIOCDELMULTI, IOC_W, MK_PTR(MK_STRUCT(STRUCT_sockaddr_ifreq)))
+  IOCTL(SIOCGIFINDEX, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_sockaddr_ifreq)))
   IOCTL(SIOCSIFLINK, 0, TYPE_NULL)
   IOCTL_SPECIAL(SIOCGIFCONF, IOC_W | IOC_R, do_ioctl_ifconf,
                 MK_PTR(MK_STRUCT(STRUCT_ifconf)))
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index 4adfd3a..8563027 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -865,6 +865,7 @@ struct target_pollfd {
 #define TARGET_SIOCSIFSLAVE    0x8930
 #define TARGET_SIOCADDMULTI    0x8931          /* Multicast address lists      */
 #define TARGET_SIOCDELMULTI    0x8932
+#define TARGET_SIOCGIFINDEX    0x8933
 
 /* Bridging control calls */
 #define TARGET_SIOCGIFBR       0x8940          /* Bridging support             */
-- 
2.0.0.rc2

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1
  2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
                   ` (12 preceding siblings ...)
  2014-06-29 12:14 ` [Qemu-devel] [PULL v2 13/13] linux-user: support the SIOCGIFINDEX ioctl riku.voipio
@ 2014-06-29 17:09 ` Peter Maydell
  13 siblings, 0 replies; 15+ messages in thread
From: Peter Maydell @ 2014-06-29 17:09 UTC (permalink / raw)
  To: Riku Voipio; +Cc: QEMU Developers, Anthony Liguori

On 29 June 2014 13:14,  <riku.voipio@linaro.org> wrote:
> From: Riku Voipio <riku.voipio@linaro.org>
>
> The following changes since commit de6793e8c2a4d34e28e5ea385276249fc98109ec:
>
>   Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20140627' into staging (2014-06-29 11:43:31 +0100)
>
> are available in the git repository at:
>
>   git://git.linaro.org/people/riku.voipio/qemu.git linux-user-for-upstream
>
> for you to fetch changes up to f63eb01ac7a5b4437d5589ad4343527534bf9d0b:
>
>   linux-user: support the SIOCGIFINDEX ioctl (2014-06-29 14:19:59 +0300)
>
> Changes since v1 - dropped those patches from Paul that add new syscalls from
> this round, since the won't compile with older libc's.

Applied, thanks.

-- PMM

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2014-06-29 17:09 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-29 12:14 [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 riku.voipio
2014-06-29 12:14 ` [Qemu-devel] [PULL v2 01/13] Add support for MAP_NORESERVE mmap flag riku.voipio
2014-06-29 12:14 ` [Qemu-devel] [PULL v2 02/13] linux-user: added fake open() for /proc/self/cmdline riku.voipio
2014-06-29 12:14 ` [Qemu-devel] [PULL v2 03/13] linux-user: translate the result of getsockopt SO_TYPE riku.voipio
2014-06-29 12:14 ` [Qemu-devel] [PULL v2 04/13] linux-user: support SO_ACCEPTCONN getsockopt option riku.voipio
2014-06-29 12:14 ` [Qemu-devel] [PULL v2 05/13] linux-user: support SO_{SND, RCV}BUFFORCE setsockopt options riku.voipio
2014-06-29 12:14 ` [Qemu-devel] [PULL v2 06/13] linux-user: support SO_PASSSEC setsockopt option riku.voipio
2014-06-29 12:14 ` [Qemu-devel] [PULL v2 07/13] linux-user: allow NULL arguments to mount riku.voipio
2014-06-29 12:14 ` [Qemu-devel] [PULL v2 08/13] linux-user: support strace of epoll_create1 riku.voipio
2014-06-29 12:14 ` [Qemu-devel] [PULL v2 09/13] linux-user: fix struct target_epoll_event layout for MIPS riku.voipio
2014-06-29 12:14 ` [Qemu-devel] [PULL v2 10/13] linux-user: respect timezone for settimeofday riku.voipio
2014-06-29 12:14 ` [Qemu-devel] [PULL v2 11/13] linux-user: allow NULL tv argument " riku.voipio
2014-06-29 12:14 ` [Qemu-devel] [PULL v2 12/13] linux-user: support the KDSIGACCEPT ioctl riku.voipio
2014-06-29 12:14 ` [Qemu-devel] [PULL v2 13/13] linux-user: support the SIOCGIFINDEX ioctl riku.voipio
2014-06-29 17:09 ` [Qemu-devel] [PULL v2 00/13] linux-user changes for 2.1 Peter Maydell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.