greybus: operation: fix memory leak in request_send error path
authorJohan Hovold <johan@hovoldconsulting.com>
Fri, 27 Mar 2015 11:41:14 +0000 (12:41 +0100)
committerGreg Kroah-Hartman <greg@kroah.com>
Mon, 30 Mar 2015 13:13:01 +0000 (15:13 +0200)
Make sure to drop the operation reference when sending the request fails
to avoid leaking the operation structures.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
drivers/staging/greybus/operation.c

index ad45dee..dcf987f 100644 (file)
@@ -643,6 +643,7 @@ int gb_operation_request_send(struct gb_operation *operation,
        struct gb_connection *connection = operation->connection;
        struct gb_operation_msg_hdr *header;
        unsigned int cycle;
+       int ret;
 
        if (!callback)
                return -EINVAL;
@@ -675,7 +676,11 @@ int gb_operation_request_send(struct gb_operation *operation,
        /* All set, send the request */
        gb_operation_result_set(operation, -EINPROGRESS);
 
-       return gb_message_send(operation->request);
+       ret = gb_message_send(operation->request);
+       if (ret)
+               gb_operation_put(operation);
+
+       return ret;
 }
 EXPORT_SYMBOL_GPL(gb_operation_request_send);