Skip to content

Commit 7619fd7

Browse files
author
gitlab
committed
Merge branch 'zsv-ldap-3' into 'feature-zsv-5.0.0-vm-support-vtpm-and-secuceboot'
<fix>[kvm]: skip key provider attach when no KMS See merge request zstackio/zstack!9541
2 parents 51b2b37 + 2785e19 commit 7619fd7

1 file changed

Lines changed: 22 additions & 19 deletions

File tree

plugin/kvm/src/main/java/org/zstack/kvm/tpm/KvmTpmManager.java

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.zstack.kvm.tpm;
22

33
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.zstack.compute.vm.VmGlobalConfig;
45
import org.zstack.compute.vm.devices.TpmEncryptedResourceKeyBackend;
56
import org.zstack.compute.vm.devices.VmTpmManager;
67
import org.zstack.core.asyncbatch.While;
@@ -233,28 +234,30 @@ private void addTpmToVm(AddTpmToVmContext context, Completion completion) {
233234
.build())
234235
.then(Flow.of("create-tpm-db-records")
235236
.handle(trigger -> {
236-
try {
237-
TpmVO tpm = vmTpmManager.persistTpmVO(context.tpmUuid, context.vmInstanceUuid);
238-
context.createdTpmUuid = tpm.getUuid();
239-
context.tpmCreated = true;
240-
if (context.keyProviderUuid != null) {
241-
tpmKeyBackend.attachKeyProviderToTpm(context.createdTpmUuid, context.keyProviderUuid);
242-
context.keyProviderAttached = true;
243-
}
244-
trigger.next();
245-
} catch (Exception e) {
246-
trigger.fail(operr("failed to add TPM to vm[uuid:%s]: %s", context.vmInstanceUuid, e.getMessage()));
237+
TpmVO tpm = vmTpmManager.persistTpmVO(context.tpmUuid, context.vmInstanceUuid);
238+
context.createdTpmUuid = tpm.getUuid();
239+
context.tpmCreated = true;
240+
trigger.next();
241+
})
242+
.rollback(trigger -> {
243+
if (context.tpmCreated && context.createdTpmUuid != null) {
244+
vmTpmManager.deleteTpmVO(context.createdTpmUuid);
245+
}
246+
trigger.rollback();
247+
})
248+
.build())
249+
.then(Flow.of("attach-key-provider-to-tpm")
250+
.skipIf(data -> VmGlobalConfig.ALLOWED_TPM_VM_WITHOUT_KMS.value(Boolean.class))
251+
.handle(trigger -> {
252+
if (context.keyProviderUuid != null) {
253+
tpmKeyBackend.attachKeyProviderToTpm(context.createdTpmUuid, context.keyProviderUuid);
254+
context.keyProviderAttached = true;
247255
}
256+
trigger.next();
248257
})
249258
.rollback(trigger -> {
250-
try {
251-
if (context.keyProviderAttached && context.createdTpmUuid != null) {
252-
tpmKeyBackend.detachKeyProviderFromTpm(context.createdTpmUuid);
253-
}
254-
} finally {
255-
if (context.tpmCreated && context.createdTpmUuid != null) {
256-
vmTpmManager.deleteTpmVO(context.createdTpmUuid);
257-
}
259+
if (context.keyProviderAttached && context.createdTpmUuid != null) {
260+
tpmKeyBackend.detachKeyProviderFromTpm(context.createdTpmUuid);
258261
}
259262
trigger.rollback();
260263
})

0 commit comments

Comments
 (0)