mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-11-06 13:20:20 +00:00
qemu ns: Create chardev backends more frequently
Currently, the only type of chardev that we create the backend for in the namespace is type='dev'. This is not enough, other backends might have files under /dev too. For instance channels might have a unix socket under /dev (well, bind mounted under /dev from a different place). Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
7976d1a514
commit
e93d844b90
@ -7745,7 +7745,7 @@ qemuDomainCreateDeviceRecursive(const char *device,
|
|||||||
|
|
||||||
isLink = S_ISLNK(sb.st_mode);
|
isLink = S_ISLNK(sb.st_mode);
|
||||||
isDev = S_ISCHR(sb.st_mode) || S_ISBLK(sb.st_mode);
|
isDev = S_ISCHR(sb.st_mode) || S_ISBLK(sb.st_mode);
|
||||||
isReg = S_ISREG(sb.st_mode);
|
isReg = S_ISREG(sb.st_mode) || S_ISFIFO(sb.st_mode) || S_ISSOCK(sb.st_mode);
|
||||||
|
|
||||||
/* Here, @device might be whatever path in the system. We
|
/* Here, @device might be whatever path in the system. We
|
||||||
* should create the path in the namespace iff it's "/dev"
|
* should create the path in the namespace iff it's "/dev"
|
||||||
@ -8142,11 +8142,17 @@ qemuDomainSetupChardev(virDomainDefPtr def ATTRIBUTE_UNUSED,
|
|||||||
void *opaque)
|
void *opaque)
|
||||||
{
|
{
|
||||||
const struct qemuDomainCreateDeviceData *data = opaque;
|
const struct qemuDomainCreateDeviceData *data = opaque;
|
||||||
|
const char *path = NULL;
|
||||||
|
|
||||||
if (dev->source->type != VIR_DOMAIN_CHR_TYPE_DEV)
|
if (!(path = virDomainChrSourceDefGetPath(dev->source)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return qemuDomainCreateDevice(dev->source->data.file.path, data, false);
|
/* Socket created by qemu. It doesn't exist upfront. */
|
||||||
|
if (dev->source->type == VIR_DOMAIN_CHR_TYPE_UNIX &&
|
||||||
|
dev->source->data.nix.listen)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return qemuDomainCreateDevice(path, data, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -8544,7 +8550,7 @@ qemuDomainAttachDeviceMknodHelper(pid_t pid ATTRIBUTE_UNUSED,
|
|||||||
bool delDevice = false;
|
bool delDevice = false;
|
||||||
bool isLink = S_ISLNK(data->sb.st_mode);
|
bool isLink = S_ISLNK(data->sb.st_mode);
|
||||||
bool isDev = S_ISCHR(data->sb.st_mode) || S_ISBLK(data->sb.st_mode);
|
bool isDev = S_ISCHR(data->sb.st_mode) || S_ISBLK(data->sb.st_mode);
|
||||||
bool isReg = S_ISREG(data->sb.st_mode);
|
bool isReg = S_ISREG(data->sb.st_mode) || S_ISFIFO(data->sb.st_mode) || S_ISSOCK(data->sb.st_mode);
|
||||||
|
|
||||||
qemuSecurityPostFork(data->driver->securityManager);
|
qemuSecurityPostFork(data->driver->securityManager);
|
||||||
|
|
||||||
@ -8589,7 +8595,7 @@ qemuDomainAttachDeviceMknodHelper(pid_t pid ATTRIBUTE_UNUSED,
|
|||||||
* as its backing chain. This might however clash here.
|
* as its backing chain. This might however clash here.
|
||||||
* Therefore do the cleanup here. */
|
* Therefore do the cleanup here. */
|
||||||
if (umount(data->file) < 0 &&
|
if (umount(data->file) < 0 &&
|
||||||
errno != ENOENT) {
|
errno != ENOENT && errno != EINVAL) {
|
||||||
virReportSystemError(errno,
|
virReportSystemError(errno,
|
||||||
_("Unable to umount %s"),
|
_("Unable to umount %s"),
|
||||||
data->file);
|
data->file);
|
||||||
@ -8698,7 +8704,7 @@ qemuDomainAttachDeviceMknodRecursive(virQEMUDriverPtr driver,
|
|||||||
}
|
}
|
||||||
|
|
||||||
isLink = S_ISLNK(data.sb.st_mode);
|
isLink = S_ISLNK(data.sb.st_mode);
|
||||||
isReg = S_ISREG(data.sb.st_mode);
|
isReg = S_ISREG(data.sb.st_mode) || S_ISFIFO(data.sb.st_mode) || S_ISSOCK(data.sb.st_mode);
|
||||||
|
|
||||||
if (isReg && STRPREFIX(file, DEVPREFIX)) {
|
if (isReg && STRPREFIX(file, DEVPREFIX)) {
|
||||||
cfg = virQEMUDriverGetConfig(driver);
|
cfg = virQEMUDriverGetConfig(driver);
|
||||||
@ -9090,10 +9096,13 @@ qemuDomainNamespaceSetupChardev(virQEMUDriverPtr driver,
|
|||||||
if (!qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT))
|
if (!qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (chr->source->type != VIR_DOMAIN_CHR_TYPE_DEV)
|
if (!(path = virDomainChrSourceDefGetPath(chr->source)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
path = chr->source->data.file.path;
|
/* Socket created by qemu. It doesn't exist upfront. */
|
||||||
|
if (chr->source->type == VIR_DOMAIN_CHR_TYPE_UNIX &&
|
||||||
|
chr->source->data.nix.listen)
|
||||||
|
return 0;
|
||||||
|
|
||||||
cfg = virQEMUDriverGetConfig(driver);
|
cfg = virQEMUDriverGetConfig(driver);
|
||||||
if (qemuDomainGetPreservedMounts(cfg, vm,
|
if (qemuDomainGetPreservedMounts(cfg, vm,
|
||||||
|
Loading…
Reference in New Issue
Block a user