diff options
author | Ian Campbell <ian.campbell@citrix.com> | 2012-03-02 12:33:25 +0000 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2012-03-02 12:33:25 +0000 |
commit | 132531885a247283fcb2dd6c463fc7fa30889118 (patch) | |
tree | 35996281e54512a0e6ba7e296b963e7880763df4 /tools | |
parent | f4ac65904884a5e6c0a338bbbaca267b790f6765 (diff) | |
download | xen-132531885a247283fcb2dd6c463fc7fa30889118.tar.gz xen-132531885a247283fcb2dd6c463fc7fa30889118.tar.bz2 xen-132531885a247283fcb2dd6c463fc7fa30889118.zip |
libxl: only set b_info->u.hvm.bios if type if HVM
This fixes a PV guest breakage causes by 24932:6eac4a1ee646 "libxl: Select BIOS
using libxl_domain_build_info_setdefaults".
I have also included a sanity check on b_info->type.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/libxl/libxl_create.c | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index 97807595b7..8417661108 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -67,28 +67,34 @@ int libxl__domain_create_info_setdefault(libxl__gc *gc, int libxl__domain_build_info_setdefault(libxl__gc *gc, libxl_domain_build_info *b_info) { + if (b_info->type != LIBXL_DOMAIN_TYPE_HVM && + b_info->type != LIBXL_DOMAIN_TYPE_PV) + return ERROR_INVAL; + if (!b_info->device_model_version) b_info->device_model_version = LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL; - if (!b_info->u.hvm.bios) - switch (b_info->device_model_version) { - case 1: b_info->u.hvm.bios = LIBXL_BIOS_TYPE_ROMBIOS; break; - case 2: b_info->u.hvm.bios = LIBXL_BIOS_TYPE_SEABIOS; break; - default:return ERROR_INVAL; - } + if (b_info->type == LIBXL_DOMAIN_TYPE_HVM) { + if (!b_info->u.hvm.bios) + switch (b_info->device_model_version) { + case 1: b_info->u.hvm.bios = LIBXL_BIOS_TYPE_ROMBIOS; break; + case 2: b_info->u.hvm.bios = LIBXL_BIOS_TYPE_SEABIOS; break; + default:return ERROR_INVAL; + } - /* Enforce BIOS<->Device Model version relationship */ - switch (b_info->device_model_version) { - case 1: - if (b_info->u.hvm.bios != LIBXL_BIOS_TYPE_ROMBIOS) - return ERROR_INVAL; - break; - case 2: - if (b_info->u.hvm.bios == LIBXL_BIOS_TYPE_ROMBIOS) - return ERROR_INVAL; - break; - default:abort(); + /* Enforce BIOS<->Device Model version relationship */ + switch (b_info->device_model_version) { + case 1: + if (b_info->u.hvm.bios != LIBXL_BIOS_TYPE_ROMBIOS) + return ERROR_INVAL; + break; + case 2: + if (b_info->u.hvm.bios == LIBXL_BIOS_TYPE_ROMBIOS) + return ERROR_INVAL; + break; + default:abort(); + } } libxl_defbool_setdefault(&b_info->device_model_stubdomain, false); |