mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
usb: typec: ucsi: Don't attempt to resume the ports before they exist
commitf82060da74upstream. This will fix null pointer dereference that was caused by the driver attempting to resume ports that were not yet registered. Fixes:e0dced9c7d("usb: typec: ucsi: Resume in separate work") Cc: <stable@vger.kernel.org> Link: https://bugzilla.kernel.org/show_bug.cgi?id=216697 Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Link: https://lore.kernel.org/r/20230131141518.78215-1-heikki.krogerus@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
dd63f6f0d9
commit
fdd11d7136
@@ -1269,6 +1269,9 @@ err_unregister:
|
||||
con->port = NULL;
|
||||
}
|
||||
|
||||
kfree(ucsi->connector);
|
||||
ucsi->connector = NULL;
|
||||
|
||||
err_reset:
|
||||
memset(&ucsi->cap, 0, sizeof(ucsi->cap));
|
||||
ucsi_reset_ppm(ucsi);
|
||||
@@ -1300,7 +1303,8 @@ static void ucsi_resume_work(struct work_struct *work)
|
||||
|
||||
int ucsi_resume(struct ucsi *ucsi)
|
||||
{
|
||||
queue_work(system_long_wq, &ucsi->resume_work);
|
||||
if (ucsi->connector)
|
||||
queue_work(system_long_wq, &ucsi->resume_work);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ucsi_resume);
|
||||
@@ -1420,6 +1424,9 @@ void ucsi_unregister(struct ucsi *ucsi)
|
||||
/* Disable notifications */
|
||||
ucsi->ops->async_write(ucsi, UCSI_CONTROL, &cmd, sizeof(cmd));
|
||||
|
||||
if (!ucsi->connector)
|
||||
return;
|
||||
|
||||
for (i = 0; i < ucsi->cap.num_connectors; i++) {
|
||||
cancel_work_sync(&ucsi->connector[i].work);
|
||||
ucsi_unregister_partner(&ucsi->connector[i]);
|
||||
|
||||
Reference in New Issue
Block a user