aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/vhost
diff options
context:
space:
mode:
authorTakuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>2010-05-27 06:03:56 -0400
committerMichael S. Tsirkin <mst@redhat.com>2010-05-27 06:55:17 -0400
commita02c37891a9b2d7ce93f9d09455b4f67c4c23b95 (patch)
tree0d2b9b630a2ff0dab8fda16008762bcaa223ca93 /drivers/vhost
parentd3553a52490dcac54f45083f8fa018e26c22e947 (diff)
vhost: fix the memory leak which will happen when memory_access_ok fails
We need to free newmem when vhost_set_memory() fails to complete. Signed-off-by: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'drivers/vhost')
-rw-r--r--drivers/vhost/vhost.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index e36620272715..da21ae951826 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -337,8 +337,10 @@ static long vhost_set_memory(struct vhost_dev *d, struct vhost_memory __user *m)
337 return -EFAULT; 337 return -EFAULT;
338 } 338 }
339 339
340 if (!memory_access_ok(d, newmem, vhost_has_feature(d, VHOST_F_LOG_ALL))) 340 if (!memory_access_ok(d, newmem, vhost_has_feature(d, VHOST_F_LOG_ALL))) {
341 kfree(newmem);
341 return -EFAULT; 342 return -EFAULT;
343 }
342 oldmem = d->memory; 344 oldmem = d->memory;
343 rcu_assign_pointer(d->memory, newmem); 345 rcu_assign_pointer(d->memory, newmem);
344 synchronize_rcu(); 346 synchronize_rcu();