summaryrefslogtreecommitdiffstats
path: root/kernel/regset.c
diff options
context:
space:
mode:
authorMichael Kelley <mikelley@microsoft.com>2022-03-27 08:25:10 -0700
committerWei Liu <wei.liu@kernel.org>2022-03-29 13:19:33 +0000
commitb6cae15b5710c8097aad26a2e5e752c323ee5348 (patch)
tree677c5a8ddd9fef4555615dc6373b702ad06c38db /kernel/regset.c
parent8d21732475c637c7efcdb91dc927a4c594e97898 (diff)
downloadlinux-b6cae15b5710c8097aad26a2e5e752c323ee5348.tar.bz2
Drivers: hv: vmbus: Prevent load re-ordering when reading ring buffer
When reading a packet from a host-to-guest ring buffer, there is no memory barrier between reading the write index (to see if there is a packet to read) and reading the contents of the packet. The Hyper-V host uses store-release when updating the write index to ensure that writes of the packet data are completed first. On the guest side, the processor can reorder and read the packet data before the write index, and sometimes get stale packet data. Getting such stale packet data has been observed in a reproducible case in a VM on ARM64. Fix this by using virt_load_acquire() to read the write index, ensuring that reads of the packet data cannot be reordered before it. Preventing such reordering is logically correct, and with this change, getting stale data can no longer be reproduced. Signed-off-by: Michael Kelley <mikelley@microsoft.com> Reviewed-by: Andrea Parri (Microsoft) <parri.andrea@gmail.com> Link: https://lore.kernel.org/r/1648394710-33480-1-git-send-email-mikelley@microsoft.com Signed-off-by: Wei Liu <wei.liu@kernel.org>
Diffstat (limited to 'kernel/regset.c')
0 files changed, 0 insertions, 0 deletions