greybus: core: add defensive connection disable post disconnect
Bundle drivers *must* disable their connections in the disconnect callback, but add a defensive test and warn about buggy drivers nonetheless. Note that bundle drivers would generally release their state containers in disconnect so a failure stop I/O could potentially lead to use-after-free bugs in any late operation completion callbacks. Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Родитель
fa8369c130
Коммит
02a54dd18f
|
@ -165,6 +165,13 @@ static int greybus_remove(struct device *dev)
|
||||||
gb_connection_disable_rx(connection);
|
gb_connection_disable_rx(connection);
|
||||||
|
|
||||||
driver->disconnect(bundle);
|
driver->disconnect(bundle);
|
||||||
|
|
||||||
|
/* Catch buggy drivers that fail to disable their connections. */
|
||||||
|
list_for_each_entry(connection, &bundle->connections, bundle_links) {
|
||||||
|
if (WARN_ON(connection->state != GB_CONNECTION_STATE_DISABLED))
|
||||||
|
gb_connection_disable(connection);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче