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:
Peter Krempa 2022-08-01 13:52:47 +02:00
parent 271d337a56
commit 52c7c31c80
3 changed files with 18 additions and 20 deletions

View File

@ -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);
} }

View File

@ -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;
}; };

View File

@ -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)