vhost: check log mmap offset and size overflow
vhost_user_set_log_base() is a message handler that is called to handle the VHOST_USER_SET_LOG_BASE message. Its payload contains a 64 bit size and offset. Both are added up and used as a size when calling mmap(). There is no integer overflow check. If an integer overflow occurs a smaller memory map would be created than requested. Since the returned mapping is mapped as writable and used for logging, a memory corruption could occur. CVE-2020-10722 Fixes: fbc4d248b198 ("vhost: fix offset while mmaping log base address") Cc: stable@dpdk.org Reported-by: Ilja Van Sprundel <ivansprundel@ioactive.com> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com> Reviewed-by: Xiaolong Ye <xiaolong.ye@intel.com> Reviewed-by: Ilja Van Sprundel <ivansprundel@ioactive.com>
This commit is contained in:
parent
cfacbcb5a2
commit
3ae4beb079
@ -2068,10 +2068,10 @@ vhost_user_set_log_base(struct virtio_net **pdev, struct VhostUserMsg *msg,
|
||||
size = msg->payload.log.mmap_size;
|
||||
off = msg->payload.log.mmap_offset;
|
||||
|
||||
/* Don't allow mmap_offset to point outside the mmap region */
|
||||
if (off > size) {
|
||||
/* Check for mmap size and offset overflow. */
|
||||
if (off >= -size) {
|
||||
VHOST_LOG_CONFIG(ERR,
|
||||
"log offset %#"PRIx64" exceeds log size %#"PRIx64"\n",
|
||||
"log offset %#"PRIx64" and log size %#"PRIx64" overflow\n",
|
||||
off, size);
|
||||
return RTE_VHOST_MSG_RESULT_ERR;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user