diff options
author | Vitaly Kuznetsov <vkuznets@redhat.com> | 2015-12-15 04:01:53 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-12-15 04:27:30 +0100 |
commit | 1f75338b6fece2bbd42ac3623830c65e2df6e031 (patch) | |
tree | 0dcff9f8b0d5735ba80efe160bc3faaecf470e2a /drivers/hv | |
parent | tools: hv: vss: fix the write()'s argument: error -> vss_msg (diff) | |
download | linux-1f75338b6fece2bbd42ac3623830c65e2df6e031.tar.xz linux-1f75338b6fece2bbd42ac3623830c65e2df6e031.zip |
Drivers: hv: utils: fix memory leak on on_msg() failure
inmsg should be freed in case of on_msg() failure to avoid memory leak.
Preserve the error code from on_msg().
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/hv')
-rw-r--r-- | drivers/hv/hv_utils_transport.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/hv/hv_utils_transport.c b/drivers/hv/hv_utils_transport.c index 24b2766a6d34..40abe44fcd98 100644 --- a/drivers/hv/hv_utils_transport.c +++ b/drivers/hv/hv_utils_transport.c @@ -77,6 +77,7 @@ static ssize_t hvt_op_write(struct file *file, const char __user *buf, { struct hvutil_transport *hvt; u8 *inmsg; + int ret; hvt = container_of(file->f_op, struct hvutil_transport, fops); @@ -84,11 +85,11 @@ static ssize_t hvt_op_write(struct file *file, const char __user *buf, if (IS_ERR(inmsg)) return PTR_ERR(inmsg); - if (hvt->on_msg(inmsg, count)) - return -EFAULT; + ret = hvt->on_msg(inmsg, count); + kfree(inmsg); - return count; + return ret ? ret : count; } static unsigned int hvt_op_poll(struct file *file, poll_table *wait) |