usb: typec: ucsi: Don't attempt to resume the ports before they exist
commit f82060da749c611ed427523b6d1605d87338aac1 upstream. This will fix null pointer dereference that was caused by the driver attempting to resume ports that were not yet registered. Fixes: e0dced9c7d47 ("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:
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]);
|
||||
|
Loading…
x
Reference in New Issue
Block a user