[libvirt] [PATCH v4 06/11] qemu: Extend QEMU with external TPM support
Stefan Berger
stefanb at linux.vnet.ibm.com
Tue May 15 15:38:04 UTC 2018
On 05/15/2018 11:25 AM, Marc Hartmayer wrote:
> On Thu, May 10, 2018 at 11:57 PM +0200, Stefan Berger <stefanb at linux.vnet.ibm.com> wrote:
>> Implement functions for managing the storage of the external swtpm as well
>> as starting and stopping it. Also implement functions to use swtpm_setup,
>> which simulates the manufacturing of a TPM, which includes creation of
>> certificates for the device.
>>
>> Further, the external TPM needs storage on the host that we need to set
>> up before it can be run. We can clean up the host once the domain is
>> undefined.
>>
>> This patch also implements a small layer for external device support that
>> calls into the TPM device layer if a domain has an attached TPM. This is
>> the layer we will wire up later on.
>>
>> Signed-off-by: Stefan Berger <stefanb at linux.vnet.ibm.com>
>> ---
> […snip…]
>
>> +
>> +/*
>> + * qemuExtTPMStartEmulator:
>> + *
>> + * @driver: QEMU driver
>> + * @def: domain definition
>> + * @logCtxt: log context
>> + *
>> + * Start the external TPM Emulator:
>> + * - have the command line built
>> + * - start the external TPM Emulator and sync with it before QEMU start
>> + */
>> +static int
>> +qemuExtTPMStartEmulator(virQEMUDriverPtr driver,
>> + virDomainDefPtr def,
>> + qemuDomainLogContextPtr logCtxt)
>> +{
>> + int ret = -1;
>> + virCommandPtr cmd = NULL;
>> + int exitstatus;
>> + char *errbuf = NULL;
>> + virQEMUDriverConfigPtr cfg;
>> + virDomainTPMDefPtr tpm = def->tpm;
>> + char *shortName = virDomainDefGetShortName(def);
>> +
>> + if (!shortName)
>> + return -1;
>> +
>> + cfg = virQEMUDriverGetConfig(driver);
>> +
>> + /* stop any left-over TPM emulator for this VM */
>> + qemuTPMEmulatorStop(cfg->swtpmStateDir, shortName);
>> +
>> + if (!(cmd = qemuTPMEmulatorBuildCommand(tpm, def->name, def->uuid,
>> + driver->privileged,
>> + cfg->swtpm_user,
>> + cfg->swtpm_group)))
>> + goto cleanup;
>> +
>> + if (qemuExtDeviceLogCommand(logCtxt, cmd, "TPM Emulator") < 0)
>> + goto cleanup;
>> +
>> + virCommandSetErrorBuffer(cmd, &errbuf);
>> +
>> + if (virCommandRun(cmd, &exitstatus) < 0 || exitstatus != 0) {
>> + VIR_ERROR(_("Could not start 'swtpm'. exitstatus: %d "
>> + "stderr: %s"), exitstatus, errbuf);
>> + virReportError(VIR_ERR_INTERNAL_ERROR,
>> + _("Could not start 'swtpm'. exitstatus: %d, "
>> + "error: %s"), exitstatus, errbuf);
> Do we need both? (VIR_ERROR and virReportError)?
Removed the former.
Stefan
More information about the libvir-list
mailing list