1. 15 4月, 2021 2 次提交
    • G
      tty: clean include/linux/tty.h up · 5ffa6e34
      Greg Kroah-Hartman 提交于
      There are a lot of tty-core-only functions that are listed in
      include/linux/tty.h.  Move them to drivers/tty/tty.h so that no one else
      can accidentally call them or think that they are public functions.
      
      Cc: Jiri Slaby <jirislaby@kernel.org>
      Link: https://lore.kernel.org/r/20210408125134.3016837-14-gregkh@linuxfoundation.orgSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5ffa6e34
    • H
      tty: n_gsm: check error while registering tty devices · 0a360e8b
      Hillf Danton 提交于
      Add the error path for registering tty devices and roll back in case of error
      in bid to avoid the UAF like the below one reported.
      
      Plus syzbot reported general protection fault in cdev_del() on Sep 24, 2020
      and both cases are down to the kobject_put() in tty_cdev_add().
      
       ------------[ cut here ]------------
       refcount_t: underflow; use-after-free.
       WARNING: CPU: 1 PID: 8923 at lib/refcount.c:28
       refcount_warn_saturate+0x1cf/0x210 -origin/lib/refcount.c:28
       Modules linked in:
       CPU: 1 PID: 8923 Comm: executor Not tainted 5.12.0-rc5+ #8
       Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
       1.13.0-1ubuntu1.1 04/01/2014
       RIP: 0010:refcount_warn_saturate+0x1cf/0x210 -origin/lib/refcount.c:28
       Code: 4f ff ff ff e8 32 fa b5 fe 48 c7 c7 3d f8 f6 86 e8 d6 ab c6 fe
       c6 05 7c 34 67 04 01 48 c7 c7 68 f8 6d 86 31 c0 e8 81 2e 9d fe <0f> 0b
       e9 22 ff ff ff e8 05 fa b5 fe 48 c7 c7 3e f8 f6 86 e8 a9 ab
       RSP: 0018:ffffc90001633c60 EFLAGS: 00010246
       RAX: 15d08b2e34b77800 RBX: 0000000000000003 RCX: ffff88804c056c80
       RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
       RBP: 0000000000000003 R08: ffffffff813767aa R09: 0001ffffffffffff
       R10: 0001ffffffffffff R11: ffff88804c056c80 R12: ffff888040b7d000
       R13: ffff88804c206938 R14: ffff88804c206900 R15: ffff888041b18488
       FS:  00000000022c9940(0000) GS:ffff88807ec00000(0000) knlGS:0000000000000000
       CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       CR2: 00007f9f9b122008 CR3: 0000000044b4b000 CR4: 0000000000750ee0
       PKRU: 55555554
       Call Trace:
        __refcount_sub_and_test -origin/./include/linux/refcount.h:283 [inline]
        __refcount_dec_and_test -origin/./include/linux/refcount.h:315 [inline]
        refcount_dec_and_test -origin/./include/linux/refcount.h:333 [inline]
        kref_put -origin/./include/linux/kref.h:64 [inline]
        kobject_put+0x17b/0x180 -origin/lib/kobject.c:753
        cdev_del+0x4b/0x50 -origin/fs/char_dev.c:597
        tty_unregister_device+0x99/0xd0 -origin/drivers/tty/tty_io.c:3343
        gsmld_detach_gsm -origin/drivers/tty/n_gsm.c:2409 [inline]
        gsmld_close+0x6c/0x140 -origin/drivers/tty/n_gsm.c:2478
        tty_ldisc_close -origin/drivers/tty/tty_ldisc.c:488 [inline]
        tty_ldisc_kill -origin/drivers/tty/tty_ldisc.c:636 [inline]
        tty_ldisc_release+0x1b6/0x400 -origin/drivers/tty/tty_ldisc.c:809
        tty_release_struct+0x19/0xb0 -origin/drivers/tty/tty_io.c:1714
        tty_release+0x9ad/0xa00 -origin/drivers/tty/tty_io.c:1885
        __fput+0x260/0x4e0 -origin/fs/file_table.c:280
        ____fput+0x11/0x20 -origin/fs/file_table.c:313
        task_work_run+0x8e/0x110 -origin/kernel/task_work.c:140
        tracehook_notify_resume -origin/./include/linux/tracehook.h:189 [inline]
        exit_to_user_mode_loop -origin/kernel/entry/common.c:174 [inline]
        exit_to_user_mode_prepare+0x16b/0x1a0 -origin/kernel/entry/common.c:208
        __syscall_exit_to_user_mode_work -origin/kernel/entry/common.c:290 [inline]
        syscall_exit_to_user_mode+0x20/0x40 -origin/kernel/entry/common.c:301
        do_syscall_64+0x45/0x80 -origin/arch/x86/entry/common.c:56
        entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      Reported-by: syzbot+c49fe6089f295a05e6f8@syzkaller.appspotmail.com
      Reported-and-tested-by: NHao Sun <sunhao.th@gmail.com>
      Signed-off-by: NHillf Danton <hdanton@sina.com>
      Link: https://lore.kernel.org/r/20210412035758.1974-1-hdanton@sina.comSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0a360e8b
  2. 07 4月, 2021 1 次提交
  3. 10 3月, 2021 4 次提交
  4. 21 1月, 2021 1 次提交
    • L
      tty: convert tty_ldisc_ops 'read()' function to take a kernel pointer · 3b830a9c
      Linus Torvalds 提交于
      The tty line discipline .read() function was passed the final user
      pointer destination as an argument, which doesn't match the 'write()'
      function, and makes it very inconvenient to do a splice method for
      ttys.
      
      This is a conversion to use a kernel buffer instead.
      
      NOTE! It does this by passing the tty line discipline ->read() function
      an additional "cookie" to fill in, and an offset into the cookie data.
      
      The line discipline can fill in the cookie data with its own private
      information, and then the reader will repeat the read until either the
      cookie is cleared or it runs out of data.
      
      The only real user of this is N_HDLC, which can use this to handle big
      packets, even if the kernel buffer is smaller than the whole packet.
      
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      3b830a9c
  5. 06 11月, 2020 1 次提交
  6. 24 8月, 2020 1 次提交
  7. 18 8月, 2020 2 次提交
  8. 19 5月, 2020 2 次提交
  9. 15 5月, 2020 3 次提交
  10. 19 2月, 2020 10 次提交
  11. 13 2月, 2020 1 次提交
  12. 13 12月, 2019 1 次提交
    • M
      netdev: pass the stuck queue to the timeout handler · 0290bd29
      Michael S. Tsirkin 提交于
      This allows incrementing the correct timeout statistic without any mess.
      Down the road, devices can learn to reset just the specific queue.
      
      The patch was generated with the following script:
      
      use strict;
      use warnings;
      
      our $^I = '.bak';
      
      my @work = (
      ["arch/m68k/emu/nfeth.c", "nfeth_tx_timeout"],
      ["arch/um/drivers/net_kern.c", "uml_net_tx_timeout"],
      ["arch/um/drivers/vector_kern.c", "vector_net_tx_timeout"],
      ["arch/xtensa/platforms/iss/network.c", "iss_net_tx_timeout"],
      ["drivers/char/pcmcia/synclink_cs.c", "hdlcdev_tx_timeout"],
      ["drivers/infiniband/ulp/ipoib/ipoib_main.c", "ipoib_timeout"],
      ["drivers/infiniband/ulp/ipoib/ipoib_main.c", "ipoib_timeout"],
      ["drivers/message/fusion/mptlan.c", "mpt_lan_tx_timeout"],
      ["drivers/misc/sgi-xp/xpnet.c", "xpnet_dev_tx_timeout"],
      ["drivers/net/appletalk/cops.c", "cops_timeout"],
      ["drivers/net/arcnet/arcdevice.h", "arcnet_timeout"],
      ["drivers/net/arcnet/arcnet.c", "arcnet_timeout"],
      ["drivers/net/arcnet/com20020.c", "arcnet_timeout"],
      ["drivers/net/ethernet/3com/3c509.c", "el3_tx_timeout"],
      ["drivers/net/ethernet/3com/3c515.c", "corkscrew_timeout"],
      ["drivers/net/ethernet/3com/3c574_cs.c", "el3_tx_timeout"],
      ["drivers/net/ethernet/3com/3c589_cs.c", "el3_tx_timeout"],
      ["drivers/net/ethernet/3com/3c59x.c", "vortex_tx_timeout"],
      ["drivers/net/ethernet/3com/3c59x.c", "vortex_tx_timeout"],
      ["drivers/net/ethernet/3com/typhoon.c", "typhoon_tx_timeout"],
      ["drivers/net/ethernet/8390/8390.h", "ei_tx_timeout"],
      ["drivers/net/ethernet/8390/8390.h", "eip_tx_timeout"],
      ["drivers/net/ethernet/8390/8390.c", "ei_tx_timeout"],
      ["drivers/net/ethernet/8390/8390p.c", "eip_tx_timeout"],
      ["drivers/net/ethernet/8390/ax88796.c", "ax_ei_tx_timeout"],
      ["drivers/net/ethernet/8390/axnet_cs.c", "axnet_tx_timeout"],
      ["drivers/net/ethernet/8390/etherh.c", "__ei_tx_timeout"],
      ["drivers/net/ethernet/8390/hydra.c", "__ei_tx_timeout"],
      ["drivers/net/ethernet/8390/mac8390.c", "__ei_tx_timeout"],
      ["drivers/net/ethernet/8390/mcf8390.c", "__ei_tx_timeout"],
      ["drivers/net/ethernet/8390/lib8390.c", "__ei_tx_timeout"],
      ["drivers/net/ethernet/8390/ne2k-pci.c", "ei_tx_timeout"],
      ["drivers/net/ethernet/8390/pcnet_cs.c", "ei_tx_timeout"],
      ["drivers/net/ethernet/8390/smc-ultra.c", "ei_tx_timeout"],
      ["drivers/net/ethernet/8390/wd.c", "ei_tx_timeout"],
      ["drivers/net/ethernet/8390/zorro8390.c", "__ei_tx_timeout"],
      ["drivers/net/ethernet/adaptec/starfire.c", "tx_timeout"],
      ["drivers/net/ethernet/agere/et131x.c", "et131x_tx_timeout"],
      ["drivers/net/ethernet/allwinner/sun4i-emac.c", "emac_timeout"],
      ["drivers/net/ethernet/alteon/acenic.c", "ace_watchdog"],
      ["drivers/net/ethernet/amazon/ena/ena_netdev.c", "ena_tx_timeout"],
      ["drivers/net/ethernet/amd/7990.h", "lance_tx_timeout"],
      ["drivers/net/ethernet/amd/7990.c", "lance_tx_timeout"],
      ["drivers/net/ethernet/amd/a2065.c", "lance_tx_timeout"],
      ["drivers/net/ethernet/amd/am79c961a.c", "am79c961_timeout"],
      ["drivers/net/ethernet/amd/amd8111e.c", "amd8111e_tx_timeout"],
      ["drivers/net/ethernet/amd/ariadne.c", "ariadne_tx_timeout"],
      ["drivers/net/ethernet/amd/atarilance.c", "lance_tx_timeout"],
      ["drivers/net/ethernet/amd/au1000_eth.c", "au1000_tx_timeout"],
      ["drivers/net/ethernet/amd/declance.c", "lance_tx_timeout"],
      ["drivers/net/ethernet/amd/lance.c", "lance_tx_timeout"],
      ["drivers/net/ethernet/amd/mvme147.c", "lance_tx_timeout"],
      ["drivers/net/ethernet/amd/ni65.c", "ni65_timeout"],
      ["drivers/net/ethernet/amd/nmclan_cs.c", "mace_tx_timeout"],
      ["drivers/net/ethernet/amd/pcnet32.c", "pcnet32_tx_timeout"],
      ["drivers/net/ethernet/amd/sunlance.c", "lance_tx_timeout"],
      ["drivers/net/ethernet/amd/xgbe/xgbe-drv.c", "xgbe_tx_timeout"],
      ["drivers/net/ethernet/apm/xgene-v2/main.c", "xge_timeout"],
      ["drivers/net/ethernet/apm/xgene/xgene_enet_main.c", "xgene_enet_timeout"],
      ["drivers/net/ethernet/apple/macmace.c", "mace_tx_timeout"],
      ["drivers/net/ethernet/atheros/ag71xx.c", "ag71xx_tx_timeout"],
      ["drivers/net/ethernet/atheros/alx/main.c", "alx_tx_timeout"],
      ["drivers/net/ethernet/atheros/atl1c/atl1c_main.c", "atl1c_tx_timeout"],
      ["drivers/net/ethernet/atheros/atl1e/atl1e_main.c", "atl1e_tx_timeout"],
      ["drivers/net/ethernet/atheros/atlx/atl.c", "atlx_tx_timeout"],
      ["drivers/net/ethernet/atheros/atlx/atl1.c", "atlx_tx_timeout"],
      ["drivers/net/ethernet/atheros/atlx/atl2.c", "atl2_tx_timeout"],
      ["drivers/net/ethernet/broadcom/b44.c", "b44_tx_timeout"],
      ["drivers/net/ethernet/broadcom/bcmsysport.c", "bcm_sysport_tx_timeout"],
      ["drivers/net/ethernet/broadcom/bnx2.c", "bnx2_tx_timeout"],
      ["drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h", "bnx2x_tx_timeout"],
      ["drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c", "bnx2x_tx_timeout"],
      ["drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c", "bnx2x_tx_timeout"],
      ["drivers/net/ethernet/broadcom/bnxt/bnxt.c", "bnxt_tx_timeout"],
      ["drivers/net/ethernet/broadcom/genet/bcmgenet.c", "bcmgenet_timeout"],
      ["drivers/net/ethernet/broadcom/sb1250-mac.c", "sbmac_tx_timeout"],
      ["drivers/net/ethernet/broadcom/tg3.c", "tg3_tx_timeout"],
      ["drivers/net/ethernet/calxeda/xgmac.c", "xgmac_tx_timeout"],
      ["drivers/net/ethernet/cavium/liquidio/lio_main.c", "liquidio_tx_timeout"],
      ["drivers/net/ethernet/cavium/liquidio/lio_vf_main.c", "liquidio_tx_timeout"],
      ["drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c", "lio_vf_rep_tx_timeout"],
      ["drivers/net/ethernet/cavium/thunder/nicvf_main.c", "nicvf_tx_timeout"],
      ["drivers/net/ethernet/cirrus/cs89x0.c", "net_timeout"],
      ["drivers/net/ethernet/cisco/enic/enic_main.c", "enic_tx_timeout"],
      ["drivers/net/ethernet/cisco/enic/enic_main.c", "enic_tx_timeout"],
      ["drivers/net/ethernet/cortina/gemini.c", "gmac_tx_timeout"],
      ["drivers/net/ethernet/davicom/dm9000.c", "dm9000_timeout"],
      ["drivers/net/ethernet/dec/tulip/de2104x.c", "de_tx_timeout"],
      ["drivers/net/ethernet/dec/tulip/tulip_core.c", "tulip_tx_timeout"],
      ["drivers/net/ethernet/dec/tulip/winbond-840.c", "tx_timeout"],
      ["drivers/net/ethernet/dlink/dl2k.c", "rio_tx_timeout"],
      ["drivers/net/ethernet/dlink/sundance.c", "tx_timeout"],
      ["drivers/net/ethernet/emulex/benet/be_main.c", "be_tx_timeout"],
      ["drivers/net/ethernet/ethoc.c", "ethoc_tx_timeout"],
      ["drivers/net/ethernet/faraday/ftgmac100.c", "ftgmac100_tx_timeout"],
      ["drivers/net/ethernet/fealnx.c", "fealnx_tx_timeout"],
      ["drivers/net/ethernet/freescale/dpaa/dpaa_eth.c", "dpaa_tx_timeout"],
      ["drivers/net/ethernet/freescale/fec_main.c", "fec_timeout"],
      ["drivers/net/ethernet/freescale/fec_mpc52xx.c", "mpc52xx_fec_tx_timeout"],
      ["drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c", "fs_timeout"],
      ["drivers/net/ethernet/freescale/gianfar.c", "gfar_timeout"],
      ["drivers/net/ethernet/freescale/ucc_geth.c", "ucc_geth_timeout"],
      ["drivers/net/ethernet/fujitsu/fmvj18x_cs.c", "fjn_tx_timeout"],
      ["drivers/net/ethernet/google/gve/gve_main.c", "gve_tx_timeout"],
      ["drivers/net/ethernet/hisilicon/hip04_eth.c", "hip04_timeout"],
      ["drivers/net/ethernet/hisilicon/hix5hd2_gmac.c", "hix5hd2_net_timeout"],
      ["drivers/net/ethernet/hisilicon/hns/hns_enet.c", "hns_nic_net_timeout"],
      ["drivers/net/ethernet/hisilicon/hns3/hns3_enet.c", "hns3_nic_net_timeout"],
      ["drivers/net/ethernet/huawei/hinic/hinic_main.c", "hinic_tx_timeout"],
      ["drivers/net/ethernet/i825xx/82596.c", "i596_tx_timeout"],
      ["drivers/net/ethernet/i825xx/ether1.c", "ether1_timeout"],
      ["drivers/net/ethernet/i825xx/lib82596.c", "i596_tx_timeout"],
      ["drivers/net/ethernet/i825xx/sun3_82586.c", "sun3_82586_timeout"],
      ["drivers/net/ethernet/ibm/ehea/ehea_main.c", "ehea_tx_watchdog"],
      ["drivers/net/ethernet/ibm/emac/core.c", "emac_tx_timeout"],
      ["drivers/net/ethernet/ibm/emac/core.c", "emac_tx_timeout"],
      ["drivers/net/ethernet/ibm/ibmvnic.c", "ibmvnic_tx_timeout"],
      ["drivers/net/ethernet/intel/e100.c", "e100_tx_timeout"],
      ["drivers/net/ethernet/intel/e1000/e1000_main.c", "e1000_tx_timeout"],
      ["drivers/net/ethernet/intel/e1000e/netdev.c", "e1000_tx_timeout"],
      ["drivers/net/ethernet/intel/fm10k/fm10k_netdev.c", "fm10k_tx_timeout"],
      ["drivers/net/ethernet/intel/i40e/i40e_main.c", "i40e_tx_timeout"],
      ["drivers/net/ethernet/intel/iavf/iavf_main.c", "iavf_tx_timeout"],
      ["drivers/net/ethernet/intel/ice/ice_main.c", "ice_tx_timeout"],
      ["drivers/net/ethernet/intel/ice/ice_main.c", "ice_tx_timeout"],
      ["drivers/net/ethernet/intel/igb/igb_main.c", "igb_tx_timeout"],
      ["drivers/net/ethernet/intel/igbvf/netdev.c", "igbvf_tx_timeout"],
      ["drivers/net/ethernet/intel/ixgb/ixgb_main.c", "ixgb_tx_timeout"],
      ["drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.c", "adapter->netdev->netdev_ops->ndo_tx_timeout(adapter->netdev);"],
      ["drivers/net/ethernet/intel/ixgbe/ixgbe_main.c", "ixgbe_tx_timeout"],
      ["drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c", "ixgbevf_tx_timeout"],
      ["drivers/net/ethernet/jme.c", "jme_tx_timeout"],
      ["drivers/net/ethernet/korina.c", "korina_tx_timeout"],
      ["drivers/net/ethernet/lantiq_etop.c", "ltq_etop_tx_timeout"],
      ["drivers/net/ethernet/marvell/mv643xx_eth.c", "mv643xx_eth_tx_timeout"],
      ["drivers/net/ethernet/marvell/pxa168_eth.c", "pxa168_eth_tx_timeout"],
      ["drivers/net/ethernet/marvell/skge.c", "skge_tx_timeout"],
      ["drivers/net/ethernet/marvell/sky2.c", "sky2_tx_timeout"],
      ["drivers/net/ethernet/marvell/sky2.c", "sky2_tx_timeout"],
      ["drivers/net/ethernet/mediatek/mtk_eth_soc.c", "mtk_tx_timeout"],
      ["drivers/net/ethernet/mellanox/mlx4/en_netdev.c", "mlx4_en_tx_timeout"],
      ["drivers/net/ethernet/mellanox/mlx4/en_netdev.c", "mlx4_en_tx_timeout"],
      ["drivers/net/ethernet/mellanox/mlx5/core/en_main.c", "mlx5e_tx_timeout"],
      ["drivers/net/ethernet/micrel/ks8842.c", "ks8842_tx_timeout"],
      ["drivers/net/ethernet/micrel/ksz884x.c", "netdev_tx_timeout"],
      ["drivers/net/ethernet/microchip/enc28j60.c", "enc28j60_tx_timeout"],
      ["drivers/net/ethernet/microchip/encx24j600.c", "encx24j600_tx_timeout"],
      ["drivers/net/ethernet/natsemi/sonic.h", "sonic_tx_timeout"],
      ["drivers/net/ethernet/natsemi/sonic.c", "sonic_tx_timeout"],
      ["drivers/net/ethernet/natsemi/jazzsonic.c", "sonic_tx_timeout"],
      ["drivers/net/ethernet/natsemi/macsonic.c", "sonic_tx_timeout"],
      ["drivers/net/ethernet/natsemi/natsemi.c", "ns_tx_timeout"],
      ["drivers/net/ethernet/natsemi/ns83820.c", "ns83820_tx_timeout"],
      ["drivers/net/ethernet/natsemi/xtsonic.c", "sonic_tx_timeout"],
      ["drivers/net/ethernet/neterion/s2io.h", "s2io_tx_watchdog"],
      ["drivers/net/ethernet/neterion/s2io.c", "s2io_tx_watchdog"],
      ["drivers/net/ethernet/neterion/vxge/vxge-main.c", "vxge_tx_watchdog"],
      ["drivers/net/ethernet/netronome/nfp/nfp_net_common.c", "nfp_net_tx_timeout"],
      ["drivers/net/ethernet/nvidia/forcedeth.c", "nv_tx_timeout"],
      ["drivers/net/ethernet/nvidia/forcedeth.c", "nv_tx_timeout"],
      ["drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c", "pch_gbe_tx_timeout"],
      ["drivers/net/ethernet/packetengines/hamachi.c", "hamachi_tx_timeout"],
      ["drivers/net/ethernet/packetengines/yellowfin.c", "yellowfin_tx_timeout"],
      ["drivers/net/ethernet/pensando/ionic/ionic_lif.c", "ionic_tx_timeout"],
      ["drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c", "netxen_tx_timeout"],
      ["drivers/net/ethernet/qlogic/qla3xxx.c", "ql3xxx_tx_timeout"],
      ["drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c", "qlcnic_tx_timeout"],
      ["drivers/net/ethernet/qualcomm/emac/emac.c", "emac_tx_timeout"],
      ["drivers/net/ethernet/qualcomm/qca_spi.c", "qcaspi_netdev_tx_timeout"],
      ["drivers/net/ethernet/qualcomm/qca_uart.c", "qcauart_netdev_tx_timeout"],
      ["drivers/net/ethernet/rdc/r6040.c", "r6040_tx_timeout"],
      ["drivers/net/ethernet/realtek/8139cp.c", "cp_tx_timeout"],
      ["drivers/net/ethernet/realtek/8139too.c", "rtl8139_tx_timeout"],
      ["drivers/net/ethernet/realtek/atp.c", "tx_timeout"],
      ["drivers/net/ethernet/realtek/r8169_main.c", "rtl8169_tx_timeout"],
      ["drivers/net/ethernet/renesas/ravb_main.c", "ravb_tx_timeout"],
      ["drivers/net/ethernet/renesas/sh_eth.c", "sh_eth_tx_timeout"],
      ["drivers/net/ethernet/renesas/sh_eth.c", "sh_eth_tx_timeout"],
      ["drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c", "sxgbe_tx_timeout"],
      ["drivers/net/ethernet/seeq/ether3.c", "ether3_timeout"],
      ["drivers/net/ethernet/seeq/sgiseeq.c", "timeout"],
      ["drivers/net/ethernet/sfc/efx.c", "efx_watchdog"],
      ["drivers/net/ethernet/sfc/falcon/efx.c", "ef4_watchdog"],
      ["drivers/net/ethernet/sgi/ioc3-eth.c", "ioc3_timeout"],
      ["drivers/net/ethernet/sgi/meth.c", "meth_tx_timeout"],
      ["drivers/net/ethernet/silan/sc92031.c", "sc92031_tx_timeout"],
      ["drivers/net/ethernet/sis/sis190.c", "sis190_tx_timeout"],
      ["drivers/net/ethernet/sis/sis900.c", "sis900_tx_timeout"],
      ["drivers/net/ethernet/smsc/epic100.c", "epic_tx_timeout"],
      ["drivers/net/ethernet/smsc/smc911x.c", "smc911x_timeout"],
      ["drivers/net/ethernet/smsc/smc9194.c", "smc_timeout"],
      ["drivers/net/ethernet/smsc/smc91c92_cs.c", "smc_tx_timeout"],
      ["drivers/net/ethernet/smsc/smc91x.c", "smc_timeout"],
      ["drivers/net/ethernet/stmicro/stmmac/stmmac_main.c", "stmmac_tx_timeout"],
      ["drivers/net/ethernet/sun/cassini.c", "cas_tx_timeout"],
      ["drivers/net/ethernet/sun/ldmvsw.c", "sunvnet_tx_timeout_common"],
      ["drivers/net/ethernet/sun/niu.c", "niu_tx_timeout"],
      ["drivers/net/ethernet/sun/sunbmac.c", "bigmac_tx_timeout"],
      ["drivers/net/ethernet/sun/sungem.c", "gem_tx_timeout"],
      ["drivers/net/ethernet/sun/sunhme.c", "happy_meal_tx_timeout"],
      ["drivers/net/ethernet/sun/sunqe.c", "qe_tx_timeout"],
      ["drivers/net/ethernet/sun/sunvnet.c", "sunvnet_tx_timeout_common"],
      ["drivers/net/ethernet/sun/sunvnet_common.c", "sunvnet_tx_timeout_common"],
      ["drivers/net/ethernet/sun/sunvnet_common.h", "sunvnet_tx_timeout_common"],
      ["drivers/net/ethernet/synopsys/dwc-xlgmac-net.c", "xlgmac_tx_timeout"],
      ["drivers/net/ethernet/ti/cpmac.c", "cpmac_tx_timeout"],
      ["drivers/net/ethernet/ti/cpsw.c", "cpsw_ndo_tx_timeout"],
      ["drivers/net/ethernet/ti/cpsw_priv.c", "cpsw_ndo_tx_timeout"],
      ["drivers/net/ethernet/ti/cpsw_priv.h", "cpsw_ndo_tx_timeout"],
      ["drivers/net/ethernet/ti/davinci_emac.c", "emac_dev_tx_timeout"],
      ["drivers/net/ethernet/ti/netcp_core.c", "netcp_ndo_tx_timeout"],
      ["drivers/net/ethernet/ti/tlan.c", "tlan_tx_timeout"],
      ["drivers/net/ethernet/toshiba/ps3_gelic_net.h", "gelic_net_tx_timeout"],
      ["drivers/net/ethernet/toshiba/ps3_gelic_net.c", "gelic_net_tx_timeout"],
      ["drivers/net/ethernet/toshiba/ps3_gelic_wireless.c", "gelic_net_tx_timeout"],
      ["drivers/net/ethernet/toshiba/spider_net.c", "spider_net_tx_timeout"],
      ["drivers/net/ethernet/toshiba/tc35815.c", "tc35815_tx_timeout"],
      ["drivers/net/ethernet/via/via-rhine.c", "rhine_tx_timeout"],
      ["drivers/net/ethernet/wiznet/w5100.c", "w5100_tx_timeout"],
      ["drivers/net/ethernet/wiznet/w5300.c", "w5300_tx_timeout"],
      ["drivers/net/ethernet/xilinx/xilinx_emaclite.c", "xemaclite_tx_timeout"],
      ["drivers/net/ethernet/xircom/xirc2ps_cs.c", "xirc_tx_timeout"],
      ["drivers/net/fjes/fjes_main.c", "fjes_tx_retry"],
      ["drivers/net/slip/slip.c", "sl_tx_timeout"],
      ["include/linux/usb/usbnet.h", "usbnet_tx_timeout"],
      ["drivers/net/usb/aqc111.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/asix_devices.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/asix_devices.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/asix_devices.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/ax88172a.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/ax88179_178a.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/catc.c", "catc_tx_timeout"],
      ["drivers/net/usb/cdc_mbim.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/cdc_ncm.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/dm9601.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/hso.c", "hso_net_tx_timeout"],
      ["drivers/net/usb/int51x1.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/ipheth.c", "ipheth_tx_timeout"],
      ["drivers/net/usb/kaweth.c", "kaweth_tx_timeout"],
      ["drivers/net/usb/lan78xx.c", "lan78xx_tx_timeout"],
      ["drivers/net/usb/mcs7830.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/pegasus.c", "pegasus_tx_timeout"],
      ["drivers/net/usb/qmi_wwan.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/r8152.c", "rtl8152_tx_timeout"],
      ["drivers/net/usb/rndis_host.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/rtl8150.c", "rtl8150_tx_timeout"],
      ["drivers/net/usb/sierra_net.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/smsc75xx.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/smsc95xx.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/sr9700.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/sr9800.c", "usbnet_tx_timeout"],
      ["drivers/net/usb/usbnet.c", "usbnet_tx_timeout"],
      ["drivers/net/vmxnet3/vmxnet3_drv.c", "vmxnet3_tx_timeout"],
      ["drivers/net/wan/cosa.c", "cosa_net_timeout"],
      ["drivers/net/wan/farsync.c", "fst_tx_timeout"],
      ["drivers/net/wan/fsl_ucc_hdlc.c", "uhdlc_tx_timeout"],
      ["drivers/net/wan/lmc/lmc_main.c", "lmc_driver_timeout"],
      ["drivers/net/wan/x25_asy.c", "x25_asy_timeout"],
      ["drivers/net/wimax/i2400m/netdev.c", "i2400m_tx_timeout"],
      ["drivers/net/wireless/intel/ipw2x00/ipw2100.c", "ipw2100_tx_timeout"],
      ["drivers/net/wireless/intersil/hostap/hostap_main.c", "prism2_tx_timeout"],
      ["drivers/net/wireless/intersil/hostap/hostap_main.c", "prism2_tx_timeout"],
      ["drivers/net/wireless/intersil/hostap/hostap_main.c", "prism2_tx_timeout"],
      ["drivers/net/wireless/intersil/orinoco/main.c", "orinoco_tx_timeout"],
      ["drivers/net/wireless/intersil/orinoco/orinoco_usb.c", "orinoco_tx_timeout"],
      ["drivers/net/wireless/intersil/orinoco/orinoco.h", "orinoco_tx_timeout"],
      ["drivers/net/wireless/intersil/prism54/islpci_dev.c", "islpci_eth_tx_timeout"],
      ["drivers/net/wireless/intersil/prism54/islpci_eth.c", "islpci_eth_tx_timeout"],
      ["drivers/net/wireless/intersil/prism54/islpci_eth.h", "islpci_eth_tx_timeout"],
      ["drivers/net/wireless/marvell/mwifiex/main.c", "mwifiex_tx_timeout"],
      ["drivers/net/wireless/quantenna/qtnfmac/core.c", "qtnf_netdev_tx_timeout"],
      ["drivers/net/wireless/quantenna/qtnfmac/core.h", "qtnf_netdev_tx_timeout"],
      ["drivers/net/wireless/rndis_wlan.c", "usbnet_tx_timeout"],
      ["drivers/net/wireless/wl3501_cs.c", "wl3501_tx_timeout"],
      ["drivers/net/wireless/zydas/zd1201.c", "zd1201_tx_timeout"],
      ["drivers/s390/net/qeth_core.h", "qeth_tx_timeout"],
      ["drivers/s390/net/qeth_core_main.c", "qeth_tx_timeout"],
      ["drivers/s390/net/qeth_l2_main.c", "qeth_tx_timeout"],
      ["drivers/s390/net/qeth_l2_main.c", "qeth_tx_timeout"],
      ["drivers/s390/net/qeth_l3_main.c", "qeth_tx_timeout"],
      ["drivers/s390/net/qeth_l3_main.c", "qeth_tx_timeout"],
      ["drivers/staging/ks7010/ks_wlan_net.c", "ks_wlan_tx_timeout"],
      ["drivers/staging/qlge/qlge_main.c", "qlge_tx_timeout"],
      ["drivers/staging/rtl8192e/rtl8192e/rtl_core.c", "_rtl92e_tx_timeout"],
      ["drivers/staging/rtl8192u/r8192U_core.c", "tx_timeout"],
      ["drivers/staging/unisys/visornic/visornic_main.c", "visornic_xmit_timeout"],
      ["drivers/staging/wlan-ng/p80211netdev.c", "p80211knetdev_tx_timeout"],
      ["drivers/tty/n_gsm.c", "gsm_mux_net_tx_timeout"],
      ["drivers/tty/synclink.c", "hdlcdev_tx_timeout"],
      ["drivers/tty/synclink_gt.c", "hdlcdev_tx_timeout"],
      ["drivers/tty/synclinkmp.c", "hdlcdev_tx_timeout"],
      ["net/atm/lec.c", "lec_tx_timeout"],
      ["net/bluetooth/bnep/netdev.c", "bnep_net_timeout"]
      );
      
      for my $p (@work) {
      	my @pair = @$p;
      	my $file = $pair[0];
      	my $func = $pair[1];
      	print STDERR $file , ": ", $func,"\n";
      	our @ARGV = ($file);
      	while (<ARGV>) {
      		if (m/($func\s*\(struct\s+net_device\s+\*[A-Za-z_]?[A-Za-z-0-9_]*)(\))/) {
      			print STDERR "found $1+$2 in $file\n";
      		}
      		if (s/($func\s*\(struct\s+net_device\s+\*[A-Za-z_]?[A-Za-z-0-9_]*)(\))/$1, unsigned int txqueue$2/) {
      			print STDERR "$func found in $file\n";
      		}
      		print;
      	}
      }
      
      where the list of files and functions is simply from:
      
      git grep ndo_tx_timeout, with manual addition of headers
      in the rare cases where the function is from a header,
      then manually changing the few places which actually
      call ndo_tx_timeout.
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      Acked-by: NHeiner Kallweit <hkallweit1@gmail.com>
      Acked-by: NJakub Kicinski <jakub.kicinski@netronome.com>
      Acked-by: NShannon Nelson <snelson@pensando.io>
      Reviewed-by: NMartin Habets <mhabets@solarflare.com>
      
      changes from v9:
      	fixup a forward declaration
      changes from v9:
      	more leftovers from v3 change
      changes from v8:
              fix up a missing direct call to timeout
              rebased on net-next
      changes from v7:
      	fixup leftovers from v3 change
      changes from v6:
      	fix typo in rtl driver
      changes from v5:
      	add missing files (allow any net device argument name)
      changes from v4:
      	add a missing driver header
      changes from v3:
              change queue # to unsigned
      Changes from v2:
              added headers
      Changes from v1:
              Fix errors found by kbuild:
              generalize the pattern a bit, to pick up
              a couple of instances missed by the previous
              version.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0290bd29
  13. 05 11月, 2019 1 次提交
  14. 04 10月, 2019 1 次提交
  15. 04 9月, 2019 3 次提交
    • M
      tty: n_gsm: avoid recursive locking with async port hangup · 7030082a
      Martin Hundebøll 提交于
      When tearing down the n_gsm ldisc while one or more of its child ports
      are open, a lock dep warning occurs:
      
      [   56.254258] ======================================================
      [   56.260447] WARNING: possible circular locking dependency detected
      [   56.266641] 5.2.0-00118-g1fd58e20e5b0 #30 Not tainted
      [   56.271701] ------------------------------------------------------
      [   56.277890] cmux/271 is trying to acquire lock:
      [   56.282436] 8215283a (&tty->legacy_mutex){+.+.}, at: __tty_hangup.part.0+0x58/0x27c
      [   56.290128]
      [   56.290128] but task is already holding lock:
      [   56.295970] e9e2b842 (&gsm->mutex){+.+.}, at: gsm_cleanup_mux+0x9c/0x15c
      [   56.302699]
      [   56.302699] which lock already depends on the new lock.
      [   56.302699]
      [   56.310884]
      [   56.310884] the existing dependency chain (in reverse order) is:
      [   56.318372]
      [   56.318372] -> #2 (&gsm->mutex){+.+.}:
      [   56.323624]        mutex_lock_nested+0x1c/0x24
      [   56.328079]        gsm_cleanup_mux+0x9c/0x15c
      [   56.332448]        gsmld_ioctl+0x418/0x4e8
      [   56.336554]        tty_ioctl+0x96c/0xcb0
      [   56.340492]        do_vfs_ioctl+0x41c/0xa5c
      [   56.344685]        ksys_ioctl+0x34/0x60
      [   56.348535]        ret_fast_syscall+0x0/0x28
      [   56.352815]        0xbe97cc04
      [   56.355791]
      [   56.355791] -> #1 (&tty->ldisc_sem){++++}:
      [   56.361388]        tty_ldisc_lock+0x50/0x74
      [   56.365581]        tty_init_dev+0x88/0x1c4
      [   56.369687]        tty_open+0x1c8/0x430
      [   56.373536]        chrdev_open+0xa8/0x19c
      [   56.377560]        do_dentry_open+0x118/0x3c4
      [   56.381928]        path_openat+0x2fc/0x1190
      [   56.386123]        do_filp_open+0x68/0xd4
      [   56.390146]        do_sys_open+0x164/0x220
      [   56.394257]        kernel_init_freeable+0x328/0x3e4
      [   56.399146]        kernel_init+0x8/0x110
      [   56.403078]        ret_from_fork+0x14/0x20
      [   56.407183]        0x0
      [   56.409548]
      [   56.409548] -> #0 (&tty->legacy_mutex){+.+.}:
      [   56.415402]        __mutex_lock+0x64/0x90c
      [   56.419508]        mutex_lock_nested+0x1c/0x24
      [   56.423961]        __tty_hangup.part.0+0x58/0x27c
      [   56.428676]        gsm_cleanup_mux+0xe8/0x15c
      [   56.433043]        gsmld_close+0x48/0x90
      [   56.436979]        tty_ldisc_kill+0x2c/0x6c
      [   56.441173]        tty_ldisc_release+0x88/0x194
      [   56.445715]        tty_release_struct+0x14/0x44
      [   56.450254]        tty_release+0x36c/0x43c
      [   56.454365]        __fput+0x94/0x1e8
      
      Avoid the warning by doing the port hangup asynchronously.
      Signed-off-by: NMartin Hundebøll <martin@geanix.com>
      Link: https://lore.kernel.org/r/20190822215601.9028-1-martin@geanix.comSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7030082a
    • M
      tty: n_gsm: add ioctl to map serial device to mux'ed tty · a7b121b4
      Martin Hundebøll 提交于
      Guessing the first tty for a gsm0710 multiplexed serial device is not
      currently possible, which makes it racy to use with multiple modems.
      
      Add a way to map the physical serial tty to its related mux devices
      using an ioctl.
      Signed-off-by: NMartin Hundebøll <martin@geanix.com>
      Link: https://lore.kernel.org/r/20190812211243.98686-1-martin@geanix.comSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a7b121b4
    • M
      tty: n_gsm: add helpers to convert mux-num to/from tty-base · 43a9e710
      Martin Hundebøll 提交于
      Make it obvious how the gsm mux number relates to the virtual tty lines
      by using helper functions instead of shifting 6 bits.
      Signed-off-by: NMartin Hundebøll <martin@geanix.com>
      Link: https://lore.kernel.org/r/20190710192656.60381-3-martin@geanix.comSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      43a9e710
  16. 26 2月, 2019 1 次提交
    • G
      tty: n_gsm: Mark expected switch fall-throughs · 3e913eeb
      Gustavo A. R. Silva 提交于
      In preparation to enabling -Wimplicit-fallthrough, mark switch
      cases where we are expecting to fall through.
      
      This patch fixes the following warnings:
      
      drivers/tty/n_gsm.c: In function ‘gsm_dlci_data’:
      drivers/tty/n_gsm.c:1582:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
         if (tty) {
            ^
      drivers/tty/n_gsm.c:1587:2: note: here
        case 1:
        ^~~~
      drivers/tty/n_gsm.c: In function ‘gsm1_receive’:
        CC [M]  drivers/scsi/snic/snic_disc.o
        CC [M]  drivers/net/wireless/realtek/rtlwifi/pci.o
        CC      drivers/usb/early/xhci-dbc.o
      drivers/tty/n_gsm.c:1981:12: warning: this statement may fall through [-Wimplicit-fallthrough=]
         gsm->fcs = INIT_FCS;
                  ^
      drivers/tty/n_gsm.c:1983:2: note: here
        case GSM_ADDRESS: /* Address continuation */
        ^~~~
      
      Warning level 3 was used: -Wimplicit-fallthrough=3
      
      Notice that, in this particular case, the code comment is modified
      in accordance with what GCC is expecting to find.
      
      This patch is part of the ongoing efforts to enable
      -Wimplicit-fallthrough.
      Signed-off-by: NGustavo A. R. Silva <gustavo@embeddedor.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3e913eeb
  17. 18 1月, 2019 2 次提交
  18. 13 10月, 2018 1 次提交
    • A
      change semantics of ldisc ->compat_ioctl() · f0193d3e
      Al Viro 提交于
      First of all, make it return int.  Returning long when native method
      had never allowed that is ridiculous and inconvenient.
      
      More importantly, change the caller; if ldisc ->compat_ioctl() is NULL
      or returns -ENOIOCTLCMD, tty_compat_ioctl() will try to feed cmd and
      compat_ptr(arg) to ldisc's native ->ioctl().
      
      That simplifies ->compat_ioctl() instances quite a bit - they only
      need to deal with ioctls that are neither generic tty ones (those
      would get shunted off to tty_ioctl()) nor simple compat pointer ones.
      
      Note that something like TCFLSH won't reach ->compat_ioctl(),
      even if ldisc ->ioctl() does handle it - it will be recognized
      earlier and passed to tty_ioctl() (and ultimately - ldisc ->ioctl()).
      
      For many ldiscs it means that NULL ->compat_ioctl() does the
      right thing.  Those where it won't serve (see e.g. n_r3964.c) are
      also easily dealt with - we need to handle the numeric-argument
      ioctls (calling the native instance) and, if such would exist,
      the ioctls that need layout conversion, etc.
      
      All in-tree ldiscs dealt with.
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      f0193d3e
  19. 25 4月, 2018 1 次提交
  20. 22 4月, 2018 1 次提交
    • T
      tty: n_gsm: Fix DLCI handling for ADM mode if debug & 2 is not set · b2d89ad9
      Tony Lindgren 提交于
      At least on droid 4 with control channel in ADM mode, there is no response
      to Modem Status Command (MSC). Currently gsmtty_modem_update() expects to
      have data in dlci->modem_rx unless debug & 2 is set. This means that on
      droid 4, things only work if debug & 2 is set.
      
      Let's fix the issue by ignoring empty dlci->modem_rx for ADM mode. In
      the AMD mode, CMD_MSC will never respond and gsm_process_modem() won't
      get called to set dlci->modem_rx.
      
      And according to ts_127010v140000p.pdf, MSC is only relevant if basic
      option is chosen, so let's test for that too.
      
      Fixes: ea3d8465 ("tty: n_gsm: Allow ADM response in addition to UA for control dlci")
      Cc: linux-serial@vger.kernel.org
      Cc: Alan Cox <alan@llwyncelyn.cymru>
      Cc: Dan Williams <dcbw@redhat.com>
      Cc: Jiri Prchal <jiri.prchal@aksignal.cz>
      Cc: Jiri Slaby <jslaby@suse.cz>
      Cc: Marcel Partap <mpartap@gmx.net>
      Cc: Merlijn Wajer <merlijn@wizzup.org>
      Cc: Michael Nazzareno Trimarchi <michael@amarulasolutions.com>
      Cc: Michael Scott <michael.scott@linaro.org>
      Cc: Pavel Machek <pavel@ucw.cz>
      Cc: Peter Hurley <peter@hurleysoftware.com>
      Cc: Russ Gorby <russ.gorby@intel.com>
      Cc: Sascha Hauer <s.hauer@pengutronix.de>
      Cc: Sebastian Reichel <sre@kernel.org>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b2d89ad9