--- x/drivers/misc/vmw_vmci/vmci_context.c +++ y/drivers/misc/vmw_vmci/vmci_context.c @@ -535,6 +535,7 @@ int vmci_ctx_dequeue_datagram(struct vmc (u32) *max_size); return VMCI_ERROR_NO_MEM; } + *max_size = dq_entry->dg_size; list_del(list_item); context->pending_datagrams--; --- x/drivers/misc/vmw_vmci/vmci_host.c +++ y/drivers/misc/vmw_vmci/vmci_host.c @@ -435,7 +435,7 @@ static int vmci_host_do_receive_datagram if (recv_info.result >= VMCI_SUCCESS) { void __user *ubuf = (void __user *)(uintptr_t)recv_info.addr; - retval = copy_to_user(ubuf, dg, VMCI_DG_SIZE(dg)); + retval = copy_to_user(ubuf, dg, size); kfree(dg); if (retval != 0) return -EFAULT;