From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 482911B952 for ; Fri, 14 Dec 2018 18:53:08 +0100 (CET) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7F1061176DC; Fri, 14 Dec 2018 17:53:07 +0000 (UTC) Received: from ktraynor.remote.csb (ovpn-116-106.ams2.redhat.com [10.36.116.106]) by smtp.corp.redhat.com (Postfix) with ESMTP id 653DB60BF7; Fri, 14 Dec 2018 17:53:06 +0000 (UTC) From: Kevin Traynor To: Ilya Maximets Cc: Maxime Coquelin , dpdk stable Date: Fri, 14 Dec 2018 17:52:01 +0000 Message-Id: <20181214175203.24908-17-ktraynor@redhat.com> In-Reply-To: <20181214175203.24908-1-ktraynor@redhat.com> References: <20181214175203.24908-1-ktraynor@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Fri, 14 Dec 2018 17:53:07 +0000 (UTC) Subject: [dpdk-stable] patch 'vhost: fix double read of descriptor flags' has been queued to stable release 18.08.1 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: , X-List-Received-Date: Fri, 14 Dec 2018 17:53:08 -0000 Hi, FYI, your patch has been queued to stable release 18.08.1 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 12/18/18. 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. If the code is different (ie: not only metadata diffs), due for example to a change in context or macro names, please double check it. Thanks. Kevin Traynor --- >>From 162166cae7ce59efb5b7086ad6837143ab5e5298 Mon Sep 17 00:00:00 2001 From: Ilya Maximets Date: Wed, 5 Dec 2018 18:09:26 +0300 Subject: [PATCH] vhost: fix double read of descriptor flags [ upstream commit 48cae0bfa60c451c5d9c0d5be932300aadc7e676 ] Flags could be updated in a separate process leading to the inconsistent check. Additionally, read marked as 'volatile' to highlight the shared nature of the variable and avoid such issues in the future. Fixes: d3211c98c456 ("vhost: add helpers for packed virtqueues") Signed-off-by: Ilya Maximets Reviewed-by: Maxime Coquelin --- lib/librte_vhost/vhost.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h index 9ac607bad..bdbea68d2 100644 --- a/lib/librte_vhost/vhost.h +++ b/lib/librte_vhost/vhost.h @@ -385,6 +385,8 @@ static inline bool desc_is_avail(struct vring_packed_desc *desc, bool wrap_counter) { - return wrap_counter == !!(desc->flags & VRING_DESC_F_AVAIL) && - wrap_counter != !!(desc->flags & VRING_DESC_F_USED); + uint16_t flags = *((volatile uint16_t *) &desc->flags); + + return wrap_counter == !!(flags & VRING_DESC_F_AVAIL) && + wrap_counter != !!(flags & VRING_DESC_F_USED); } -- 2.19.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2018-12-14 17:49:48.190692519 +0000 +++ 0017-vhost-fix-double-read-of-descriptor-flags.patch 2018-12-14 17:49:47.000000000 +0000 @@ -1,8 +1,10 @@ -From 48cae0bfa60c451c5d9c0d5be932300aadc7e676 Mon Sep 17 00:00:00 2001 +From 162166cae7ce59efb5b7086ad6837143ab5e5298 Mon Sep 17 00:00:00 2001 From: Ilya Maximets Date: Wed, 5 Dec 2018 18:09:26 +0300 Subject: [PATCH] vhost: fix double read of descriptor flags +[ upstream commit 48cae0bfa60c451c5d9c0d5be932300aadc7e676 ] + Flags could be updated in a separate process leading to the inconsistent check. @@ -10,7 +12,6 @@ nature of the variable and avoid such issues in the future. Fixes: d3211c98c456 ("vhost: add helpers for packed virtqueues") -Cc: stable@dpdk.org Signed-off-by: Ilya Maximets Reviewed-by: Maxime Coquelin @@ -19,10 +20,10 @@ 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h -index 5218f1b12..552b9298d 100644 +index 9ac607bad..bdbea68d2 100644 --- a/lib/librte_vhost/vhost.h +++ b/lib/librte_vhost/vhost.h -@@ -394,6 +394,8 @@ static inline bool +@@ -385,6 +385,8 @@ static inline bool desc_is_avail(struct vring_packed_desc *desc, bool wrap_counter) { - return wrap_counter == !!(desc->flags & VRING_DESC_F_AVAIL) &&