From 62d18146141f8b5f1ad2e9be735319fe62e7d049 Mon Sep 17 00:00:00 2001 From: Maxim Nestratov Date: Thu, 23 Apr 2015 20:35:00 +0300 Subject: [PATCH] parallels: fix crash in prlsdkAddNet in case of CT definition Since net->model is not defined for containers we shouldn't touch it. In case network adapter model is defined, a warning about ignoring it is shown. Signed-off-by: Maxim Nestratov --- src/parallels/parallels_sdk.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/parallels/parallels_sdk.c b/src/parallels/parallels_sdk.c index d54f89473..c67044cc5 100644 --- a/src/parallels/parallels_sdk.c +++ b/src/parallels/parallels_sdk.c @@ -2725,7 +2725,8 @@ static const char * prlsdkFormatMac(virMacAddrPtr mac, char *macstr) static int prlsdkAddNet(PRL_HANDLE sdkdom, parallelsConnPtr privconn, - virDomainNetDefPtr net) + virDomainNetDefPtr net, + bool isCt) { PRL_RESULT pret; PRL_HANDLE sdknet = PRL_INVALID_HANDLE; @@ -2757,19 +2758,25 @@ static int prlsdkAddNet(PRL_HANDLE sdkdom, pret = PrlVmDevNet_SetMacAddress(sdknet, macstr); prlsdkCheckRetGoto(pret, cleanup); - if (STREQ(net->model, "rtl8139")) { - pret = PrlVmDevNet_SetAdapterType(sdknet, PNT_RTL); - } else if (STREQ(net->model, "e1000")) { - pret = PrlVmDevNet_SetAdapterType(sdknet, PNT_E1000); - } else if (STREQ(net->model, "virtio")) { - pret = PrlVmDevNet_SetAdapterType(sdknet, PNT_VIRTIO); + if (isCt) { + if (net->model) + VIR_WARN("Setting network adapter for containers is not " + "supported by Parallels Cloud Server."); } else { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + if (STREQ(net->model, "rtl8139")) { + pret = PrlVmDevNet_SetAdapterType(sdknet, PNT_RTL); + } else if (STREQ(net->model, "e1000")) { + pret = PrlVmDevNet_SetAdapterType(sdknet, PNT_E1000); + } else if (STREQ(net->model, "virtio")) { + pret = PrlVmDevNet_SetAdapterType(sdknet, PNT_VIRTIO); + } else { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Specified network adapter model is not " "supported by Parallels Cloud Server.")); - goto cleanup; + goto cleanup; + } + prlsdkCheckRetGoto(pret, cleanup); } - prlsdkCheckRetGoto(pret, cleanup); if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) { if (STREQ(net->data.network.name, PARALLELS_DOMAIN_ROUTED_NETWORK_NAME)) { @@ -3153,7 +3160,7 @@ prlsdkDoApplyConfig(virConnectPtr conn, } for (i = 0; i < def->nnets; i++) { - if (prlsdkAddNet(sdkdom, conn->privateData, def->nets[i]) < 0) + if (prlsdkAddNet(sdkdom, conn->privateData, def->nets[i], IS_CT(def)) < 0) goto error; } -- 2.39.5