virtio_balloon: fix race by fill and leak
authorMinchan Kim <minchan@kernel.org>
Sun, 27 Dec 2015 23:35:12 +0000 (08:35 +0900)
committerSasha Levin <sasha.levin@oracle.com>
Wed, 3 Feb 2016 20:31:09 +0000 (15:31 -0500)
commit3bbe9868ba5654df63f9e10766620f813e92fdf8
tree2575e328c185e43e92b323ff735601a4eac11e89
parent7daaedba8fa87ade25763e15e5218c66558634c3
virtio_balloon: fix race by fill and leak

[ Upstream commit f68b992bbb474641881932c61c92dcfa6f5b3689 ]

During my compaction-related stuff, I encountered a bug
with ballooning.

With repeated inflating and deflating cycle, guest memory(
ie, cat /proc/meminfo | grep MemTotal) is decreased and
couldn't be recovered.

The reason is balloon_lock doesn't cover release_pages_balloon
so struct virtio_balloon fields could be overwritten by race
of fill_balloon(e,g, vb->*pfns could be critical).

This patch fixes it in my test.

Cc: <stable@vger.kernel.org>
Signed-off-by: Minchan Kim <minchan@kernel.org>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
drivers/virtio/virtio_balloon.c