Re: [PATCH v3] usb: hub: Set proper message when usb_hub_create_port_device() fails
From: Chen-Yu Tsai
Date: Fri Oct 02 2026 - 01:30:32 EST
On Thu, Oct 1, 2026 at 7:23 PM Greg Kroah-Hartman
<gregkh@xxxxxxxxxxxxxxxxxxx> wrote:
>
> On Thu, Oct 01, 2026 at 07:06:30PM +0800, Chen-Yu Tsai wrote:
> > Right now when usb_hub_create_port_device() fails, it prints a separate
> > error message to say which port failed, but otherwise leaves 'message'
> > set to the default "out of memory", which is somewhat misleading.
> >
> > Use a small buffer on the stack to put the custom formatted error message
> > in and use it as the error message.
> >
> > Assisted-by: LLM # local reviews
> > Signed-off-by: Chen-Yu Tsai <wenst@xxxxxxxxxxxx>
> > ---
> > Changes since v2:
> > - Simplify to just using a small buffer on the stack (Alan)
> >
> > Changes since v1:
> > - Explicitly track and free the allocated custom error message instead
> > of using devm_kasprintf()
> > - Link to v1:
> > https://lore.kernel.org/all/20260728100005.413868-1-wenst@xxxxxxxxxxxx/
> >
> > Sorry Andy, I ended up not using your __free(kfree_const) patch. My LLM
> > was telling me that it won't work correctly if CONFIG_USB=m.
> > ---
> > drivers/usb/core/hub.c | 5 +++--
> > 1 file changed, 3 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
> > index 0e929a4c9fa1..d7f39e86b24c 100644
> > --- a/drivers/usb/core/hub.c
> > +++ b/drivers/usb/core/hub.c
> > @@ -1480,6 +1480,7 @@ static int hub_configure(struct usb_hub *hub,
> > unsigned int pipe;
> > int maxp, ret, i;
> > char *message = "out of memory";
> > + char msg_buf[32] = {};
>
> Why are you initializing this?
It seemed sane. I guess this probably isn't needed.
> > unsigned unit_load;
> > unsigned full_load;
> > unsigned maxchild;
> > @@ -1756,8 +1757,8 @@ static int hub_configure(struct usb_hub *hub,
> > for (i = 0; i < maxchild; i++) {
> > ret = usb_hub_create_port_device(hub, i + 1);
> > if (ret < 0) {
> > - dev_err(hub->intfdev,
> > - "couldn't create port%d device.\n", i + 1);
> > + snprintf(msg_buf, sizeof(msg_buf), "couldn't create port%d device", i + 1);
> > + message = msg_buf;
>
> Please just do what the other errors do, set message to something else
> and leave the dev_err() here. That way no extra stack space is needed.
OK.
> And how did you hit this?
My other series adding pwrseq to USB hub port power controls [1] would let
usb_hub_create_port_device() return -EPROBE_DEFER if the pwrseq provider
isn't available yet. Due to probe ordering it is always unavailable the
first time around, as the regulator supplying the pwrseq device (M.2 slot)
hasn't probed yet.
BTW that patch series really needs a look over from the USB maintainers.
Thanks
ChenYu
[1] https://lore.kernel.org/all/20260916075745.3549953-1-wenst@xxxxxxxxxxxx/