lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.4 12/34] usb: dwc2: gadget: don't reset gadget's driver->bus
    Date
    From: Marek Szyprowski <m.szyprowski@samsung.com>

    [ Upstream commit 3120aac6d0ecd9accf56894aeac0e265f74d3d5a ]

    UDC driver should not touch gadget's driver internals, especially it
    should not reset driver->bus. This wasn't harmful so far, but since
    commit fc274c1e9973 ("USB: gadget: Add a new bus for gadgets") gadget
    subsystem got it's own bus and messing with ->bus triggers the
    following NULL pointer dereference:

    dwc2 12480000.hsotg: bound driver g_ether
    8<--- cut here ---
    Unable to handle kernel NULL pointer dereference at virtual address 00000000
    [00000000] *pgd=00000000
    Internal error: Oops: 5 [#1] SMP ARM
    Modules linked in: ...
    CPU: 0 PID: 620 Comm: modprobe Not tainted 5.18.0-rc5-next-20220504 #11862
    Hardware name: Samsung Exynos (Flattened Device Tree)
    PC is at module_add_driver+0x44/0xe8
    LR is at sysfs_do_create_link_sd+0x84/0xe0
    ...
    Process modprobe (pid: 620, stack limit = 0x(ptrval))
    ...
    module_add_driver from bus_add_driver+0xf4/0x1e4
    bus_add_driver from driver_register+0x78/0x10c
    driver_register from usb_gadget_register_driver_owner+0x40/0xb4
    usb_gadget_register_driver_owner from do_one_initcall+0x44/0x1e0
    do_one_initcall from do_init_module+0x44/0x1c8
    do_init_module from load_module+0x19b8/0x1b9c
    load_module from sys_finit_module+0xdc/0xfc
    sys_finit_module from ret_fast_syscall+0x0/0x54
    Exception stack(0xf1771fa8 to 0xf1771ff0)
    ...
    dwc2 12480000.hsotg: new device is high-speed
    ---[ end trace 0000000000000000 ]---

    Fix this by removing driver->bus entry reset.

    Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Link: https://lore.kernel.org/r/20220505104618.22729-1-m.szyprowski@samsung.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/usb/dwc2/gadget.c | 1 -
    1 file changed, 1 deletion(-)

    diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
    index 379bbf27c7ce..8fd6eefc671c 100644
    --- a/drivers/usb/dwc2/gadget.c
    +++ b/drivers/usb/dwc2/gadget.c
    @@ -4486,7 +4486,6 @@ static int dwc2_hsotg_udc_start(struct usb_gadget *gadget,

    WARN_ON(hsotg->driver);

    - driver->driver.bus = NULL;
    hsotg->driver = driver;
    hsotg->gadget.dev.of_node = hsotg->dev->of_node;
    hsotg->gadget.speed = USB_SPEED_UNKNOWN;
    --
    2.35.1
    \
     
     \ /
      Last update: 2022-06-07 21:54    [W:4.106 / U:0.800 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site