1. 06 Jan, 2021 14 commits
    • Qinglang Miao's avatar
      net: qrtr: fix null-ptr-deref in qrtr_ns_remove · 4beb17e5
      Qinglang Miao authored
      A null-ptr-deref bug is reported by Hulk Robot like this:
      --------------
      KASAN: null-ptr-deref in range [0x0000000000000128-0x000000000000012f]
      Call Trace:
      qrtr_ns_remove+0x22/0x40 [ns]
      qrtr_proto_fini+0xa/0x31 [qrtr]
      __x64_sys_delete_module+0x337/0x4e0
      do_syscall_64+0x34/0x80
      entry_SYSCALL_64_after_hwframe+0x44/0xa9
      RIP: 0033:0x468ded
      --------------
      
      When qrtr_ns_init fails in qrtr_proto_init, qrtr_ns_remove which would
      be called later on would raise a null-ptr-deref because qrtr_ns.workqueue
      has been destroyed.
      
      Fix it by making qrtr_ns_init have a return value and adding a check in
      qrtr_proto_init.
      Reported-by: default avatarHulk Robot <hulkci@huawei.com>
      Signed-off-by: default avatarQinglang Miao <miaoqinglang@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4beb17e5
    • Jouni K. Seppänen's avatar
      net: cdc_ncm: correct overhead in delayed_ndp_size · 7a68d725
      Jouni K. Seppänen authored
      Aligning to tx_ndp_modulus is not sufficient because the next align
      call can be cdc_ncm_align_tail, which can add up to ctx->tx_modulus +
      ctx->tx_remainder - 1 bytes. This used to lead to occasional crashes
      on a Huawei 909s-120 LTE module as follows:
      
      - the condition marked /* if there is a remaining skb [...] */ is true
        so the swaps happen
      - skb_out is set from ctx->tx_curr_skb
      - skb_out->len is exactly 0x3f52
      - ctx->tx_curr_size is 0x4000 and delayed_ndp_size is 0xac
        (note that the sum of skb_out->len and delayed_ndp_size is 0x3ffe)
      - the for loop over n is executed once
      - the cdc_ncm_align_tail call marked /* align beginning of next frame */
        increases skb_out->len to 0x3f56 (the sum is now 0x4002)
      - the condition marked /* check if we had enough room left [...] */ is
        false so we break out of the loop
      - the condition marked /* If requested, put NDP at end of frame. */ is
        true so the NDP is written into skb_out
      - now skb_out->len is 0x4002, so padding_count is minus two interpreted
        as an unsigned number, which is used as the length argument to memset,
        leading to a crash with various symptoms but usually including
      
      > Call Trace:
      >  <IRQ>
      >  cdc_ncm_fill_tx_frame+0x83a/0x970 [cdc_ncm]
      >  cdc_mbim_tx_fixup+0x1d9/0x240 [cdc_mbim]
      >  usbnet_start_xmit+0x5d/0x720 [usbnet]
      
      The cdc_ncm_align_tail call first aligns on a ctx->tx_modulus
      boundary (adding at most ctx->tx_modulus-1 bytes), then adds
      ctx->tx_remainder bytes. Alternatively, the next alignment call can
      occur in cdc_ncm_ndp16 or cdc_ncm_ndp32, in which case at most
      ctx->tx_ndp_modulus-1 bytes are added.
      
      A similar problem has occurred before, and the code is nontrivial to
      reason about, so add a guard before the crashing call. By that time it
      is too late to prevent any memory corruption (we'll have written past
      the end of the buffer already) but we can at least try to get a warning
      written into an on-disk log by avoiding the hard crash caused by padding
      past the buffer with a huge number of zeros.
      Signed-off-by: default avatarJouni K. Seppänen <jks@iki.fi>
      Fixes: 4a0e3e98 ("cdc_ncm: Add support for moving NDP to end of NCM frame")
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=209407Reported-by: default avatarkernel test robot <lkp@intel.com>
      Reviewed-by: default avatarBjørn Mork <bjorn@mork.no>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7a68d725
    • David S. Miller's avatar
      Merge branch 'hns3-fixes' · be8d1e0e
      David S. Miller authored
      Huazhong Tan says:
      
      ====================
      net: hns3: fixes for -net
      
      There are some bugfixes for the HNS3 ethernet driver.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      be8d1e0e
    • Jian Shen's avatar
      net: hns3: fix incorrect handling of sctp6 rss tuple · ab6e32d2
      Jian Shen authored
      For DEVICE_VERSION_V2, the hardware only supports src-ip,
      dst-ip and verification-tag for rss tuple set of sctp6
      packet. For DEVICE_VERSION_V3, the hardware supports
      src-port and dst-port as well.
      
      Currently, when user queries the sctp6 rss tuples info,
      some unsupported information will be showed on V2. So add
      a check for hardware version when initializing and queries
      sctp6 rss tuple to fix this issue.
      
      Fixes: 46a3df9f ("net: hns3: Add HNS3 Acceleration Engine & Compatibility Layer Support")
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ab6e32d2
    • Yufeng Mo's avatar
      net: hns3: fix the number of queues actually used by ARQ · 65e61e3c
      Yufeng Mo authored
      HCLGE_MBX_MAX_ARQ_MSG_NUM is used to apply memory for the number
      of queues used by ARQ(Asynchronous Receive Queue), so the head
      and tail pointers should also use this macro.
      
      Fixes: 07a0556a ("net: hns3: Changes to support ARQ(Asynchronous Receive Queue)")
      Signed-off-by: default avatarYufeng Mo <moyufeng@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      65e61e3c
    • Yonglong Liu's avatar
      net: hns3: fix a phy loopback fail issue · f04bbcbf
      Yonglong Liu authored
      When phy driver does not implement the set_loopback interface,
      phy loopback test will return -EOPNOTSUPP, and the loopback test
      will fail. So when phy driver does not implement the set_loopback
      interface, don't do phy loopback test.
      
      Fixes: c9765a89 ("net: hns3: add phy selftest function")
      Signed-off-by: default avatarYonglong Liu <liuyonglong@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f04bbcbf
    • Jakub Kicinski's avatar
      docs: net: fix documentation on .ndo_get_stats · 9f9d41f0
      Jakub Kicinski authored
      Fix calling context.
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Reviewed-by: default avatarVladimir Oltean <olteanv@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9f9d41f0
    • David S. Miller's avatar
      Merge branch 'stmmac-fixes' · 8db25530
      David S. Miller authored
      Samuel Holland says:
      
      ====================
      Fixes for dwmac-sun8i suspend/resume
      
      This series fixes issues preventing dwmac-sun8i from working after a
      suspend/resume cycle. Those issues include the PHY being left powered
      off, the MAC syscon configuration being reset, and the reference to the
      reset controller being improperly dropped. They also fix related issues
      in probe error handling and driver removal.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8db25530
    • Samuel Holland's avatar
      net: stmmac: dwmac-sun8i: Balance syscon (de)initialization · 9b1e39cf
      Samuel Holland authored
      Previously, sun8i_dwmac_set_syscon was called from a chain of functions
      in several different files:
          sun8i_dwmac_probe
            stmmac_dvr_probe
              stmmac_hw_init
                stmmac_hwif_init
                  sun8i_dwmac_setup
                    sun8i_dwmac_set_syscon
      which made the lifetime of the syscon values hard to reason about. Part
      of the problem is that there is no similar platform driver callback from
      stmmac_dvr_remove. As a result, the driver unset the syscon value in
      sun8i_dwmac_exit, but this leaves it uninitialized after a suspend/
      resume cycle. It was also unset a second time (outside sun8i_dwmac_exit)
      in the probe error path.
      
      Move the init to the earliest available place in sun8i_dwmac_probe
      (after stmmac_probe_config_dt, which initializes plat_dat), and the
      deinit to the corresponding position in the cleanup order.
      
      Since priv is not filled in until stmmac_dvr_probe, this requires
      changing the sun8i_dwmac_set_syscon parameters to priv's two relevant
      members.
      
      Fixes: 9f93ac8d ("net-next: stmmac: Add dwmac-sun8i")
      Fixes: 634db83b ("net: stmmac: dwmac-sun8i: Handle integrated/external MDIOs")
      Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9b1e39cf
    • Samuel Holland's avatar
      net: stmmac: dwmac-sun8i: Balance internal PHY power · b8239638
      Samuel Holland authored
      sun8i_dwmac_exit calls sun8i_dwmac_unpower_internal_phy, but
      sun8i_dwmac_init did not call sun8i_dwmac_power_internal_phy. This
      caused PHY power to remain off after a suspend/resume cycle. Fix this by
      recording if PHY power should be restored, and if so, restoring it.
      
      Fixes: 634db83b ("net: stmmac: dwmac-sun8i: Handle integrated/external MDIOs")
      Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b8239638
    • Samuel Holland's avatar
      net: stmmac: dwmac-sun8i: Balance internal PHY resource references · 52925421
      Samuel Holland authored
      While stmmac_pltfr_remove calls sun8i_dwmac_exit, the sun8i_dwmac_init
      and sun8i_dwmac_exit functions are also called by the stmmac_platform
      suspend/resume callbacks. They may be called many times during the
      device's lifetime and should not release resources used by the driver.
      
      Furthermore, there was no error handling in case registering the MDIO
      mux failed during probe, and the EPHY clock was never released at all.
      
      Fix all of these issues by moving the deinitialization code to a driver
      removal callback. Also ensure the EPHY is powered down before removal.
      
      Fixes: 634db83b ("net: stmmac: dwmac-sun8i: Handle integrated/external MDIOs")
      Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
      Reviewed-by: default avatarChen-Yu Tsai <wens@csie.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      52925421
    • Samuel Holland's avatar
      net: stmmac: dwmac-sun8i: Fix probe error handling · 7eeecc4b
      Samuel Holland authored
      stmmac_pltfr_remove does three things in one function, making it
      inapproprate for unwinding the steps in the probe function. Currently,
      a failure before the call to stmmac_dvr_probe would leak OF node
      references due to missing a call to stmmac_remove_config_dt. And an
      error in stmmac_dvr_probe would cause the driver to attempt to remove a
      netdevice that was never added. Fix these by reordering the init and
      splitting out the error handling steps.
      
      Fixes: 9f93ac8d ("net-next: stmmac: Add dwmac-sun8i")
      Fixes: 40a1dcee ("net: ethernet: dwmac-sun8i: Use the correct function in exit path")
      Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
      Reviewed-by: default avatarChen-Yu Tsai <wens@csie.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7eeecc4b
    • Jakub Kicinski's avatar
      net: vlan: avoid leaks on register_vlan_dev() failures · 55b7ab11
      Jakub Kicinski authored
      VLAN checks for NETREG_UNINITIALIZED to distinguish between
      registration failure and unregistration in progress.
      
      Since commit cb626bf5 ("net-sysfs: Fix reference count leak")
      registration failure may, however, result in NETREG_UNREGISTERED
      as well as NETREG_UNINITIALIZED.
      
      This fix is similer to cebb6975 ("rtnetlink: Fix
      memory(net_device) leak when ->newlink fails")
      
      Fixes: cb626bf5 ("net-sysfs: Fix reference count leak")
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      55b7ab11
    • Jakub Kicinski's avatar
      net: suggest L2 discards be counted towards rx_dropped · cf072069
      Jakub Kicinski authored
      From the existing definitions it's unclear which stat to
      use to report filtering based on L2 dst addr in old
      broadcast-medium Ethernet.
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      cf072069
  2. 05 Jan, 2021 12 commits
    • Christophe JAILLET's avatar
      net/sonic: Fix some resource leaks in error handling paths · 0f7ba7bc
      Christophe JAILLET authored
      A call to dma_alloc_coherent() is wrapped by sonic_alloc_descriptors().
      
      This is correctly freed in the remove function, but not in the error
      handling path of the probe function. Fix this by adding the missing
      dma_free_coherent() call.
      
      While at it, rename a label in order to be slightly more informative.
      
      Cc: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
      Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
      Cc: Chris Zankel <chris@zankel.net>
      References: commit 10e3cc18 ("net/sonic: Fix a resource leak in an error handling path in 'jazz_sonic_probe()'")
      Fixes: 74f2a5f0 ("xtensa: Add support for the Sonic Ethernet device for the XT2000 board.")
      Fixes: efcce839 ("[PATCH] macsonic/jazzsonic network drivers update")
      Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
      Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0f7ba7bc
    • Arnd Bergmann's avatar
      wan: ds26522: select CONFIG_BITREVERSE · 69931e11
      Arnd Bergmann authored
      Without this, the driver runs into a link failure
      
      arm-linux-gnueabi-ld: drivers/net/wan/slic_ds26522.o: in function `slic_ds26522_probe':
      slic_ds26522.c:(.text+0x100c): undefined reference to `byte_rev_table'
      arm-linux-gnueabi-ld: slic_ds26522.c:(.text+0x1cdc): undefined reference to `byte_rev_table'
      arm-linux-gnueabi-ld: drivers/net/wan/slic_ds26522.o: in function `slic_write':
      slic_ds26522.c:(.text+0x1e4c): undefined reference to `byte_rev_table'
      
      Fixes: c37d4a00 ("Maxim/driver: Add driver for maxim ds26522")
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      69931e11
    • Arnd Bergmann's avatar
      misdn: dsp: select CONFIG_BITREVERSE · 51049bd9
      Arnd Bergmann authored
      Without this, we run into a link error
      
      arm-linux-gnueabi-ld: drivers/isdn/mISDN/dsp_audio.o: in function `dsp_audio_generate_law_tables':
      (.text+0x30c): undefined reference to `byte_rev_table'
      arm-linux-gnueabi-ld: drivers/isdn/mISDN/dsp_audio.o:(.text+0x5e4): more undefined references to `byte_rev_table' follow
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      51049bd9
    • Arnd Bergmann's avatar
      cfg80211: select CONFIG_CRC32 · 152a8a6c
      Arnd Bergmann authored
      Without crc32 support, this fails to link:
      
      arm-linux-gnueabi-ld: net/wireless/scan.o: in function `cfg80211_scan_6ghz':
      scan.c:(.text+0x928): undefined reference to `crc32_le'
      
      Fixes: c8cb5b85 ("nl80211/cfg80211: support 6 GHz scanning")
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      152a8a6c
    • Arnd Bergmann's avatar
      wil6210: select CONFIG_CRC32 · e186620d
      Arnd Bergmann authored
      Without crc32, the driver fails to link:
      
      arm-linux-gnueabi-ld: drivers/net/wireless/ath/wil6210/fw.o: in function `wil_fw_verify':
      fw.c:(.text+0x74c): undefined reference to `crc32_le'
      arm-linux-gnueabi-ld: drivers/net/wireless/ath/wil6210/fw.o:fw.c:(.text+0x758): more undefined references to `crc32_le' follow
      
      Fixes: 151a9706 ("wil6210: firmware download")
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e186620d
    • Arnd Bergmann's avatar
      can: kvaser_pciefd: select CONFIG_CRC32 · 1d48595c
      Arnd Bergmann authored
      Without crc32, this driver fails to link:
      
      arm-linux-gnueabi-ld: drivers/net/can/kvaser_pciefd.o: in function `kvaser_pciefd_probe':
      kvaser_pciefd.c:(.text+0x2b0): undefined reference to `crc32_be'
      
      Fixes: 26ad340e ("can: kvaser_pciefd: Add driver for Kvaser PCIEcan devices")
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Acked-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1d48595c
    • Arnd Bergmann's avatar
      phy: dp83640: select CONFIG_CRC32 · f9d6f941
      Arnd Bergmann authored
      Without crc32, this driver fails to link:
      
      arm-linux-gnueabi-ld: drivers/net/phy/dp83640.o: in function `match':
      dp83640.c:(.text+0x476c): undefined reference to `crc32_le'
      
      Fixes: 539e44d2 ("dp83640: Include hash in timestamp/packet matching")
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Acked-by: default avatarRichard Cochran <richardcochran@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f9d6f941
    • Arnd Bergmann's avatar
      qed: select CONFIG_CRC32 · 2860d45a
      Arnd Bergmann authored
      Without this, the driver fails to link:
      
      lpc_eth.c:(.text+0x1934): undefined reference to `crc32_le'
      arm-linux-gnueabi-ld: drivers/net/ethernet/qlogic/qed/qed_debug.o: in function `qed_grc_dump':
      qed_debug.c:(.text+0x4068): undefined reference to `crc32_le'
      arm-linux-gnueabi-ld: drivers/net/ethernet/qlogic/qed/qed_debug.o: in function `qed_idle_chk_dump':
      qed_debug.c:(.text+0x51fc): undefined reference to `crc32_le'
      arm-linux-gnueabi-ld: drivers/net/ethernet/qlogic/qed/qed_debug.o: in function `qed_mcp_trace_dump':
      qed_debug.c:(.text+0x6000): undefined reference to `crc32_le'
      arm-linux-gnueabi-ld: drivers/net/ethernet/qlogic/qed/qed_debug.o: in function `qed_dbg_reg_fifo_dump':
      qed_debug.c:(.text+0x66cc): undefined reference to `crc32_le'
      arm-linux-gnueabi-ld: drivers/net/ethernet/qlogic/qed/qed_debug.o:qed_debug.c:(.text+0x6aa4): more undefined references to `crc32_le' follow
      
      Fixes: 7a4b21b7 ("qed: Add nvram selftest")
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      2860d45a
    • Linus Torvalds's avatar
      Merge tag 'arc-5.11-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc · f6e7a024
      Linus Torvalds authored
      Pull ARC updates from Vineet Gupta:
       "Things are quieter on upstreaming front as we are mostly focusing on
        ARCv3/ARC64 port.
      
        This contains just build system updates from Masahiro Yamada"
      
      * tag 'arc-5.11-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc:
        ARC: build: use $(READELF) instead of hard-coded readelf
        ARC: build: remove unneeded extra-y
        ARC: build: move symlink creation to arch/arc/Makefile to avoid race
        ARC: build: add boot_targets to PHONY
        ARC: build: add uImage.lzma to the top-level target
        ARC: build: remove non-existing bootpImage from KBUILD_IMAGE
      f6e7a024
    • Linus Torvalds's avatar
      Merge tag 'net-5.11-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net · aa35e45c
      Linus Torvalds authored
      Pull networking fixes from Jakub Kicinski:
       "Networking fixes, including fixes from netfilter, wireless and bpf
        trees.
      
        Current release - regressions:
      
         - mt76: fix NULL pointer dereference in mt76u_status_worker and
           mt76s_process_tx_queue
      
         - net: ipa: fix interconnect enable bug
      
        Current release - always broken:
      
         - netfilter: fixes possible oops in mtype_resize in ipset
      
         - ath11k: fix number of coding issues found by static analysis tools
           and spurious error messages
      
        Previous releases - regressions:
      
         - e1000e: re-enable s0ix power saving flows for systems with the
           Intel i219-LM Ethernet controllers to fix power use regression
      
         - virtio_net: fix recursive call to cpus_read_lock() to avoid a
           deadlock
      
         - ipv4: ignore ECN bits for fib lookups in fib_compute_spec_dst()
      
         - sysfs: take the rtnl lock around XPS configuration
      
         - xsk: fix memory leak for failed bind and rollback reservation at
           NETDEV_TX_BUSY
      
         - r8169: work around power-saving bug on some chip versions
      
        Previous releases - always broken:
      
         - dcb: validate netlink message in DCB handler
      
         - tun: fix return value when the number of iovs exceeds MAX_SKB_FRAGS
           to prevent unnecessary retries
      
         - vhost_net: fix ubuf refcount when sendmsg fails
      
         - bpf: save correct stopping point in file seq iteration
      
         - ncsi: use real net-device for response handler
      
         - neighbor: fix div by zero caused by a data race (TOCTOU)
      
         - bareudp: fix use of incorrect min_headroom size and a false
           positive lockdep splat from the TX lock
      
         - mvpp2:
            - clear force link UP during port init procedure in case
              bootloader had set it
            - add TCAM entry to drop flow control pause frames
            - fix PPPoE with ipv6 packet parsing
            - fix GoP Networking Complex Control config of port 3
            - fix pkt coalescing IRQ-threshold configuration
      
         - xsk: fix race in SKB mode transmit with shared cq
      
         - ionic: account for vlan tag len in rx buffer len
      
         - stmmac: ignore the second clock input, current clock framework does
           not handle exclusive clock use well, other drivers may reconfigure
           the second clock
      
        Misc:
      
         - ppp: change PPPIOCUNBRIDGECHAN ioctl request number to follow
           existing scheme"
      
      * tag 'net-5.11-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (99 commits)
        net: dsa: lantiq_gswip: Fix GSWIP_MII_CFG(p) register access
        net: dsa: lantiq_gswip: Enable GSWIP_MII_CFG_EN also for internal PHYs
        net: lapb: Decrease the refcount of "struct lapb_cb" in lapb_device_event
        r8169: work around power-saving bug on some chip versions
        net: usb: qmi_wwan: add Quectel EM160R-GL
        selftests: mlxsw: Set headroom size of correct port
        net: macb: Correct usage of MACB_CAPS_CLK_HW_CHG flag
        ibmvnic: fix: NULL pointer dereference.
        docs: networking: packet_mmap: fix old config reference
        docs: networking: packet_mmap: fix formatting for C macros
        vhost_net: fix ubuf refcount incorrectly when sendmsg fails
        bareudp: Fix use of incorrect min_headroom size
        bareudp: set NETIF_F_LLTX flag
        net: hdlc_ppp: Fix issues when mod_timer is called while timer is running
        atlantic: remove architecture depends
        erspan: fix version 1 check in gre_parse_header()
        net: hns: fix return value check in __lb_other_process()
        net: sched: prevent invalid Scell_log shift count
        net: neighbor: fix a crash caused by mod zero
        ipv4: Ignore ECN bits for fib lookups in fib_compute_spec_dst()
        ...
      aa35e45c
    • Linus Torvalds's avatar
      Merge tag 'afs-fixes-04012021' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs · 6207214a
      Linus Torvalds authored
      Pull AFS fixes from David Howells:
       "Two fixes.
      
        The first is the fix for the strnlen() array limit check and the
        second fixes the calculation of the number of dirent records used to
        represent any particular filename length"
      
      * tag 'afs-fixes-04012021' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs:
        afs: Fix directory entry size calculation
        afs: Work around strnlen() oops with CONFIG_FORTIFIED_SOURCE=y
      6207214a
    • Linus Torvalds's avatar
      mm: make wait_on_page_writeback() wait for multiple pending writebacks · c2407cf7
      Linus Torvalds authored
      Ever since commit 2a9127fc ("mm: rewrite wait_on_page_bit_common()
      logic") we've had some very occasional reports of BUG_ON(PageWriteback)
      in write_cache_pages(), which we thought we already fixed in commit
      073861ed ("mm: fix VM_BUG_ON(PageTail) and BUG_ON(PageWriteback)").
      
      But syzbot just reported another one, even with that commit in place.
      
      And it turns out that there's a simpler way to trigger the BUG_ON() than
      the one Hugh found with page re-use.  It all boils down to the fact that
      the page writeback is ostensibly serialized by the page lock, but that
      isn't actually really true.
      
      Yes, the people _setting_ writeback all do so under the page lock, but
      the actual clearing of the bit - and waking up any waiters - happens
      without any page lock.
      
      This gives us this fairly simple race condition:
      
        CPU1 = end previous writeback
        CPU2 = start new writeback under page lock
        CPU3 = write_cache_pages()
      
        CPU1          CPU2            CPU3
        ----          ----            ----
      
        end_page_writeback()
          test_clear_page_writeback(page)
          ... delayed...
      
                      lock_page();
                      set_page_writeback()
                      unlock_page()
      
                                      lock_page()
                                      wait_on_page_writeback();
      
          wake_up_page(page, PG_writeback);
          .. wakes up CPU3 ..
      
                                      BUG_ON(PageWriteback(page));
      
      where the BUG_ON() happens because we woke up the PG_writeback bit
      becasue of the _previous_ writeback, but a new one had already been
      started because the clearing of the bit wasn't actually atomic wrt the
      actual wakeup or serialized by the page lock.
      
      The reason this didn't use to happen was that the old logic in waiting
      on a page bit would just loop if it ever saw the bit set again.
      
      The nice proper fix would probably be to get rid of the whole "wait for
      writeback to clear, and then set it" logic in the writeback path, and
      replace it with an atomic "wait-to-set" (ie the same as we have for page
      locking: we set the page lock bit with a single "lock_page()", not with
      "wait for lock bit to clear and then set it").
      
      However, out current model for writeback is that the waiting for the
      writeback bit is done by the generic VFS code (ie write_cache_pages()),
      but the actual setting of the writeback bit is done much later by the
      filesystem ".writepages()" function.
      
      IOW, to make the writeback bit have that same kind of "wait-to-set"
      behavior as we have for page locking, we'd have to change our roughly
      ~50 different writeback functions.  Painful.
      
      Instead, just make "wait_on_page_writeback()" loop on the very unlikely
      situation that the PG_writeback bit is still set, basically re-instating
      the old behavior.  This is very non-optimal in case of contention, but
      since we only ever set the bit under the page lock, that situation is
      controlled.
      
      Reported-by: syzbot+2fc0712f8f8b8b8fa0ef@syzkaller.appspotmail.com
      Fixes: 2a9127fc ("mm: rewrite wait_on_page_bit_common() logic")
      Acked-by: default avatarHugh Dickins <hughd@google.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: stable@kernel.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      c2407cf7
  3. 04 Jan, 2021 14 commits