When a CPU model is defined based on another model, we need to copy the lists of removed and added features from it. Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx> --- src/cpu/cpu_x86.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 97d6e00007..7cfab8278d 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -1555,6 +1555,8 @@ x86ModelParseAncestor(virCPUx86Model *model, model->vendor = ancestor->vendor; model->signatures = virCPUx86SignaturesCopy(ancestor->signatures); x86DataCopy(&model->data, &ancestor->data); + model->removedFeatures = g_strdupv(ancestor->removedFeatures); + model->addedFeatures = g_strdupv(ancestor->addedFeatures); return 0; } @@ -1654,8 +1656,19 @@ x86ModelParseFeatures(virCPUx86Model *model, if ((n = virXPathNodeSet("./feature", ctxt, &nodes)) <= 0) return n; - model->removedFeatures = g_new0(char *, n + 1); - model->addedFeatures = g_new0(char *, n + 1); + if (model->removedFeatures) { + nremoved = g_strv_length(model->removedFeatures); + model->removedFeatures = g_renew(char *, model->removedFeatures, nremoved + n + 1); + } else { + model->removedFeatures = g_new0(char *, n + 1); + } + + if (model->addedFeatures) { + nadded = g_strv_length(model->addedFeatures); + model->addedFeatures = g_renew(char *, model->addedFeatures, nadded + n + 1); + } else { + model->addedFeatures = g_new0(char *, n + 1); + } for (i = 0; i < n; i++) { g_autofree char *ftname = NULL; -- 2.47.0