Although a connection records its protocol id when it gets
created, its protocol handler doesn't actually get assigned
until gb_connection_bind_protocol() is called.
In gb_connection_create() there are some error paths in
which a reference to the connection's protocol is released
before the protocol handler has been associated with the
connection.
Get rid of those calls.
As a result, we will never pass a null protocol pointer to
gb_protocol_put(). Add a precautionary warning in that
function in the event that ever occurs.
Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
connection->major = major;
connection->minor = minor;
if (!gb_connection_hd_cport_id_alloc(connection)) {
- gb_protocol_put(connection->protocol);
kfree(connection);
return NULL;
}
pr_err("failed to add connection device for cport 0x%04hx\n",
cport_id);
gb_connection_hd_cport_id_free(connection);
- gb_protocol_put(connection->protocol);
put_device(&connection->dev);
return NULL;
gb_connection_hd_cport_id_free(connection);
gb_protocol_put(connection->protocol);
+ connection->protocol = NULL;
device_unregister(&connection->dev);
}
u8 minor;
u8 protocol_count;
- if (!protocol)
+ if (WARN_ON(!protocol))
return;
id = protocol->id;