Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp3207704pxb; Mon, 9 Nov 2020 05:37:09 -0800 (PST) X-Google-Smtp-Source: ABdhPJzksNKYvk5MJ+L18mdZE0nI+7KK9Jsgj18smq12et9fJ131XEZbWbdgDshFIYqxB9pnb4of X-Received: by 2002:aa7:c44a:: with SMTP id n10mr15588778edr.145.1604929029203; Mon, 09 Nov 2020 05:37:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604929029; cv=none; d=google.com; s=arc-20160816; b=ScJGzzlXgVY9fB14mtF9eRYw4s/iAvqlT9hYaP43vbPXdMGEwEJuSuRQJ7flpXndPl XkiwCNR7f3uYpLAhPLh0MNTAKMOY61iU6HPLUMQxrgmVCsi8wcVIgVvMcU5EMG5pSeWx ISS2jFOQdBhaVEx5bufgevPcQiIH7B9QQAXTrhHREnRqxS1wW+Hdu1UHcPrKwU3TxuXK v+wNJhdDTyvJ01y6UL3na54XvyWhEpsGpcxPFAnkefVOsUUEEPIjhe1iKQvi6RdFRA01 Tng//HF8Pd8V8/KYrYR9aItYEa4AH0vX31qEYHrGoJzx3JmQMf2fEs0KkrpOmpkAqEAs d6rw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=P/5lYSPc9hFRJ8tZAk3RA0q/c9Wbh1+ZhMLANxkGelM=; b=oOsVZxttdiJIfA6zHKM9kxOendW/gx698KN/xZNBMWt/IkDUDqJ5+b/lQPSsK5MMyj HtlFOLEgjSdSIApVJJETkoqHY64IUVGqKQKBI0qN8RB9eeNbNO4Gipes7g0UU+77AjjE +f6qlMlIY+HT2MV1hdhR01gBEh3TuN3rVtjjNaJ8FFiFH/+BL6VeQ8Td/jvB4nj2z03q OohYr6OuY830HVPZ0Sam6GUy8Fjm2YtKU8O8A4l6JRUXXpGuet0COKNHLQeT21sLAF9b tgufCnzCk0V+qB6ki2isCU8s4U9ptdgLAiXec37GJcN2yyoaNwrXhNylCesmHpO/VWRL MDZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=T0spUrOc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s19si6460815eju.549.2020.11.09.05.36.46; Mon, 09 Nov 2020 05:37:09 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=T0spUrOc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731183AbgKINfQ (ORCPT + 99 others); Mon, 9 Nov 2020 08:35:16 -0500 Received: from mail.kernel.org ([198.145.29.99]:58280 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729906AbgKINF0 (ORCPT ); Mon, 9 Nov 2020 08:05:26 -0500 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0017420663; Mon, 9 Nov 2020 13:05:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604927125; bh=ZLeOPp5R7YSkfvBZOBDb/LOc6Tl0ZFDGmKBNdeIOBdI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=T0spUrOcuPdGqcywbSUr/w8e3fg2+/Bx512uFPnZn+1ehWAe5z7tmudWoyDQk8G5p ooAxRLQ0BDWmnsAwcxZ0OxkkoA7GZKqSeDaFYypg1Fskqi/0WZSTHF4BmGvaLGqrNC w51Rphjhb8G3wNC3pHjujBMqSYB1P/ixj1gzfjVI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Stefano Garzarella , "Michael S. Tsirkin" Subject: [PATCH 4.9 078/117] vringh: fix __vringh_iov() when riov and wiov are different Date: Mon, 9 Nov 2020 13:55:04 +0100 Message-Id: <20201109125029.389389164@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201109125025.630721781@linuxfoundation.org> References: <20201109125025.630721781@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Stefano Garzarella commit 5745bcfbbf89b158416075374254d3c013488f21 upstream. If riov and wiov are both defined and they point to different objects, only riov is initialized. If the wiov is not initialized by the caller, the function fails returning -EINVAL and printing "Readable desc 0x... after writable" error message. This issue happens when descriptors have both readable and writable buffers (eg. virtio-blk devices has virtio_blk_outhdr in the readable buffer and status as last byte of writable buffer) and we call __vringh_iov() to get both type of buffers in two different iovecs. Let's replace the 'else if' clause with 'if' to initialize both riov and wiov if they are not NULL. As checkpatch pointed out, we also avoid crashing the kernel when riov and wiov are both NULL, replacing BUG() with WARN_ON() and returning -EINVAL. Fixes: f87d0fbb5798 ("vringh: host-side implementation of virtio rings.") Cc: stable@vger.kernel.org Signed-off-by: Stefano Garzarella Link: https://lore.kernel.org/r/20201008204256.162292-1-sgarzare@redhat.com Signed-off-by: Michael S. Tsirkin Signed-off-by: Greg Kroah-Hartman --- drivers/vhost/vringh.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) --- a/drivers/vhost/vringh.c +++ b/drivers/vhost/vringh.c @@ -272,13 +272,14 @@ __vringh_iov(struct vringh *vrh, u16 i, desc_max = vrh->vring.num; up_next = -1; + /* You must want something! */ + if (WARN_ON(!riov && !wiov)) + return -EINVAL; + if (riov) riov->i = riov->used = 0; - else if (wiov) + if (wiov) wiov->i = wiov->used = 0; - else - /* You must want something! */ - BUG(); for (;;) { void *addr;