mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 21:55:25 +00:00
qemu: command: Extract opening of TPM backend FDs for mocking purposes
Allow mocking of the file descriptor numbers used for the TPM passthrough mode by extracting the relevant code into an exported function. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
d06a8ebe8f
commit
09e45e8a9b
@ -9688,6 +9688,31 @@ qemuBuildTPMDevStr(const virDomainDef *def,
|
||||
}
|
||||
|
||||
|
||||
/* this function is exported so that tests can mock the FDs */
|
||||
int
|
||||
qemuBuildTPMOpenBackendFDs(const char *tpmdev,
|
||||
const char *cancel_path,
|
||||
int *tpmfd,
|
||||
int *cancelfd)
|
||||
{
|
||||
if ((*tpmfd = open(tpmdev, O_RDWR)) < 0) {
|
||||
virReportSystemError(errno, _("Could not open TPM device %s"),
|
||||
tpmdev);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((*cancelfd = open(cancel_path, O_WRONLY)) < 0) {
|
||||
virReportSystemError(errno,
|
||||
_("Could not open TPM device's cancel "
|
||||
"path %s"), cancel_path);
|
||||
VIR_FORCE_CLOSE(*tpmfd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static char *
|
||||
qemuBuildTPMBackendStr(const virDomainDef *def,
|
||||
virCommandPtr cmd,
|
||||
@ -9726,30 +9751,16 @@ qemuBuildTPMBackendStr(const virDomainDef *def,
|
||||
goto error;
|
||||
|
||||
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_ADD_FD)) {
|
||||
*tpmfd = open(tpmdev, O_RDWR);
|
||||
if (*tpmfd < 0) {
|
||||
virReportSystemError(errno, _("Could not open TPM device %s"),
|
||||
tpmdev);
|
||||
if (qemuBuildTPMOpenBackendFDs(tpmdev, cancel_path, tpmfd, cancelfd) < 0)
|
||||
goto error;
|
||||
}
|
||||
|
||||
virCommandPassFD(cmd, *tpmfd,
|
||||
VIR_COMMAND_PASS_FD_CLOSE_PARENT);
|
||||
virCommandPassFD(cmd, *tpmfd, VIR_COMMAND_PASS_FD_CLOSE_PARENT);
|
||||
virCommandPassFD(cmd, *cancelfd, VIR_COMMAND_PASS_FD_CLOSE_PARENT);
|
||||
devset = qemuVirCommandGetDevSet(cmd, *tpmfd);
|
||||
if (devset == NULL)
|
||||
goto error;
|
||||
|
||||
*cancelfd = open(cancel_path, O_WRONLY);
|
||||
if (*cancelfd < 0) {
|
||||
virReportSystemError(errno,
|
||||
_("Could not open TPM device's cancel "
|
||||
"path %s"), cancel_path);
|
||||
goto error;
|
||||
}
|
||||
VIR_FREE(cancel_path);
|
||||
|
||||
virCommandPassFD(cmd, *cancelfd,
|
||||
VIR_COMMAND_PASS_FD_CLOSE_PARENT);
|
||||
cancel_path = qemuVirCommandGetDevSet(cmd, *cancelfd);
|
||||
if (cancel_path == NULL)
|
||||
goto error;
|
||||
|
@ -219,4 +219,13 @@ qemuBuildVsockDevStr(virDomainDefPtr def,
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
|
||||
ATTRIBUTE_NONNULL(4);
|
||||
|
||||
/* this function is exported so that tests can mock the FDs */
|
||||
int
|
||||
qemuBuildTPMOpenBackendFDs(const char *tpmdev,
|
||||
const char *cancel_path,
|
||||
int *tpmfd,
|
||||
int *cancelfd)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
|
||||
ATTRIBUTE_NONNULL(4);
|
||||
|
||||
#endif /* __QEMU_COMMAND_H__*/
|
||||
|
Loading…
Reference in New Issue
Block a user