qemu: range check numa memory placement mode

https://bugzilla.redhat.com/show_bug.cgi?id=1047234

Add a range check for supported numa memory placement modes provided by
the user before setting them in the domain definition. Without the check
the user is able to provide a (yet) unknown mode which is then stored in
the domain definition. This potentially causes a NULL dereference when
the defintion is formatted into the XML.

To reproduce run:
 virsh numatune DOMNAME --mode 6 --nodeset 0

The XML will then contain:
  <numatune>
      <memory mode='(null)' nodeset='0'/>
  </numatune>

With this fix, the command fails:
 error: Unable to change numa parameters
 error: invalid argument: unsupported numa_mode: '6'
This commit is contained in:
Peter Krempa 2014-01-06 14:26:14 +01:00
parent 8b573a6b0d
commit 6e7490c734

View File

@ -8276,6 +8276,14 @@ qemuDomainSetNumaParameters(virDomainPtr dom,
if (STREQ(param->field, VIR_DOMAIN_NUMA_MODE)) { if (STREQ(param->field, VIR_DOMAIN_NUMA_MODE)) {
int mode = param->value.i; int mode = param->value.i;
if (mode >= VIR_NUMA_TUNE_MEM_PLACEMENT_MODE_LAST ||
mode < VIR_NUMA_TUNE_MEM_PLACEMENT_MODE_DEFAULT)
{
virReportError(VIR_ERR_INVALID_ARG,
_("unsupported numa_mode: '%d'"), mode);
goto cleanup;
}
if ((flags & VIR_DOMAIN_AFFECT_LIVE) && if ((flags & VIR_DOMAIN_AFFECT_LIVE) &&
vm->def->numatune.memory.mode != mode) { vm->def->numatune.memory.mode != mode) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s", virReportError(VIR_ERR_OPERATION_INVALID, "%s",