aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2025-03-17 20:24:14 +1100
committerStefano Brivio <sbrivio@redhat.com>2025-03-20 20:32:50 +0100
commit4592719a744bcb47db2ff5680be4b8f6362a97ce (patch)
tree2cdbdf8ed51c21bebee90dfe2398eba3ad328c5e
parent32f6212551c5db3b7b3548e8483e5d73f07a35ac (diff)
downloadpasst-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.c6
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;
}