All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: hyunjungg <hj351016@gmail.com>, linux-usb@vger.kernel.org
Subject: Re: [PATCH] usb: sl811-hcd: delete the driver timer on stop to avoid use-after-free
Date: Sat, 07 Nov 2026 15:03:52 +0000	[thread overview]
Message-ID: <sashiko-outbox-202981@kernel.org> (raw)
In-Reply-To: <20261107145022.3734911-1-hj351016@gmail.com>

Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Medium] usb: sl811-hcd: sl811h_stop() deletes timer after
  port_power() halt
--

commit 2938f64d61ba1aa6f4f9800e4e15b39f1ccc6b42
Author: Hyunjung Ko <hj351016@gmail.com>

usb: sl811-hcd: delete the driver timer on stop to avoid use-after-free

This commit calls timer_delete_sync(&sl811->timer) in sl811h_stop() so that a
pending port timer does not fire after the HCD and struct sl811 are freed.

> diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c
> index b044977f6f567..53a0bc81916ad 100644
> --- a/drivers/usb/host/sl811-hcd.c
> +++ b/drivers/usb/host/sl811-hcd.c
> @@ -1520,6 +1520,8 @@ sl811h_stop(struct usb_hcd *hcd)
>  	spin_lock_irqsave(&sl811->lock, flags);
>  	port_power(sl811, 0);
>  	spin_unlock_irqrestore(&sl811->lock, flags);
> +
> +	timer_delete_sync(&sl811->timer);
>  }
>  
>  static int

[Severity: Medium]
Can sl811h_timer() still run in the window between spin_unlock_irqrestore()
and timer_delete_sync(&sl811->timer), re-enabling the controller after
port_power(sl811, 0) has halted it?

CPU0                                    CPU1 (<softirq>)
sl811h_stop()
  spin_lock_irqsave(&sl811->lock, ...)
  port_power(sl811, 0)
    hcd->state = HC_STATE_HALT;
    sl811_write(..., SL11H_IRQ_ENABLE, 0);
                                        sl811h_timer()
                                          spin_lock_irqsave(&sl811->lock, ...)
  spin_unlock_irqrestore(&sl811->lock, ...)
                                          sl811->ctrl1 |= SL11H_CTL1MASK_SOF_ENA;
                                          sl811_write(..., SL11H_HOSTCTLREG,
                                                      SL11H_HCTLMASK_ARM);
                                          sl811_write(..., SL11H_IRQ_ENABLE,
                                                      sl811->irq_enable);
                                            <-- re-arms halted controller
  timer_delete_sync(&sl811->timer)

sl811h_timer() does not check whether the port is powered or whether
hcd->state is HC_STATE_HALT.  If a port reset or resume timer expires while
port_power(sl811, 0) is running (which holds sl811->lock across a 20 ms
mdelay() when board->reset is NULL), sl811h_timer() runs as soon as
sl811->lock is released and re-enables SOF generation, Endpoint A, and
hardware interrupts in SL11H_IRQ_ENABLE on the halted controller.

Only sl811h_hub_control() arms sl811->timer (the transfer scheduler never
touches it), and usb_remove_hcd() has already stopped root-hub activity before
calling sl811h_stop().  Deleting sl811->timer alongside hcd->rh_timer before
port_power(sl811, 0) would drain any pending callback before halting the
hardware; the commit message should also be updated not to mention the
transfer scheduler.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261107145022.3734911-1-hj351016@gmail.com?part=1

  reply	other threads:[~2026-11-07 15:03 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-07 14:50 [PATCH] usb: sl811-hcd: delete the driver timer on stop to avoid use-after-free hyunjungg
2026-11-07 15:03 ` sashiko-bot [this message]
  -- strict thread matches above, loose matches on Subject: below --
2026-11-07 15:18 hyunjungg
2026-11-07 15:25 ` sashiko-bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=sashiko-outbox-202981@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=hj351016@gmail.com \
    --cc=linux-usb@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.