mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 19:32:19 +00:00
tpm: Refactor open-coded bitmap 'activePcrBanks' to virBitmap
Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
271d337a56
commit
52c7c31c80
@ -3255,6 +3255,7 @@ void virDomainTPMDefFree(virDomainTPMDef *def)
|
|||||||
virObjectUnref(def->data.emulator.source);
|
virObjectUnref(def->data.emulator.source);
|
||||||
g_free(def->data.emulator.storagepath);
|
g_free(def->data.emulator.storagepath);
|
||||||
g_free(def->data.emulator.logfile);
|
g_free(def->data.emulator.logfile);
|
||||||
|
virBitmapFree(def->data.emulator.activePcrBanks);
|
||||||
break;
|
break;
|
||||||
case VIR_DOMAIN_TPM_TYPE_LAST:
|
case VIR_DOMAIN_TPM_TYPE_LAST:
|
||||||
break;
|
break;
|
||||||
@ -10442,6 +10443,8 @@ virDomainTPMDefParseXML(virDomainXMLOption *xmlopt,
|
|||||||
|
|
||||||
if ((nnodes = virXPathNodeSet("./backend/active_pcr_banks/*", ctxt, &nodes)) < 0)
|
if ((nnodes = virXPathNodeSet("./backend/active_pcr_banks/*", ctxt, &nodes)) < 0)
|
||||||
break;
|
break;
|
||||||
|
if (nnodes > 0)
|
||||||
|
def->data.emulator.activePcrBanks = virBitmapNew(0);
|
||||||
for (i = 0; i < nnodes; i++) {
|
for (i = 0; i < nnodes; i++) {
|
||||||
if ((bank = virDomainTPMPcrBankTypeFromString((const char *)nodes[i]->name)) < 0) {
|
if ((bank = virDomainTPMPcrBankTypeFromString((const char *)nodes[i]->name)) < 0) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
@ -10449,7 +10452,7 @@ virDomainTPMDefParseXML(virDomainXMLOption *xmlopt,
|
|||||||
nodes[i]->name);
|
nodes[i]->name);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
def->data.emulator.activePcrBanks |= (1 << bank);
|
virBitmapSetBitExpand(def->data.emulator.activePcrBanks, bank);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VIR_DOMAIN_TPM_TYPE_LAST:
|
case VIR_DOMAIN_TPM_TYPE_LAST:
|
||||||
@ -20671,7 +20674,8 @@ virDomainTPMDefCheckABIStability(virDomainTPMDef *src,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (src->data.emulator.activePcrBanks != dst->data.emulator.activePcrBanks) {
|
if (!virBitmapEqual(src->data.emulator.activePcrBanks,
|
||||||
|
dst->data.emulator.activePcrBanks)) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("Target active PCR banks doesn't match source"));
|
_("Target active PCR banks doesn't match source"));
|
||||||
return false;
|
return false;
|
||||||
@ -24239,13 +24243,10 @@ virDomainTPMDefFormat(virBuffer *buf,
|
|||||||
}
|
}
|
||||||
if (def->data.emulator.activePcrBanks) {
|
if (def->data.emulator.activePcrBanks) {
|
||||||
g_auto(virBuffer) activePcrBanksBuf = VIR_BUFFER_INIT_CHILD(&backendChildBuf);
|
g_auto(virBuffer) activePcrBanksBuf = VIR_BUFFER_INIT_CHILD(&backendChildBuf);
|
||||||
size_t i;
|
ssize_t bank = -1;
|
||||||
|
|
||||||
for (i = VIR_DOMAIN_TPM_PCR_BANK_SHA1; i < VIR_DOMAIN_TPM_PCR_BANK_LAST; i++) {
|
while ((bank = virBitmapNextSetBit(def->data.emulator.activePcrBanks, bank)) > -1)
|
||||||
if ((def->data.emulator.activePcrBanks & (1 << i)))
|
virBufferAsprintf(&activePcrBanksBuf, "<%s/>\n", virDomainTPMPcrBankTypeToString(bank));
|
||||||
virBufferAsprintf(&activePcrBanksBuf, "<%s/>\n",
|
|
||||||
virDomainTPMPcrBankTypeToString(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
virXMLFormatElement(&backendChildBuf, "active_pcr_banks", NULL, &activePcrBanksBuf);
|
virXMLFormatElement(&backendChildBuf, "active_pcr_banks", NULL, &activePcrBanksBuf);
|
||||||
}
|
}
|
||||||
|
@ -1451,7 +1451,7 @@ struct _virDomainTPMDef {
|
|||||||
unsigned char secretuuid[VIR_UUID_BUFLEN];
|
unsigned char secretuuid[VIR_UUID_BUFLEN];
|
||||||
bool hassecretuuid;
|
bool hassecretuuid;
|
||||||
bool persistent_state;
|
bool persistent_state;
|
||||||
unsigned int activePcrBanks;
|
virBitmap *activePcrBanks;
|
||||||
} emulator;
|
} emulator;
|
||||||
} data;
|
} data;
|
||||||
};
|
};
|
||||||
|
@ -444,19 +444,16 @@ qemuTPMEmulatorRunSetup(const char *storagepath,
|
|||||||
|
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
qemuTPMPcrBankBitmapToStr(unsigned int pcrBanks)
|
qemuTPMPcrBankBitmapToStr(virBitmap *activePcrBanks)
|
||||||
{
|
{
|
||||||
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
|
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
|
||||||
const char *comma = "";
|
ssize_t bank = -1;
|
||||||
size_t i;
|
|
||||||
|
while ((bank = virBitmapNextSetBit(activePcrBanks, bank)) > -1)
|
||||||
|
virBufferAsprintf(&buf, "%s,", virDomainTPMPcrBankTypeToString(bank));
|
||||||
|
|
||||||
|
virBufferTrim(&buf, ",");
|
||||||
|
|
||||||
for (i = VIR_DOMAIN_TPM_PCR_BANK_SHA1; i < VIR_DOMAIN_TPM_PCR_BANK_LAST; i++) {
|
|
||||||
if (pcrBanks & (1 << i)) {
|
|
||||||
virBufferAsprintf(&buf, "%s%s",
|
|
||||||
comma, virDomainTPMPcrBankTypeToString(i));
|
|
||||||
comma = ",";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return virBufferContentAndReset(&buf);
|
return virBufferContentAndReset(&buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -481,7 +478,7 @@ static int
|
|||||||
qemuTPMEmulatorReconfigure(const char *storagepath,
|
qemuTPMEmulatorReconfigure(const char *storagepath,
|
||||||
uid_t swtpm_user,
|
uid_t swtpm_user,
|
||||||
gid_t swtpm_group,
|
gid_t swtpm_group,
|
||||||
unsigned int activePcrBanks,
|
virBitmap *activePcrBanks,
|
||||||
const char *logfile,
|
const char *logfile,
|
||||||
const virDomainTPMVersion tpmversion,
|
const virDomainTPMVersion tpmversion,
|
||||||
const unsigned char *secretuuid)
|
const unsigned char *secretuuid)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user