aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/dma.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/dma.h b/lib/dma.h
index e0d6d72..aeed9bb 100644
--- a/lib/dma.h
+++ b/lib/dma.h
@@ -246,9 +246,12 @@ dma_map_sg(dma_controller_t *dma, const dma_sg_t *sg, struct iovec *iov,
if (sg[i].region >= dma->nregions) {
return -EINVAL;
}
+ region = &dma->regions[sg[i].region];
+ if (region->virt_addr == NULL) {
+ return -EFAULT;
+ }
vfu_log(dma->vfu_ctx, LOG_DEBUG, "map %#lx-%#lx\n",
sg->dma_addr + sg->offset, sg->dma_addr + sg->offset + sg->length);
- region = &dma->regions[sg[i].region];
iov[i].iov_base = region->virt_addr + sg[i].offset;
iov[i].iov_len = sg[i].length;
region->refcnt++;