Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 43a80754 authored by Björn Töpel's avatar Björn Töpel Committed by Greg Kroah-Hartman
Browse files

xsk: avoid store-tearing when assigning umem



[ Upstream commit 9764f4b301c3e7eb3b75eec85b73cad449cdbb0d ]

The umem member of struct xdp_sock is read outside of the control
mutex, in the mmap implementation, and needs a WRITE_ONCE to avoid
potential store-tearing.

Acked-by: default avatarJonathan Lemon <jonathan.lemon@gmail.com>
Fixes: 423f3832 ("xsk: add umem fill queue support and mmap")
Signed-off-by: default avatarBjörn Töpel <bjorn.topel@intel.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent c31ead3c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -454,7 +454,7 @@ static int xsk_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
		}

		xdp_get_umem(umem_xs->umem);
		xs->umem = umem_xs->umem;
		WRITE_ONCE(xs->umem, umem_xs->umem);
		sockfd_put(sock);
	} else if (!xs->umem || !xdp_umem_validate_queues(xs->umem)) {
		err = -EINVAL;
@@ -534,7 +534,7 @@ static int xsk_setsockopt(struct socket *sock, int level, int optname,

		/* Make sure umem is ready before it can be seen by others */
		smp_wmb();
		xs->umem = umem;
		WRITE_ONCE(xs->umem, umem);
		mutex_unlock(&xs->mutex);
		return 0;
	}