Skip to content

Commit e6762c8

Browse files
magnus-karlssonAlexei Starovoitov
authored andcommitted
xsk: add missing smp_rmb() in xsk_mmap
All the setup code in AF_XDP is protected by a mutex with the exception of the mmap code that cannot use it. To make sure that a process banging on the mmap call at the same time as another process is setting up the socket, smp_wmb() calls were added in the umem registration code and the queue creation code, so that the published structures that xsk_mmap needs would be consistent. However, the corresponding smp_rmb() calls were not added to the xsk_mmap code. This patch adds these calls. Fixes: 37b0769 ("xsk: add missing write- and data-dependency barrier") Fixes: c0c77d8 ("xsk: add user memory registration support sockopt") Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
1 parent b90efd2 commit e6762c8

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

net/xdp/xsk.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,8 @@ static int xsk_mmap(struct file *file, struct socket *sock,
669669
if (!umem)
670670
return -EINVAL;
671671

672+
/* Matches the smp_wmb() in XDP_UMEM_REG */
673+
smp_rmb();
672674
if (offset == XDP_UMEM_PGOFF_FILL_RING)
673675
q = READ_ONCE(umem->fq);
674676
else if (offset == XDP_UMEM_PGOFF_COMPLETION_RING)
@@ -678,6 +680,8 @@ static int xsk_mmap(struct file *file, struct socket *sock,
678680
if (!q)
679681
return -EINVAL;
680682

683+
/* Matches the smp_wmb() in xsk_init_queue */
684+
smp_rmb();
681685
qpg = virt_to_head_page(q->ring);
682686
if (size > (PAGE_SIZE << compound_order(qpg)))
683687
return -EINVAL;

0 commit comments

Comments
 (0)