From patchwork Wed Sep 7 17:19:24 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Kurz X-Patchwork-Id: 667105 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org 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 3sTqxJ1WS3z9s3s for ; Thu, 8 Sep 2016 03:20:52 +1000 (AEST) Received: from localhost ([::1]:42164 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bhgWn-0000oI-7K for incoming@patchwork.ozlabs.org; Wed, 07 Sep 2016 13:20:49 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46101) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bhgVc-0008Ns-R0 for qemu-devel@nongnu.org; Wed, 07 Sep 2016 13:19:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bhgVY-0002vF-I1 for qemu-devel@nongnu.org; Wed, 07 Sep 2016 13:19:35 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:52433) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bhgVY-0002vB-8T for qemu-devel@nongnu.org; Wed, 07 Sep 2016 13:19:32 -0400 Received: from pps.filterd (m0098394.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.17/8.16.0.17) with SMTP id u87HI5mB074254 for ; Wed, 7 Sep 2016 13:19:31 -0400 Received: from e34.co.us.ibm.com (e34.co.us.ibm.com [32.97.110.152]) by mx0a-001b2d01.pphosted.com with ESMTP id 25a31ahbhs-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 07 Sep 2016 13:19:31 -0400 Received: from localhost by e34.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 7 Sep 2016 11:19:30 -0600 Received: from d03dlp02.boulder.ibm.com (9.17.202.178) by e34.co.us.ibm.com (192.168.1.134) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 7 Sep 2016 11:19:28 -0600 X-IBM-Helo: d03dlp02.boulder.ibm.com X-IBM-MailFrom: groug@kaod.org Received: from b03cxnp08026.gho.boulder.ibm.com (b03cxnp08026.gho.boulder.ibm.com [9.17.130.18]) by d03dlp02.boulder.ibm.com (Postfix) with ESMTP id AB7393E40030; Wed, 7 Sep 2016 11:19:27 -0600 (MDT) Received: from b03ledav006.gho.boulder.ibm.com (b03ledav006.gho.boulder.ibm.com [9.17.130.237]) by b03cxnp08026.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id u87HJR1R16122174; Wed, 7 Sep 2016 10:19:27 -0700 Received: from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4D8DAC603C; Wed, 7 Sep 2016 11:19:27 -0600 (MDT) Received: from bahia.lan (unknown [9.164.189.98]) by b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP id 3D920C603E; Wed, 7 Sep 2016 11:19:26 -0600 (MDT) From: Greg Kurz To: "Michael S. Tsirkin" Date: Wed, 07 Sep 2016 19:19:24 +0200 In-Reply-To: <147326875705.8546.11347276277137015855.stgit@bahia.lan> References: <147326875705.8546.11347276277137015855.stgit@bahia.lan> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16090717-0016-0000-0000-0000049A7FE6 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00005723; HX=3.00000240; KW=3.00000007; PH=3.00000004; SC=3.00000185; SDB=6.00754988; UDB=6.00357383; IPR=6.00527874; BA=6.00004701; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00012614; XFM=3.00000011; UTC=2016-09-07 17:19:29 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16090717-0017-0000-0000-000032B55A82 Message-Id: <147326876478.8546.16045138068342092499.stgit@bahia.lan> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2016-09-07_07:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1604210000 definitions=main-1609070262 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 148.163.156.1 Subject: [Qemu-devel] [PATCH 1/2] virtio-9p: print error message and exit instead of BUG_ON() 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: Greg Kurz , qemu-devel@nongnu.org, "Aneesh Kumar K.V" Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Calling assert() really makes sense when hitting a genuine bug, which calls for a fix in QEMU. However, when something goes wrong because the guest sends a malformed message, it is better to write down a more meaningul error message and exit. Signed-off-by: Greg Kurz --- hw/9pfs/virtio-9p-device.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/hw/9pfs/virtio-9p-device.c b/hw/9pfs/virtio-9p-device.c index 009b43f6d045..67059182645a 100644 --- a/hw/9pfs/virtio-9p-device.c +++ b/hw/9pfs/virtio-9p-device.c @@ -19,6 +19,7 @@ #include "coth.h" #include "hw/virtio/virtio-access.h" #include "qemu/iov.h" +#include "qemu/error-report.h" void virtio_9p_push_and_notify(V9fsPDU *pdu) { @@ -35,6 +36,11 @@ void virtio_9p_push_and_notify(V9fsPDU *pdu) virtio_notify(VIRTIO_DEVICE(v), v->vq); } +static void virtio_9p_error(const char *msg) +{ + error_report("The virtio-9p driver in the guest has an issue: %s", msg); +} + static void handle_9p_output(VirtIODevice *vdev, VirtQueue *vq) { V9fsVirtioState *v = (V9fsVirtioState *)vdev; @@ -56,13 +62,23 @@ static void handle_9p_output(VirtIODevice *vdev, VirtQueue *vq) break; } - BUG_ON(elem->out_num == 0 || elem->in_num == 0); + if (elem->out_num == 0) { + virtio_9p_error("missing VirtFS request's header"); + exit(1); + } + if (elem->in_num == 0) { + virtio_9p_error("missing VirtFS reply's header"); + exit(1); + } QEMU_BUILD_BUG_ON(sizeof out != 7); v->elems[pdu->idx] = elem; len = iov_to_buf(elem->out_sg, elem->out_num, 0, &out, sizeof out); - BUG_ON(len != sizeof out); + if (len != sizeof out) { + virtio_9p_error("malformed VirtFS request"); + exit(1); + } pdu->size = le32_to_cpu(out.size_le);