virtio_balloon: fix race by fill and leak
authorMinchan Kim <minchan@kernel.org>
Sun, 27 Dec 2015 23:35:12 +0000 (08:35 +0900)
committerMichael S. Tsirkin <mst@redhat.com>
Tue, 12 Jan 2016 18:47:05 +0000 (20:47 +0200)
commitf68b992bbb474641881932c61c92dcfa6f5b3689
tree56685b8b2bb7e93b7c8c96785076cf14baab50dd
parent779a6a36961b50cd154da5705d9e6508f819cc4e
virtio_balloon: fix race by fill and leak

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>
drivers/virtio/virtio_balloon.c