diff mbox

[v3] linux-user: Support the accept4 socketcall

Message ID 52CB019C.10000@dawncrow.de
State New
Headers show

Commit Message

André Zwing Jan. 6, 2014, 7:18 p.m. UTC
From: André Hentschel <nerv@dawncrow.de>
Cc: Riku Voipio <riku.voipio@iki.fi>
Signed-off-by: André Hentschel <nerv@dawncrow.de>
---
See https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/net.h for the value.

 linux-user/syscall.c      | 16 ++++++++++++++++
 linux-user/syscall_defs.h |  1 +
 2 files changed, 17 insertions(+)

Comments

Peter Maydell Jan. 6, 2014, 8:22 p.m. UTC | #1
On 6 January 2014 19:18, André Hentschel <nerv@dawncrow.de> wrote:
> From: André Hentschel <nerv@dawncrow.de>
> Cc: Riku Voipio <riku.voipio@iki.fi>
> Signed-off-by: André Hentschel <nerv@dawncrow.de>

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

thanks
-- PMM
Erik de Castro Lopo Jan. 6, 2014, 8:48 p.m. UTC | #2
André Hentschel wrote:

> From: André Hentschel <nerv@dawncrow.de>
> Cc: Riku Voipio <riku.voipio@iki.fi>
> Signed-off-by: André Hentschel <nerv@dawncrow.de>


Reviewed-by: Erik de Castro Lopo <erikd@mega-nerd.com>
Laurent Vivier Jan. 7, 2014, 7:36 p.m. UTC | #3
Le 06/01/2014 20:18, André Hentschel a écrit :
> From: André Hentschel <nerv@dawncrow.de>
> Cc: Riku Voipio <riku.voipio@iki.fi>
> Signed-off-by: André Hentschel <nerv@dawncrow.de>
>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
diff mbox

Patch

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index efd1453..0ac05b8 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -2245,6 +2245,22 @@  static abi_long do_socketcall(int num, abi_ulong vptr)
             ret = do_accept4(sockfd, target_addr, target_addrlen, 0);
         }
         break;
+    case SOCKOP_accept4:
+        {
+            abi_ulong sockfd;
+            abi_ulong target_addr, target_addrlen;
+            abi_ulong flags;
+
+            if (get_user_ual(sockfd, vptr)
+                || get_user_ual(target_addr, vptr + n)
+                || get_user_ual(target_addrlen, vptr + 2 * n)
+                || get_user_ual(flags, vptr + 3 * n)) {
+                return -TARGET_EFAULT;
+            }
+
+            ret = do_accept4(sockfd, target_addr, target_addrlen, flags);
+        }
+        break;
     case SOCKOP_getsockname:
         {
             abi_ulong sockfd;
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index cf08db5..ae30476 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -27,6 +27,7 @@ 
 #define SOCKOP_getsockopt       15
 #define SOCKOP_sendmsg          16
 #define SOCKOP_recvmsg          17
+#define SOCKOP_accept4          18
 
 #define IPCOP_semop		1
 #define IPCOP_semget		2