1. 09 10月, 2015 1 次提交
  2. 19 8月, 2015 1 次提交
  3. 28 5月, 2014 19 次提交
  4. 18 4月, 2014 1 次提交
  5. 17 4月, 2014 1 次提交
    • J
      USB: usb_wwan: fix handling of missing bulk endpoints · bd73bd88
      Johan Hovold 提交于
      Fix regression introduced by commit 8e493ca1 ("USB: usb_wwan: fix
      bulk-urb allocation") by making sure to require both bulk-in and out
      endpoints during port probe.
      
      The original option driver (which usb_wwan is based on) was written
      under the assumption that either endpoint could be missing, but
      evidently this cannot have been tested properly. Specifically, it would
      handle opening a device without bulk-in (but would blow up during resume
      which was implemented later), but not a missing bulk-out in write()
      (although it is handled in some places such as write_room()).
      
      Fortunately (?), the driver also got the test for missing endpoints
      wrong so the urbs were in fact always allocated, although they would be
      initialised using the wrong endpoint address (0) and any submission of
      such an urb would fail.
      
      The commit mentioned above fixed the test for missing endpoints but
      thereby exposed the other bugs which would now generate null-pointer
      exceptions rather than failed urb submissions.
      
      The regression was introduced in v3.7, but the offending commit was also
      marked for stable.
      Reported-by: NRafał Miłecki <zajec5@gmail.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NJohan Hovold <jhovold@gmail.com>
      Tested-by: NRafał Miłecki <zajec5@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bd73bd88
  6. 04 1月, 2014 1 次提交
  7. 13 8月, 2013 1 次提交
  8. 18 6月, 2013 1 次提交
    • G
      USB: serial: make minor allocation dynamic · e5b1e206
      Greg Kroah-Hartman 提交于
      This moves the allocation of minor device numbers from a static array to
      be dynamic, using the idr interface.  This means that you could
      potentially get "gaps" in a minor number range for a single USB serial
      device with multiple ports, but all should still work properly.
      
      We remove the 'minor' field from the usb_serial structure, as it no
      longer makes any sense for it (use the field in the usb_serial_port
      structure if you really want to know this number), and take the fact
      that we were overloading a number in this field to determine if we had
      initialized the minor numbers or not, and just use a flag variable
      instead.
      
      Note, we still have the limitation of 255 USB to serial devices in the
      system, as that is all we are registering with the TTY layer at this
      point in time.
      Tested-by: NTobias Winter <tobias@linuxdingsda.de>
      Reviewed-by: NJohan Hovold <jhovold@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e5b1e206
  9. 11 6月, 2013 1 次提交
    • G
      USB: serial: ports: add minor and port number · 1143832e
      Greg Kroah-Hartman 提交于
      The usb_serial_port structure had the number field, which was the minor
      number for the port, which almost no one really cared about.  They
      really wanted the number of the port within the device, which you had to
      subtract from the minor of the parent usb_serial_device structure.  To
      clean this up, provide the real minor number of the port, and the number
      of the port within the serial device separately, as these numbers might
      not be related in the future.
      
      Bonus is that this cleans up a lot of logic in the drivers, and saves
      lines overall.
      Tested-by: NTobias Winter <tobias@linuxdingsda.de>
      Reviewed-by: NJohan Hovold <jhovold@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      
      --
       drivers/staging/serqt_usb2/serqt_usb2.c |   21 +++--------
       drivers/usb/serial/ark3116.c            |    2 -
       drivers/usb/serial/bus.c                |    6 +--
       drivers/usb/serial/console.c            |    2 -
       drivers/usb/serial/cp210x.c             |    2 -
       drivers/usb/serial/cypress_m8.c         |    4 +-
       drivers/usb/serial/digi_acceleport.c    |    6 ---
       drivers/usb/serial/f81232.c             |    5 +-
       drivers/usb/serial/garmin_gps.c         |    6 +--
       drivers/usb/serial/io_edgeport.c        |   58 ++++++++++++--------------------
       drivers/usb/serial/io_ti.c              |   21 ++++-------
       drivers/usb/serial/keyspan.c            |   29 +++++++---------
       drivers/usb/serial/metro-usb.c          |    4 +-
       drivers/usb/serial/mos7720.c            |   37 +++++++++-----------
       drivers/usb/serial/mos7840.c            |   52 +++++++++-------------------
       drivers/usb/serial/opticon.c            |    2 -
       drivers/usb/serial/pl2303.c             |    2 -
       drivers/usb/serial/quatech2.c           |    7 +--
       drivers/usb/serial/sierra.c             |    2 -
       drivers/usb/serial/ti_usb_3410_5052.c   |   10 ++---
       drivers/usb/serial/usb-serial.c         |    7 ++-
       drivers/usb/serial/usb_wwan.c           |    2 -
       drivers/usb/serial/whiteheat.c          |   20 +++++------
       include/linux/usb/serial.h              |    6 ++-
       24 files changed, 133 insertions(+), 180 deletions(-)
      1143832e
  10. 26 3月, 2013 1 次提交
  11. 14 2月, 2013 1 次提交
    • J
      USB: serial: fix null-pointer dereferences on disconnect · b2ca6990
      Johan Hovold 提交于
      Make sure serial-driver dtr_rts is called with disc_mutex held after
      checking the disconnected flag.
      
      Due to a bug in the tty layer, dtr_rts may get called after a device has
      been disconnected and the tty-device unregistered. Some drivers have had
      individual checks for disconnect to make sure the disconnected interface
      was not accessed, but this should really be handled in usb-serial core
      (at least until the long-standing tty-bug has been fixed).
      
      Note that the problem has been made more acute with commit 0998d063
      ("device-core: Ensure drvdata = NULL when no driver is bound") as the
      port data is now also NULL when dtr_rts is called resulting in further
      oopses.
      Reported-by: NChris Ruehl <chris.ruehl@gtsys.com.hk>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NJohan Hovold <jhovold@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b2ca6990
  12. 16 1月, 2013 2 次提交
    • J
      TTY: switch tty_flip_buffer_push · 2e124b4a
      Jiri Slaby 提交于
      Now, we start converting tty buffer functions to actually use
      tty_port. This will allow us to get rid of the need of tty in many
      call sites. Only tty_port will needed and hence no more
      tty_port_tty_get in those paths.
      
      Now, the one where most of tty_port_tty_get gets removed:
      tty_flip_buffer_push.
      
      IOW we also closed all the races in drivers not using tty_port_tty_get
      at all yet.
      
      Also we move tty_flip_buffer_push declaration from include/linux/tty.h
      to include/linux/tty_flip.h to all others while we are changing it
      anyway.
      Signed-off-by: NJiri Slaby <jslaby@suse.cz>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2e124b4a
    • J
      TTY: switch tty_insert_flip_string · 05c7cd39
      Jiri Slaby 提交于
      Now, we start converting tty buffer functions to actually use
      tty_port. This will allow us to get rid of the need of tty in many
      call sites. Only tty_port will needed and hence no more
      tty_port_tty_get in those paths.
      
      tty_insert_flip_string this time.
      Signed-off-by: NJiri Slaby <jslaby@suse.cz>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      05c7cd39
  13. 01 11月, 2012 1 次提交
  14. 31 10月, 2012 1 次提交
  15. 26 10月, 2012 1 次提交
    • J
      USB: usb-wwan: fix multiple memory leaks in error paths · b8f0e820
      Johan Hovold 提交于
      Fix port-data memory leak in usb-serial probe error path by moving port
      data allocation to port_probe.
      
      Since commit a1028f0a ("usb: usb_wwan: replace release and disconnect
      with a port_remove hook") port data is deallocated in port_remove. This
      leaves a possibility for memory leaks if usb-serial probe fails after
      attach but before the port in question has been successfully registered.
      
      Note that this patch also fixes two additional memory leaks in the error
      path of attach should port initialisation fail for any port as the urbs
      were never freed and neither was the data of any of the successfully
      initialised ports.
      
      Compile-only tested.
      Signed-off-by: NJohan Hovold <jhovold@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b8f0e820
  16. 15 9月, 2012 1 次提交
  17. 14 9月, 2012 1 次提交
  18. 11 8月, 2012 2 次提交
    • B
      usb: usb_wwan: resume/suspend can be called after port is gone · 032129cb
      Bjørn Mork 提交于
      We cannot unconditionally access any usb-serial port specific
      data from the interface driver.  Both supending and resuming
      may happen after the port has been removed and portdata is
      freed.
      
      Treat ports with no portdata as closed ports to avoid a NULL
      pointer dereference on resume.  No need to kill URBs for
      removed ports on suspend, avoiding the same NULL pointer
      reference there.
      Signed-off-by: NBjørn Mork <bjorn@mork.no>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      032129cb
    • B
      usb: usb_wwan: replace release and disconnect with a port_remove hook · a1028f0a
      Bjørn Mork 提交于
      Doing port specific cleanup in the .port_remove hook is a
      lot simpler and safer than doing it in the USB driver
      .release or .disconnect methods. The removal of the port
      from the usb-serial bus will happen before the USB driver
      cleanup, so we must be careful about accessing port specific
      driver data from any USB driver functions.
      
      This problem surfaced after the commit
      
       0998d063 device-core: Ensure drvdata = NULL when no driver is bound
      
      which turned the previous unsafe access into a reliable NULL
      pointer dereference.
      
      Fixes the following Oops:
      
      [  243.148471] BUG: unable to handle kernel NULL pointer dereference at           (null)
      [  243.148508] IP: [<ffffffffa0468527>] stop_read_write_urbs+0x37/0x80 [usb_wwan]
      [  243.148556] PGD 79d60067 PUD 79d61067 PMD 0
      [  243.148590] Oops: 0000 [#1] SMP
      [  243.148617] Modules linked in: sr_mod cdrom qmi_wwan usbnet option cdc_wdm usb_wwan usbserial usb_storage uas fuse af_packet ip6table_filter ip6_tables iptable_filter ip_tables x_tables tun edd
      cpufreq_conservative cpufreq_userspace cpufreq_powersave snd_pcm_oss snd_mixer_oss acpi_cpufreq snd_seq mperf snd_seq_device coretemp arc4 sg hp_wmi sparse_keymap uvcvideo videobuf2_core
      videodev videobuf2_vmalloc videobuf2_memops rtl8192ce rtl8192c_common rtlwifi joydev pcspkr microcode mac80211 i2c_i801 lpc_ich r8169 snd_hda_codec_idt cfg80211 snd_hda_intel snd_hda_codec rfkill
      snd_hwdep snd_pcm wmi snd_timer ac snd soundcore snd_page_alloc battery uhci_hcd i915 drm_kms_helper drm i2c_algo_bit ehci_hcd thermal usbcore video usb_common button processor thermal_sys
      [  243.149007] CPU 1
      [  243.149027] Pid: 135, comm: khubd Not tainted 3.5.0-rc7-next-20120720-1-vanilla #1 Hewlett-Packard HP Mini 110-3700                /1584
      [  243.149072] RIP: 0010:[<ffffffffa0468527>]  [<ffffffffa0468527>] stop_read_write_urbs+0x37/0x80 [usb_wwan]
      [  243.149118] RSP: 0018:ffff880037e75b30  EFLAGS: 00010286
      [  243.149133] RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffff88005912aa28
      [  243.149150] RDX: ffff88005e95f028 RSI: 0000000000000000 RDI: ffff88005f7c1a10
      [  243.149166] RBP: ffff880037e75b60 R08: 0000000000000000 R09: ffffffff812cea90
      [  243.149182] R10: 0000000000000000 R11: 0000000000000001 R12: ffff88006539b440
      [  243.149198] R13: ffff88006539b440 R14: 0000000000000000 R15: 0000000000000000
      [  243.149216] FS:  0000000000000000(0000) GS:ffff88007ee80000(0000) knlGS:0000000000000000
      [  243.149233] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      [  243.149248] CR2: 0000000000000000 CR3: 0000000079fe0000 CR4: 00000000000007e0
      [  243.149264] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [  243.149280] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      [  243.149298] Process khubd (pid: 135, threadinfo ffff880037e74000, task ffff880037d40600)
      [  243.149313] Stack:
      [  243.149323]  ffff880037e75b40 ffff88006539b440 ffff8800799bc830 ffff88005f7c1800
      [  243.149348]  0000000000000001 ffff88006539b448 ffff880037e75b70 ffffffffa04685e9
      [  243.149371]  ffff880037e75bc0 ffffffffa0473765 ffff880037354988 ffff88007b594800
      [  243.149395] Call Trace:
      [  243.149419]  [<ffffffffa04685e9>] usb_wwan_disconnect+0x9/0x10 [usb_wwan]
      [  243.149447]  [<ffffffffa0473765>] usb_serial_disconnect+0xd5/0x120 [usbserial]
      [  243.149511]  [<ffffffffa0046b48>] usb_unbind_interface+0x58/0x1a0 [usbcore]
      [  243.149545]  [<ffffffff8139ebd7>] __device_release_driver+0x77/0xe0
      [  243.149567]  [<ffffffff8139ec67>] device_release_driver+0x27/0x40
      [  243.149587]  [<ffffffff8139e5cf>] bus_remove_device+0xdf/0x150
      [  243.149608]  [<ffffffff8139bc78>] device_del+0x118/0x1a0
      [  243.149661]  [<ffffffffa0044590>] usb_disable_device+0xb0/0x280 [usbcore]
      [  243.149718]  [<ffffffffa003c6fd>] usb_disconnect+0x9d/0x140 [usbcore]
      [  243.149770]  [<ffffffffa003da7d>] hub_port_connect_change+0xad/0x8a0 [usbcore]
      [  243.149825]  [<ffffffffa0043bf5>] ? usb_control_msg+0xe5/0x110 [usbcore]
      [  243.149878]  [<ffffffffa003e6e3>] hub_events+0x473/0x760 [usbcore]
      [  243.149931]  [<ffffffffa003ea05>] hub_thread+0x35/0x1d0 [usbcore]
      [  243.149955]  [<ffffffff81061960>] ? add_wait_queue+0x60/0x60
      [  243.150004]  [<ffffffffa003e9d0>] ? hub_events+0x760/0x760 [usbcore]
      [  243.150026]  [<ffffffff8106133e>] kthread+0x8e/0xa0
      [  243.150047]  [<ffffffff8157ec04>] kernel_thread_helper+0x4/0x10
      [  243.150068]  [<ffffffff810612b0>] ? flush_kthread_work+0x120/0x120
      [  243.150088]  [<ffffffff8157ec00>] ? gs_change+0xb/0xb
      [  243.150101] Code: fd 41 54 53 48 83 ec 08 80 7f 1a 00 74 57 49 89 fc 31 db 90 49 8b 7c 24 20 45 31 f6 48 81 c7 10 02 00 00 e8 bc 64 f3 e0 49 89 c7 <4b> 8b 3c 37 49 83 c6 08 e8 4c a5 bd ff 49 83 fe 20
      75 ed 45 30
      [  243.150257] RIP  [<ffffffffa0468527>] stop_read_write_urbs+0x37/0x80 [usb_wwan]
      [  243.150282]  RSP <ffff880037e75b30>
      [  243.150294] CR2: 0000000000000000
      [  243.177170] ---[ end trace fba433d9015ffb8c ]---
      Reported-by: NDan Carpenter <dan.carpenter@oracle.com>
      Reported-by: NThomas Schäfer <tschaefer@t-online.de>
      Suggested-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NBjørn Mork <bjorn@mork.no>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a1028f0a
  19. 17 7月, 2012 1 次提交
  20. 04 5月, 2012 1 次提交