On Thu, Mar 25, 2010 at 08:58:17AM -0500, Adam Litke wrote:
> Beginning with its introduction, the virtio balloon has had an overflow error
> that causes 'info balloon' to misreport the actual memory size when the 
> balloon
> itself becomes larger than 4G.  Use a cast when converting dev->actual from
> pages to kB to prevent overflows.
>
> Before:
> (qemu) info balloon
> balloon: actual=5120
> (qemu) balloon 1025
> (qemu) info balloon
> balloon: actual=1025
> (qemu) balloon 1024
> (qemu) info balloon
> balloon: actual=5120
>
> After:
> (qemu) info balloon
> balloon: actual=5120
> (qemu) balloon 1025
> (qemu) info balloon
> balloon: actual=1025
> (qemu) balloon 1024
> (qemu) info balloon
> balloon: actual=1024

Thanks, applied.

> Signed-off-by: Adam Litke <a...@us.ibm.com>
> ---
> hw/virtio-balloon.c |    3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/hw/virtio-balloon.c b/hw/virtio-balloon.c
> index 086d9d1..6eedab1 100644
> --- a/hw/virtio-balloon.c
> +++ b/hw/virtio-balloon.c
> @@ -78,7 +78,8 @@ static void stat_put(QDict *dict, const char *label, 
> uint64_t val)
> static QObject *get_stats_qobject(VirtIOBalloon *dev)
> {
>     QDict *dict = qdict_new();
> -    uint32_t actual = ram_size - (dev->actual << VIRTIO_BALLOON_PFN_SHIFT);
> +    uint64_t actual = ram_size - ((uint64_t) dev->actual <<
> +                                  VIRTIO_BALLOON_PFN_SHIFT);
>
>     stat_put(dict, "actual", actual);
>     stat_put(dict, "mem_swapped_in", dev->stats[VIRTIO_BALLOON_S_SWAP_IN]);
> -- 
> 1.6.3.3
>
>
>
>
>

-- 
Aurelien Jarno                          GPG: 1024D/F1BCDB73
aurel...@aurel32.net                 http://www.aurel32.net


Reply via email to