diff options
Diffstat (limited to 'lib/migration.c')
-rw-r--r-- | lib/migration.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/migration.c b/lib/migration.c index cc6d271..6148e9e 100644 --- a/lib/migration.c +++ b/lib/migration.c @@ -385,6 +385,12 @@ handle_mig_data_write(vfu_ctx_t *vfu_ctx, vfu_msg_t *msg) return ERROR_INT(EINVAL); } + if (msg->in.iov.iov_len < sizeof(struct vfio_user_mig_data) + req->size) { + vfu_log(vfu_ctx, LOG_ERR, "short write (%d < %ld)", + req->argsz, sizeof(struct vfio_user_mig_data) + req->size); + return ERROR_INT(EINVAL); + } + ssize_t ret = migr->callbacks.write_data(vfu_ctx, &req->data, req->size); if (ret < 0) { @@ -434,4 +440,12 @@ migration_set_pgsize(struct migration *migr, size_t pgsize) return 0; } +bool +migration_feature_needs_quiesce(struct vfio_user_device_feature *feature) +{ + return ((feature->flags & + (VFIO_DEVICE_FEATURE_SET | VFIO_DEVICE_FEATURE_MIG_DEVICE_STATE)) != 0) + && !(feature->flags & VFIO_DEVICE_FEATURE_PROBE); +} + /* ex: set tabstop=4 shiftwidth=4 softtabstop=4 expandtab: */ |