Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp2352264pxb; Mon, 20 Sep 2021 19:49:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzTBmYpRfaEey4ljzYlhEZeGhZMAmiFOQ4poRdNBtZxd+EjLIpfXfAPk/dcp8E+rb3JecmE X-Received: by 2002:a17:906:1d07:: with SMTP id n7mr31527891ejh.53.1632192557766; Mon, 20 Sep 2021 19:49:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632192557; cv=none; d=google.com; s=arc-20160816; b=kUO+aiHxFNSwiDnhRFywqLGk9SBDDMT1+vAi424BpqyiXDKhOdfID1T5jtWGgdR2Wy m+aqYY+Qa+rTUe+0K5aa+s5nJY/djez8rA7jFt7xwqij1amMVitNAVBqfXo718KNuzWt nkr64kWp7eJR6Fc4L7DIrlJySkHOgn++wL0qyx5VklgNAJ5ItysrRnUVXGZXLBl6KXWF CWqxoUGBa5YNbjNpW7OecekvE+R8JHri8AZqsaaerq4T50r7F/bNTb4lT4DCrcGkry4J +L6st/WkAiEBavXLl7Aaj/WSNOn26Xaq/w/bTCNOGSNqDeYj6j6RNet7e6v5qqET5+bp hCww== 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=89UmcAN/JS8S5dNiMrVJpyrzxz+r1EBG5RIi3DvOKWs=; b=LYWBfzgT8tDka1j9GY4YPJrg74O8MiXh07jaPy0jcCfsLbB2zEm3OB98WNx0mN5Cls znu8JD17eWhM3I18B5SUpsvXOl/5TJ1OsBpLw7AzNX/hxb6FTiYtk3vMhqEolUktyWZB hcv1X8CKOI6+OYWJXFnqIbbh5dU3aMP/0gGDRbDKnjSXYeB4eKWASteAePljd2cKTfhl CF7C8nES92nmzCcbD1+R0Hjm0PtRJI//ddZFtWbgUPwggesHNH7DnvZc5BRZKsaCBFb/ caJ8ogu1yhphaX8BIOwPduehwP4vd2J9dBp+WILrWvmSfATbHzRod1UUWXPkbtnD9Mb8 EzDg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=kfTxMkZZ; 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=pass (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 e7si22499027edk.96.2021.09.20.19.48.55; Mon, 20 Sep 2021 19:49:17 -0700 (PDT) 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=@linuxfoundation.org header.s=korg header.b=kfTxMkZZ; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1380057AbhITScK (ORCPT + 99 others); Mon, 20 Sep 2021 14:32:10 -0400 Received: from mail.kernel.org ([198.145.29.99]:44474 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1378790AbhITS00 (ORCPT ); Mon, 20 Sep 2021 14:26:26 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 0669C632ED; Mon, 20 Sep 2021 17:25:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1632158747; bh=ikfZ892KD0SNUlbUzD2rhuzPSMKNp0bILxoF/E3DFCw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kfTxMkZZ27qVDqXKh2IYj7Nz2fVKhucwHHzNOuwAIDgocT+og5/AA/hUuXpPtwROL 72gC9bYz9tW0Ew50KO+pP9XWArVmcHgjnW1bU2z7q4Dwst3BvQ4Z6ARtijFHK3ghuB 1kScPedGFbZg4TkGUh9hXSfwTYcYhwxEbaqUWjBY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jason Wang , Paolo Abeni , "David S. Miller" Subject: [PATCH 5.10 038/122] vhost_net: fix OoB on sendmsg() failure. Date: Mon, 20 Sep 2021 18:43:30 +0200 Message-Id: <20210920163917.042155863@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210920163915.757887582@linuxfoundation.org> References: <20210920163915.757887582@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: Paolo Abeni commit 3c4cea8fa7f71f00c5279547043a84bc2a4d8b8c upstream. If the sendmsg() call in vhost_tx_batch() fails, both the 'batched_xdp' and 'done_idx' indexes are left unchanged. If such failure happens when batched_xdp == VHOST_NET_BATCH, the next call to vhost_net_build_xdp() will access and write memory outside the xdp buffers area. Since sendmsg() can only error with EBADFD, this change addresses the issue explicitly freeing the XDP buffers batch on error. Fixes: 0a0be13b8fe2 ("vhost_net: batch submitting XDP buffers to underlayer sockets") Suggested-by: Jason Wang Signed-off-by: Paolo Abeni Acked-by: Jason Wang Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/vhost/net.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) --- a/drivers/vhost/net.c +++ b/drivers/vhost/net.c @@ -466,7 +466,7 @@ static void vhost_tx_batch(struct vhost_ .num = nvq->batched_xdp, .ptr = nvq->xdp, }; - int err; + int i, err; if (nvq->batched_xdp == 0) goto signal_used; @@ -475,6 +475,15 @@ static void vhost_tx_batch(struct vhost_ err = sock->ops->sendmsg(sock, msghdr, 0); if (unlikely(err < 0)) { vq_err(&nvq->vq, "Fail to batch sending packets\n"); + + /* free pages owned by XDP; since this is an unlikely error path, + * keep it simple and avoid more complex bulk update for the + * used pages + */ + for (i = 0; i < nvq->batched_xdp; ++i) + put_page(virt_to_head_page(nvq->xdp[i].data)); + nvq->batched_xdp = 0; + nvq->done_idx = 0; return; }