On Mon, Jul 12, 2021 at 04:25:59PM +0200, Peter Krempa wrote: > If the queried QMP command doesn't exist qemuMonitorGetTPMModels returns > 0 but sets the string list to NULL which isn't accepted by > g_strv_contains. > > Fixes: a5bc5f0ecf8 > Reported-by: Olaf Hering <olaf@xxxxxxxxx> > Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> > --- > src/qemu/qemu_capabilities.c | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) > > diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c > index d1cd8f11ac..5b359258a1 100644 > --- a/src/qemu/qemu_capabilities.c > +++ b/src/qemu/qemu_capabilities.c > @@ -3168,6 +3168,9 @@ virQEMUCapsProbeQMPTPM(virQEMUCaps *qemuCaps, > if (qemuMonitorGetTPMModels(mon, &models) < 0) > return -1; > > + if (!models) > + return 0; > + > for (i = 0; i < G_N_ELEMENTS(virQEMUCapsTPMModelsToCaps); i++) { > const char *needle = virDomainTPMModelTypeToString(virQEMUCapsTPMModelsToCaps[i].type); > if (g_strv_contains((const char **)models, needle)) > @@ -3177,10 +3180,12 @@ virQEMUCapsProbeQMPTPM(virQEMUCaps *qemuCaps, > if (qemuMonitorGetTPMTypes(mon, &types) < 0) > return -1; > > - for (i = 0; i < G_N_ELEMENTS(virQEMUCapsTPMTypesToCaps); i++) { > - const char *needle = virDomainTPMBackendTypeToString(virQEMUCapsTPMTypesToCaps[i].type); > - if (g_strv_contains((const char **)types, needle)) > - virQEMUCapsSet(qemuCaps, virQEMUCapsTPMTypesToCaps[i].caps); > + if (types) { > + for (i = 0; i < G_N_ELEMENTS(virQEMUCapsTPMTypesToCaps); i++) { > + const char *needle = virDomainTPMBackendTypeToString(virQEMUCapsTPMTypesToCaps[i].type); > + if (g_strv_contains((const char **)types, needle)) > + virQEMUCapsSet(qemuCaps, virQEMUCapsTPMTypesToCaps[i].caps); > + } Why not: if (!types) return 0; to remain consistent with the essentially same fix in the first hunk? :) Reviewed-by: Erik Skultety <eskultet@redhat> > } > > return 0; > -- > 2.31.1 >