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 7D9C6A0527 for ; Mon, 9 Nov 2020 19:43:31 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7739E6883; Mon, 9 Nov 2020 19:43:30 +0100 (CET) Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by dpdk.org (Postfix) with ESMTP id 7CEF66883 for ; Mon, 9 Nov 2020 19:43:28 +0100 (CET) Received: by mail-wr1-f67.google.com with SMTP id w1so9892887wrm.4 for ; Mon, 09 Nov 2020 10:43:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=quvia5MyejV8uPdlUrVkUY8EVZjHL8MXHpPHM1BuXJM=; b=kRZgdDgqG6RtcBusUEeWiVkirjwD9iLajhxbD7CIKHOgxWyfh+C4zJVc70QZy90nrE AtTCMN+8HTZajlLJyB7sjnlwxPI0c1j4YNoeun7pde4vUTg+Wf/nfXbl1IkMUegspjWA qs4Eo7CKC0CVsmXT9U8wTwkvqcVzLFGLXqBmzfxF0n0fWHrpJ6Syf4u9SaYEeu9IT+m9 r4cfOIBZpr8wgKlSEEfscZaj+AuJivKc8himdgNn7zkus1LIOJIq067HldX72dxZ9UaD ymBZAKsVQ7MN3RqaqnGj99k8AmrdGCsO/0eYqRsIFyXl9GdA0uSEuRuakbgVkVUyV0pU heeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=quvia5MyejV8uPdlUrVkUY8EVZjHL8MXHpPHM1BuXJM=; b=BRcu/wbYL3lhEiivOKSdkPB+JRcqdHR4OqyBP09+3DjK8wivPVcujm0B4vfdEnNAzr GgQCCLbefP8w9j+P1XHM36gF8a0Nez7s0r+nT2YGYdv9ZErRhBi1GsXk5LXFxaM+DgYF GjkjQWLlHY7eJwViiABfRgLwi/tIn+j32MFq+TSWbySKbvHZKzUpkojmCd6IcIMmP5zU 9NzLVUg5DxOvF+QGywb+VBTLdJ759mtREpdTTjcEsMq3cM6BygBRwz4E+tr+tpizI7R/ N7f/NeTyuw4+1c/HYojXATiVifoDnlRLI6Xxk5e+U1GhOsCnoazkfHhIUuw5kod/PNQR W3pg== X-Gm-Message-State: AOAM530TzRahvlsOYF2uNAV7XICPFIUzf+wQKSEONvJy6v7RM7D1bL9l st2LD7IBf5MdhPJfHCCQsR0= X-Google-Smtp-Source: ABdhPJylJfoSvYJ0KOID3BYAXr5emeFp0Bv7Xh6yDBUwB9F4l7U+zmt15Ai+f5A65rwc0szXT3pTMQ== X-Received: by 2002:adf:ef48:: with SMTP id c8mr19949415wrp.399.1604947407218; Mon, 09 Nov 2020 10:43:27 -0800 (PST) Received: from localhost ([88.98.246.218]) by smtp.gmail.com with ESMTPSA id t23sm336037wmn.4.2020.11.09.10.43.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Nov 2020 10:43:26 -0800 (PST) From: luca.boccassi@gmail.com To: Maxime Coquelin Cc: Adrian Moreno , Chenbo Xia , dpdk stable Date: Mon, 9 Nov 2020 18:40:28 +0000 Message-Id: <20201109184111.3463090-40-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201109184111.3463090-1-luca.boccassi@gmail.com> References: <20201028104606.3504127-207-luca.boccassi@gmail.com> <20201109184111.3463090-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'vhost: fix virtqueues metadata allocation' has been queued to stable release 19.11.6 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 stable release 19.11.6 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/11/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/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/59bdbb385cfbfa370af8e7f1c8176231596b358a Thanks. Luca Boccassi --- >From 59bdbb385cfbfa370af8e7f1c8176231596b358a 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 20fda61518..0d65719f33 100644 --- a/lib/librte_vhost/vhost.c +++ b/lib/librte_vhost/vhost.c @@ -560,22 +560,29 @@ int 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.27.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2020-11-09 18:40:12.780792043 +0000 +++ 0040-vhost-fix-virtqueues-metadata-allocation.patch 2020-11-09 18:40:11.163311780 +0000 @@ -1 +1 @@ -From 8acd7c21335305426fbbc0a3aea2978734d0b2a8 Mon Sep 17 00:00:00 2001 +From 59bdbb385cfbfa370af8e7f1c8176231596b358a 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 20fda61518..0d65719f33 100644 @@ -31 +32 @@ -@@ -579,22 +579,29 @@ int +@@ -560,22 +560,29 @@ int @@ -39 +40 @@ -- VHOST_LOG_CONFIG(ERR, +- RTE_LOG(ERR, VHOST_CONFIG, @@ -49 +50 @@ -+ VHOST_LOG_CONFIG(ERR, ++ RTE_LOG(ERR, VHOST_CONFIG,