19 Nov, 2020

1 commit

  • We hit the problem with below sequence:
    - ci_udc_vbus_session() update vbus_active flag and ci->driver
    is valid,
    - before calling the ci_hdrc_gadget_connect(),
    usb_gadget_udc_stop() is called by application remove gadget
    driver,
    - ci_udc_vbus_session() will contine do ci_hdrc_gadget_connect() as
    gadget_ready is 1, so udc interrupt is enabled, but ci->driver is
    NULL.
    - USB connection irq generated but ci->driver is NULL.

    As udc irq only should be enabled when gadget driver is binded, so
    add spinlock to protect the usb irq enable for vbus session handling.

    Signed-off-by: Jun Li
    Signed-off-by: Peter Chen
    (cherry picked from commit 72dc8df7920fc24eba0f586c56e900a1643ff2b3)
    (cherry picked from commit 0fe900249814f73ecb79c6fb2ae75d46ed9d3a3e)

    Jun Li
     

29 Oct, 2020

2 commits

  • According the programming guide (for all DWC3 IPs), when the driver
    handles ClearFeature(halt) request, it should issue CLEAR_STALL command
    _after_ the END_TRANSFER command completes. The END_TRANSFER command may
    take some time to complete. So, delay the ClearFeature(halt) request
    control status stage and wait for END_TRANSFER command completion
    interrupt. Only after END_TRANSFER command completes that the driver
    may issue CLEAR_STALL command.

    Cc: stable@vger.kernel.org
    Fixes: cb11ea56f37a ("usb: dwc3: gadget: Properly handle ClearFeature(halt)")
    Signed-off-by: Thinh Nguyen
    Signed-off-by: Felipe Balbi
    (cherry picked from commit d97c78a1908e59a1fdbcbece87cd0440b5d7a1f2)

    Thinh Nguyen
     
  • The function driver may queue new requests right after halting the
    endpoint (i.e. queue new requests while the endpoint is stalled).
    There's no restriction preventing it from doing so. However, dwc3
    currently drops those requests after CLEAR_STALL. The driver should only
    drop started requests. Keep the pending requests in the pending list to
    resume and process them after the host issues ClearFeature(Halt) to the
    endpoint.

    Cc: stable@vger.kernel.org
    Fixes: cb11ea56f37a ("usb: dwc3: gadget: Properly handle ClearFeature(halt)")
    Signed-off-by: Thinh Nguyen
    Signed-off-by: Felipe Balbi
    (cherry picked from commit c503672abe1348f10f5a54a662336358c6e1a297)

    Thinh Nguyen
     

21 Oct, 2020

1 commit

  • When switch host to device mode, we wait vbus off by only checking
    BSV of otgsc, if during the wait, the remote switches to host mode
    and turn on vbus, current code can't detect this scenario and just
    keeps waiting vbus drop, so gadget can't be enabled until 5s time
    out, we see this corner case on typec compliance test (TD 4.5.5),
    the tester generate some short changes on CC which result otg ID
    state changes from high to low and then to high in short time, for
    the later low to high change, the tester turn on vbus before the
    previous vbus turn off drops to below BSV, hw_wait_vbus_lower_bsv()
    would wait until either the remote turn off vbus(host role try fail),
    or timeout after 5s.

    This patch adds the check of vbus level of AVV 20ms after vbus turn
    off start, we assume 20ms is enough for vbus discharge to be below
    AVV, if the vbus is above AVV after 20ms, we think the vbus is from
    remote host and don't wait any longer, just enable gadget to try a
    device mode connection. If the vbus keeps at between BSV and AVV,
    we think this is from local so keep waiting until it drops to below
    BSV.

    Acked-by: Peter Chen
    Signed-off-by: Li Jun

    Li Jun
     

08 Oct, 2020

1 commit

  • * tag 'v5.4.70': (3051 commits)
    Linux 5.4.70
    netfilter: ctnetlink: add a range check for l3/l4 protonum
    ep_create_wakeup_source(): dentry name can change under you...
    ...

    Conflicts:
    arch/arm/mach-imx/pm-imx6.c
    arch/arm64/boot/dts/freescale/imx8mm-evk.dts
    arch/arm64/boot/dts/freescale/imx8mn-ddr4-evk.dts
    drivers/crypto/caam/caamalg.c
    drivers/gpu/drm/imx/dw_hdmi-imx.c
    drivers/gpu/drm/imx/imx-ldb.c
    drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c
    drivers/mmc/host/sdhci-esdhc-imx.c
    drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
    drivers/net/ethernet/freescale/enetc/enetc.c
    drivers/net/ethernet/freescale/enetc/enetc_pf.c
    drivers/thermal/imx_thermal.c
    drivers/usb/cdns3/ep0.c
    drivers/xen/swiotlb-xen.c
    sound/soc/fsl/fsl_esai.c
    sound/soc/fsl/fsl_sai.c

    Signed-off-by: Jason Liu

    Jason Liu
     

07 Oct, 2020

1 commit

  • commit 2b405533c2560d7878199c57d95a39151351df72 upstream.

    commit 2b74b0a04d3e ("USB: gadget: f_ncm: add bounds checks to ncm_unwrap_ntb()")
    adds important bounds checking however it unfortunately also introduces a
    bug with respect to section 3.3.1 of the NCM specification.

    wDatagramIndex[1] : "Byte index, in little endian, of the second datagram
    described by this NDP16. If zero, then this marks the end of the sequence
    of datagrams in this NDP16."

    wDatagramLength[1]: "Byte length, in little endian, of the second datagram
    described by this NDP16. If zero, then this marks the end of the sequence
    of datagrams in this NDP16."

    wDatagramIndex[1] and wDatagramLength[1] respectively then may be zero but
    that does not mean we should throw away the data referenced by
    wDatagramIndex[0] and wDatagramLength[0] as is currently the case.

    Breaking the loop on (index2 == 0 || dg_len2 == 0) should come at the end
    as was previously the case and checks for index2 and dg_len2 should be
    removed since zero is valid.

    I'm not sure how much testing the above patch received but for me right now
    after enumeration ping doesn't work. Reverting the commit restores ping,
    scp, etc.

    The extra validation associated with wDatagramIndex[0] and
    wDatagramLength[0] appears to be valid so, this change removes the incorrect
    restriction on wDatagramIndex[1] and wDatagramLength[1] restoring data
    processing between host and device.

    Fixes: 2b74b0a04d3e ("USB: gadget: f_ncm: add bounds checks to ncm_unwrap_ntb()")
    Cc: Ilja Van Sprundel
    Cc: Brooke Basile
    Cc: stable
    Signed-off-by: Bryan O'Donoghue
    Link: https://lore.kernel.org/r/20200920170158.1217068-1-bryan.odonoghue@linaro.org
    Signed-off-by: Greg Kroah-Hartman

    Bryan O'Donoghue
     

01 Oct, 2020

3 commits

  • [ Upstream commit 1c0e69ae1b9f9004fd72978612ae3463791edc56 ]

    If the SS PHY is in P3, there is no pipe_clk, HW may use suspend_clk
    for function, as suspend_clk is slow so EP command need more time to
    complete, e.g, imx8M suspend_clk is 32K, set ep configuration will
    take about 380us per below trace time stamp(44.286278 - 44.285897
    = 0.000381):

    configfs_acm.sh-822 [000] d..1 44.285896: dwc3_writel: addr
    000000006d59aae1 value 00000401
    configfs_acm.sh-822 [000] d..1 44.285897: dwc3_readl: addr
    000000006d59aae1 value 00000401
    ... ...
    configfs_acm.sh-822 [000] d..1 44.286278: dwc3_readl: addr
    000000006d59aae1 value 00000001
    configfs_acm.sh-822 [000] d..1 44.286279: dwc3_gadget_ep_cmd:
    ep0out: cmd 'Set Endpoint Configuration' [401] params 00001000
    00000500 00000000 --> status: Successful

    This was originally found on Hisilicon Kirin Soc that need more time
    for the device controller to clear the CmdAct of DEPCMD.

    Signed-off-by: Yu Chen
    Signed-off-by: John Stultz
    Signed-off-by: Li Jun
    Signed-off-by: Felipe Balbi
    Signed-off-by: Sasha Levin

    Yu Chen
     
  • [ Upstream commit a7f40c233a6b0540d28743267560df9cfb571ca9 ]

    The comparison of hcd->irq to less than zero for an error check will
    never be true because hcd->irq is an unsigned int. Fix this by
    assigning the int retval to the return of platform_get_irq and checking
    this for the -ve error condition and assigning hcd->irq to retval.

    Addresses-Coverity: ("Unsigned compared against 0")
    Fixes: c856b4b0fdb5 ("USB: EHCI: ehci-mv: fix error handling in mv_ehci_probe()")
    Signed-off-by: Colin Ian King
    Link: https://lore.kernel.org/r/20200515165453.104028-1-colin.king@canonical.com
    Signed-off-by: Greg Kroah-Hartman
    Signed-off-by: Sasha Levin

    Colin Ian King
     
  • [ Upstream commit c856b4b0fdb5044bca4c0acf9a66f3b5cc01a37a ]

    If the function platform_get_irq() failed, the negative value
    returned will not be detected here. So fix error handling in
    mv_ehci_probe(). And when get irq failed, the function
    platform_get_irq() logs an error message, so remove redundant
    message here.

    Signed-off-by: Zhang Shengju
    Signed-off-by: Tang Bin
    Link: https://lore.kernel.org/r/20200508114305.15740-1-tangbin@cmss.chinamobile.com
    Signed-off-by: Greg Kroah-Hartman
    Signed-off-by: Sasha Levin

    Tang Bin
     

23 Sep, 2020

5 commits

  • commit 29231826f3bd65500118c473fccf31c0cf14dbc0 upstream.

    The CRC calculation done by genksyms is triggered when the parser hits
    EXPORT_SYMBOL*() macros. At this point, genksyms recursively expands the
    types of the function parameters, and uses that as the input for the CRC
    calculation. In the case of forward-declared structs, the type expands
    to 'UNKNOWN'. Following this, it appears that the result of the
    expansion of each type is cached somewhere, and seems to be re-used
    when/if the same type is seen again for another exported symbol in the
    same C file.

    Unfortunately, this can cause CRC 'stability' issues when a struct
    definition becomes visible in the middle of a C file. For example, let's
    assume code with the following pattern:

    struct foo;

    int bar(struct foo *arg)
    {
    /* Do work ... */
    }
    EXPORT_SYMBOL_GPL(bar);

    /* This contains struct foo's definition */
    #include "foo.h"

    int baz(struct foo *arg)
    {
    /* Do more work ... */
    }
    EXPORT_SYMBOL_GPL(baz);

    Here, baz's CRC will be computed using the expansion of struct foo that
    was cached after bar's CRC calculation ('UNKOWN' here). But if
    EXPORT_SYMBOL_GPL(bar) is removed from the file (because of e.g. symbol
    trimming using CONFIG_TRIM_UNUSED_KSYMS), struct foo will be expanded
    late, during baz's CRC calculation, which now has visibility over the
    full struct definition, hence resulting in a different CRC for baz.

    The proper fix for this certainly is in genksyms, but that will take me
    some time to get right. In the meantime, we have seen one occurrence of
    this in the ehci-hcd code which hits this problem because of the way it
    includes C files halfway through the code together with an unlucky mix
    of symbol trimming.

    In order to workaround this, move the include done in ehci-hub.c early
    in ehci-hcd.c, hence making sure the struct definitions are visible to
    the entire file. This improves CRC stability of the ehci-hcd exports
    even when symbol trimming is enabled.

    Acked-by: Alan Stern
    Cc: stable
    Signed-off-by: Quentin Perret
    Link: https://lore.kernel.org/r/20200916171825.3228122-1-qperret@google.com
    Signed-off-by: Greg Kroah-Hartman

    Quentin Perret
     
  • commit 386e15a650447f53de3d2d8819ce9393f31650a4 upstream.

    Sometimes the embedded controller firmware does not
    terminate the list of alternate modes that the partner
    supports in its response to the GET_ALTERNATE_MODES command.
    Instead the firmware returns the supported alternate modes
    over and over again until the driver stops requesting them.

    If that happens, the number of modes for each alternate mode
    will exceed the maximum 6 that is defined in the USB Power
    Delivery specification. Making sure that can't happen by
    adding a check for it.

    This fixes NULL pointer dereference that is caused by the
    overrun.

    Fixes: ad74b8649beaf ("usb: typec: ucsi: Preliminary support for alternate modes")
    Cc: stable@vger.kernel.org
    Reported-by: Zwane Mwaikambo
    Signed-off-by: Heikki Krogerus
    Link: https://lore.kernel.org/r/20200916090034.25119-3-heikki.krogerus@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Heikki Krogerus
     
  • commit 9cdabcb3ef8c24ca3a456e4db7b012befb688e73 upstream.

    read() needs to check whether the device has been
    disconnected before it tries to talk to the device.

    Signed-off-by: Oliver Neukum
    Reported-by: syzbot+be5b5f86a162a6c281e6@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/r/20200917103427.15740-1-oneukum@suse.com
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Oliver Neukum
     
  • commit 325b008723b2dd31de020e85ab9d2e9aa4637d35 upstream.

    The SCSI layer can go into an ugly loop if you ignore that a device is
    gone. You need to report an error in the command rather than in the
    return value of the queue method.

    We need to specifically check for ENODEV. The issue goes back to the
    introduction of the driver.

    Fixes: 115bb1ffa54c3 ("USB: Add UAS driver")
    Signed-off-by: Oliver Neukum
    Cc: stable
    Link: https://lore.kernel.org/r/20200916094026.30085-2-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman

    Oliver Neukum
     
  • commit bcea6dafeeef7d1a6a8320a249aabf981d63b881 upstream.

    Add a USB_QUIRK_IGNORE_REMOTE_WAKEUP quirk for the BYD zhaoxin notebook.
    This notebook come with usb touchpad. And we would like to disable
    touchpad wakeup on this notebook by default.

    Signed-off-by: Penghao
    Cc: stable
    Link: https://lore.kernel.org/r/20200907023026.28189-1-penghao@uniontech.com
    Signed-off-by: Greg Kroah-Hartman

    Penghao
     

17 Sep, 2020

6 commits

  • commit 1f3546ff3f0a1000971daef58406954bad3f7061 upstream.

    Failing probe with -EPROBE_DEFER until all dependencies
    listed in the _DEP (Operation Region Dependencies) object
    have been met.

    This will fix an issue where on some platforms UCSI ACPI
    driver fails to probe because the address space handler for
    the operation region that the UCSI ACPI interface uses has
    not been loaded yet.

    Fixes: 8243edf44152 ("usb: typec: ucsi: Add ACPI driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Heikki Krogerus
    Link: https://lore.kernel.org/r/20200904110918.51546-1-heikki.krogerus@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Heikki Krogerus
     
  • commit cfd54fa83a5068b61b7eb28d3c117d8354c74c7a upstream.

    Userspace drivers that use a SetConfiguration() request to "lightweight"
    reset an already configured usb device might cause data toggles to get out
    of sync between the device and host, and the device becomes unusable.

    The xHCI host requires endpoints to be dropped and added back to reset the
    toggle. If USB core notices the new configuration is the same as the
    current active configuration it will avoid these extra steps by calling
    usb_reset_configuration() instead of usb_set_configuration().

    A SetConfiguration() request will reset the device side data toggles.
    Make sure usb_reset_configuration() function also drops and adds back the
    endpoints to ensure data toggles are in sync.

    To avoid code duplication split the current usb_disable_device() function
    and reuse the endpoint specific part.

    Cc: stable
    Tested-by: Martin Thierer
    Signed-off-by: Mathias Nyman
    Link: https://lore.kernel.org/r/20200901082528.12557-1-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Mathias Nyman
     
  • commit 1ac698790819b83f39fd7ea4f6cdabee9bdd7b38 upstream.

    These modules have 2 different USB layouts:

    The default layout with PID 0x9205 (AT+CUSBSELNV=1) exposes 4 TTYs and
    an ECM interface:

    T: Bus=02 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 6 Spd=480 MxCh= 0
    D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=1e0e ProdID=9205 Rev=00.00
    S: Manufacturer=SimTech, Incorporated
    S: Product=SimTech SIM7080
    S: SerialNumber=1234567890ABCDEF
    C: #Ifs= 6 Cfg#= 1 Atr=e0 MxPwr=500mA
    I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I: If#=0x2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I: If#=0x3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I: If#=0x4 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
    I: If#=0x5 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether

    The purpose of each TTY is as follows:
    * ttyUSB0: DIAG/QCDM port.
    * ttyUSB1: GNSS data.
    * ttyUSB2: AT-capable port (control).
    * ttyUSB3: AT-capable port (data).

    In the secondary layout with PID=0x9206 (AT+CUSBSELNV=86) the module
    exposes 6 TTY ports:

    T: Bus=02 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 8 Spd=480 MxCh= 0
    D: Ver= 2.00 Cls=02(commc) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
    P: Vendor=1e0e ProdID=9206 Rev=00.00
    S: Manufacturer=SimTech, Incorporated
    S: Product=SimTech SIM7080
    S: SerialNumber=1234567890ABCDEF
    C: #Ifs= 6 Cfg#= 1 Atr=e0 MxPwr=500mA
    I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I: If#=0x2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I: If#=0x3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I: If#=0x4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I: If#=0x5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option

    The purpose of each TTY is as follows:
    * ttyUSB0: DIAG/QCDM port.
    * ttyUSB1: GNSS data.
    * ttyUSB2: AT-capable port (control).
    * ttyUSB3: QFLOG interface.
    * ttyUSB4: DAM interface.
    * ttyUSB5: AT-capable port (data).

    Signed-off-by: Aleksander Morgado
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold
    Signed-off-by: Greg Kroah-Hartman

    Aleksander Morgado
     
  • commit 2bb70f0a4b238323e4e2f392fc3ddeb5b7208c9e upstream.

    The USB composition, defining the set of exported functions, is dynamic
    in newer Quectel modems. Default functions can be disabled and
    alternative functions can be enabled instead. The alternatives
    includes class functions using interface pairs, which should be
    handled by the respective class drivers.

    Active interfaces are numbered consecutively, so static
    blacklisting based on interface numbers will fail when the
    composition changes. An example of such an error, where the
    option driver has bound to the CDC ECM data interface,
    preventing cdc_ether from handling this function:

    T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 0
    D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=2c7c ProdID=0125 Rev= 3.18
    S: Manufacturer=Quectel
    S: Product=EC25-AF
    C:* #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA
    A: FirstIf#= 4 IfCount= 2 Cls=02(comm.) Sub=06 Prot=00
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
    E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E: Ad=87(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
    E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=00 Driver=(none)
    E: Ad=89(I) Atr=03(Int.) MxPS= 16 Ivl=32ms
    I:* If#= 5 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=option
    I: If#= 5 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=option
    E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

    Another device with the same id gets correct drivers, since the
    interface of the network function happens to be blacklisted by option:

    T: Bus=01 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#= 3 Spd=480 MxCh= 0
    D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=2c7c ProdID=0125 Rev= 3.18
    S: Manufacturer=Android
    S: Product=Android
    C:* #Ifs= 5 Cfg#= 1 Atr=a0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
    E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E: Ad=87(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
    E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
    E: Ad=89(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
    E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

    Change rules for EC21, EC25, BG96 and EG95 to match vendor specific
    serial functions only, to prevent binding to class functions. Require
    2 endpoints on ff/ff/ff functions, avoiding the 3 endpoint QMI/RMNET
    network functions.

    Cc: AceLan Kao
    Cc: Sebastian Sjoholm
    Cc: Dan Williams
    Cc: stable@vger.kernel.org
    Signed-off-by: Bjørn Mork
    Signed-off-by: Johan Hovold
    Signed-off-by: Greg Kroah-Hartman

    Bjørn Mork
     
  • commit 6ccc48e0eb2f3a5f3bd39954a21317e5f8874726 upstream.

    The device added has an FTDI chip inside.
    The device is used to connect Xsens USB Motion Trackers.

    Cc: stable@vger.kernel.org
    Signed-off-by: Patrick Riphagen
    Signed-off-by: Johan Hovold
    Signed-off-by: Greg Kroah-Hartman

    Patrick Riphagen
     
  • commit a18cd6c9b6bc73dc17e8b7e9bd07decaa8833c97 upstream.

    The USB device descriptor may get changed between two consecutive
    enumerations on the same device for some reason, such as DFU or
    malicius device.
    In that case, we may access the changing descriptor if we don't take
    the device lock here.

    The issue is reported:
    https://syzkaller.appspot.com/bug?id=901a0d9e6519ef8dc7acab25344bd287dd3c7be9

    Cc: stable
    Cc: Alan Stern
    Reported-by: syzbot+256e56ddde8b8957eabd@syzkaller.appspotmail.com
    Fixes: 217a9081d8e6 ("USB: add all configs to the "descriptors" attribute")
    Signed-off-by: Zeng Tao
    Link: https://lore.kernel.org/r/1599201467-11000-1-git-send-email-prime.zeng@hisilicon.com
    Signed-off-by: Greg Kroah-Hartman

    Zeng Tao
     

11 Sep, 2020

5 commits

  • After the chipidea driver introduce extcon for id and vbus, it's able
    to wakeup from another irq source, in case the system with extcon ID
    cable, wakeup from usb ID cable and device removal, the usb device
    disconnect irq may come firstly before the extcon notifier while system
    resume, so we will get 2 "wakeup" irq, one for usb device disconnect;
    and one for extcon ID cable change(real wakeup event), current driver
    treat them as 2 successive wakeup irq so can't handle it correctly, then
    finially the usb irq can't be enabled. This patch adds a check to bypass
    further usb events before controller resume finished to fix it.

    Reviewed-by: Peter Chen
    Signed-off-by: Li Jun

    Li Jun
     
  • Coverity detected the 2 cases can never be executed due to the same
    cases in the switch above it already go out, so remove them.

    Reviewed-by: Peter Chen
    Signed-off-by: Li Jun

    Li Jun
     
  • Only gate this clock if system suspend with wakeup disabled.

    Reviewed-by: Peter Chen
    Signed-off-by: Li Jun

    Li Jun
     
  • we introduce 3rd role for dwc3, but miss to handle power management
    for it, this will cause re-init missing if power lost, and dwc3 is
    not in an expected low power state, so add none role PM handling.

    Reviewed-by: Peter Chen
    Signed-off-by: Li Jun

    Li Jun
     
  • The GCC C compiler generates code that calls functions in the libgcc
    library to implement the / and % operations with 64-bit operands on
    32-bit CPUs. However, the Linux kernel is not linked against the libgcc
    library, so such code will fail to link when building code for a 32-bit
    Linux kernel:
    LD .tmp_vmlinux.kallsyms1
    arm-fsl-linux-gnueabi-ld.bfd: drivers/usb/dwc3/core.o: in function
    `dwc3_core_init':
    core.c:(.text+0x176c): undefined reference to `__aeabi_uldivmod'
    arm-fsl-linux-gnueabi-ld.bfd: core.c:(.text+0x1778): undefined reference
    to `__aeabi_uldivmod'
    Fix it by use the DIV_ROUND_DOWN_ULL.

    build warning on armv7:
    ../drivers/usb/dwc3/core.c: In function ‘dwc3_frame_length_adjustment’:
    ../drivers/usb/dwc3/core.c:339:18: warning: integer overflow in
    expression of type ‘long int’ results in ‘-728182784’ [-Woverflow]
    339 | temp = 125000L * 1000000000L;

    Reviewed-by: Peter Chen
    Signed-off-by: Li Jun

    Li Jun
     

03 Sep, 2020

15 commits

  • [ Upstream commit bc9a2e226ea95e1699f7590845554de095308b75 ]

    Currently dwc3 doesn't handle usb_request->zero for SG requests. This
    change checks and prepares extra TRBs for the ZLP for SG requests.

    Cc: # v4.5+
    Fixes: 04c03d10e507 ("usb: dwc3: gadget: handle request->zero")
    Signed-off-by: Thinh Nguyen
    Signed-off-by: Felipe Balbi
    Signed-off-by: Sasha Levin

    Thinh Nguyen
     
  • [ Upstream commit d2ee3ff79e6a3d4105e684021017d100524dc560 ]

    The usb_request->zero doesn't apply for isoc. Also, if we prepare a
    0-length (ZLP) TRB for the OUT direction, we need to prepare an extra
    TRB to pad up to the MPS alignment. Use the same bounce buffer for the
    ZLP TRB and the extra pad TRB.

    Cc: # v4.5+
    Fixes: d6e5a549cc4d ("usb: dwc3: simplify ZLP handling")
    Fixes: 04c03d10e507 ("usb: dwc3: gadget: handle request->zero")
    Signed-off-by: Thinh Nguyen
    Signed-off-by: Felipe Balbi
    Signed-off-by: Sasha Levin

    Thinh Nguyen
     
  • [ Upstream commit 5d187c0454ef4c5e046a81af36882d4d515922ec ]

    The SG list may be set up with entry size more than the requested
    length. Check the usb_request->length and make sure that we don't setup
    the TRBs to send/receive more than requested. This case may occur when
    the SG entry is allocated up to a certain minimum size, but the request
    length is less than that. It can also occur when the request is reused
    for a different request length.

    Cc: # v4.18+
    Fixes: a31e63b608ff ("usb: dwc3: gadget: Correct handling of scattergather lists")
    Signed-off-by: Thinh Nguyen
    Signed-off-by: Felipe Balbi
    Signed-off-by: Sasha Levin

    Thinh Nguyen
     
  • commit 20934c0de13b49a072fb1e0ca79fe0fe0e40eae5 upstream.

    The PSZ-HA* family of USB disk drives from Sony can't handle the
    REPORT OPCODES command when using the UAS protocol. This patch adds
    an appropriate quirks entry.

    Reported-and-tested-by: Till Dörges
    Signed-off-by: Alan Stern
    CC:
    Link: https://lore.kernel.org/r/20200826143229.GB400430@rowland.harvard.edu
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • commit f4b9d8a582f738c24ebeabce5cc15f4b8159d74e upstream.

    Clang static analysis reports this error

    cdc-acm.c:409:3: warning: Use of memory after it is freed
    acm_process_notification(acm, (unsigned char *)dr);

    There are three problems, the first one is that dr is not reset

    The variable dr is set with

    if (acm->nb_index)
    dr = (struct usb_cdc_notification *)acm->notification_buffer;

    But if the notification_buffer is too small it is resized with

    if (acm->nb_size) {
    kfree(acm->notification_buffer);
    acm->nb_size = 0;
    }
    alloc_size = roundup_pow_of_two(expected_size);
    /*
    * kmalloc ensures a valid notification_buffer after a
    * use of kfree in case the previous allocation was too
    * small. Final freeing is done on disconnect.
    */
    acm->notification_buffer =
    kmalloc(alloc_size, GFP_ATOMIC);

    dr should point to the new acm->notification_buffer.

    The second problem is any data in the notification_buffer is lost
    when the pointer is freed. In the normal case, the current data
    is accumulated in the notification_buffer here.

    memcpy(&acm->notification_buffer[acm->nb_index],
    urb->transfer_buffer, copy_size);

    When a resize happens, anything before
    notification_buffer[acm->nb_index] is garbage.

    The third problem is the acm->nb_index is not reset on a
    resizing buffer error.

    So switch resizing to using krealloc and reassign dr and
    reset nb_index.

    Fixes: ea2583529cd1 ("cdc-acm: reassemble fragmented notifications")
    Signed-off-by: Tom Rix
    Cc: stable
    Acked-by: Oliver Neukum
    Link: https://lore.kernel.org/r/20200801152154.20683-1-trix@redhat.com
    Signed-off-by: Greg Kroah-Hartman

    Tom Rix
     
  • commit bfd08d06d978d0304eb6f7855b548aa2cd1c5486 upstream.

    Inadvertently the commit b1cd1b65afba ("USB: gadget: u_f: add overflow checks
    to VLA macros") makes VLA macros to always return 0 due to different scope of
    two variables of the same name. Obviously we need to have only one.

    Fixes: b1cd1b65afba ("USB: gadget: u_f: add overflow checks to VLA macros")
    Reported-by: Marek Szyprowski
    Tested-by: Marek Szyprowski
    Signed-off-by: Andy Shevchenko
    Cc: Brooke Basile
    Cc: stable
    Link: https://lore.kernel.org/r/20200826192119.56450-1-andriy.shevchenko@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Andy Shevchenko
     
  • commit 2b74b0a04d3e9f9f08ff026e5663dce88ff94e52 upstream.

    Some values extracted by ncm_unwrap_ntb() could possibly lead to several
    different out of bounds reads of memory. Specifically the values passed
    to netdev_alloc_skb_ip_align() need to be checked so that memory is not
    overflowed.

    Resolve this by applying bounds checking to a number of different
    indexes and lengths of the structure parsing logic.

    Reported-by: Ilja Van Sprundel
    Signed-off-by: Brooke Basile
    Acked-by: Felipe Balbi
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Brooke Basile
     
  • commit b1cd1b65afba95971fa457dfdb2c941c60d38c5b upstream.

    size can potentially hold an overflowed value if its assigned expression
    is left unchecked, leading to a smaller than needed allocation when
    vla_group_size() is used by callers to allocate memory.
    To fix this, add a test for saturation before declaring variables and an
    overflow check to (n) * sizeof(type).
    If the expression results in overflow, vla_group_size() will return SIZE_MAX.

    Reported-by: Ilja Van Sprundel
    Suggested-by: Kees Cook
    Signed-off-by: Brooke Basile
    Acked-by: Felipe Balbi
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Brooke Basile
     
  • commit 1d4169834628d18b2392a2da92b7fbf5e8e2ce89 upstream.

    If the function platform_get_irq() failed, the negative value
    returned will not be detected here. So fix error handling in
    exynos_ohci_probe(). And when get irq failed, the function
    platform_get_irq() logs an error message, so remove redundant
    message here.

    Fixes: 62194244cf87 ("USB: Add Samsung Exynos OHCI diver")
    Signed-off-by: Zhang Shengju
    Cc: stable
    Signed-off-by: Tang Bin
    Reviewed-by: Krzysztof Kozlowski
    Link: https://lore.kernel.org/r/20200826144931.1828-1-tangbin@cmss.chinamobile.com
    Signed-off-by: Greg Kroah-Hartman

    Tang Bin
     
  • commit 9aa37788e7ebb3f489fb4b71ce07adadd444264a upstream.

    This device does not support UAS properly and a similar entry already
    exists in drivers/usb/storage/unusual_uas.h. Without this patch,
    storage_probe() defers the handling of this device to UAS, which cannot
    handle it either.

    Tested-by: Brice Goglin
    Fixes: bc3bdb12bbb3 ("usb-storage: Disable UAS on JMicron SATA enclosure")
    Acked-by: Alan Stern
    CC:
    Signed-off-by: Cyril Roelandt
    Link: https://lore.kernel.org/r/20200825212231.46309-1-tipecaml@gmail.com
    Signed-off-by: Greg Kroah-Hartman

    Cyril Roelandt
     
  • commit 068834a2773b6a12805105cfadbb3d4229fc6e0a upstream.

    The Sound Devices MixPre-D audio card suffers from the same defect
    as the Sound Devices USBPre2: an endpoint shared between a normal
    audio interface and a vendor-specific interface, in violation of the
    USB spec. Since the USB core now treats duplicated endpoints as bugs
    and ignores them, the audio endpoint isn't available and the card
    can't be used for audio capture.

    Along the same lines as commit bdd1b147b802 ("USB: quirks: blacklist
    duplicate ep on Sound Devices USBPre2"), this patch adds a quirks
    entry saying to ignore ep5in for interface 1, leaving it available for
    use with standard audio interface 2.

    Reported-and-tested-by: Jean-Christophe Barnoud
    Signed-off-by: Alan Stern
    CC:
    Fixes: 3e4f8e21c4f2 ("USB: core: fix check for duplicate endpoints")
    Link: https://lore.kernel.org/r/20200826194624.GA412633@rowland.harvard.edu
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • commit 5967116e8358899ebaa22702d09b0af57fef23e1 upstream.

    There's another Raydium touchscreen needs the no-lpm quirk:
    [ 1.339149] usb 1-9: New USB device found, idVendor=2386, idProduct=350e, bcdDevice= 0.00
    [ 1.339150] usb 1-9: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    [ 1.339151] usb 1-9: Product: Raydium Touch System
    [ 1.339152] usb 1-9: Manufacturer: Raydium Corporation
    ...
    [ 6.450497] usb 1-9: can't set config #1, error -110

    BugLink: https://bugs.launchpad.net/bugs/1889446
    Signed-off-by: Kai-Heng Feng
    Cc: stable
    Link: https://lore.kernel.org/r/20200731051622.28643-1-kai.heng.feng@canonical.com
    Signed-off-by: Greg Kroah-Hartman

    Kai-Heng Feng
     
  • commit 9a469bc9f32dd33c7aac5744669d21a023a719cd upstream.

    PNY Pro Elite USB 3.1 Gen 2 device (SSD) doesn't respond to ATA_12
    pass-through command (i.e. it just hangs). If it doesn't support this
    command, it should respond properly to the host. Let's just add a quirk
    to be able to move forward with other operations.

    Cc: stable@vger.kernel.org
    Signed-off-by: Thinh Nguyen
    Link: https://lore.kernel.org/r/2b0585228b003eedcc82db84697b31477df152e0.1597803605.git.thinhn@synopsys.com
    Signed-off-by: Greg Kroah-Hartman

    Thinh Nguyen
     
  • commit f176ede3a3bde5b398a6777a7f9ff091baa2d3ff upstream.

    The syzbot fuzzer identified a bug in the yurex driver: It passes
    GFP_KERNEL as a memory-allocation flag to usb_submit_urb() at a time
    when its state is TASK_INTERRUPTIBLE, not TASK_RUNNING:

    do not call blocking ops when !TASK_RUNNING; state=1 set at [] prepare_to_wait+0xb1/0x2a0 kernel/sched/wait.c:247
    WARNING: CPU: 1 PID: 340 at kernel/sched/core.c:7253 __might_sleep+0x135/0x190
    kernel/sched/core.c:7253
    Kernel panic - not syncing: panic_on_warn set ...
    CPU: 1 PID: 340 Comm: syz-executor677 Not tainted 5.8.0-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google
    01/01/2011
    Call Trace:
    __dump_stack lib/dump_stack.c:77 [inline]
    dump_stack+0xf6/0x16e lib/dump_stack.c:118
    panic+0x2aa/0x6e1 kernel/panic.c:231
    __warn.cold+0x20/0x50 kernel/panic.c:600
    report_bug+0x1bd/0x210 lib/bug.c:198
    handle_bug+0x41/0x80 arch/x86/kernel/traps.c:234
    exc_invalid_op+0x14/0x40 arch/x86/kernel/traps.c:254
    asm_exc_invalid_op+0x12/0x20 arch/x86/include/asm/idtentry.h:536
    RIP: 0010:__might_sleep+0x135/0x190 kernel/sched/core.c:7253
    Code: 65 48 8b 1c 25 40 ef 01 00 48 8d 7b 10 48 89 fe 48 c1 ee 03 80 3c 06 00 75
    2b 48 8b 73 10 48 c7 c7 e0 9e 06 86 e8 ed 12 f6 ff 0b e9 46 ff ff ff e8 1f
    b2 4b 00 e9 29 ff ff ff e8 15 b2 4b 00
    RSP: 0018:ffff8881cdb77a28 EFLAGS: 00010282
    RAX: 0000000000000000 RBX: ffff8881c6458000 RCX: 0000000000000000
    RDX: ffff8881c6458000 RSI: ffffffff8129ec93 RDI: ffffed1039b6ef37
    RBP: ffffffff86fdade2 R08: 0000000000000001 R09: ffff8881db32f54f
    R10: 0000000000000000 R11: 0000000030343354 R12: 00000000000001f2
    R13: 0000000000000000 R14: 0000000000000068 R15: ffffffff83c1b1aa
    slab_pre_alloc_hook.constprop.0+0xea/0x200 mm/slab.h:498
    slab_alloc_node mm/slub.c:2816 [inline]
    slab_alloc mm/slub.c:2900 [inline]
    kmem_cache_alloc_trace+0x46/0x220 mm/slub.c:2917
    kmalloc include/linux/slab.h:554 [inline]
    dummy_urb_enqueue+0x7a/0x880 drivers/usb/gadget/udc/dummy_hcd.c:1251
    usb_hcd_submit_urb+0x2b2/0x22d0 drivers/usb/core/hcd.c:1547
    usb_submit_urb+0xb4e/0x13e0 drivers/usb/core/urb.c:570
    yurex_write+0x3ea/0x820 drivers/usb/misc/yurex.c:495

    This patch changes the call to use GFP_ATOMIC instead of GFP_KERNEL.

    Reported-and-tested-by: syzbot+c2c3302f9c601a4b1be2@syzkaller.appspotmail.com
    Signed-off-by: Alan Stern
    CC:
    Link: https://lore.kernel.org/r/20200810182954.GB307778@rowland.harvard.edu
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • commit f1ec7ae6c9f8c016db320e204cb519a1da1581b8 upstream.

    Some device drivers call libusb_clear_halt when target ep queue
    is not empty. (eg. spice client connected to qemu for usb redir)

    Before commit f5249461b504 ("xhci: Clear the host side toggle
    manually when endpoint is soft reset"), that works well.
    But now, we got the error log:

    EP not empty, refuse reset

    xhci_endpoint_reset failed and left ep_state's EP_SOFT_CLEAR_TOGGLE
    bit still set

    So all the subsequent urb sumbits to the ep will fail with the
    warn log:

    Can't enqueue URB while manually clearing toggle

    We need to clear ep_state EP_SOFT_CLEAR_TOGGLE bit after
    xhci_endpoint_reset, even if it failed.

    Fixes: f5249461b504 ("xhci: Clear the host side toggle manually when endpoint is soft reset")
    Cc: stable # v4.17+
    Signed-off-by: Ding Hui
    Signed-off-by: Mathias Nyman
    Link: https://lore.kernel.org/r/20200821091549.20556-4-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Ding Hui