[libvirt] [PATCHv2 09/15] xml: use better types for memory values
Peter Krempa
pkrempa at redhat.com
Tue Mar 6 16:34:47 UTC 2012
On 03/06/2012 01:34 AM, Eric Blake wrote:
> Using 'unsigned long' for memory values is risky on 32-bit platforms,
> as a PAE guest can have more than 4GiB memory. Our API is
> (unfortunately) locked at 'unsigned long' and a scale of 1024, but
> the rest of our system should consistently use 64-bit values,
> especially since the previous patch centralized overflow checking.
>
> * src/conf/domain_conf.h (_virDomainDef): Always use 64-bit values
> for memory. Change hugepage_backed to a bool.
> * src/conf/domain_conf.c (virDomainDefParseXML)
> (virDomainDefCheckABIStability, virDomainDefFormatInternal): Fix
> clients.
> * src/vmx/vmx.c (virVMXFormatConfig): Likewise.
> * src/xenxs/xen_sxpr.c (xenParseSxpr, xenFormatSxpr): Likewise.
> * src/xenxs/xen_xm.c (xenXMConfigGetULongLong): New function.
> (xenXMConfigGetULong, xenXMConfigSetInt): Avoid truncation.
> (xenParseXM, xenFormatXM): Fix clients.
> * src/phyp/phyp_driver.c (phypBuildLpar): Likewise.
> * src/openvz/openvz_driver.c (openvzDomainSetMemoryInternal):
> Likewise.
> * src/vbox/vbox_tmpl.c (vboxDomainDefineXML): Likewise.
> * src/qemu/qemu_command.c (qemuBuildCommandLine): Likewise.
> * src/qemu/qemu_process.c (qemuProcessStart): Likewise.
> * src/qemu/qemu_monitor.h (qemuMonitorGetBalloonInfo): Likewise.
> * src/qemu/qemu_monitor_text.h (qemuMonitorTextGetBalloonInfo):
> Likewise.
> * src/qemu/qemu_monitor_text.c (qemuMonitorTextGetBalloonInfo):
> Likewise.
> * src/qemu/qemu_monitor_json.h (qemuMonitorJSONGetBalloonInfo):
> Likewise.
> * src/qemu/qemu_monitor_json.c (qemuMonitorJSONGetBalloonInfo):
> Likewise.
> * src/qemu/qemu_driver.c (qemudDomainGetInfo)
> (qemuDomainGetXMLDesc): Likewise.
> * src/uml/uml_conf.c (umlBuildCommandLine): Likewise.
> ---
> diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c
> index f8390ea..beafb95 100644
> --- a/src/xenxs/xen_sxpr.c
> +++ b/src/xenxs/xen_sxpr.c
> @@ -1101,9 +1133,15 @@ cleanup:
>
>
> static
> -int xenXMConfigSetInt(virConfPtr conf, const char *setting, long l) {
> +int xenXMConfigSetInt(virConfPtr conf, const char *setting, long long l) {
> virConfValuePtr value = NULL;
>
> + if ((long) l != l) {
> + XENXS_ERROR(VIR_ERR_INTERNAL_ERROR,
I suppose the VIR_ERR_INTERNAL_ERROR is intentional.
> + _("integer overflow in trying to store %lld to %s"),
> + l, setting);
> + return -1;
> + }
> if (VIR_ALLOC(value)< 0) {
> virReportOOMError();
> return -1;
ACK,
Peter
More information about the libvir-list
mailing list