1. 23 3月, 2021 5 次提交
    • J
      USB: cdc-acm: fix use-after-free after probe failure · 4e49bf37
      Johan Hovold 提交于
      If tty-device registration fails the driver would fail to release the
      data interface. When the device is later disconnected, the disconnect
      callback would still be called for the data interface and would go about
      releasing already freed resources.
      
      Fixes: c93d8195 ("usb: cdc-acm: fix error handling in acm_probe()")
      Cc: stable@vger.kernel.org      # 3.9
      Cc: Alexey Khoroshilov <khoroshilov@ispras.ru>
      Acked-by: NOliver Neukum <oneukum@suse.com>
      Signed-off-by: NJohan Hovold <johan@kernel.org>
      Link: https://lore.kernel.org/r/20210322155318.9837-3-johan@kernel.orgSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4e49bf37
    • J
      USB: cdc-acm: fix double free on probe failure · 7180495c
      Johan Hovold 提交于
      If tty-device registration fails the driver copy of any Country
      Selection functional descriptor would end up being freed twice; first
      explicitly in the error path and then again in the tty-port destructor.
      
      Drop the first erroneous free that was left when fixing a tty-port
      resource leak.
      
      Fixes: cae2bc76 ("usb: cdc-acm: Decrement tty port's refcount if probe() fail")
      Cc: stable@vger.kernel.org      # 4.19
      Cc: Jaejoong Kim <climbbb.kim@gmail.com>
      Acked-by: NOliver Neukum <oneukum@suse.com>
      Signed-off-by: NJohan Hovold <johan@kernel.org>
      Link: https://lore.kernel.org/r/20210322155318.9837-2-johan@kernel.orgSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7180495c
    • O
      USB: cdc-acm: downgrade message to debug · e4c77070
      Oliver Neukum 提交于
      This failure is so common that logging an error here amounts
      to spamming log files.
      Reviewed-by: NBruno Thomsen <bruno.thomsen@gmail.com>
      Signed-off-by: NOliver Neukum <oneukum@suse.com>
      Cc: stable <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20210311130126.15972-2-oneukum@suse.comSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e4c77070
    • O
      USB: cdc-acm: untangle a circular dependency between callback and softint · 6069e3e9
      Oliver Neukum 提交于
      We have a cycle of callbacks scheduling works which submit
      URBs with thos callbacks. This needs to be blocked, stopped
      and unblocked to untangle the circle.
      
      The issue leads to faults like:
      
      [   55.068392] Unable to handle kernel paging request at virtual address 6b6b6c03
      [   55.075624] pgd = be866494
      [   55.078335] [6b6b6c03] *pgd=00000000
      [   55.081924] Internal error: Oops: 5 [#1] PREEMPT SMP ARM
      [   55.087238] Modules linked in: ppp_async crc_ccitt ppp_generic slhc
      xt_TCPMSS xt_tcpmss xt_hl nf_log_ipv6 nf_log_ipv4 nf_log_common
      xt_policy xt_limit xt_conntrack xt_tcpudp xt_pkttype ip6table_mangle
      iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4
      iptable_mangle ip6table_filter ip6_tables iptable_filter ip_tables
      des_generic md5 sch_fq_codel cdc_mbim cdc_wdm cdc_ncm usbnet mii
      cdc_acm usb_storage ip_tunnel xfrm_user xfrm6_tunnel tunnel6
      xfrm4_tunnel tunnel4 esp6 esp4 ah6 ah4 xfrm_algo xt_LOG xt_LED
      xt_comment x_tables ipv6
      [   55.134954] CPU: 0 PID: 82 Comm: kworker/0:2 Tainted: G
         T 5.8.17 #1
      [   55.142526] Hardware name: Freescale i.MX7 Dual (Device Tree)
      [   55.148304] Workqueue: events acm_softint [cdc_acm]
      [   55.153196] PC is at kobject_get+0x10/0xa4
      [   55.157302] LR is at usb_get_dev+0x14/0x1c
      [   55.161402] pc : [<8047c06c>]    lr : [<80560448>]    psr: 20000193
      [   55.167671] sp : bca39ea8  ip : 00007374  fp : bf6cbd80
      [   55.172899] r10: 00000000  r9 : bdd92284  r8 : bdd92008
      [   55.178128] r7 : 6b6b6b6b  r6 : fffffffe  r5 : 60000113  r4 : 6b6b6be3
      [   55.184658] r3 : 6b6b6b6b  r2 : 00000111  r1 : 00000000  r0 : 6b6b6be3
      [   55.191191] Flags: nzCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM Segment none
      [   55.198417] Control: 10c5387d  Table: bcf0c06a  DAC: 00000051
      [   55.204168] Process kworker/0:2 (pid: 82, stack limit = 0x9bdd2a89)
      [   55.210439] Stack: (0xbca39ea8 to 0xbca3a000)
      [   55.214805] 9ea0:                   bf6cbd80 80769a50 6b6b6b6b 80560448 bdeb0500 8056bfe8
      [   55.222991] 9ec0: 00000002 b76da000 00000000 bdeb0500 bdd92448 bca38000 bdeb0510 8056d69c
      [   55.231177] 9ee0: bca38000 00000000 80c050fc 00000000 bca39f44 09d42015 00000000 00000001
      [   55.239363] 9f00: bdd92448 bdd92438 bdd92000 7f1158c4 bdd92448 bca2ee00 bf6cbd80 bf6cef00
      [   55.247549] 9f20: 00000000 00000000 00000000 801412d8 bf6cbd98 80c03d00 bca2ee00 bf6cbd80
      [   55.255735] 9f40: bca2ee14 bf6cbd98 80c03d00 00000008 bca38000 80141568 00000000 80c446ae
      [   55.263921] 9f60: 00000000 bc9ed880 bc9f0700 bca38000 bc117eb4 80141524 bca2ee00 bc9ed8a4
      [   55.272107] 9f80: 00000000 80147cc8 00000000 bc9f0700 80147b84 00000000 00000000 00000000
      [   55.280292] 9fa0: 00000000 00000000 00000000 80100148 00000000 00000000 00000000 00000000
      [   55.288477] 9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
      [   55.296662] 9fe0: 00000000 00000000 00000000 00000000 00000013 00000000 00000000 00000000
      [   55.304860] [<8047c06c>] (kobject_get) from [<80560448>] (usb_get_dev+0x14/0x1c)
      [   55.312271] [<80560448>] (usb_get_dev) from [<8056bfe8>] (usb_hcd_unlink_urb+0x50/0xd8)
      [   55.320286] [<8056bfe8>] (usb_hcd_unlink_urb) from [<8056d69c>] (usb_kill_urb.part.0+0x44/0xd0)
      [   55.329004] [<8056d69c>] (usb_kill_urb.part.0) from [<7f1158c4>] (acm_softint+0x4c/0x10c [cdc_acm])
      [   55.338082] [<7f1158c4>] (acm_softint [cdc_acm]) from [<801412d8>] (process_one_work+0x19c/0x3e8)
      [   55.346969] [<801412d8>] (process_one_work) from [<80141568>] (worker_thread+0x44/0x4dc)
      [   55.355072] [<80141568>] (worker_thread) from [<80147cc8>] (kthread+0x144/0x180)
      [   55.362481] [<80147cc8>] (kthread) from [<80100148>] (ret_from_fork+0x14/0x2c)
      [   55.369706] Exception stack(0xbca39fb0 to 0xbca39ff8)
      Tested-by: NBruno Thomsen <bruno.thomsen@gmail.com>
      Signed-off-by: NOliver Neukum <oneukum@suse.com>
      Cc: stable <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20210311130126.15972-1-oneukum@suse.comSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6069e3e9
    • O
      cdc-acm: fix BREAK rx code path adding necessary calls · 08dff274
      Oliver Neukum 提交于
      Counting break events is nice but we should actually report them to
      the tty layer.
      
      Fixes: 5a6a62bd ("cdc-acm: add TIOCMIWAIT")
      Signed-off-by: NOliver Neukum <oneukum@suse.com>
      Link: https://lore.kernel.org/r/20210311133714.31881-1-oneukum@suse.com
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      08dff274
  2. 10 3月, 2021 2 次提交
  3. 26 1月, 2021 1 次提交
  4. 21 1月, 2021 1 次提交
  5. 04 1月, 2021 1 次提交
  6. 28 12月, 2020 6 次提交
  7. 13 11月, 2020 1 次提交
  8. 28 10月, 2020 1 次提交
  9. 05 10月, 2020 1 次提交
    • V
      usb: cdc-acm: add quirk to blacklist ETAS ES58X devices · a4f88430
      Vincent Mailhol 提交于
      The ES58X devices has a CDC ACM interface (used for debug
      purpose). During probing, the device is thus recognized as USB Modem
      (CDC ACM), preventing the etas-es58x module to load:
        usbcore: registered new interface driver etas_es58x
        usb 1-1.1: new full-speed USB device number 14 using xhci_hcd
        usb 1-1.1: New USB device found, idVendor=108c, idProduct=0159, bcdDevice= 1.00
        usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
        usb 1-1.1: Product: ES581.4
        usb 1-1.1: Manufacturer: ETAS GmbH
        usb 1-1.1: SerialNumber: 2204355
        cdc_acm 1-1.1:1.0: No union descriptor, testing for castrated device
        cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device
      
      Thus, these have been added to the ignore list in
      drivers/usb/class/cdc-acm.c
      
      N.B. Future firmware release of the ES58X will remove the CDC-ACM
      interface.
      
      `lsusb -v` of the three devices variant (ES581.4, ES582.1 and
      ES584.1):
      
        Bus 001 Device 011: ID 108c:0159 Robert Bosch GmbH ES581.4
        Device Descriptor:
          bLength                18
          bDescriptorType         1
          bcdUSB               1.10
          bDeviceClass            2 Communications
          bDeviceSubClass         0
          bDeviceProtocol         0
          bMaxPacketSize0        64
          idVendor           0x108c Robert Bosch GmbH
          idProduct          0x0159
          bcdDevice            1.00
          iManufacturer           1 ETAS GmbH
          iProduct                2 ES581.4
          iSerial                 3 2204355
          bNumConfigurations      1
          Configuration Descriptor:
            bLength                 9
            bDescriptorType         2
            wTotalLength       0x0035
            bNumInterfaces          1
            bConfigurationValue     1
            iConfiguration          5 Bus Powered Configuration
            bmAttributes         0x80
              (Bus Powered)
            MaxPower              100mA
            Interface Descriptor:
              bLength                 9
              bDescriptorType         4
              bInterfaceNumber        0
              bAlternateSetting       0
              bNumEndpoints           3
              bInterfaceClass         2 Communications
              bInterfaceSubClass      2 Abstract (modem)
              bInterfaceProtocol      0
              iInterface              4 ACM Control Interface
              CDC Header:
                bcdCDC               1.10
              CDC Call Management:
                bmCapabilities       0x01
                  call management
                bDataInterface          0
              CDC ACM:
                bmCapabilities       0x06
                  sends break
                  line coding and serial state
              Endpoint Descriptor:
                bLength                 7
                bDescriptorType         5
                bEndpointAddress     0x81  EP 1 IN
                bmAttributes            3
                  Transfer Type            Interrupt
                  Synch Type               None
                  Usage Type               Data
                wMaxPacketSize     0x0010  1x 16 bytes
                bInterval              10
              Endpoint Descriptor:
                bLength                 7
                bDescriptorType         5
                bEndpointAddress     0x82  EP 2 IN
                bmAttributes            2
                  Transfer Type            Bulk
                  Synch Type               None
                  Usage Type               Data
                wMaxPacketSize     0x0040  1x 64 bytes
                bInterval               0
              Endpoint Descriptor:
                bLength                 7
                bDescriptorType         5
                bEndpointAddress     0x03  EP 3 OUT
                bmAttributes            2
                  Transfer Type            Bulk
                  Synch Type               None
                  Usage Type               Data
                wMaxPacketSize     0x0040  1x 64 bytes
                bInterval               0
        Device Status:     0x0000
          (Bus Powered)
      
        Bus 001 Device 012: ID 108c:0168 Robert Bosch GmbH ES582
        Device Descriptor:
          bLength                18
          bDescriptorType         1
          bcdUSB               2.00
          bDeviceClass            2 Communications
          bDeviceSubClass         0
          bDeviceProtocol         0
          bMaxPacketSize0        64
          idVendor           0x108c Robert Bosch GmbH
          idProduct          0x0168
          bcdDevice            1.00
          iManufacturer           1 ETAS GmbH
          iProduct                2 ES582
          iSerial                 3 0108933
          bNumConfigurations      1
          Configuration Descriptor:
            bLength                 9
            bDescriptorType         2
            wTotalLength       0x0043
            bNumInterfaces          2
            bConfigurationValue     1
            iConfiguration          0
            bmAttributes         0x80
              (Bus Powered)
            MaxPower              500mA
            Interface Descriptor:
              bLength                 9
              bDescriptorType         4
              bInterfaceNumber        0
              bAlternateSetting       0
              bNumEndpoints           1
              bInterfaceClass         2 Communications
              bInterfaceSubClass      2 Abstract (modem)
              bInterfaceProtocol      1 AT-commands (v.25ter)
              iInterface              0
              CDC Header:
                bcdCDC               1.10
              CDC ACM:
                bmCapabilities       0x02
                  line coding and serial state
              CDC Union:
                bMasterInterface        0
                bSlaveInterface         1
              CDC Call Management:
                bmCapabilities       0x03
                  call management
                  use DataInterface
                bDataInterface          1
              Endpoint Descriptor:
                bLength                 7
                bDescriptorType         5
                bEndpointAddress     0x83  EP 3 IN
                bmAttributes            3
                  Transfer Type            Interrupt
                  Synch Type               None
                  Usage Type               Data
                wMaxPacketSize     0x0040  1x 64 bytes
                bInterval              16
            Interface Descriptor:
              bLength                 9
              bDescriptorType         4
              bInterfaceNumber        1
              bAlternateSetting       0
              bNumEndpoints           2
              bInterfaceClass        10 CDC Data
              bInterfaceSubClass      0
              bInterfaceProtocol      0
              iInterface              0
              Endpoint Descriptor:
                bLength                 7
                bDescriptorType         5
                bEndpointAddress     0x81  EP 1 IN
                bmAttributes            2
                  Transfer Type            Bulk
                  Synch Type               None
                  Usage Type               Data
                wMaxPacketSize     0x0200  1x 512 bytes
                bInterval               0
              Endpoint Descriptor:
                bLength                 7
                bDescriptorType         5
                bEndpointAddress     0x02  EP 2 OUT
                bmAttributes            2
                  Transfer Type            Bulk
                  Synch Type               None
                  Usage Type               Data
                wMaxPacketSize     0x0200  1x 512 bytes
                bInterval               0
        Device Qualifier (for other device speed):
          bLength                10
          bDescriptorType         6
          bcdUSB               2.00
          bDeviceClass            2 Communications
          bDeviceSubClass         0
          bDeviceProtocol         0
          bMaxPacketSize0        64
          bNumConfigurations      1
        Device Status:     0x0000
          (Bus Powered)
      
        Bus 001 Device 013: ID 108c:0169 Robert Bosch GmbH ES584.1
        Device Descriptor:
          bLength                18
          bDescriptorType         1
          bcdUSB               2.00
          bDeviceClass            2 Communications
          bDeviceSubClass         0
          bDeviceProtocol         0
          bMaxPacketSize0        64
          idVendor           0x108c Robert Bosch GmbH
          idProduct          0x0169
          bcdDevice            1.00
          iManufacturer           1 ETAS GmbH
          iProduct                2 ES584.1
          iSerial                 3 0100320
          bNumConfigurations      1
          Configuration Descriptor:
            bLength                 9
            bDescriptorType         2
            wTotalLength       0x0043
            bNumInterfaces          2
            bConfigurationValue     1
            iConfiguration          0
            bmAttributes         0x80
              (Bus Powered)
            MaxPower              500mA
            Interface Descriptor:
              bLength                 9
              bDescriptorType         4
              bInterfaceNumber        0
              bAlternateSetting       0
              bNumEndpoints           1
              bInterfaceClass         2 Communications
              bInterfaceSubClass      2 Abstract (modem)
              bInterfaceProtocol      1 AT-commands (v.25ter)
              iInterface              0
              CDC Header:
                bcdCDC               1.10
              CDC ACM:
                bmCapabilities       0x02
                  line coding and serial state
              CDC Union:
                bMasterInterface        0
                bSlaveInterface         1
              CDC Call Management:
                bmCapabilities       0x03
                  call management
                  use DataInterface
                bDataInterface          1
              Endpoint Descriptor:
                bLength                 7
                bDescriptorType         5
                bEndpointAddress     0x83  EP 3 IN
                bmAttributes            3
                  Transfer Type            Interrupt
                  Synch Type               None
                  Usage Type               Data
                wMaxPacketSize     0x0040  1x 64 bytes
                bInterval              16
            Interface Descriptor:
              bLength                 9
              bDescriptorType         4
              bInterfaceNumber        1
              bAlternateSetting       0
              bNumEndpoints           2
              bInterfaceClass        10 CDC Data
              bInterfaceSubClass      0
              bInterfaceProtocol      0
              iInterface              0
              Endpoint Descriptor:
                bLength                 7
                bDescriptorType         5
                bEndpointAddress     0x81  EP 1 IN
                bmAttributes            2
                  Transfer Type            Bulk
                  Synch Type               None
                  Usage Type               Data
                wMaxPacketSize     0x0200  1x 512 bytes
                bInterval               0
              Endpoint Descriptor:
                bLength                 7
                bDescriptorType         5
                bEndpointAddress     0x02  EP 2 OUT
                bmAttributes            2
                  Transfer Type            Bulk
                  Synch Type               None
                  Usage Type               Data
                wMaxPacketSize     0x0200  1x 512 bytes
                bInterval               0
        Device Qualifier (for other device speed):
          bLength                10
          bDescriptorType         6
          bcdUSB               2.00
          bDeviceClass            2 Communications
          bDeviceSubClass         0
          bDeviceProtocol         0
          bMaxPacketSize0        64
          bNumConfigurations      1
        Device Status:     0x0000
          (Bus Powered)
      Signed-off-by: NVincent Mailhol <mailhol.vincent@wanadoo.fr>
      Cc: stable <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20201002154219.4887-8-mailhol.vincent@wanadoo.frSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a4f88430
  10. 02 10月, 2020 1 次提交
  11. 25 9月, 2020 4 次提交
  12. 18 9月, 2020 2 次提交
  13. 18 8月, 2020 1 次提交
    • T
      USB: cdc-acm: rework notification_buffer resizing · f4b9d8a5
      Tom Rix 提交于
      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: ea258352 ("cdc-acm: reassemble fragmented notifications")
      Signed-off-by: NTom Rix <trix@redhat.com>
      Cc: stable <stable@vger.kernel.org>
      Acked-by: NOliver Neukum <oneukum@suse.com>
      Link: https://lore.kernel.org/r/20200801152154.20683-1-trix@redhat.comSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f4b9d8a5
  14. 15 7月, 2020 1 次提交
  15. 10 7月, 2020 1 次提交
  16. 03 7月, 2020 1 次提交
  17. 23 6月, 2020 1 次提交
  18. 18 6月, 2020 1 次提交
  19. 14 6月, 2020 1 次提交
    • M
      treewide: replace '---help---' in Kconfig files with 'help' · a7f7f624
      Masahiro Yamada 提交于
      Since commit 84af7a61 ("checkpatch: kconfig: prefer 'help' over
      '---help---'"), the number of '---help---' has been gradually
      decreasing, but there are still more than 2400 instances.
      
      This commit finishes the conversion. While I touched the lines,
      I also fixed the indentation.
      
      There are a variety of indentation styles found.
      
        a) 4 spaces + '---help---'
        b) 7 spaces + '---help---'
        c) 8 spaces + '---help---'
        d) 1 space + 1 tab + '---help---'
        e) 1 tab + '---help---'    (correct indentation)
        f) 1 tab + 1 space + '---help---'
        g) 1 tab + 2 spaces + '---help---'
      
      In order to convert all of them to 1 tab + 'help', I ran the
      following commend:
      
        $ find . -name 'Kconfig*' | xargs sed -i 's/^[[:space:]]*---help---/\thelp/'
      Signed-off-by: NMasahiro Yamada <masahiroy@kernel.org>
      a7f7f624
  20. 27 5月, 2020 1 次提交
  21. 13 5月, 2020 1 次提交
  22. 16 4月, 2020 2 次提交
  23. 27 3月, 2020 1 次提交
  24. 18 3月, 2020 2 次提交