mirror of https://gitlab.com/qemu-project/qemu
vhost-user: split vhost_user_read()
Split vhost_user_read(), so only header can be read with vhost_user_read_header(). Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Message-Id: <20190308140454.32437-8-marcandre.lureau@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
917d7dd72a
commit
9af84c02e2
|
@ -214,7 +214,7 @@ static bool ioeventfd_enabled(void)
|
||||||
return !kvm_enabled() || kvm_eventfds_enabled();
|
return !kvm_enabled() || kvm_eventfds_enabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg)
|
static int vhost_user_read_header(struct vhost_dev *dev, VhostUserMsg *msg)
|
||||||
{
|
{
|
||||||
struct vhost_user *u = dev->opaque;
|
struct vhost_user *u = dev->opaque;
|
||||||
CharBackend *chr = u->user->chr;
|
CharBackend *chr = u->user->chr;
|
||||||
|
@ -225,7 +225,7 @@ static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg)
|
||||||
if (r != size) {
|
if (r != size) {
|
||||||
error_report("Failed to read msg header. Read %d instead of %d."
|
error_report("Failed to read msg header. Read %d instead of %d."
|
||||||
" Original request %d.", r, size, msg->hdr.request);
|
" Original request %d.", r, size, msg->hdr.request);
|
||||||
goto fail;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* validate received flags */
|
/* validate received flags */
|
||||||
|
@ -233,7 +233,21 @@ static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg)
|
||||||
error_report("Failed to read msg header."
|
error_report("Failed to read msg header."
|
||||||
" Flags 0x%x instead of 0x%x.", msg->hdr.flags,
|
" Flags 0x%x instead of 0x%x.", msg->hdr.flags,
|
||||||
VHOST_USER_REPLY_MASK | VHOST_USER_VERSION);
|
VHOST_USER_REPLY_MASK | VHOST_USER_VERSION);
|
||||||
goto fail;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg)
|
||||||
|
{
|
||||||
|
struct vhost_user *u = dev->opaque;
|
||||||
|
CharBackend *chr = u->user->chr;
|
||||||
|
uint8_t *p = (uint8_t *) msg;
|
||||||
|
int r, size;
|
||||||
|
|
||||||
|
if (vhost_user_read_header(dev, msg) < 0) {
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* validate message size is sane */
|
/* validate message size is sane */
|
||||||
|
@ -241,7 +255,7 @@ static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg)
|
||||||
error_report("Failed to read msg header."
|
error_report("Failed to read msg header."
|
||||||
" Size %d exceeds the maximum %zu.", msg->hdr.size,
|
" Size %d exceeds the maximum %zu.", msg->hdr.size,
|
||||||
VHOST_USER_PAYLOAD_SIZE);
|
VHOST_USER_PAYLOAD_SIZE);
|
||||||
goto fail;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg->hdr.size) {
|
if (msg->hdr.size) {
|
||||||
|
@ -251,14 +265,11 @@ static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg)
|
||||||
if (r != size) {
|
if (r != size) {
|
||||||
error_report("Failed to read msg payload."
|
error_report("Failed to read msg payload."
|
||||||
" Read %d instead of %d.", r, msg->hdr.size);
|
" Read %d instead of %d.", r, msg->hdr.size);
|
||||||
goto fail;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int process_message_reply(struct vhost_dev *dev,
|
static int process_message_reply(struct vhost_dev *dev,
|
||||||
|
|
Loading…
Reference in New Issue