usb: ucsi: Fix NULL pointer deref in ucsi_connector_change()
When ucsi_init() fails, ucsi->connector is NULL, yet in case of
ucsi_acpi we may still get events which cause the ucs_acpi code to call
ucsi_connector_change(), which then derefs the NULL ucsi->connector
pointer.
Fix this by not setting ucsi->ntfy inside ucsi_init() until ucsi_init()
has succeeded, so that ucsi_connector_change() ignores the events
because UCSI_ENABLE_NTFY_CONNECTOR_CHANGE is not set in the ntfy mask.
Fixes: bdc62f2bae
("usb: typec: ucsi: Simplified registration and I/O API")
Link: https://bugzilla.kernel.org/show_bug.cgi?id=217106
Cc: stable@vger.kernel.org
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20230308154244.722337-2-hdegoede@redhat.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
fe15c26ee2
commit
f87fb98545
|
@ -1329,7 +1329,7 @@ out_unlock:
|
|||
static int ucsi_init(struct ucsi *ucsi)
|
||||
{
|
||||
struct ucsi_connector *con;
|
||||
u64 command;
|
||||
u64 command, ntfy;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
|
@ -1341,8 +1341,8 @@ static int ucsi_init(struct ucsi *ucsi)
|
|||
}
|
||||
|
||||
/* Enable basic notifications */
|
||||
ucsi->ntfy = UCSI_ENABLE_NTFY_CMD_COMPLETE | UCSI_ENABLE_NTFY_ERROR;
|
||||
command = UCSI_SET_NOTIFICATION_ENABLE | ucsi->ntfy;
|
||||
ntfy = UCSI_ENABLE_NTFY_CMD_COMPLETE | UCSI_ENABLE_NTFY_ERROR;
|
||||
command = UCSI_SET_NOTIFICATION_ENABLE | ntfy;
|
||||
ret = ucsi_send_command(ucsi, command, NULL, 0);
|
||||
if (ret < 0)
|
||||
goto err_reset;
|
||||
|
@ -1374,12 +1374,13 @@ static int ucsi_init(struct ucsi *ucsi)
|
|||
}
|
||||
|
||||
/* Enable all notifications */
|
||||
ucsi->ntfy = UCSI_ENABLE_NTFY_ALL;
|
||||
command = UCSI_SET_NOTIFICATION_ENABLE | ucsi->ntfy;
|
||||
ntfy = UCSI_ENABLE_NTFY_ALL;
|
||||
command = UCSI_SET_NOTIFICATION_ENABLE | ntfy;
|
||||
ret = ucsi_send_command(ucsi, command, NULL, 0);
|
||||
if (ret < 0)
|
||||
goto err_unregister;
|
||||
|
||||
ucsi->ntfy = ntfy;
|
||||
return 0;
|
||||
|
||||
err_unregister:
|
||||
|
|
Loading…
Reference in New Issue