aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2023-12-18 22:45:24 +0000
committerMark Johnston <markj@FreeBSD.org>2023-12-18 22:45:24 +0000
commitd9b7301bb791faab48b6c7733c34078427b9a374 (patch)
tree847aa43165d50ded5f1a76eafb9b950a54665522
parent8a1b84f861e869a76b1902692dbb93c2a54081d5 (diff)
downloadsrc-d9b7301bb791faab48b6c7733c34078427b9a374.tar.gz
src-d9b7301bb791faab48b6c7733c34078427b9a374.zip
nvme: Initialize HMB entries before loading them into the controller
struct nvme_hmb_desc contains a pad field which was not getting initialized before being synced. This doesn't have much consequence but triggers a report from KMSAN, which verifies that host-filled DMA memory is initialized before it is made visible to the device. So, let's just initialize it properly. Reported by: KMSAN Reviewed by: mav, imp MFC after: 1 week Sponsored by: Klara, Inc. Sponsored by: Juniper Networks, Inc. Differential Revision: https://reviews.freebsd.org/D43090
-rw-r--r--sys/dev/nvme/nvme_ctrlr.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c
index 836d13eaa16d..771e5cd1251b 100644
--- a/sys/dev/nvme/nvme_ctrlr.c
+++ b/sys/dev/nvme/nvme_ctrlr.c
@@ -1007,6 +1007,8 @@ again:
}
for (i = 0; i < ctrlr->hmb_nchunks; i++) {
+ memset(&ctrlr->hmb_desc_vaddr[i], 0,
+ sizeof(struct nvme_hmb_desc));
ctrlr->hmb_desc_vaddr[i].addr =
htole64(ctrlr->hmb_chunks[i].hmbc_paddr);
ctrlr->hmb_desc_vaddr[i].size = htole32(ctrlr->hmb_chunk / ctrlr->page_size);