From patchwork Wed Dec 5 15:09:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Maximets X-Patchwork-Id: 48546 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E8A251B146; Wed, 5 Dec 2018 16:09:38 +0100 (CET) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by dpdk.org (Postfix) with ESMTP id BFAFB1B13C for ; Wed, 5 Dec 2018 16:09:37 +0100 (CET) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20181205150936euoutp022c64663ecd1d10da0028e862804665e7~teFpY7zlY0813308133euoutp02K for ; Wed, 5 Dec 2018 15:09:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20181205150936euoutp022c64663ecd1d10da0028e862804665e7~teFpY7zlY0813308133euoutp02K DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1544022576; bh=p5K5IeVgUqJqONRmK2vna2TgtLE0IbtmZxEchZZ9dc0=; h=From:To:Cc:Subject:Date:References:From; b=SYeAd1oXjIZAP+FsEXL971dddSxfbsd5gLj0F6NBxw/ebqGrtaX1s6wnpDKr9dgYa 7C9QiEW/Os7e2w+/sNGhp7HGKi72BHYsXaoixD/u7L/YkBcZ+LV1PdQTvOQTCc35MM 22lUwCeH/KA3bIWZVPe4P3HF6WAv/6tfBakALwS4= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20181205150936eucas1p23c69d5b1ab1090d4c44eac9e8a884587~teFpBFiNs2306823068eucas1p2D; Wed, 5 Dec 2018 15:09:36 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id E1.76.04441.F2AE70C5; Wed, 5 Dec 2018 15:09:36 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20181205150935eucas1p11698df8ed58ff02a4326dd5780af4470~teFoOpJn22958729587eucas1p1j; Wed, 5 Dec 2018 15:09:35 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20181205150935eusmtrp2ec6aba2d6022e1280c1b4f2e0eb87f00~teFoAKVSV2855128551eusmtrp2h; Wed, 5 Dec 2018 15:09:35 +0000 (GMT) X-AuditID: cbfec7f2-5e3ff70000001159-5e-5c07ea2f7180 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 9A.20.04284.F2AE70C5; Wed, 5 Dec 2018 15:09:35 +0000 (GMT) Received: from imaximets.rnd.samsung.ru (unknown [106.109.129.180]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20181205150932eusmtip28e0453701f40e35607ad4753c609e046~teFlwlY672510625106eusmtip2v; Wed, 5 Dec 2018 15:09:32 +0000 (GMT) From: Ilya Maximets To: dev@dpdk.org, Maxime Coquelin Cc: Tiwei Bie , Zhihong Wang , jfreimann@redhat.com, Ilya Maximets , stable@dpdk.org Date: Wed, 5 Dec 2018 18:09:26 +0300 Message-Id: <20181205150926.4895-1-i.maximets@samsung.com> X-Mailer: git-send-email 2.17.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrDIsWRmVeSWpSXmKPExsWy7djP87oGr9hjDA71M1q8+7SdyeJK+092 i3NrlrJYHOvcw2Lxr+MPu8XWhv9MFpsvTmJyYPf4tWApq8fiPS+ZPN7vu8rm0bdlFWMASxSX TUpqTmZZapG+XQJXxqyWR6wFtzkqPj57ztzAuJy9i5GTQ0LAROLEo0msXYxcHEICKxgl1s95 xw7hfGGUaOs9AJX5zChxqu0FG0xL48J2ZojEckaJNX+2QlX9YJRour4PrIpNQEfi1OojjCC2 iICdxJQ9P8E6mAXmMkrMX/oNLCEsYC1x6OBNsEtYBFQlVi26zAxi8wpYSbxYtocJYp28xOoN B8CaJQTOsEnMv3ML6nQXidsvp0EVCUu8Or4FKi4j8X/nfKh4vcT9lpeMEM0djBLTD/2DSthL bHl9DqiBA+gkTYn1u/Qhwo4SD9ZsZgQJSwjwSdx4KwgSZgYyJ22bzgwR5pXoaBOCqFaR+H1w OTOELSVx891nqAs8JJb9mQy2SEggVmLmi9XMExjlZiHsWsDIuIpRPLW0ODc9tdgwL7Vcrzgx t7g0L10vOT93EyMwDZz+d/zTDsavl5IOMQpwMCrx8L54wB4jxJpYVlyZe4hRgoNZSYR3hQ1Q iDclsbIqtSg/vqg0J7X4EKM0B4uSOG81w4NoIYH0xJLU7NTUgtQimCwTB6dUA2OQDpNqvNne U4+e9zFXHW3bc211Q/3xWQ9r4huFVS67zgn+OJV9RXHM4smPehbl3LnZt+hCJcsm6YkvhBT2 Jmo5RWlVVrMV9XCEuDBypz8wYtew5zj19pun6d1V+7pD6to//dnqmc5woPdDxUWrlcvlpPS3 VEk1N9Tn3MqpbQibsN7s7cng/0osxRmJhlrMRcWJAPG/inL/AgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrILMWRmVeSWpSXmKPExsVy+t/xe7r6r9hjDK58ZrV492k7k8WV9p/s FufWLGWxONa5h8XiX8cfdoutDf+ZLDZfnMTkwO7xa8FSVo/Fe14yebzfd5XNo2/LKsYAlig9 m6L80pJUhYz84hJbpWhDCyM9Q0sLPSMTSz1DY/NYKyNTJX07m5TUnMyy1CJ9uwS9jFktj1gL bnNUfHz2nLmBcTl7FyMnh4SAiUTjwnZmEFtIYCmjxMNTyhBxKYkfvy6wQtjCEn+udbF1MXIB 1XxjlFi3dDUjSIJNQEfi1OojYLaIgIPE7T2vWECKmAUWMkrsPLgYbKqwgLXEoYM3wbaxCKhK rFp0GSzOK2Al8WLZHiaIDfISqzccYJ7AyLOAkWEVo0hqaXFuem6xoV5xYm5xaV66XnJ+7iZG YPBtO/Zz8w7GSxuDDzEKcDAq8fC+eMAeI8SaWFZcmXuIUYKDWUmEd4UNUIg3JbGyKrUoP76o NCe1+BCjKdDyicxSosn5wMjIK4k3NDU0t7A0NDc2NzazUBLnPW9QGSUkkJ5YkpqdmlqQWgTT x8TBKdXAWBR5W77OsefEq5yUZdkL99Ylzmedpfq9ditvU8HVuEcnXq/peugtx7lW5GiE0Ici e98r34/EXeC1azBw6Hjzx3Pan0mbfn/SuDbxHe+/N4nftonMSHx6cHv7WivWHiNO+bToQzrH 4vh2bm/JUgi7o3/+64NbW6UehZ/9nblPM1hlXvC5a1vUApVYijMSDbWYi4oTAfjptJBUAgAA X-CMS-MailID: 20181205150935eucas1p11698df8ed58ff02a4326dd5780af4470 X-Msg-Generator: CA X-RootMTR: 20181205150935eucas1p11698df8ed58ff02a4326dd5780af4470 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20181205150935eucas1p11698df8ed58ff02a4326dd5780af4470 References: Subject: [dpdk-dev] [PATCH] vhost: fix double read of descriptor flags X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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") Cc: stable@dpdk.org 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 5218f1b12..84cbee2b6 100644 --- a/lib/librte_vhost/vhost.h +++ b/lib/librte_vhost/vhost.h @@ -393,8 +393,10 @@ vq_is_packed(struct virtio_net *dev) 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); } #define VHOST_LOG_PAGE 4096