mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-11 07:17:44 +00:00
conf: don't iterate over backcompat console in virDomainChrDefForeach
If the first console is just a copy of the first serial device we don't need to iterate over the same device twice in order to perform actions like security labeling, cgroup configuring, etc. Currently only security SELinux manager was aware of this fact. Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
f8912d0527
commit
0c53382d82
@ -3523,6 +3523,24 @@ void virDomainDeviceInfoClear(virDomainDeviceInfoPtr info)
|
||||
}
|
||||
|
||||
|
||||
static bool
|
||||
virDomainSkipBackcompatConsole(virDomainDefPtr def,
|
||||
size_t index,
|
||||
bool all)
|
||||
{
|
||||
virDomainChrDefPtr console = def->consoles[index];
|
||||
|
||||
if (!all && index == 0 &&
|
||||
(console->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL ||
|
||||
console->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_NONE) &&
|
||||
def->os.type == VIR_DOMAIN_OSTYPE_HVM) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
virDomainDeviceInfoIterateInternal(virDomainDefPtr def,
|
||||
virDomainDeviceInfoCallback cb,
|
||||
@ -3591,11 +3609,7 @@ virDomainDeviceInfoIterateInternal(virDomainDefPtr def,
|
||||
return -1;
|
||||
}
|
||||
for (i = 0; i < def->nconsoles; i++) {
|
||||
if (!all &&
|
||||
i == 0 &&
|
||||
(def->consoles[i]->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL ||
|
||||
def->consoles[i]->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_NONE) &&
|
||||
def->os.type == VIR_DOMAIN_OSTYPE_HVM)
|
||||
if (virDomainSkipBackcompatConsole(def, i, all))
|
||||
continue;
|
||||
device.data.chr = def->consoles[i];
|
||||
if (cb(def, &device, &def->consoles[i]->info, opaque) < 0)
|
||||
@ -25431,6 +25445,8 @@ virDomainChrDefForeach(virDomainDefPtr def,
|
||||
goto done;
|
||||
}
|
||||
for (i = 0; i < def->nconsoles; i++) {
|
||||
if (virDomainSkipBackcompatConsole(def, i, false))
|
||||
continue;
|
||||
if ((iter)(def,
|
||||
def->consoles[i],
|
||||
opaque) < 0)
|
||||
|
@ -2323,11 +2323,6 @@ virSecuritySELinuxRestoreSecurityChardevCallback(virDomainDefPtr def,
|
||||
{
|
||||
virSecurityManagerPtr mgr = opaque;
|
||||
|
||||
/* This is taken care of by processing of def->serials */
|
||||
if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE &&
|
||||
dev->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL)
|
||||
return 0;
|
||||
|
||||
return virSecuritySELinuxRestoreChardevLabel(mgr, def, dev, dev->source);
|
||||
}
|
||||
|
||||
@ -2717,11 +2712,6 @@ virSecuritySELinuxSetSecurityChardevCallback(virDomainDefPtr def,
|
||||
{
|
||||
virSecurityManagerPtr mgr = opaque;
|
||||
|
||||
/* This is taken care of by processing of def->serials */
|
||||
if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE &&
|
||||
dev->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL)
|
||||
return 0;
|
||||
|
||||
return virSecuritySELinuxSetChardevLabel(mgr, def, dev, dev->source);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user