Re: [Qemu-devel] [PATCH v2] linux-user: Support the accept4 socketcall
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
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
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