mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-20 07:59:00 +00:00
qemu: Provide non-linux stub for qemuDomainAttachDeviceMknodRecursive
The way we create devices under /dev is highly linux specific. For instance we do mknod(), mount(), umount(), etc. Some platforms are even missing some of these functions. Then again, as declared in qemuDomainNamespaceAvailable(): namespaces are linux only. Therefore, to avoid obfuscating the code by trying to make it compile on weird platforms, just provide a non-linux stub for qemuDomainAttachDeviceMknodRecursive(). At the same time, qemuDomainAttachDeviceMknodHelper() which actually calls the non-existent functions is moved under ifdef __linux__ block since its only caller is in that block too. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
fde654be53
commit
a4d9c31eac
@ -8542,6 +8542,8 @@ struct qemuDomainAttachDeviceMknodData {
|
||||
};
|
||||
|
||||
|
||||
/* Our way of creating devices is highly linux specific */
|
||||
#if defined(__linux__)
|
||||
static int
|
||||
qemuDomainAttachDeviceMknodHelper(pid_t pid ATTRIBUTE_UNUSED,
|
||||
void *opaque)
|
||||
@ -8639,7 +8641,7 @@ qemuDomainAttachDeviceMknodHelper(pid_t pid ATTRIBUTE_UNUSED,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
#ifdef WITH_SELINUX
|
||||
# ifdef WITH_SELINUX
|
||||
if (data->tcon &&
|
||||
lsetfilecon_raw(data->file, (VIR_SELINUX_CTX_CONST char *) data->tcon) < 0) {
|
||||
VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR
|
||||
@ -8651,7 +8653,7 @@ qemuDomainAttachDeviceMknodHelper(pid_t pid ATTRIBUTE_UNUSED,
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
# endif
|
||||
|
||||
/* Finish mount process started earlier. */
|
||||
if (isReg &&
|
||||
@ -8662,9 +8664,9 @@ qemuDomainAttachDeviceMknodHelper(pid_t pid ATTRIBUTE_UNUSED,
|
||||
cleanup:
|
||||
if (ret < 0 && delDevice)
|
||||
unlink(data->file);
|
||||
#ifdef WITH_SELINUX
|
||||
# ifdef WITH_SELINUX
|
||||
freecon(data->tcon);
|
||||
#endif
|
||||
# endif
|
||||
virFileFreeACLs(&data->acl);
|
||||
return ret;
|
||||
}
|
||||
@ -8755,14 +8757,14 @@ qemuDomainAttachDeviceMknodRecursive(virQEMUDriverPtr driver,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
#ifdef WITH_SELINUX
|
||||
# ifdef WITH_SELINUX
|
||||
if (lgetfilecon_raw(file, &data.tcon) < 0 &&
|
||||
(errno != ENOTSUP && errno != ENODATA)) {
|
||||
virReportSystemError(errno,
|
||||
_("Unable to get SELinux label from %s"), file);
|
||||
goto cleanup;
|
||||
}
|
||||
#endif
|
||||
# endif
|
||||
|
||||
if (STRPREFIX(file, DEVPREFIX)) {
|
||||
size_t i;
|
||||
@ -8799,9 +8801,9 @@ qemuDomainAttachDeviceMknodRecursive(virQEMUDriverPtr driver,
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
#ifdef WITH_SELINUX
|
||||
# ifdef WITH_SELINUX
|
||||
freecon(data.tcon);
|
||||
#endif
|
||||
# endif
|
||||
virFileFreeACLs(&data.acl);
|
||||
if (isReg && target)
|
||||
umount(target);
|
||||
@ -8811,6 +8813,26 @@ qemuDomainAttachDeviceMknodRecursive(virQEMUDriverPtr driver,
|
||||
}
|
||||
|
||||
|
||||
#else /* !defined(__linux__) */
|
||||
|
||||
|
||||
static int
|
||||
qemuDomainAttachDeviceMknodRecursive(virQEMUDriverPtr driver ATTRIBUTE_UNUSED,
|
||||
virDomainObjPtr vm ATTRIBUTE_UNUSED,
|
||||
const char *file ATTRIBUTE_UNUSED,
|
||||
char * const *devMountsPath ATTRIBUTE_UNUSED,
|
||||
size_t ndevMountsPath ATTRIBUTE_UNUSED,
|
||||
unsigned int ttl ATTRIBUTE_UNUSED)
|
||||
{
|
||||
virReportSystemError(ENOSYS, "%s",
|
||||
_("Namespaces are not supported on this platform."));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
#endif /* !defined(__linux__) */
|
||||
|
||||
|
||||
static int
|
||||
qemuDomainAttachDeviceMknod(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
|
Loading…
x
Reference in New Issue
Block a user