diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2008-03-17 22:58:15 -0500 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2008-03-17 22:58:19 +1100 |
commit | bdc1681cdf1ab6a65fa935a2b3f8fc63b20c54ea (patch) | |
tree | 17910bdca2cee81b0d4a3ee877aec82db0017a09 /drivers/virtio | |
parent | c483934670d31e064e18967bb679c1079b54ea72 (diff) | |
download | lwn-bdc1681cdf1ab6a65fa935a2b3f8fc63b20c54ea.tar.gz lwn-bdc1681cdf1ab6a65fa935a2b3f8fc63b20c54ea.zip |
virtio: handle > 2 billion page balloon targets
If the host asks for a huge target towards_target() can overflow, and
we up oops as we try to release more pages than we have. The simple
fix is to use a 64-bit value.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'drivers/virtio')
-rw-r--r-- | drivers/virtio/virtio_balloon.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index c8a4332d1132..0b3efc31ee6d 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c @@ -152,7 +152,7 @@ static void virtballoon_changed(struct virtio_device *vdev) wake_up(&vb->config_change); } -static inline int towards_target(struct virtio_balloon *vb) +static inline s64 towards_target(struct virtio_balloon *vb) { u32 v; __virtio_config_val(vb->vdev, @@ -176,7 +176,7 @@ static int balloon(void *_vballoon) set_freezable(); while (!kthread_should_stop()) { - int diff; + s64 diff; try_to_freeze(); wait_event_interruptible(vb->config_change, |