On 06/13/2018 04:15 AM, Ján Tomko wrote:
On Tue, Jun 12, 2018 at 10:32:06AM -0400, John Ferlan wrote:
> Add a check during qemuDomainAttachDeviceConfig whether the
> new/incoming <hostdev ...> device would have an existing
> <address> already and if so fail the attach. This can happen
> if two hostdev's are added supplying the same address or
> if the new hostdev address could possibly be a duplicate
> of an existing SCSI <disk>.
>
> Signed-off-by: John Ferlan <jferlan(a)redhat.com>
> ---
> src/qemu/qemu_driver.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index f0fb806fcd..ae8e0e898a 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -8015,6 +8015,12 @@ qemuDomainAttachDeviceConfig(virDomainDefPtr
> vmdef,
> _("device is already in the domain
> configuration"));
> return -1;
> }
> + if (dev->data.hostdev->info->type !=
> VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
> + virDomainDefHasDeviceAddress(vmdef,
> dev->data.hostdev->info)) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> + _("a device with the same address already
> exists "));
> + return -1;
> + }
This check feels out of place here. We should be checking for that in
postParse. Do we have the same problem on domain startup?
I've avoided new post parse checks due to the domain disappearing phenomena.
But no, I don't believe the same problem exists there. How would you
suggest reproducing that?
If one virsh edit's their domain adding two hostdev's with the same
<address>, then virDomainDefValidateInternal catches that with the call
to virDomainDefCheckDuplicateDriveAddresses. With this patch if one
calls attach-device --config with a duplicated <address>, then this
check will catch that.
This is similar to VIR_DOMAIN_DEVICE_RNG processing in the same code.
John
Jano
> if (virDomainHostdevInsert(vmdef, hostdev))
> return -1;
> dev->data.hostdev = NULL;
> --
> 2.14.4
>
> --
> libvir-list mailing list
> libvir-list(a)redhat.com
>
https://www.redhat.com/mailman/listinfo/libvir-list