Re: [PATCH v2] usb: typec: ucsi: Correct teardown ordering in ucsi_init() error path

From: Heikki Krogerus

Date: Tue Jul 21 2026 - 04:04:56 EST


On Fri, Jul 17, 2026 at 10:46:14AM +0000, Andrei Kuchynski wrote:
> The commit 7aa7d4bf9d3f ("usb: typec: ucsi: Fix race condition and
> ordering in port unregistration") consolidated port teardown into the
> ucsi_unregister_port() helper. However, it introduced an ordering problem
> in the ucsi_init() error path.
>
> Fix this by ensuring ucsi_unregister_port() is called before we unregister
> their corresponding lockdep keys.
>
> Cc: stable@xxxxxxxxxxxxxxx
> Fixes: 7aa7d4bf9d3f ("usb: typec: ucsi: Fix race condition and ordering in port unregistration")
> Reported-by: "Borah, Chaitanya Kumar" <chaitanya.kumar.borah@xxxxxxxxx>
> Closes: https://lore.kernel.org/all/22064276-6c56-411a-9f20-6917ceeb865f@xxxxxxxxx/
> Signed-off-by: Andrei Kuchynski <akuchynski@xxxxxxxxxxxx>

Reviewed-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>

> ---
> Changes in v2:
> - Added Reported-by tag.
>
> drivers/usb/typec/ucsi/ucsi.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
> index 1ae4224d2dfc3..49f1c53721bbd 100644
> --- a/drivers/usb/typec/ucsi/ucsi.c
> +++ b/drivers/usb/typec/ucsi/ucsi.c
> @@ -2142,11 +2142,11 @@ static int ucsi_init(struct ucsi *ucsi)
> return 0;
>
> err_unregister:
> + for (con = connector; con->port; con++)
> + ucsi_unregister_port(con);
> for (i = 0; i < ucsi->cap.num_connectors; i++)
> lockdep_unregister_key(&connector[i].lock_key);
>
> - for (con = connector; con->port; con++)
> - ucsi_unregister_port(con);
> kfree(connector);
> err_reset:
> memset(&ucsi->cap, 0, sizeof(ucsi->cap));
> --
> 2.55.0.229.g6434b31f56-goog

--
heikki