Re: [Qemu-devel] [PATCH v2] linux-user: Support the accept4 socketcall

2014-01-08 Thread Riku Voipio
Hi,

On Mon, Jan 06, 2014 at 05:15:50PM +0100, André Hentschel wrote:
 From: André Hentschel n...@dawncrow.de
 Cc: Riku Voipio riku.voi...@iki.fi
 Signed-off-by: André Hentschel n...@dawncrow.de
 ---
 See 
 https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/net.h
  for the value.

Thanks, applied to the linux-user branch. I'm still checking if there
are other linux-user patches that need submitting upstream before
sending a pull request.

Riku

 
  linux-user/syscall.c  | 16 
  linux-user/syscall_defs.h |  1 +
  2 files changed, 17 insertions(+)
 
 diff --git a/linux-user/syscall.c b/linux-user/syscall.c
 index efd1453..1a848a6 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;
 +int 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
 -- 
 1.8.1.2
 



Re: [Qemu-devel] [PATCH v2] linux-user: Support the accept4 socketcall

2014-01-06 Thread Laurent Vivier

 Le 6 janvier 2014 à 17:15, André Hentschel n...@dawncrow.de a écrit :


 From: André Hentschel n...@dawncrow.de
 Cc: Riku Voipio riku.voi...@iki.fi
 Signed-off-by: André Hentschel n...@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(+)

 diff --git a/linux-user/syscall.c b/linux-user/syscall.c
 index efd1453..1a848a6 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;
 + int 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)) {

I'm not sure, but I think as get_user_ual() get an abi_ulong, flags should be an
abi_ulong. Peter ?

 + 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
 --
 1.8.1.2



Re: [Qemu-devel] [PATCH v2] linux-user: Support the accept4 socketcall

2014-01-06 Thread Peter Maydell
On 6 January 2014 17:07, Laurent Vivier laur...@vivier.eu wrote:

 Le 6 janvier 2014 à 17:15, André Hentschel n...@dawncrow.de a écrit :


 From: André Hentschel n...@dawncrow.de
 Cc: Riku Voipio riku.voi...@iki.fi
 Signed-off-by: André Hentschel n...@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(+)

 diff --git a/linux-user/syscall.c b/linux-user/syscall.c
 index efd1453..1a848a6 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;
 + int 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)) {

 I'm not sure, but I think as get_user_ual() get an abi_ulong, flags should
 be an abi_ulong.

It's not required for correctness (since get_user_ual
always does an abi_ulong sized access of guest memory
regardless of the size of its first argument) but I
think it would be clearer, yes.

thanks
-- PMM