Drivers: hv: utils: fix memory leak on on_msg() failure
authorVitaly Kuznetsov <vkuznets@redhat.com>
Tue, 15 Dec 2015 03:01:53 +0000 (19:01 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 15 Dec 2015 03:27:30 +0000 (19:27 -0800)
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>
drivers/hv/hv_utils_transport.c

index 24b2766a6d345baafd2419eec2467d45b3bd806e..40abe44fcd984b7d9cd2e5631a2e09bd1a5eb162 100644 (file)
@@ -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)