mirror of https://gitee.com/openkylin/linux.git
Drivers: hv: balloon: Fix a memory leak
The send buffer was being leaked; fix it. Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com> Reported-by: Jason Wang <jasowang@redhat.com> Acked-by: Jason Wang <jasowang@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
6427a0d771
commit
33080c1cda
|
@ -883,7 +883,7 @@ static int balloon_probe(struct hv_device *dev,
|
|||
balloon_onchannelcallback, dev);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
goto probe_error0;
|
||||
|
||||
dm_device.dev = dev;
|
||||
dm_device.state = DM_INITIALIZING;
|
||||
|
@ -895,7 +895,7 @@ static int balloon_probe(struct hv_device *dev,
|
|||
kthread_run(dm_thread_func, &dm_device, "hv_balloon");
|
||||
if (IS_ERR(dm_device.thread)) {
|
||||
ret = PTR_ERR(dm_device.thread);
|
||||
goto probe_error0;
|
||||
goto probe_error1;
|
||||
}
|
||||
|
||||
hv_set_drvdata(dev, &dm_device);
|
||||
|
@ -918,12 +918,12 @@ static int balloon_probe(struct hv_device *dev,
|
|||
VM_PKT_DATA_INBAND,
|
||||
VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
|
||||
if (ret)
|
||||
goto probe_error1;
|
||||
goto probe_error2;
|
||||
|
||||
t = wait_for_completion_timeout(&dm_device.host_event, 5*HZ);
|
||||
if (t == 0) {
|
||||
ret = -ETIMEDOUT;
|
||||
goto probe_error1;
|
||||
goto probe_error2;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -932,7 +932,7 @@ static int balloon_probe(struct hv_device *dev,
|
|||
*/
|
||||
if (dm_device.state == DM_INIT_ERROR) {
|
||||
ret = -ETIMEDOUT;
|
||||
goto probe_error1;
|
||||
goto probe_error2;
|
||||
}
|
||||
/*
|
||||
* Now submit our capabilities to the host.
|
||||
|
@ -965,12 +965,12 @@ static int balloon_probe(struct hv_device *dev,
|
|||
VM_PKT_DATA_INBAND,
|
||||
VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
|
||||
if (ret)
|
||||
goto probe_error1;
|
||||
goto probe_error2;
|
||||
|
||||
t = wait_for_completion_timeout(&dm_device.host_event, 5*HZ);
|
||||
if (t == 0) {
|
||||
ret = -ETIMEDOUT;
|
||||
goto probe_error1;
|
||||
goto probe_error2;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -979,18 +979,20 @@ static int balloon_probe(struct hv_device *dev,
|
|||
*/
|
||||
if (dm_device.state == DM_INIT_ERROR) {
|
||||
ret = -ETIMEDOUT;
|
||||
goto probe_error1;
|
||||
goto probe_error2;
|
||||
}
|
||||
|
||||
dm_device.state = DM_INITIALIZED;
|
||||
|
||||
return 0;
|
||||
|
||||
probe_error1:
|
||||
probe_error2:
|
||||
kthread_stop(dm_device.thread);
|
||||
|
||||
probe_error0:
|
||||
probe_error1:
|
||||
vmbus_close(dev->channel);
|
||||
probe_error0:
|
||||
kfree(send_buffer);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1003,6 +1005,7 @@ static int balloon_remove(struct hv_device *dev)
|
|||
|
||||
vmbus_close(dev->channel);
|
||||
kthread_stop(dm->thread);
|
||||
kfree(send_buffer);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue