From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8FB17A04DD for ; Wed, 18 Nov 2020 17:38:40 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3A1CDC94E; Wed, 18 Nov 2020 17:38:04 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by dpdk.org (Postfix) with ESMTP id 5558BC94E for ; Wed, 18 Nov 2020 17:38:02 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605717480; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=S7fBhrVI0ZbZIA/VykilnJ9+EEuLoDcyBrXcbALPcfk=; b=SsJk2YnPvFUEwk6OWgnEBErqxdI6myQk6laKV9m3bxqv5P/brOyYocLyNy293v95T0Ahc1 O5F5sYr8RQvQ3Ybio22gFIGf9jRecAOuqrNRL202+rRdmjdRJFZ1mTV1flRVZ/X0HpmPX5 qfwFTKGmQ1Cp9GW+ujuf1EZhWrjZqBw= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-149-RMQjZ3ZgONWLZCYSVPXgiw-1; Wed, 18 Nov 2020 11:37:57 -0500 X-MC-Unique: RMQjZ3ZgONWLZCYSVPXgiw-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E240781440C; Wed, 18 Nov 2020 16:37:55 +0000 (UTC) Received: from rh.redhat.com (ovpn-113-249.ams2.redhat.com [10.36.113.249]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7F8A05C1A3; Wed, 18 Nov 2020 16:37:54 +0000 (UTC) From: Kevin Traynor To: Maxime Coquelin Cc: Adrian Moreno , Chenbo Xia , dpdk stable Date: Wed, 18 Nov 2020 16:35:43 +0000 Message-Id: <20201118163558.1101823-57-ktraynor@redhat.com> In-Reply-To: <20201118163558.1101823-1-ktraynor@redhat.com> References: <20201118163558.1101823-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=ktraynor@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII" Subject: [dpdk-stable] patch 'vhost: fix virtqueues metadata allocation' has been queued to LTS release 18.11.11 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to LTS release 18.11.11 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/24/20. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/kevintraynor/dpdk-stable-queue This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable-queue/commit/511ac28ae0092e03056fa61c5706883486145756 Thanks. Kevin. --- >From 511ac28ae0092e03056fa61c5706883486145756 Mon Sep 17 00:00:00 2001 From: Maxime Coquelin Date: Mon, 19 Oct 2020 19:34:09 +0200 Subject: [PATCH] vhost: fix virtqueues metadata allocation [ upstream commit 8acd7c21335305426fbbc0a3aea2978734d0b2a8 ] The Vhost-user backend implementation assumes there will be no holes in the device's array of virtqueues metadata pointers. It can happen though, and would cause segmentation faults, memory leaks or undefined behaviour. This patch keep the assumption that there is no holes in this array, and allocate all uninitialized virtqueues metadata up to requested index. Fixes: 160cbc815b41 ("vhost: remove a hack on queue allocation") Suggested-by: Adrian Moreno Signed-off-by: Maxime Coquelin Reviewed-by: Chenbo Xia --- lib/librte_vhost/vhost.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c index 0432b26638..7040bbfff8 100644 --- a/lib/librte_vhost/vhost.c +++ b/lib/librte_vhost/vhost.c @@ -534,20 +534,27 @@ alloc_vring_queue(struct virtio_net *dev, uint32_t vring_idx) { struct vhost_virtqueue *vq; + uint32_t i; - vq = rte_malloc(NULL, sizeof(struct vhost_virtqueue), 0); - if (vq == NULL) { - RTE_LOG(ERR, VHOST_CONFIG, - "Failed to allocate memory for vring:%u.\n", vring_idx); - return -1; + /* Also allocate holes, if any, up to requested vring index. */ + for (i = 0; i <= vring_idx; i++) { + if (dev->virtqueue[i]) + continue; + + vq = rte_malloc(NULL, sizeof(struct vhost_virtqueue), 0); + if (vq == NULL) { + RTE_LOG(ERR, VHOST_CONFIG, + "Failed to allocate memory for vring:%u.\n", i); + return -1; + } + + dev->virtqueue[i] = vq; + init_vring_queue(dev, vring_idx); + rte_spinlock_init(&vq->access_lock); + vq->avail_wrap_counter = 1; + vq->used_wrap_counter = 1; + vq->signalled_used_valid = false; } - dev->virtqueue[vring_idx] = vq; - init_vring_queue(dev, vring_idx); - rte_spinlock_init(&vq->access_lock); - vq->avail_wrap_counter = 1; - vq->used_wrap_counter = 1; - vq->signalled_used_valid = false; - - dev->nr_vring += 1; + dev->nr_vring = RTE_MAX(dev->nr_vring, vring_idx + 1); return 0; -- 2.26.2 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2020-11-18 16:33:39.013324724 +0000 +++ 0057-vhost-fix-virtqueues-metadata-allocation.patch 2020-11-18 16:33:37.982215096 +0000 @@ -1 +1 @@ -From 8acd7c21335305426fbbc0a3aea2978734d0b2a8 Mon Sep 17 00:00:00 2001 +From 511ac28ae0092e03056fa61c5706883486145756 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 8acd7c21335305426fbbc0a3aea2978734d0b2a8 ] + @@ -18 +19,0 @@ -Cc: stable@dpdk.org @@ -28 +29 @@ -index 6068c38ec6..0c9ba3b3af 100644 +index 0432b26638..7040bbfff8 100644 @@ -31 +32 @@ -@@ -580,20 +580,27 @@ alloc_vring_queue(struct virtio_net *dev, uint32_t vring_idx) +@@ -534,20 +534,27 @@ alloc_vring_queue(struct virtio_net *dev, uint32_t vring_idx) @@ -38 +39 @@ -- VHOST_LOG_CONFIG(ERR, +- RTE_LOG(ERR, VHOST_CONFIG, @@ -48 +49 @@ -+ VHOST_LOG_CONFIG(ERR, ++ RTE_LOG(ERR, VHOST_CONFIG,