balloon: check the number of available pages in leak balloon
[firefly-linux-kernel-4.4.55.git] / drivers / virtio / virtio_balloon.c
index 8ab6238c9299efa92f72a907775e0dd416d82407..56f7e2521202740101a7b1bb982fce83fda71f3e 100644 (file)
@@ -196,6 +196,8 @@ static unsigned leak_balloon(struct virtio_balloon *vb, size_t num)
        num = min(num, ARRAY_SIZE(vb->pfns));
 
        mutex_lock(&vb->balloon_lock);
+       /* We can't release more pages than taken */
+       num = min(num, (size_t)vb->num_pages);
        for (vb->num_pfns = 0; vb->num_pfns < num;
             vb->num_pfns += VIRTIO_BALLOON_PAGES_PER_PAGE) {
                page = balloon_page_dequeue(vb_dev_info);