* [Qemu-devel] [PULL v2 0/3] Linux user for 4.0 patches
@ 2019-02-07 13:13 Laurent Vivier
2019-02-07 13:13 ` [Qemu-devel] [PULL v2 1/3] Fix linux-user crashes in ioctl(SIOCGIFCONF) when ifc_buf is NULL Laurent Vivier
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Laurent Vivier @ 2019-02-07 13:13 UTC (permalink / raw)
To: qemu-devel; +Cc: Laurent Vivier, Riku Voipio
The following changes since commit 47994e16b1d66411953623e7c0bf0cdcd50bd507:
Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20190205' into staging (2019-02-05 18:25:07 +0000)
are available in the Git repository at:
git://github.com/vivier/qemu.git tags/linux-user-for-4.0-pull-request
for you to fetch changes up to 0f5faca78267beb16d8a096e9729f39d552e5c14:
linux-user: add new netlink types (2019-02-07 14:11:19 +0100)
----------------------------------------------------------------
- add new netlink type from linux v4.18 and v4.19
- fix coverity warning (CID 1390634)
- fix ioctl(SIOCGIFCONF) crash
----------------------------------------------------------------
Kan Li (1):
Fix linux-user crashes in ioctl(SIOCGIFCONF) when ifc_buf is NULL.
Laurent Vivier (1):
linux-user: add new netlink types
Peter Maydell (1):
linux-user: Check sscanf return value in open_net_route()
linux-user/fd-trans.c | 8 +++++
linux-user/syscall.c | 68 +++++++++++++++++++++++++------------------
2 files changed, 48 insertions(+), 28 deletions(-)
--
2.20.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Qemu-devel] [PULL v2 1/3] Fix linux-user crashes in ioctl(SIOCGIFCONF) when ifc_buf is NULL.
2019-02-07 13:13 [Qemu-devel] [PULL v2 0/3] Linux user for 4.0 patches Laurent Vivier
@ 2019-02-07 13:13 ` Laurent Vivier
2019-02-07 13:13 ` [Qemu-devel] [PULL v2 2/3] linux-user: Check sscanf return value in open_net_route() Laurent Vivier
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Laurent Vivier @ 2019-02-07 13:13 UTC (permalink / raw)
To: qemu-devel; +Cc: Laurent Vivier, Riku Voipio, Kan Li, Laurent Vivier
From: Kan Li <likan_999.student@sina.com>
Summary:
This is to fix bug https://bugs.launchpad.net/qemu/+bug/1796754.
It is valid for ifc_buf to be NULL according to
http://man7.org/linux/man-pages/man7/netdevice.7.html.
Signed-off-by: Kan Li <likan_999.student@sina.com>
Reviewed-by: Laurent Vivier <lvivier@redhat.com>
Message-Id: <20181024201303.114-1-likan_999.student@sina.com>
[lv: fix errors reported by checkpatch.pl]
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
linux-user/syscall.c | 56 ++++++++++++++++++++++++--------------------
1 file changed, 31 insertions(+), 25 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index bf076cbf8c..08acc4d860 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -4187,28 +4187,33 @@ static abi_long do_ioctl_ifconf(const IOCTLEntry *ie, uint8_t *buf_temp,
unlock_user(argptr, arg, 0);
host_ifconf = (struct ifconf *)(unsigned long)buf_temp;
- target_ifc_len = host_ifconf->ifc_len;
target_ifc_buf = (abi_long)(unsigned long)host_ifconf->ifc_buf;
-
target_ifreq_size = thunk_type_size(ifreq_arg_type, 0);
- nb_ifreq = target_ifc_len / target_ifreq_size;
- host_ifc_len = nb_ifreq * sizeof(struct ifreq);
- outbufsz = sizeof(*host_ifconf) + host_ifc_len;
- if (outbufsz > MAX_STRUCT_SIZE) {
- /* We can't fit all the extents into the fixed size buffer.
- * Allocate one that is large enough and use it instead.
- */
- host_ifconf = malloc(outbufsz);
- if (!host_ifconf) {
- return -TARGET_ENOMEM;
+ if (target_ifc_buf != 0) {
+ target_ifc_len = host_ifconf->ifc_len;
+ nb_ifreq = target_ifc_len / target_ifreq_size;
+ host_ifc_len = nb_ifreq * sizeof(struct ifreq);
+
+ outbufsz = sizeof(*host_ifconf) + host_ifc_len;
+ if (outbufsz > MAX_STRUCT_SIZE) {
+ /*
+ * We can't fit all the extents into the fixed size buffer.
+ * Allocate one that is large enough and use it instead.
+ */
+ host_ifconf = malloc(outbufsz);
+ if (!host_ifconf) {
+ return -TARGET_ENOMEM;
+ }
+ memcpy(host_ifconf, buf_temp, sizeof(*host_ifconf));
+ free_buf = 1;
}
- memcpy(host_ifconf, buf_temp, sizeof(*host_ifconf));
- free_buf = 1;
- }
- host_ifc_buf = (char*)host_ifconf + sizeof(*host_ifconf);
+ host_ifc_buf = (char *)host_ifconf + sizeof(*host_ifconf);
- host_ifconf->ifc_len = host_ifc_len;
+ host_ifconf->ifc_len = host_ifc_len;
+ } else {
+ host_ifc_buf = NULL;
+ }
host_ifconf->ifc_buf = host_ifc_buf;
ret = get_errno(safe_ioctl(fd, ie->host_cmd, host_ifconf));
@@ -4231,15 +4236,16 @@ static abi_long do_ioctl_ifconf(const IOCTLEntry *ie, uint8_t *buf_temp,
thunk_convert(argptr, host_ifconf, arg_type, THUNK_TARGET);
unlock_user(argptr, arg, target_size);
- /* copy ifreq[] to target user */
-
- argptr = lock_user(VERIFY_WRITE, target_ifc_buf, target_ifc_len, 0);
- for (i = 0; i < nb_ifreq ; i++) {
- thunk_convert(argptr + i * target_ifreq_size,
- host_ifc_buf + i * sizeof(struct ifreq),
- ifreq_arg_type, THUNK_TARGET);
+ if (target_ifc_buf != 0) {
+ /* copy ifreq[] to target user */
+ argptr = lock_user(VERIFY_WRITE, target_ifc_buf, target_ifc_len, 0);
+ for (i = 0; i < nb_ifreq ; i++) {
+ thunk_convert(argptr + i * target_ifreq_size,
+ host_ifc_buf + i * sizeof(struct ifreq),
+ ifreq_arg_type, THUNK_TARGET);
+ }
+ unlock_user(argptr, target_ifc_buf, target_ifc_len);
}
- unlock_user(argptr, target_ifc_buf, target_ifc_len);
}
if (free_buf) {
--
2.20.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [Qemu-devel] [PULL v2 2/3] linux-user: Check sscanf return value in open_net_route()
2019-02-07 13:13 [Qemu-devel] [PULL v2 0/3] Linux user for 4.0 patches Laurent Vivier
2019-02-07 13:13 ` [Qemu-devel] [PULL v2 1/3] Fix linux-user crashes in ioctl(SIOCGIFCONF) when ifc_buf is NULL Laurent Vivier
@ 2019-02-07 13:13 ` Laurent Vivier
2019-02-07 13:13 ` [Qemu-devel] [PULL v2 3/3] linux-user: add new netlink types Laurent Vivier
2019-02-07 18:53 ` [Qemu-devel] [PULL v2 0/3] Linux user for 4.0 patches Peter Maydell
3 siblings, 0 replies; 5+ messages in thread
From: Laurent Vivier @ 2019-02-07 13:13 UTC (permalink / raw)
To: qemu-devel
Cc: Laurent Vivier, Riku Voipio, Peter Maydell,
Philippe Mathieu-Daudé, Stefano Garzarella
From: Peter Maydell <peter.maydell@linaro.org>
Coverity warns (CID 1390634) that open_net_route() is not
checking the return value from sscanf(), which means that
it might then use values that aren't initialized.
Errors here should in general not happen since we're passing
an assumed-good /proc/net/route from the host kernel, but
if we do fail to parse a line then just skip it in the output
we pass to the guest.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20190205174207.9278-1-peter.maydell@linaro.org>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
linux-user/syscall.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 08acc4d860..5bbb72f3d5 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -6768,9 +6768,15 @@ static int open_net_route(void *cpu_env, int fd)
char iface[16];
uint32_t dest, gw, mask;
unsigned int flags, refcnt, use, metric, mtu, window, irtt;
- sscanf(line, "%s\t%08x\t%08x\t%04x\t%d\t%d\t%d\t%08x\t%d\t%u\t%u\n",
- iface, &dest, &gw, &flags, &refcnt, &use, &metric,
- &mask, &mtu, &window, &irtt);
+ int fields;
+
+ fields = sscanf(line,
+ "%s\t%08x\t%08x\t%04x\t%d\t%d\t%d\t%08x\t%d\t%u\t%u\n",
+ iface, &dest, &gw, &flags, &refcnt, &use, &metric,
+ &mask, &mtu, &window, &irtt);
+ if (fields != 11) {
+ continue;
+ }
dprintf(fd, "%s\t%08x\t%08x\t%04x\t%d\t%d\t%d\t%08x\t%d\t%u\t%u\n",
iface, tswap32(dest), tswap32(gw), flags, refcnt, use,
metric, tswap32(mask), mtu, window, irtt);
--
2.20.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [Qemu-devel] [PULL v2 3/3] linux-user: add new netlink types
2019-02-07 13:13 [Qemu-devel] [PULL v2 0/3] Linux user for 4.0 patches Laurent Vivier
2019-02-07 13:13 ` [Qemu-devel] [PULL v2 1/3] Fix linux-user crashes in ioctl(SIOCGIFCONF) when ifc_buf is NULL Laurent Vivier
2019-02-07 13:13 ` [Qemu-devel] [PULL v2 2/3] linux-user: Check sscanf return value in open_net_route() Laurent Vivier
@ 2019-02-07 13:13 ` Laurent Vivier
2019-02-07 18:53 ` [Qemu-devel] [PULL v2 0/3] Linux user for 4.0 patches Peter Maydell
3 siblings, 0 replies; 5+ messages in thread
From: Laurent Vivier @ 2019-02-07 13:13 UTC (permalink / raw)
To: qemu-devel; +Cc: Laurent Vivier, Riku Voipio
Add QEMU_IFLA_MIN_MTU, QEMU_IFLA_MAX_MTU (from linux v4.19)
QEMU_IFLA_BRPORT_ISOLATED (from linux v4.18) and
QEMU_IFLA_BRPORT_BACKUP_PORT (from linux v4.19).
These new types fix this error flow with sudo:
...
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown QEMU_IFLA_BRPORT type 33
...
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20190206193211.6683-1-laurent@vivier.eu>
---
linux-user/fd-trans.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/linux-user/fd-trans.c b/linux-user/fd-trans.c
index 216b9f0614..30425c9df6 100644
--- a/linux-user/fd-trans.c
+++ b/linux-user/fd-trans.c
@@ -129,6 +129,8 @@ enum {
QEMU_IFLA_CARRIER_UP_COUNT,
QEMU_IFLA_CARRIER_DOWN_COUNT,
QEMU_IFLA_NEW_IFINDEX,
+ QEMU_IFLA_MIN_MTU,
+ QEMU_IFLA_MAX_MTU,
QEMU___IFLA_MAX
};
@@ -166,6 +168,8 @@ enum {
QEMU_IFLA_BRPORT_BCAST_FLOOD,
QEMU_IFLA_BRPORT_GROUP_FWD_MASK,
QEMU_IFLA_BRPORT_NEIGH_SUPPRESS,
+ QEMU_IFLA_BRPORT_ISOLATED,
+ QEMU_IFLA_BRPORT_BACKUP_PORT,
QEMU___IFLA_BRPORT_MAX
};
@@ -510,6 +514,7 @@ static abi_long host_to_target_slave_data_bridge_nlattr(struct nlattr *nlattr,
case QEMU_IFLA_BRPORT_VLAN_TUNNEL:
case QEMU_IFLA_BRPORT_BCAST_FLOOD:
case QEMU_IFLA_BRPORT_NEIGH_SUPPRESS:
+ case QEMU_IFLA_BRPORT_ISOLATED:
break;
/* uint16_t */
case QEMU_IFLA_BRPORT_PRIORITY:
@@ -523,6 +528,7 @@ static abi_long host_to_target_slave_data_bridge_nlattr(struct nlattr *nlattr,
break;
/* uin32_t */
case QEMU_IFLA_BRPORT_COST:
+ case QEMU_IFLA_BRPORT_BACKUP_PORT:
u32 = NLA_DATA(nlattr);
*u32 = tswap32(*u32);
break;
@@ -787,6 +793,8 @@ static abi_long host_to_target_data_link_rtattr(struct rtattr *rtattr)
case QEMU_IFLA_GSO_MAX_SIZE:
case QEMU_IFLA_CARRIER_UP_COUNT:
case QEMU_IFLA_CARRIER_DOWN_COUNT:
+ case QEMU_IFLA_MIN_MTU:
+ case QEMU_IFLA_MAX_MTU:
u32 = RTA_DATA(rtattr);
*u32 = tswap32(*u32);
break;
--
2.20.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PULL v2 0/3] Linux user for 4.0 patches
2019-02-07 13:13 [Qemu-devel] [PULL v2 0/3] Linux user for 4.0 patches Laurent Vivier
` (2 preceding siblings ...)
2019-02-07 13:13 ` [Qemu-devel] [PULL v2 3/3] linux-user: add new netlink types Laurent Vivier
@ 2019-02-07 18:53 ` Peter Maydell
3 siblings, 0 replies; 5+ messages in thread
From: Peter Maydell @ 2019-02-07 18:53 UTC (permalink / raw)
To: Laurent Vivier; +Cc: QEMU Developers, Riku Voipio
On Thu, 7 Feb 2019 at 13:20, Laurent Vivier <laurent@vivier.eu> wrote:
>
> The following changes since commit 47994e16b1d66411953623e7c0bf0cdcd50bd507:
>
> Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20190205' into staging (2019-02-05 18:25:07 +0000)
>
> are available in the Git repository at:
>
> git://github.com/vivier/qemu.git tags/linux-user-for-4.0-pull-request
>
> for you to fetch changes up to 0f5faca78267beb16d8a096e9729f39d552e5c14:
>
> linux-user: add new netlink types (2019-02-07 14:11:19 +0100)
>
> ----------------------------------------------------------------
> - add new netlink type from linux v4.18 and v4.19
> - fix coverity warning (CID 1390634)
> - fix ioctl(SIOCGIFCONF) crash
>
> ----------------------------------------------------------------
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/4.0
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-02-07 18:53 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-02-07 13:13 [Qemu-devel] [PULL v2 0/3] Linux user for 4.0 patches Laurent Vivier
2019-02-07 13:13 ` [Qemu-devel] [PULL v2 1/3] Fix linux-user crashes in ioctl(SIOCGIFCONF) when ifc_buf is NULL Laurent Vivier
2019-02-07 13:13 ` [Qemu-devel] [PULL v2 2/3] linux-user: Check sscanf return value in open_net_route() Laurent Vivier
2019-02-07 13:13 ` [Qemu-devel] [PULL v2 3/3] linux-user: add new netlink types Laurent Vivier
2019-02-07 18:53 ` [Qemu-devel] [PULL v2 0/3] Linux user for 4.0 patches Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).