From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59777) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UjQqS-0008IQ-4m for qemu-devel@nongnu.org; Mon, 03 Jun 2013 05:14:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UjQqN-0004x7-EF for qemu-devel@nongnu.org; Mon, 03 Jun 2013 05:14:28 -0400 From: Jason Wang Date: Mon, 3 Jun 2013 17:04:04 +0800 Message-Id: <1370250244-30058-1-git-send-email-jasowang@redhat.com> Subject: [Qemu-devel] [PATCH] net: tap: fix NULL dereference when passing both fd and vhostfds to tap List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: aliguori@us.ibm.com, stefanha@redhat.com, qemu-devel@nongnu.org Cc: Paolo Bonzini , Jason Wang , Stefan Hajnoczi , qemu-stable@nongnu.org, Laszlo Ersek This is because vhostfdname were passed as NULL to net_init_tap_one() when vhostfd were not specified, but net_init_tap_one() will still pass it to monitor_handle_fd_param() when tap->has_vhostfds is true. Since file descriptor (fd, vhostfd) and file descriptor set (fds, vhostfds) were not compatible, so this patch forbids passing them to tap in the same time. This solve the segfault when passing the command line like: ./qemu-system-x86_64 -netdev tap,fd=2,vhost=on,vhostfds=baz,id=xyz Cc: Paolo Bonzini Cc: Stefan Hajnoczi Cc: Laszlo Ersek Cc: qemu-stable@nongnu.org Signed-off-by: Jason Wang --- net/tap.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) diff --git a/net/tap.c b/net/tap.c index e0b7a2a..477505f 100644 --- a/net/tap.c +++ b/net/tap.c @@ -698,9 +698,10 @@ int net_init_tap(const NetClientOptions *opts, const char *name, if (tap->has_fd) { if (tap->has_ifname || tap->has_script || tap->has_downscript || tap->has_vnet_hdr || tap->has_helper || tap->has_queues || - tap->has_fds) { + tap->has_fds || tap->has_vhostfds) { error_report("ifname=, script=, downscript=, vnet_hdr=, " - "helper=, queues=, and fds= are invalid with fd="); + "helper=, queues=, fds=, and vhostfds= " + "are invalid with fd="); return -1; } @@ -725,9 +726,10 @@ int net_init_tap(const NetClientOptions *opts, const char *name, if (tap->has_ifname || tap->has_script || tap->has_downscript || tap->has_vnet_hdr || tap->has_helper || tap->has_queues || - tap->has_fd) { + tap->has_fd || tap->has_vhostfd) { error_report("ifname=, script=, downscript=, vnet_hdr=, " - "helper=, queues=, and fd= are invalid with fds="); + "helper=, queues=, fd=, and vhostfd= " + "are invalid with fds="); return -1; } -- 1.7.1