Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp832340pxb; Tue, 3 Nov 2020 13:50:47 -0800 (PST) X-Google-Smtp-Source: ABdhPJw3Wl8zDJeScPgDIYelCfySnsCkKeiB3x8GBiL+tgAOxKKinhLugi/A9x1FxyLGWelsMuLQ X-Received: by 2002:a50:cc86:: with SMTP id q6mr24862311edi.78.1604440247549; Tue, 03 Nov 2020 13:50:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604440247; cv=none; d=google.com; s=arc-20160816; b=Jl9ak8+xlzd6kH/nH8144u7S7sdKgfPn66eGAoPTCvZ1QhwbiH3iSeWz85N2QzBblt UuN1utFt0/WXKMGrnaJ81XO6pf09fNae5B31quCdO9+T1Btu+RbJ1u+XvLK3l8gKGz5O CKJK3TX+VN9r9/66pMMlxLFTwgsxElX46MYTlrG2uYE/NvCb8bUhOSu3xk3dNUIIjs2N LQpA8CuT7UDSOxILEnTi0oWJGju8dX73tYFDFEHmIpIjFsb+f3MebfxV1buLLVlFwujg EwebcaqMM/GzBjU5ML223fkubvcTwRAOXjRzbZXGBqDWFUWjm0aXc0IgqDW0Sa2MxpyN rZDQ== 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=7BZkVJ9ylaACQjWx7VF28Tb2kp0bIhK0+CQ0A39WtVc=; b=zsg+7KwAhdzNmh28ADbiIjPylVQqmYjaBC1AgovnP4na+HJB/y0m/0vVJMYoe+0r9d 8ZcGa0aKivKd1AXHlUXMc0mVLRSYt/mHf5ZHFLxj2oKkCgBYeG3qxa/4H3FMCOeCLrlS 0TDYYYaEksi5arttAlNJDPFVqr3UnwmN6PbgIBbGXnbhPPK26Z+pn9OxLoRdVI8U3m/q K9OHdW4nOCyKWwB0UIZ3zrTQV/daeUFrwBkg0HgJVmLbWmywA0BnYrQwfbiW7VsSST4f KDc9of0RkzvX+n85ip0q4KKlc2BEarcWTpxtOBJajjkNhNwixu+KdMkUuz7YxWAPg2S/ FNrA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=rBPp9R1Y; 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 u7si3394526edy.373.2020.11.03.13.50.24; Tue, 03 Nov 2020 13:50:47 -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=rBPp9R1Y; 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 S1730407AbgKCUur (ORCPT + 99 others); Tue, 3 Nov 2020 15:50:47 -0500 Received: from mail.kernel.org ([198.145.29.99]:45112 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731860AbgKCUuo (ORCPT ); Tue, 3 Nov 2020 15:50:44 -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 E599522404; Tue, 3 Nov 2020 20:50:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604436644; bh=N7BSukAVL4No7yZyqirfSQxMblTs3avvPEdBWkdnasY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rBPp9R1Y7QzxNMpg3lvt0d2UfGaI6lpgIOPbWc+zGMOKyS66yyKh1x9oxHqootLJ6 DB3coKXs6B4CMunQcnRs4bQfQH+8E3+7D8/srkEF4lCE/HRyTTriWad9hQjMvHKXqU gwaQopEop8GRBqIQhpjld3ZKV22rO0epk1TPK1qQ= 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 5.9 339/391] vringh: fix __vringh_iov() when riov and wiov are different Date: Tue, 3 Nov 2020 21:36:30 +0100 Message-Id: <20201103203410.009238898@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201103203348.153465465@linuxfoundation.org> References: <20201103203348.153465465@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 @@ -284,13 +284,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;