On 9/10/21 9:30 AM, Peter Krempa wrote:
> On Thu, Sep 09, 2021 at 13:46:41 -0400, Laine Stump wrote:
>> The ACPI index of a device in a running guest can't be modified, and
>> libvirt doesn't actually attempt to modify it, but it was possible for
>> a user to request such a modification, and libvirt wouldn't complain,
>> thus misleading the user into thinking that it had actually been changed.
>>
>> Resolves:
https://bugzilla.redhat.com/1998920
>>
>> Signed-off-by: Laine Stump <laine(a)redhat.com>
>> ---
>> src/conf/domain_conf.c | 6 ++++++
>> 1 file changed, 6 insertions(+)
>>
>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>> index fefc527901..7ff890d8b7 100644
>> --- a/src/conf/domain_conf.c
>> +++ b/src/conf/domain_conf.c
>> @@ -28485,6 +28485,12 @@ virDomainDefCompatibleDevice(virDomainDef *def,
>> _("changing device alias is not
allowed"));
>> return -1;
>> }
>> +
>> + if (data.newInfo->acpiIndex != data.oldInfo->acpiIndex) {
>> + virReportError(VIR_ERR_OPERATION_DENIED, "%s",
>> + _("changing device 'acpi index' is not
allowed"));
>> + return -1;
>> + }
>
> I don't remember any more what the intended semantics of the 'update'
> API are in regards to asking the user to provide a complete definition
> of the device, but according to the 'alias' check above we seem to be
> specifically ignoring the situation when the new definition didn't
> provide an alias. This seems to be hinting that we ignore stuff that the
> used didn't provide.
>
> If that's the case you'll need to specifically exclude index '0'
from
> the above check.
>
While I agree that it would be user friendly I think we mandate users to
provide full device XML and looking into the doc we really do:
* virDomainUpdateDeviceFlags:
* @domain: pointer to domain object
* @xml: pointer to XML description of one device
* @flags: bitwise-OR of virDomainDeviceModifyFlags
*
* The supplied XML description of the device should contain all
* the information that is found in the corresponding domain XML.
* Leaving out any piece of information may be treated as a
* request for its removal, which may be denied.
We can special case acpiIndex as you suggest but I think that's the
farthest we should go. Otherwise it'll be hard to distinguish user's
laziness to provide full XML from genuine request for removal.
I definitely agree. It may be in certain cases even impossible to do the
right thing, as e.g. removing an attribute/element may be a genuine user
request to remove something.
That's what acutally surprised me in case of the 'alias' check. If we
want to go the proper way and require a full XML we should also remove
the exemption for alias.