diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2025-03-17 20:24:14 +1100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2025-03-20 20:32:50 +0100 |
commit | 4592719a744bcb47db2ff5680be4b8f6362a97ce (patch) | |
tree | 2cdbdf8ed51c21bebee90dfe2398eba3ad328c5e | |
parent | 32f6212551c5db3b7b3548e8483e5d73f07a35ac (diff) | |
download | passt-4592719a744bcb47db2ff5680be4b8f6362a97ce.tar passt-4592719a744bcb47db2ff5680be4b8f6362a97ce.tar.gz passt-4592719a744bcb47db2ff5680be4b8f6362a97ce.tar.bz2 passt-4592719a744bcb47db2ff5680be4b8f6362a97ce.tar.lz passt-4592719a744bcb47db2ff5680be4b8f6362a97ce.tar.xz passt-4592719a744bcb47db2ff5680be4b8f6362a97ce.tar.zst passt-4592719a744bcb47db2ff5680be4b8f6362a97ce.zip |
vu_common: Tighten vu_packet_check_range()
This function verifies that the given packet is within the mmap()ed memory
region of the vhost-user device. We can do better, however. The packet
should be not only within the mmap()ed range, but specifically in the
subsection of that range set aside for shared buffers, which starts at
dev_region->mmap_offset within there.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r-- | vu_common.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/vu_common.c b/vu_common.c index 686a09b..9eea4f2 100644 --- a/vu_common.c +++ b/vu_common.c @@ -37,10 +37,10 @@ int vu_packet_check_range(void *buf, const char *ptr, size_t len) for (dev_region = buf; dev_region->mmap_addr; dev_region++) { /* NOLINTNEXTLINE(performance-no-int-to-ptr) */ - char *m = (char *)(uintptr_t)dev_region->mmap_addr; + char *m = (char *)(uintptr_t)dev_region->mmap_addr + + dev_region->mmap_offset; - if (m <= ptr && - ptr + len <= m + dev_region->mmap_offset + dev_region->size) + if (m <= ptr && ptr + len <= m + dev_region->size) return 0; } |