diff options
-rw-r--r-- | lib/dma.h | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -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++; |