xsk: avoid store-tearing when assigning queues
authorBjörn Töpel <bjorn.topel@intel.com>
Wed, 4 Sep 2019 11:49:10 +0000 (13:49 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 27 Jan 2020 13:51:10 +0000 (14:51 +0100)
[ Upstream commit 94a997637c5b562fa0ca44fca1d2cd02ec08236f ]

Use WRITE_ONCE when doing the store of tx, rx, fq, and cq, to avoid
potential store-tearing. These members are read outside of the control
mutex in the mmap implementation.

Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com>
Fixes: 37b076933a8e ("xsk: add missing write- and data-dependency barrier")
Signed-off-by: Björn Töpel <bjorn.topel@intel.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/xdp/xsk.c

index c90854b..b580078 100644 (file)
@@ -320,7 +320,7 @@ static int xsk_init_queue(u32 entries, struct xsk_queue **queue,
 
        /* Make sure queue is ready before it can be seen by others */
        smp_wmb();
-       *queue = q;
+       WRITE_ONCE(*queue, q);
        return 0;
 }