From patchwork Tue Aug 14 16:19:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 957599 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 41qflj2kx8z9sD0 for ; Wed, 15 Aug 2018 03:31:29 +1000 (AEST) Received: from localhost ([::1]:45236 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fpdAE-0001iW-UI for incoming@patchwork.ozlabs.org; Tue, 14 Aug 2018 13:31:26 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36881) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fpd98-0001Db-1Y for qemu-devel@nongnu.org; Tue, 14 Aug 2018 13:30:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fpd8k-0001SP-32 for qemu-devel@nongnu.org; Tue, 14 Aug 2018 13:30:17 -0400 Received: from mout.kundenserver.de ([212.227.17.10]:50043) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fpd8j-0001Pp-QH for qemu-devel@nongnu.org; Tue, 14 Aug 2018 13:29:54 -0400 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue101 [212.227.15.183]) with ESMTPSA (Nemesis) id 0LhNR2-1gBncj1v7Y-00mZsw; Tue, 14 Aug 2018 18:19:09 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 14 Aug 2018 18:19:02 +0200 Message-Id: <20180814161904.12216-2-laurent@vivier.eu> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180814161904.12216-1-laurent@vivier.eu> References: <20180814161904.12216-1-laurent@vivier.eu> X-Provags-ID: V03:K1:exlB7uyUNqMydCQYUW+xrGelXPFMneZSahhEoghaHSzxgHeuuhN cW5PSukV0Pg3jqvoi4fPKBMGHfL3IBLcCfejI2CAvNKB+iCZa6v7U7TRiXpFDLtDQQ7rqn/ Iuzpx99Tj9E5hr4QCX2Z1K7uGB9kbobqWDr4pkWA6Ine/UySsCkQUjv/xk+3Pbg/xZV77Pj 3wx6KavbQ+8z5B80lOFUg== X-UI-Out-Filterresults: notjunk:1; V01:K0:VBoKP0LOUPw=:/3FqoM7NLFw7NrtvqESd6L F353wqCEKmF27kXmkw5eEWdJ3gyT9y6BeKDb4HjLByHXJwVm8P/Kt7WvE6ExpM9rwKeRE4r6H te0VvzlIS7aOf3LryiI6QGyfA/6BaeLR5yhjjCtrFqpUOLJ8qEtVbcJL1+5C/YZ9Cwyemw9sC KxMUyL2ol+FwLk4b1KMxuTCTWAg5EMYJ5C7F2n+KqACNU7GLueQ8Z2BQawu5Jg/TuPMLAJRl3 k2OgJoWibQgetQ2Hfyz7bMmp9lViOYsZ8ZZPUngdy4MMfrzWknLmsy4AH9ulcs3AuYZGgKlhR t1CQm7jtYtxlNYtRepQ/DoT6PcY0IXrLyD+ygZHlRYwC/Jd4RrhRZGRT3+K4xaiE633eCeP2E mIwR4Gxbh5+0iAKCcIkJJFe78rp5SJnbi09TMFXI28jLacnEloiEQx2IamdGg4r0GSEEiwZde YYzYWDJiGY7R7RY0TWM1sGIz6RqL2XS5A+yynmtcCuIBAqW1M12bDYnSgdtwVAxzUzUIrRgJI 2TaGKSQXOPHVOTP2KEkJA1GvJH/eWblzrgmoII5zcm3CFz2K/n6Gz9JuxA22pQTA9gSEJiamg V1lwWvyLxhbOioyIKeWHbT+lMXn0IubhNfqvolITGMIcrqBvITjuyKU9qvpjwpW2QgSTh4LjB xz/iWl9L6ZRjOIy/4AEMamyWR0EgnaNcngSz2mUd50wCad5GYPuo1SV/ffjNQhdsJr7Y= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.17.10 Subject: [Qemu-devel] [PATCH 1/3] 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: 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 --- 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 dfc851cc35..399da09f38 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 Tue Aug 14 16:19:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 957603 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 41qfql6NMYz9sCR for ; Wed, 15 Aug 2018 03:34:59 +1000 (AEST) Received: from localhost ([::1]:45257 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fpdDd-0004pF-Gz for incoming@patchwork.ozlabs.org; Tue, 14 Aug 2018 13:34:57 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37668) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fpdBS-0003c8-5l for qemu-devel@nongnu.org; Tue, 14 Aug 2018 13:32:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fpdBD-0002oY-1p for qemu-devel@nongnu.org; Tue, 14 Aug 2018 13:32:42 -0400 Received: from mout.kundenserver.de ([212.227.17.24]:53747) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fpdBC-0002oK-P4 for qemu-devel@nongnu.org; Tue, 14 Aug 2018 13:32:26 -0400 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue101 [212.227.15.183]) with ESMTPSA (Nemesis) id 0MHY8C-1fsvQ13k1k-003K2o; Tue, 14 Aug 2018 18:19:10 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 14 Aug 2018 18:19:03 +0200 Message-Id: <20180814161904.12216-3-laurent@vivier.eu> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180814161904.12216-1-laurent@vivier.eu> References: <20180814161904.12216-1-laurent@vivier.eu> X-Provags-ID: V03:K1:8xKa7kiHgmUReqQrINt7ef5tvHLVGsW64phFRkARxkOIxjCdXVi c/qFh2j00HdJ5OPovLYu03jor6zANEtbC6IALhc/t8UHBwJDhBvuCAC6bQYyLdg+bK8EkhS 6wkgVIoX3G+a4/637SJyU2MB3OdKedWY0MjW6wl+/kydHRsaTnUjAd+lJvkaCbSozzgRfNL 2zQCylpRM8ZRQggozr0yA== X-UI-Out-Filterresults: notjunk:1; V01:K0:7rSlotZeU7A=:iJhYQoJT9dWYBHGQwNTAJq 7Q3cONdyO5sXIELOhzy2oW+to+H36KYrpsDKdxyvj/gL1Hn/1VYBor5nb+iYI4IyVAg3L2rVU f4UmffPKyIU/3s5om8hAR0+4gu+JFphkvPhpo+1erOGqKQWKMdwY79Ke66zlha6hu0mGzMbfL F9X3PnFcJOay/0CG8sK+6UtIaIbqBn0GZPoQ43wyWjn/FAr9UChbB5LxGo5VcHx8gPOouiiEj 3ZnyrkdJ9qQ0SYRhTd6itnbWTOzHUQhLtfa1cFOa/iu3lvQTjgaD7juo6EfiVVp0VD/BfMTH1 LdGgnGpmvYefwxW6kYqNRBsBBaZp5dhTkr36vFUO605Ao5CLGy9AQ7YDZgwiXlZYcaqTrajxH KHhFjjFvrXGcujfiZJj5xKrsEj8yHxAbSitXIt+avqNVFSDMqfW+L1A+tTgJNvabHEsCj+p/8 U/uNDZpTIHDJ9Kd0OIgBjwcU2JwUlj8MpoJmnw78DsT0Wbboi2TPjLlgXIK6e7jIiJNIv9sNd Cb2Ag2soMXxWDB03OvoglJLpggWdlFmJaBySsVoE3W3mS0vlOCh7emgV6edJXrmYU0QYNxPIr 8D8sZsh282MYDYtxTcLqcvHWa5Y/ChNsmbeOFcC0LoUX/aONd8XqaH8ivc8LX4PXTS8vR29i7 RvabBzr5P+WVk6fnapty+3Um0z/thIO8BD8GxnkDgFsMCgsXEN7HxK7j6erjF4FbaI7U= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.17.24 Subject: [Qemu-devel] [PATCH 2/3] 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: 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 --- linux-user/syscall.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 399da09f38..fe12ac4849 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -2659,12 +2659,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 RTA_GATEWAY: case RTA_DST: case RTA_PREFSRC: break; + /* u8 */ + case RTA_PREF: + break; /* u32 */ case RTA_PRIORITY: case RTA_TABLE: @@ -2672,6 +2677,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 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 Tue Aug 14 16:19:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 957605 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 41qg2k4cW0z9ryt for ; Wed, 15 Aug 2018 03:44:29 +1000 (AEST) Received: from localhost ([::1]:45314 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fpdMp-0004E6-4O for incoming@patchwork.ozlabs.org; Tue, 14 Aug 2018 13:44:27 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38234) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fpdCf-0004fu-NB for qemu-devel@nongnu.org; Tue, 14 Aug 2018 13:34:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fpdCH-00036D-FB for qemu-devel@nongnu.org; Tue, 14 Aug 2018 13:33:57 -0400 Received: from mout.kundenserver.de ([217.72.192.73]:43001) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fpdCH-00035c-4a for qemu-devel@nongnu.org; Tue, 14 Aug 2018 13:33:33 -0400 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue101 [212.227.15.183]) with ESMTPSA (Nemesis) id 0MQNoq-1fSd5m1Ns4-00Tp6k; Tue, 14 Aug 2018 18:19:10 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 14 Aug 2018 18:19:04 +0200 Message-Id: <20180814161904.12216-4-laurent@vivier.eu> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180814161904.12216-1-laurent@vivier.eu> References: <20180814161904.12216-1-laurent@vivier.eu> X-Provags-ID: V03:K1:vcuenbg+LvOoE3BcQPBo0s26TnZc9LcAVu854wNBJJXWk45qR0h S+qB12hXr1aOZdsR1EpYIulruWDojLpbCGNbzFMOLYO3jRlqyyl+ryz2fEW0Duf1xkTYeDZ JA9YSpH6mZj8GFTd4A/IEickPfokc6xD4bSvwbbrhuCOL6mAmltW64FOthqABb8yqoQBEVe buukTjosG73f3mS2X2LaA== X-UI-Out-Filterresults: notjunk:1; V01:K0:CYLrtcsGeNk=:b94BcULCSNv7Pi51eo26rG pd772Os3ldojwmEiQLlN+ZgLtodf4zKcnVugY15kxJf4IQDAcIK4Z+oyrWZVVG5q7SQvsvOn/ ZJiQS75IWC0UQC9NuNU/UqA1EEPYzQALUkf4oMy5R7+nFOWE1q0lyuZs4f1i+/iBiB/6tszZ/ GHbBph7sQhjt8gJFM4Ct9+YELmHXJ/4n/21ySjIwltXcuZ0PLMzcBVWCa68WlUBgfaV/q/Rms lNXDyUdcaqBpdbxUuv9XzQpPYE/sojzod9HRgrYeWXNNleqcjMKp/y4az5e9muA3WoFvPaIuZ YQDdb/oLyf1xWBffVqr9kix9aSBxlEaf/tZnEjbDqj35uscLgbtOv0+3VC55l5C6HWH/+TCR4 ZiRoT+lCKRBQppPFcGOIBgXSH0ATMvgp7EQQ9BAl9vbqCqSCPc8UFX0XJX/1N2eTbAVYncqrh kBNRSfqsYOzX3TTZmuGukFv4YBQTSWpKG323GC/WTlj55yUYcfCkdi9oQbdpiAiFV/1bqtpf4 JDMIVXK2ANLtPyg0rSOZ9ThzNpZ6GUdn+7ugDqr7JtBMDjl+X1EhbkDqPOVjdO1cjZldTj3Yu Cdh8LtqHCPWPCwiT2hJ5JIFpll1BAAfQgPZ4h4aE9HI8KggLKqM7EdISA14A35C5cx3GG+0wP J3U1/tloTc7GDglsKmLqRY3KQITbeo3ctGMMDIb56s14+8Jo2cGuMgJ1EuZd7eySp5VU= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 217.72.192.73 Subject: [Qemu-devel] [PATCH 3/3] 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: Riku Voipio , Laurent Vivier Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Laurent Vivier --- linux-user/syscall.c | 48 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index fe12ac4849..210c236af9 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, @@ -2315,6 +2329,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; @@ -2349,6 +2391,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); }