greybus: connection: destroy connection on failing to bind it
authorFabien Parent <fparent@baylibre.com>
Tue, 13 Oct 2015 15:34:51 +0000 (17:34 +0200)
committerGreg Kroah-Hartman <gregkh@google.com>
Wed, 14 Oct 2015 18:54:51 +0000 (11:54 -0700)
gb_connection_bind_protocol() returns proper error codes now and we
should destroy the connection on failures.

This change also fixes a NULL deref on hotplug when the control connection fails
to initialize.

Signed-off-by: Fabien Parent <fparent@baylibre.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/connection.c

index 6b56b3069faef26d761dd487088b92f979f6f098..bd3f83b2ccb6628eaa597109942f21f3825b92d7 100644 (file)
@@ -239,7 +239,14 @@ gb_connection_create_range(struct greybus_host_device *hd,
 
        spin_unlock_irq(&gb_connections_lock);
 
-       gb_connection_bind_protocol(connection);
+       retval = gb_connection_bind_protocol(connection);
+       if (retval) {
+               dev_err(&connection->dev, "failed to bind protocol: %d\n",
+                       retval);
+               gb_connection_destroy(connection);
+               return NULL;
+       }
+
        if (!connection->protocol)
                dev_warn(&connection->dev,
                         "protocol 0x%02hhx handler not found\n", protocol_id);