From patchwork Mon Aug 20 17:15:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 959845 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=vivier.eu Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41vLF42t8Pz9s4v for ; Tue, 21 Aug 2018 03:21:12 +1000 (AEST) Received: from localhost ([::1]:48286 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frnrZ-0001zY-VO for incoming@patchwork.ozlabs.org; Mon, 20 Aug 2018 13:21:10 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49074) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frnmz-0007B9-M9 for qemu-devel@nongnu.org; Mon, 20 Aug 2018 13:16:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frnmv-0003CP-AT for qemu-devel@nongnu.org; Mon, 20 Aug 2018 13:16:25 -0400 Received: from mout.kundenserver.de ([212.227.126.133]:42567) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1frnmu-0003BZ-Up for qemu-devel@nongnu.org; Mon, 20 Aug 2018 13:16:21 -0400 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MC5H2-1fiy6603Ci-008oCd; Mon, 20 Aug 2018 19:16:10 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Mon, 20 Aug 2018 19:15:54 +0200 Message-Id: <20180820171557.7734-2-laurent@vivier.eu> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180820171557.7734-1-laurent@vivier.eu> References: <20180820171557.7734-1-laurent@vivier.eu> X-Provags-ID: V03:K1:GgbRk838MvCttP9xketnCjfjh1cQzbB0iCtRECwSxhreiXyC3gP MHXk7PjSuO2oDBVQZsGbo+uZH71Pg1d1buot7+O7otp2VbnGKZB2+e8YEt8JICFwTdc+DmD lzjhCyffN3KCtVARoTTuUy3PKTXyE+KUCB7qqAoi2KHWiVcpBxN6a2B/qJI9WFj7ih+s4M8 A26B85ZXBaIWsfFqUthjA== X-UI-Out-Filterresults: notjunk:1; V01:K0:Qbmaj38etoI=:dURDqSErkndKlW4a/1s5wy 8SnVRANG7kSXDAuGMnFDKNmqLLw3L4Oid+042fkp5/cqcLNCIldIwtTtvJjKYgUfQEEAg67SQ E/qy0gvxWF4DZsxe9dJSLZuEWWoy/9OeNKHn4GJWkDl2rEWnpfAeHSOeBud2djrifNdL9K/3h P5BFhyKAjjVCROXpVmI49GWhJq1xaGyx8A5GhwuxXPBFpDPtoYHjZmzRadDaQlq5PI2wXT36L QZ1PfPvhKdM300rqXXUCvmfUiinLiUOoiigiA0cGTESt7UvzZchKnQfz0rzo+L1P5HpQQu16G 4oVj5ER2ZY8mXahETzL2H7qHfGISoCDaJuFUK9euwzUItJL1VJsofhtxBd/x/A3W5x7hcknw4 lze0vXZeZKoHS5jLCZ72WZlP/oAC5JL+h5YBvj9gXb49d8hzgp/9eydT0XksCEvP1gDrSD1D6 SrTTjR5DL9nejrDL+IV8KCHAzfVFSG6ZqXS1VQX6jE1Mq+imCc/Vphu1esDqL6f2n7P5iij/U x5PuAXSYCwlWxWtoRNCA3ij68IuimaDUktERXrzNbPkL+dEAESobghPStESgdwiT2IsJ5aUqU dJPD/xsrDRIJNlOimvhIIograzAh2K0IERoQhgfAlhxpzKAmShppRv0ncqXjAIr6hExdu39oZ 573KAO/SthramcJAWKJqDNRzw9n5mP+dc+qzz51LEDNrpH1iNFG+nL6aHQBfikeR8Xrs= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.126.133 Subject: [Qemu-devel] [PATCH v2 1/4] linux-user: fix recvmsg()/recvfrom() with netlink and MSG_TRUNC X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Riku Voipio , Laurent Vivier Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" If recvmsg()/recvfrom() are used with the MSG_TRUNC flag, they return the real length even if it was longer than the passed buffer. So when we translate the buffer we must check we don't go beyond the end of the buffer. Bug: https://github.com/vivier/qemu-m68k/issues/33 Reported-by: John Paul Adrian Glaubitz Signed-off-by: Laurent Vivier Reviewed-by: Peter Maydell --- linux-user/syscall.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index bb42a225eb..a62cd15dc7 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -3892,7 +3892,7 @@ static abi_long do_sendrecvmsg_locked(int fd, struct target_msghdr *msgp, len = ret; if (fd_trans_host_to_target_data(fd)) { ret = fd_trans_host_to_target_data(fd)(msg.msg_iov->iov_base, - len); + MIN(msg.msg_iov->iov_len, len)); } else { ret = host_to_target_cmsg(msgp, &msg); } @@ -4169,7 +4169,12 @@ static abi_long do_recvfrom(int fd, abi_ulong msg, size_t len, int flags, } if (!is_error(ret)) { if (fd_trans_host_to_target_data(fd)) { - ret = fd_trans_host_to_target_data(fd)(host_msg, ret); + abi_long trans; + trans = fd_trans_host_to_target_data(fd)(host_msg, MIN(ret, len)); + if (is_error(trans)) { + ret = trans; + goto fail; + } } if (target_addr) { host_to_target_sockaddr(target_addr, addr, addrlen); From patchwork Mon Aug 20 17:15:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 959842 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=vivier.eu Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41vL8L5KWLz9s8T for ; Tue, 21 Aug 2018 03:17:06 +1000 (AEST) Received: from localhost ([::1]:48265 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frnnc-0007D7-9Q for incoming@patchwork.ozlabs.org; Mon, 20 Aug 2018 13:17:04 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49086) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frnn0-0007Bf-8g for qemu-devel@nongnu.org; Mon, 20 Aug 2018 13:16:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frnmv-0003CO-AU for qemu-devel@nongnu.org; Mon, 20 Aug 2018 13:16:26 -0400 Received: from mout.kundenserver.de ([212.227.126.133]:35230) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1frnmu-0003Bb-V7 for qemu-devel@nongnu.org; Mon, 20 Aug 2018 13:16:21 -0400 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MXTlq-1fNQXC0YGE-00WY9B; Mon, 20 Aug 2018 19:16:12 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Mon, 20 Aug 2018 19:15:56 +0200 Message-Id: <20180820171557.7734-4-laurent@vivier.eu> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180820171557.7734-1-laurent@vivier.eu> References: <20180820171557.7734-1-laurent@vivier.eu> X-Provags-ID: V03:K1:PnNR/pidQhEQkXXBcazfhKMpGmW/yrflNXfON0z6cq10GxsPPhr gnZweZYzo13N94WtL92hEhrQs6pW0fPrvCnWCgMY3MzkbS63mlPUxHOmiZ1PDdEz6pEb7Aw 2b7TbC9OLjfwUsTzZIVgFGmLlJRxv86i93vXWFUg+CYYyUUvuE88XOrXzr0d7fb5DvZ/lbc JSItiUCnllnEbuGMiuscw== X-UI-Out-Filterresults: notjunk:1; V01:K0:jzCzmvih8ZU=:BJN70TBSFdgMkM6k79Mt10 19dfGcODqlq3Cl8i8XwcF+u29Wy2EhgJ6WE/x2mzeoB2Qk4b9vfLS/r4deSO8d2NDTAkwop49 xhriDArnsihO1Jhaono3+zFoxf84gA7kTYp6esD3j9Ef/loK5vPxvX40mlRWQen/1r2CKPxas bKgZaaYfjCuG837TUcf3Oc+iPOCs/D350ZovIC+mx08CfvSKYqUQPfBE02ZHCgkRnhsSzG2nf 4rIk1IsO7Ak9ZVqutts/GfAj2UeZTvT8R85rd1BE0PHNcgqdknbWngq4PZl9PZWyfEolKJFFM Jg5VdbUur1K3NByJqVwxOiW7/s4YMbfn9e9foul4I54s5BVa+sakKPWcH93zcEMcG5wubkBcb fEBYUzPotiIlzm0Ysi3uehmMf875mXOet+eSyyjGheFgxhv7wb7+k9U4vVQ+pFPtzGSJg49Hm nWKkN/z0VYvKUR0XoBwJzNeZcON+1ika8kTkFnV0nCJafGVkTF9DE3bdZw5NJp9j+ZKiQ4Js2 gkmXh/6z1vE07n2uRho98OzFe603jgis/wE6HP/uQfrGPkoFGTTKgSp/MhmLtUrpQJWphFmEt Ft8aQPKYSqC0Etr/6AaVXNT6PnE83YuvumBvkMiTXeHditK6l1emtzI8eRn1fh+prt8Nq88MH t7ps5sOh3uLLhXnQYSK7StAp8Oz5ESC/PohgIJQO7Gkkan/arQGEW2J9ymRezXd+H1zo= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.126.133 Subject: [Qemu-devel] [PATCH v2 3/4] linux-user: update netlink route types X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Riku Voipio , Laurent Vivier Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add RTA_PREF and RTA_CACHEINFO. Fix following errors when we start gedit: Unknown host RTA type: 12 Unknown host RTA type: 20 Signed-off-by: Laurent Vivier Reviewed-by: Peter Maydell --- linux-user/syscall.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index a2395eb1b6..197010945f 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -2690,12 +2690,17 @@ static abi_long host_to_target_data_addr_rtattr(struct rtattr *rtattr) static abi_long host_to_target_data_route_rtattr(struct rtattr *rtattr) { uint32_t *u32; + struct rta_cacheinfo *ci; + switch (rtattr->rta_type) { /* binary: depends on family type */ case QEMU_RTA_GATEWAY: case QEMU_RTA_DST: case QEMU_RTA_PREFSRC: break; + /* u8 */ + case QEMU_RTA_PREF: + break; /* u32 */ case QEMU_RTA_PRIORITY: case QEMU_RTA_TABLE: @@ -2703,6 +2708,20 @@ static abi_long host_to_target_data_route_rtattr(struct rtattr *rtattr) u32 = RTA_DATA(rtattr); *u32 = tswap32(*u32); break; + /* struct rta_cacheinfo */ + case QEMU_RTA_CACHEINFO: + ci = RTA_DATA(rtattr); + ci->rta_clntref = tswap32(ci->rta_clntref); + ci->rta_lastuse = tswap32(ci->rta_lastuse); + ci->rta_expires = tswap32(ci->rta_expires); + ci->rta_error = tswap32(ci->rta_error); + ci->rta_used = tswap32(ci->rta_used); +#if defined(RTNETLINK_HAVE_PEERINFO) + ci->rta_id = tswap32(ci->rta_id); + ci->rta_ts = tswap32(ci->rta_ts); + ci->rta_tsage = tswap32(ci->rta_tsage); +#endif + break; default: gemu_log("Unknown host RTA type: %d\n", rtattr->rta_type); break; From patchwork Mon Aug 20 17:15:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 959844 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=vivier.eu Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41vLCG3mrxz9s4v for ; Tue, 21 Aug 2018 03:19:38 +1000 (AEST) Received: from localhost ([::1]:48275 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frnq4-0000XV-6N for incoming@patchwork.ozlabs.org; Mon, 20 Aug 2018 13:19:36 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49104) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frnn2-0007Cl-1j for qemu-devel@nongnu.org; Mon, 20 Aug 2018 13:16:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frnmx-0003Du-94 for qemu-devel@nongnu.org; Mon, 20 Aug 2018 13:16:28 -0400 Received: from mout.kundenserver.de ([212.227.126.187]:44293) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1frnmw-0003DF-V8 for qemu-devel@nongnu.org; Mon, 20 Aug 2018 13:16:23 -0400 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.167]) with ESMTPSA (Nemesis) id 0LyQ4I-1fwUIt0tfi-015stl; Mon, 20 Aug 2018 19:16:13 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Mon, 20 Aug 2018 19:15:57 +0200 Message-Id: <20180820171557.7734-5-laurent@vivier.eu> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180820171557.7734-1-laurent@vivier.eu> References: <20180820171557.7734-1-laurent@vivier.eu> X-Provags-ID: V03:K1:LE9TUuell6cujCLePXAuICCwxKODPMzc5hDNIPm+Evk+COnjkV7 ofDpe33LR+1f19A7IvXEqfAURbmUiDDCDXagi65QQ9ImJ9YE9MzG+14HJJKSb9G2yJKfaIZ cu9yhoWR+vYj5uqxVryVURO/ecaoRIZQEiW2V1EWR8kOJ+a/ifcS2DZsivvRBi6zqRJkq59 cSfCUJ4SgFWxYtKOMmq6g== X-UI-Out-Filterresults: notjunk:1; V01:K0:0MiBLKk/Lro=:YImJFkNOomB4ui2HzQn6XD cHIuIOXQmT7Xtkwbv6yryEU0FNJYI2DLRfaThti+xyuXQf0qj683iEBHU/amabu8RPQFMeqcf s1GWF2Cy8M+GOUeZaEqGvTh1qxX1MY/WLrwO13eA2xC3v9NEEgDSUcghbfTLInmIAvXn94aRU 15OjQPRcTbRMCAVYtK5E5EdqXof2k9osECLXadxUuH+5NM6jLf7SJKrLCaN1DLVTpNoiFjt+2 JGAdoVULIq2IDp+Vsek8ffLBOcmLG9aoL7hd0ghyQXD+kzaczMKLdfL4GVjrJwgxjm8hqKRFD q2iMdEA6IGGk1qKCJoghuvCO1JI4aokDC7TYOHbjrmMAhWtkASp5cFb2Q2hoHOmmxr3CEfq62 oyD+U2PZN/ogDWyJL9CNOi9aJK71iH0olZULgg11jRI+HZ+d6XDXKv5zxNwuFbCPrtsAh6EYx 7SZfF84h2hg3KmMdx63A/Bk+EubDeSg0qvTjgwIljQP0fay1mfenpoJb345FKuu9CdQF5oMaL jEcDvqJ+EEe+2M5yTzHVyWrEla56tgQYyXhPz/XbQzg+M/reOo5oGqn0rRoOK+GnJCScr8a0v nXzwfnFRLA9MLLSYuJcCaRbQmInK+b/zu/nZmjbQ8uHu9HC0TDYfYcQ7TzslepL55Hr2oAw4w B4SnlvNU70/2gWNsMy6Mhuu/NFFl63E2vvgcug04DZnQDOwrKW4VrgMPFo345MysKN64= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.126.187 Subject: [Qemu-devel] [PATCH v2 4/4] linux-user: add QEMU_IFLA_INFO_KIND nested type for tun X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Riku Voipio , Laurent Vivier Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Laurent Vivier Reviewed-by: Peter Maydell --- linux-user/syscall.c | 48 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 197010945f..f1e5d1bd79 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -501,6 +501,20 @@ enum { QEMU___IFLA_BRPORT_MAX }; +enum { + QEMU_IFLA_TUN_UNSPEC, + QEMU_IFLA_TUN_OWNER, + QEMU_IFLA_TUN_GROUP, + QEMU_IFLA_TUN_TYPE, + QEMU_IFLA_TUN_PI, + QEMU_IFLA_TUN_VNET_HDR, + QEMU_IFLA_TUN_PERSIST, + QEMU_IFLA_TUN_MULTI_QUEUE, + QEMU_IFLA_TUN_NUM_QUEUES, + QEMU_IFLA_TUN_NUM_DISABLED_QUEUES, + QEMU___IFLA_TUN_MAX, +}; + enum { QEMU_IFLA_INFO_UNSPEC, QEMU_IFLA_INFO_KIND, @@ -2346,6 +2360,34 @@ static abi_long host_to_target_slave_data_bridge_nlattr(struct nlattr *nlattr, return 0; } +static abi_long host_to_target_data_tun_nlattr(struct nlattr *nlattr, + void *context) +{ + uint32_t *u32; + + switch (nlattr->nla_type) { + /* uint8_t */ + case QEMU_IFLA_TUN_TYPE: + case QEMU_IFLA_TUN_PI: + case QEMU_IFLA_TUN_VNET_HDR: + case QEMU_IFLA_TUN_PERSIST: + case QEMU_IFLA_TUN_MULTI_QUEUE: + break; + /* uint32_t */ + case QEMU_IFLA_TUN_NUM_QUEUES: + case QEMU_IFLA_TUN_NUM_DISABLED_QUEUES: + case QEMU_IFLA_TUN_OWNER: + case QEMU_IFLA_TUN_GROUP: + u32 = NLA_DATA(nlattr); + *u32 = tswap32(*u32); + break; + default: + gemu_log("Unknown QEMU_IFLA_TUN type %d\n", nlattr->nla_type); + break; + } + return 0; +} + struct linkinfo_context { int len; char *name; @@ -2380,6 +2422,12 @@ static abi_long host_to_target_data_linkinfo_nlattr(struct nlattr *nlattr, nlattr->nla_len, NULL, host_to_target_data_bridge_nlattr); + } else if (strncmp(li_context->name, "tun", + li_context->len) == 0) { + return host_to_target_for_each_nlattr(NLA_DATA(nlattr), + nlattr->nla_len, + NULL, + host_to_target_data_tun_nlattr); } else { gemu_log("Unknown QEMU_IFLA_INFO_KIND %s\n", li_context->name); }