Re: [PATCH 4/5] virDomainMemoryDefCheckConflict: Validate dimm slot too

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/16/23 14:05, Peter Krempa wrote:
> On Mon, Nov 06, 2023 at 12:38:27 +0100, Michal Privoznik wrote:
>> Since we're iterating over def->mems array, might as well check
>> for dimm slot duplicates.
>>
>> Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx>
>> ---
>>  src/conf/domain_validate.c | 36 +++++++++++++++++++++++-------------
>>  1 file changed, 23 insertions(+), 13 deletions(-)
>>
>> diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
>> index 5d9602666e..f45ee0a8a5 100644
>> --- a/src/conf/domain_validate.c
>> +++ b/src/conf/domain_validate.c
>> @@ -2221,6 +2221,7 @@ static int
>>  virDomainMemoryDefCheckConflict(const virDomainMemoryDef *mem,
>>                                  const virDomainDef *def)
>>  {
>> +    const virDomainDeviceDimmAddress *thisAddr = NULL;
>>      unsigned long long thisStart = 0;
>>      unsigned long long thisEnd = 0;
>>      size_t i;
>> @@ -2235,6 +2236,7 @@ virDomainMemoryDefCheckConflict(const virDomainMemoryDef *mem,
>>      case VIR_DOMAIN_MEMORY_MODEL_DIMM:
>>      case VIR_DOMAIN_MEMORY_MODEL_NVDIMM:
>>          if (mem->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DIMM) {
>> +            thisAddr = &mem->info.addr.dimm;
>>              thisStart = mem->info.addr.dimm.base;
>>          }
>>          break;
>> @@ -2244,7 +2246,7 @@ virDomainMemoryDefCheckConflict(const virDomainMemoryDef *mem,
>>          break;
>>      }
>>  
>> -    if (thisStart == 0) {
>> +    if (thisStart == 0 && !thisAddr) {
>>          return 0;
>>      }
> 
> This seems a bit suspicious, because if the start address is 0, where
> qemu will auto-populate it, the code below will still try to validate
> it against existing devices.
> 
> Very theoretically if you are adding a big enough device it can possibly
> clash with another one that is somewhere further in memory (start
> address already populated) despite the fact that qemu would put the new
> device into a reasonable location at the end of the address space.
> 
> IMO if the start address is 0 we must not attempt to do anything about
> the address validation and the above condition will make that no longer
> the case.
> 

Fair enough. Consider this squashed in:

diff --git i/src/conf/domain_validate.c w/src/conf/domain_validate.c
index f45ee0a8a5..c72108886e 100644
--- i/src/conf/domain_validate.c
+++ w/src/conf/domain_validate.c
@@ -2304,7 +2304,7 @@ virDomainMemoryDefCheckConflict(const
virDomainMemoryDef *mem,
             break;
         }

-        if (otherStart == 0)
+        if (thisStart == 0 || otherStart == 0)
             continue;

         if (thisStart <= otherStart && thisEnd > otherStart) {

Or do you want me to send v2?

Michal
_______________________________________________
Devel mailing list -- devel@xxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux