Skip to content
  1. Dec 29, 2021
    • Greg Kroah-Hartman's avatar
      Linux 4.19.223 · 7139b4fa
      Greg Kroah-Hartman authored
      
      
      Link: https://lore.kernel.org/r/20211227151319.379265346@linuxfoundation.org
      Tested-by: default avatarPavel Machek (CIP) <pavel@denx.de>
      Tested-by: default avatarHulk Robot <hulkrobot@huawei.com>
      Tested-by: default avatarLinux Kernel Functional Testing <lkft@linaro.org>
      Tested-by: default avatarSudip Mukherjee <sudip.mukherjee@codethink.co.uk>
      Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Tested-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      v4.19.223
      7139b4fa
    • Rémi Denis-Courmont's avatar
      phonet/pep: refuse to enable an unbound pipe · 982b6ba1
      Rémi Denis-Courmont authored
      commit 75a2f315
      
       upstream.
      
      This ioctl() implicitly assumed that the socket was already bound to
      a valid local socket name, i.e. Phonet object. If the socket was not
      bound, two separate problems would occur:
      
      1) We'd send an pipe enablement request with an invalid source object.
      2) Later socket calls could BUG on the socket unexpectedly being
         connected yet not bound to a valid object.
      
      Reported-by: default avatar <syzbot+2dc91e7fc3dea88b1e8a@syzkaller.appspotmail.com>
      Signed-off-by: default avatarRémi Denis-Courmont <remi@remlab.net>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      982b6ba1
    • Lin Ma's avatar
      hamradio: improve the incomplete fix to avoid NPD · b68f41c6
      Lin Ma authored
      commit b2f37aea upstream.
      
      The previous commit 3e0588c2
      
       ("hamradio: defer ax25 kfree after
      unregister_netdev") reorder the kfree operations and unregister_netdev
      operation to prevent UAF.
      
      This commit improves the previous one by also deferring the nullify of
      the ax->tty pointer. Otherwise, a NULL pointer dereference bug occurs.
      Partial of the stack trace is shown below.
      
      BUG: kernel NULL pointer dereference, address: 0000000000000538
      RIP: 0010:ax_xmit+0x1f9/0x400
      ...
      Call Trace:
       dev_hard_start_xmit+0xec/0x320
       sch_direct_xmit+0xea/0x240
       __qdisc_run+0x166/0x5c0
       __dev_queue_xmit+0x2c7/0xaf0
       ax25_std_establish_data_link+0x59/0x60
       ax25_connect+0x3a0/0x500
       ? security_socket_connect+0x2b/0x40
       __sys_connect+0x96/0xc0
       ? __hrtimer_init+0xc0/0xc0
       ? common_nsleep+0x2e/0x50
       ? switch_fpu_return+0x139/0x1a0
       __x64_sys_connect+0x11/0x20
       do_syscall_64+0x33/0x40
       entry_SYSCALL_64_after_hwframe+0x44/0xa9
      
      The crash point is shown as below
      
      static void ax_encaps(...) {
        ...
        set_bit(TTY_DO_WRITE_WAKEUP, &ax->tty->flags); // ax->tty = NULL!
        ...
      }
      
      By placing the nullify action after the unregister_netdev, the ax->tty
      pointer won't be assigned as NULL net_device framework layer is well
      synchronized.
      
      Signed-off-by: default avatarLin Ma <linma@zju.edu.cn>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b68f41c6
    • Lin Ma's avatar
      hamradio: defer ax25 kfree after unregister_netdev · 896193a0
      Lin Ma authored
      commit 3e0588c2
      
       upstream.
      
      There is a possible race condition (use-after-free) like below
      
       (USE)                       |  (FREE)
      ax25_sendmsg                 |
       ax25_queue_xmit             |
        dev_queue_xmit             |
         __dev_queue_xmit          |
          __dev_xmit_skb           |
           sch_direct_xmit         | ...
            xmit_one               |
             netdev_start_xmit     | tty_ldisc_kill
              __netdev_start_xmit  |  mkiss_close
               ax_xmit             |   kfree
                ax_encaps          |
                                   |
      
      Even though there are two synchronization primitives before the kfree:
      1. wait_for_completion(&ax->dead). This can prevent the race with
      routines from mkiss_ioctl. However, it cannot stop the routine coming
      from upper layer, i.e., the ax25_sendmsg.
      
      2. netif_stop_queue(ax->dev). It seems that this line of code aims to
      halt the transmit queue but it fails to stop the routine that already
      being xmit.
      
      This patch reorder the kfree after the unregister_netdev to avoid the
      possible UAF as the unregister_netdev() is well synchronized and won't
      return if there is a running routine.
      
      Signed-off-by: default avatarLin Ma <linma@zju.edu.cn>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      896193a0
    • Lin Ma's avatar
      ax25: NPD bug when detaching AX25 device · bd05a8f1
      Lin Ma authored
      commit 1ade48d0
      
       upstream.
      
      The existing cleanup routine implementation is not well synchronized
      with the syscall routine. When a device is detaching, below race could
      occur.
      
      static int ax25_sendmsg(...) {
        ...
        lock_sock()
        ax25 = sk_to_ax25(sk);
        if (ax25->ax25_dev == NULL) // CHECK
        ...
        ax25_queue_xmit(skb, ax25->ax25_dev->dev); // USE
        ...
      }
      
      static void ax25_kill_by_device(...) {
        ...
        if (s->ax25_dev == ax25_dev) {
          s->ax25_dev = NULL;
          ...
      }
      
      Other syscall functions like ax25_getsockopt, ax25_getname,
      ax25_info_show also suffer from similar races. To fix them, this patch
      introduce lock_sock() into ax25_kill_by_device in order to guarantee
      that the nullify action in cleanup routine cannot proceed when another
      socket request is pending.
      
      Signed-off-by: default avatarHanjie Wu <nagi@zju.edu.cn>
      Signed-off-by: default avatarLin Ma <linma@zju.edu.cn>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bd05a8f1
    • Guenter Roeck's avatar
      hwmon: (lm90) Do not report 'busy' status bit as alarm · b3d4efca
      Guenter Roeck authored
      commit cdc5287a
      
       upstream.
      
      Bit 7 of the status register indicates that the chip is busy
      doing a conversion. It does not indicate an alarm status.
      Stop reporting it as alarm status bit.
      
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b3d4efca
    • Sean Christopherson's avatar
      KVM: VMX: Fix stale docs for kvm-intel.emulate_invalid_guest_state · 1d372494
      Sean Christopherson authored
      commit 0ff29701 upstream.
      
      Update the documentation for kvm-intel's emulate_invalid_guest_state to
      rectify the description of KVM's default behavior, and to document that
      the behavior and thus parameter only applies to L1.
      
      Fixes: a27685c3
      
       ("KVM: VMX: Emulate invalid guest state by default")
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Message-Id: <20211207193006.120997-4-seanjc@google.com>
      Reviewed-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1d372494
    • Marian Postevca's avatar
      usb: gadget: u_ether: fix race in setting MAC address in setup phase · b54abdbb
      Marian Postevca authored
      commit 890d5b40 upstream.
      
      When listening for notifications through netlink of a new interface being
      registered, sporadically, it is possible for the MAC to be read as zero.
      The zero MAC address lasts a short period of time and then switches to a
      valid random MAC address.
      
      This causes problems for netd in Android, which assumes that the interface
      is malfunctioning and will not use it.
      
      In the good case we get this log:
      InterfaceController::getCfg() ifName usb0
       hwAddr 92:a8:f0:73:79:5b ipv4Addr 0.0.0.0 flags 0x1002
      
      In the error case we get these logs:
      InterfaceController::getCfg() ifName usb0
       hwAddr 00:00:00:00:00:00 ipv4Addr 0.0.0.0 flags 0x1002
      
      netd : interfaceGetCfg("usb0")
      netd : interfaceSetCfg() -> ServiceSpecificException
       (99, "[Cannot assign requested address] : ioctl() failed")
      
      The reason for the issue is the order in which the interface is setup,
      it is first registered through register_netdev() and after the MAC
      address is set.
      
      Fixed by first setting the MAC address of the net_device and after that
      calling register_netdev().
      
      Fixes: bcd4a1c4
      
       ("usb: gadget: u_ether: construct with default values and add setters/getters")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMarian Postevca <posteuca@mutex.one>
      Link: https://lore.kernel.org/r/20211204214912.17627-1-posteuca@mutex.one
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b54abdbb
    • Chao Yu's avatar
      f2fs: fix to do sanity check on last xattr entry in __f2fs_setxattr() · f9dfa44b
      Chao Yu authored
      
      
      commit 5598b24efaf4892741c798b425d543e4bed357a1 upstream.
      
      As Wenqing Liu reported in bugzilla:
      
      https://bugzilla.kernel.org/show_bug.cgi?id=215235
      
      - Overview
      page fault in f2fs_setxattr() when mount and operate on corrupted image
      
      - Reproduce
      tested on kernel 5.16-rc3, 5.15.X under root
      
      1. unzip tmp7.zip
      2. ./single.sh f2fs 7
      
      Sometimes need to run the script several times
      
      - Kernel dump
      loop0: detected capacity change from 0 to 131072
      F2FS-fs (loop0): Found nat_bits in checkpoint
      F2FS-fs (loop0): Mounted with checkpoint version = 7548c2ee
      BUG: unable to handle page fault for address: ffffe47bc7123f48
      RIP: 0010:kfree+0x66/0x320
      Call Trace:
       __f2fs_setxattr+0x2aa/0xc00 [f2fs]
       f2fs_setxattr+0xfa/0x480 [f2fs]
       __f2fs_set_acl+0x19b/0x330 [f2fs]
       __vfs_removexattr+0x52/0x70
       __vfs_removexattr_locked+0xb1/0x140
       vfs_removexattr+0x56/0x100
       removexattr+0x57/0x80
       path_removexattr+0xa3/0xc0
       __x64_sys_removexattr+0x17/0x20
       do_syscall_64+0x37/0xb0
       entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      The root cause is in __f2fs_setxattr(), we missed to do sanity check on
      last xattr entry, result in out-of-bound memory access during updating
      inconsistent xattr data of target inode.
      
      After the fix, it can detect such xattr inconsistency as below:
      
      F2FS-fs (loop11): inode (7) has invalid last xattr entry, entry_size: 60676
      F2FS-fs (loop11): inode (8) has corrupted xattr
      F2FS-fs (loop11): inode (8) has corrupted xattr
      F2FS-fs (loop11): inode (8) has invalid last xattr entry, entry_size: 47736
      
      Cc: stable@vger.kernel.org
      Reported-by: default avatarWenqing Liu <wenqingliu0120@gmail.com>
      Signed-off-by: default avatarChao Yu <chao@kernel.org>
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
      [delete f2fs_err() call as it's not in older kernels - gregkh]
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f9dfa44b
    • Ard Biesheuvel's avatar
      ARM: 9169/1: entry: fix Thumb2 bug in iWMMXt exception handling · 5cf8d9c6
      Ard Biesheuvel authored
      commit 8536a5ef upstream.
      
      The Thumb2 version of the FP exception handling entry code treats the
      register holding the CP number (R8) differently, resulting in the iWMMXT
      CP number check to be incorrect.
      
      Fix this by unifying the ARM and Thumb2 code paths, and switch the
      order of the additions of the TI_USED_CP offset and the shifted CP
      index.
      
      Cc: <stable@vger.kernel.org>
      Fixes: b86040a5
      
       ("Thumb-2: Implementation of the unified start-up and exceptions code")
      Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
      Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5cf8d9c6
    • Fabien Dessenne's avatar
      pinctrl: stm32: consider the GPIO offset to expose all the GPIO lines · a30a4d51
      Fabien Dessenne authored
      commit b67210cc upstream.
      
      Consider the GPIO controller offset (from "gpio-ranges") to compute the
      maximum GPIO line number.
      This fixes an issue where gpio-ranges uses a non-null offset.
        e.g.: gpio-ranges = <&pinctrl 6 86 10>
              In that case the last valid GPIO line is not 9 but 15 (6 + 10 - 1)
      
      Cc: stable@vger.kernel.org
      Fixes: 67e2996f
      
       ("pinctrl: stm32: fix the reported number of GPIO lines per bank")
      Reported-by: default avatarChristoph Fritz <chf.fritz@googlemail.com>
      Signed-off-by: default avatarFabien Dessenne <fabien.dessenne@foss.st.com>
      Link: https://lore.kernel.org/r/20211215095808.621716-1-fabien.dessenne@foss.st.com
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a30a4d51
    • Andrew Cooper's avatar
      x86/pkey: Fix undefined behaviour with PKRU_WD_BIT · 94cc1e83
      Andrew Cooper authored
      commit 57690554 upstream.
      
      Both __pkru_allows_write() and arch_set_user_pkey_access() shift
      PKRU_WD_BIT (a signed constant) by up to 30 bits, hitting the
      sign bit.
      
      Use unsigned constants instead.
      
      Clearly pkey 15 has not been used in combination with UBSAN yet.
      
      Noticed by code inspection only.  I can't actually provoke the
      compiler into generating incorrect logic as far as this shift is
      concerned.
      
      [
        dhansen: add stable@ tag, plus minor changelog massaging,
      
                 For anyone doing backports, these #defines were in
      	   arch/x86/include/asm/pgtable.h before 784a4661.
      ]
      
      Fixes: 33a709b2
      
       ("mm/gup, x86/mm/pkeys: Check VMAs and PTEs for protection keys")
      Signed-off-by: default avatarAndrew Cooper <andrew.cooper3@citrix.com>
      Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
      Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
      Cc: stable@vger.kernel.org
      Link: https://lkml.kernel.org/r/20211216000856.4480-1-andrew.cooper3@citrix.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      94cc1e83
    • John David Anglin's avatar
      parisc: Correct completer in lws start · ceeeb3a1
      John David Anglin authored
      commit 8f66fce0
      
       upstream.
      
      The completer in the "or,ev %r1,%r30,%r30" instruction is reversed, so we are
      not clipping the LWS number when we are called from a 32-bit process (W=0).
      We need to nulify the following depdi instruction when the least-significant
      bit of %r30 is 1.
      
      If the %r20 register is not clipped, a user process could perform a LWS call
      that would branch to an undefined location in the kernel and potentially crash
      the machine.
      
      Signed-off-by: default avatarJohn David Anglin <dave.anglin@bell.net>
      Cc: stable@vger.kernel.org # 4.19+
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ceeeb3a1
    • Thadeu Lima de Souza Cascardo's avatar
      ipmi: fix initialization when workqueue allocation fails · eb84855d
      Thadeu Lima de Souza Cascardo authored
      commit 75d70d76 upstream.
      
      If the workqueue allocation fails, the driver is marked as not initialized,
      and timer and panic_notifier will be left registered.
      
      Instead of removing those when workqueue allocation fails, do the workqueue
      initialization before doing it, and cleanup srcu_struct if it fails.
      
      Fixes: 1d49eb91
      
       ("ipmi: Move remove_work to dedicated workqueue")
      Signed-off-by: default avatarThadeu Lima de Souza Cascardo <cascardo@canonical.com>
      Cc: Corey Minyard <cminyard@mvista.com>
      Cc: Ioanna Alifieraki <ioanna-maria.alifieraki@canonical.com>
      Cc: stable@vger.kernel.org
      Message-Id: <20211217154410.1228673-2-cascardo@canonical.com>
      Signed-off-by: default avatarCorey Minyard <cminyard@mvista.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      eb84855d
    • Thadeu Lima de Souza Cascardo's avatar
      ipmi: bail out if init_srcu_struct fails · db0d9049
      Thadeu Lima de Souza Cascardo authored
      commit 2b5160b1 upstream.
      
      In case, init_srcu_struct fails (because of memory allocation failure), we
      might proceed with the driver initialization despite srcu_struct not being
      entirely initialized.
      
      Fixes: 913a89f0
      
       ("ipmi: Don't initialize anything in the core until something uses it")
      Signed-off-by: default avatarThadeu Lima de Souza Cascardo <cascardo@canonical.com>
      Cc: Corey Minyard <cminyard@mvista.com>
      Cc: stable@vger.kernel.org
      Message-Id: <20211217154410.1228673-1-cascardo@canonical.com>
      Signed-off-by: default avatarCorey Minyard <cminyard@mvista.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      db0d9049
    • José Expósito's avatar
      Input: atmel_mxt_ts - fix double free in mxt_read_info_block · f29fe79e
      José Expósito authored
      commit 12f247ab upstream.
      
      The "id_buf" buffer is stored in "data->raw_info_block" and freed by
      "mxt_free_object_table" in case of error.
      
      Return instead of jumping to avoid a double free.
      
      Addresses-Coverity-ID: 1474582 ("Double free")
      Fixes: 068bdb67
      
       ("Input: atmel_mxt_ts - fix the firmware update")
      Signed-off-by: default avatarJosé Expósito <jose.exposito89@gmail.com>
      Link: https://lore.kernel.org/r/20211212194257.68879-1-jose.exposito89@gmail.com
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f29fe79e
    • Colin Ian King's avatar
      ALSA: drivers: opl3: Fix incorrect use of vp->state · 9f8daff5
      Colin Ian King authored
      commit 2dee54b2
      
       upstream.
      
      Static analysis with scan-build has found an assignment to vp2 that is
      never used. It seems that the check on vp->state > 0 should be actually
      on vp2->state instead. Fix this.
      
      This dates back to 2002, I found the offending commit from the git
      history git://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git,
      commit 91e39521bbf6 ("[PATCH] ALSA patch for 2.5.4")
      
      Signed-off-by: default avatarColin Ian King <colin.i.king@gmail.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20211212172025.470367-1-colin.i.king@gmail.com
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9f8daff5
    • Xiaoke Wang's avatar
      ALSA: jack: Check the return value of kstrdup() · 86e1ad26
      Xiaoke Wang authored
      commit c01c1db1
      
       upstream.
      
      kstrdup() can return NULL, it is better to check the return value of it.
      
      Signed-off-by: default avatarXiaoke Wang <xkernel.wang@foxmail.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/tencent_094816F3522E0DC704056C789352EBBF0606@qq.com
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      86e1ad26
    • Guenter Roeck's avatar
      hwmon: (lm90) Fix usage of CONFIG2 register in detect function · afeaba71
      Guenter Roeck authored
      [ Upstream commit fce15c45 ]
      
      The detect function had a comment "Make compiler happy" when id did not
      read the second configuration register. As it turns out, the code was
      checking the contents of this register for manufacturer ID 0xA1 (NXP
      Semiconductor/Philips), but never actually read the register. So it
      wasn't surprising that the compiler complained, and it indeed had a point.
      Fix the code to read the register contents for manufacturer ID 0xa1.
      
      At the same time, the code was reading the register for manufacturer ID
      0x41 (Analog Devices), but it was not using the results. In effect it was
      just checking if reading the register returned an error. That doesn't
      really add much if any value, so stop doing that.
      
      Fixes: f90be42f
      
       ("hwmon: (lm90) Refactor reading of config2 register")
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      afeaba71
    • 蒋家盛's avatar
      sfc: falcon: Check null pointer of rx_queue->page_ring · 42710461
      蒋家盛 authored
      [ Upstream commit 9b8bdd1e ]
      
      Because of the possible failure of the kcalloc, it should be better to
      set rx_queue->page_ptr_mask to 0 when it happens in order to maintain
      the consistency.
      
      Fixes: 5a6681e2
      
       ("sfc: separate out SFC4000 ("Falcon") support into new sfc-falcon driver")
      Signed-off-by: default avatarJiasheng Jiang <jiasheng@iscas.ac.cn>
      Acked-by: default avatarMartin Habets <habetsm.xilinx@gmail.com>
      Link: https://lore.kernel.org/r/20211220140344.978408-1-jiasheng@iscas.ac.cn
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      42710461
    • 蒋家盛's avatar
      drivers: net: smc911x: Check for error irq · 01b0153b
      蒋家盛 authored
      [ Upstream commit cb93b3e1 ]
      
      Because platform_get_irq() could fail and return error irq.
      Therefore, it might be better to check it if order to avoid the use of
      error irq.
      
      Fixes: ae150435
      
       ("smsc: Move the SMC (SMSC) drivers")
      Signed-off-by: default avatarJiasheng Jiang <jiasheng@iscas.ac.cn>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      01b0153b
    • 蒋家盛's avatar
      fjes: Check for error irq · dddc12cb
      蒋家盛 authored
      [ Upstream commit db6d6afe ]
      
      I find that platform_get_irq() will not always succeed.
      It will return error irq in case of the failure.
      Therefore, it might be better to check it if order to avoid the use of
      error irq.
      
      Fixes: 658d439b
      
       ("fjes: Introduce FUJITSU Extended Socket Network Device driver")
      Signed-off-by: default avatarJiasheng Jiang <jiasheng@iscas.ac.cn>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      dddc12cb
    • Fernando Fernandez Mancera's avatar
      bonding: fix ad_actor_system option setting to default · 4e459149
      Fernando Fernandez Mancera authored
      [ Upstream commit 1c15b05b ]
      
      When 802.3ad bond mode is configured the ad_actor_system option is set to
      "00:00:00:00:00:00". But when trying to set the all-zeroes MAC as actors'
      system address it was failing with EINVAL.
      
      An all-zeroes ethernet address is valid, only multicast addresses are not
      valid values.
      
      Fixes: 171a42c3
      
       ("bonding: add netlink support for sys prio, actor sys mac, and port key")
      Signed-off-by: default avatarFernando Fernandez Mancera <ffmancera@riseup.net>
      Acked-by: default avatarJay Vosburgh <jay.vosburgh@canonical.com>
      Link: https://lore.kernel.org/r/20211221111345.2462-1-ffmancera@riseup.net
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      4e459149
    • Wu Bo's avatar
      ipmi: Fix UAF when uninstall ipmi_si and ipmi_msghandler module · 925229d5
      Wu Bo authored
      [ Upstream commit ffb76a86 ]
      
      Hi,
      
      When testing install and uninstall of ipmi_si.ko and ipmi_msghandler.ko,
      the system crashed.
      
      The log as follows:
      [  141.087026] BUG: unable to handle kernel paging request at ffffffffc09b3a5a
      [  141.087241] PGD 8fe4c0d067 P4D 8fe4c0d067 PUD 8fe4c0f067 PMD 103ad89067 PTE 0
      [  141.087464] Oops: 0010 [#1] SMP NOPTI
      [  141.087580] CPU: 67 PID: 668 Comm: kworker/67:1 Kdump: loaded Not tainted 4.18.0.x86_64 #47
      [  141.088009] Workqueue: events 0xffffffffc09b3a40
      [  141.088009] RIP: 0010:0xffffffffc09b3a5a
      [  141.088009] Code: Bad RIP value.
      [  141.088009] RSP: 0018:ffffb9094e2c3e88 EFLAGS: 00010246
      [  141.088009] RAX: 0000000000000000 RBX: ffff9abfdb1f04a0 RCX: 0000000000000000
      [  141.088009] RDX: 0000000000000000 RSI: 0000000000000246 RDI: 0000000000000246
      [  141.088009] RBP: 0000000000000000 R08: ffff9abfffee3cb8 R09: 00000000000002e1
      [  141.088009] R10: ffffb9094cb73d90 R11: 00000000000f4240 R12: ffff9abfffee8700
      [  141.088009] R13: 0000000000000000 R14: ffff9abfdb1f04a0 R15: ffff9abfdb1f04a8
      [  141.088009] FS:  0000000000000000(0000) GS:ffff9abfffec0000(0000) knlGS:0000000000000000
      [  141.088009] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  141.088009] CR2: ffffffffc09b3a30 CR3: 0000008fe4c0a001 CR4: 00000000007606e0
      [  141.088009] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [  141.088009] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [  141.088009] PKRU: 55555554
      [  141.088009] Call Trace:
      [  141.088009]  ? process_one_work+0x195/0x390
      [  141.088009]  ? worker_thread+0x30/0x390
      [  141.088009]  ? process_one_work+0x390/0x390
      [  141.088009]  ? kthread+0x10d/0x130
      [  141.088009]  ? kthread_flush_work_fn+0x10/0x10
      [  141.088009]  ? ret_from_fork+0x35/0x40] BUG: unable to handle kernel paging request at ffffffffc0b28a5a
      [  200.223240] PGD 97fe00d067 P4D 97fe00d067 PUD 97fe00f067 PMD a580cbf067 PTE 0
      [  200.223464] Oops: 0010 [#1] SMP NOPTI
      [  200.223579] CPU: 63 PID: 664 Comm: kworker/63:1 Kdump: loaded Not tainted 4.18.0.x86_64 #46
      [  200.224008] Workqueue: events 0xffffffffc0b28a40
      [  200.224008] RIP: 0010:0xffffffffc0b28a5a
      [  200.224008] Code: Bad RIP value.
      [  200.224008] RSP: 0018:ffffbf3c8e2a3e88 EFLAGS: 00010246
      [  200.224008] RAX: 0000000000000000 RBX: ffffa0799ad6bca0 RCX: 0000000000000000
      [  200.224008] RDX: 0000000000000000 RSI: 0000000000000246 RDI: 0000000000000246
      [  200.224008] RBP: 0000000000000000 R08: ffff9fe43fde3cb8 R09: 00000000000000d5
      [  200.224008] R10: ffffbf3c8cb53d90 R11: 00000000000f4240 R12: ffff9fe43fde8700
      [  200.224008] R13: 0000000000000000 R14: ffffa0799ad6bca0 R15: ffffa0799ad6bca8
      [  200.224008] FS:  0000000000000000(0000) GS:ffff9fe43fdc0000(0000) knlGS:0000000000000000
      [  200.224008] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  200.224008] CR2: ffffffffc0b28a30 CR3: 00000097fe00a002 CR4: 00000000007606e0
      [  200.224008] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [  200.224008] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [  200.224008] PKRU: 55555554
      [  200.224008] Call Trace:
      [  200.224008]  ? process_one_work+0x195/0x390
      [  200.224008]  ? worker_thread+0x30/0x390
      [  200.224008]  ? process_one_work+0x390/0x390
      [  200.224008]  ? kthread+0x10d/0x130
      [  200.224008]  ? kthread_flush_work_fn+0x10/0x10
      [  200.224008]  ? ret_from_fork+0x35/0x40
      [  200.224008] kernel fault(0x1) notification starting on CPU 63
      [  200.224008] kernel fault(0x1) notification finished on CPU 63
      [  200.224008] CR2: ffffffffc0b28a5a
      [  200.224008] ---[ end trace c82a412d93f57412 ]---
      
      The reason is as follows:
      T1: rmmod ipmi_si.
          ->ipmi_unregister_smi()
              -> ipmi_bmc_unregister()
                  -> __ipmi_bmc_unregister()
                      -> kref_put(&bmc->usecount, cleanup_bmc_device);
                          -> schedule_work(&bmc->remove_work);
      
      T2: rmmod ipmi_msghandler.
          ipmi_msghander module uninstalled, and the module space
          will be freed.
      
      T3: bmc->remove_work doing cleanup the bmc resource.
          -> cleanup_bmc_work()
              -> platform_device_unregister(&bmc->pdev);
                  -> platform_device_del(pdev);
                      -> device_del(&pdev->dev);
                          -> kobject_uevent(&dev->kobj, KOBJ_REMOVE);
                              -> kobject_uevent_env()
                                  -> dev_uevent()
                                      -> if (dev->type && dev->type->name)
      
         'dev->type'(bmc_device_type) pointer space has freed when uninstall
          ipmi_msghander module, 'dev->type->name' cause the system crash.
      
      drivers/char/ipmi/ipmi_msghandler.c:
      2820 static const struct device_type bmc_device_type = {
      2821         .groups         = bmc_dev_attr_groups,
      2822 };
      
      Steps to reproduce:
      Add a time delay in cleanup_bmc_work() function,
      and uninstall ipmi_si and ipmi_msghandler module.
      
      2910 static void cleanup_bmc_work(struct work_struct *work)
      2911 {
      2912         struct bmc_device *bmc = container_of(work, struct bmc_device,
      2913                                               remove_work);
      2914         int id = bmc->pdev.id; /* Unregister overwrites id */
      2915
      2916         msleep(3000);   <---
      2917         platform_device_unregister(&bmc->pdev);
      2918         ida_simple_remove(&ipmi_bmc_ida, id);
      2919 }
      
      Use 'remove_work_wq' instead of 'system_wq' to solve this issues.
      
      Fixes: b2cfd8ab
      
       ("ipmi: Rework device id and guid handling to catch changing BMCs")
      Signed-off-by: default avatarWu Bo <wubo40@huawei.com>
      Message-Id: <1640070034-56671-1-git-send-email-wubo40@huawei.com>
      Signed-off-by: default avatarCorey Minyard <cminyard@mvista.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      925229d5
    • Willem de Bruijn's avatar
      net: skip virtio_net_hdr_set_proto if protocol already set · 5fefa884
      Willem de Bruijn authored
      [ Upstream commit 1ed1d592 ]
      
      virtio_net_hdr_set_proto infers skb->protocol from the virtio_net_hdr
      gso_type, to avoid packets getting dropped for lack of a proto type.
      
      Its protocol choice is a guess, especially in the case of UFO, where
      the single VIRTIO_NET_HDR_GSO_UDP label covers both UFOv4 and UFOv6.
      
      Skip this best effort if the field is already initialized. Whether
      explicitly from userspace, or implicitly based on an earlier call to
      dev_parse_header_protocol (which is more robust, but was introduced
      after this patch).
      
      Fixes: 9d2f67e4
      
       ("net/packet: fix packet drop as of virtio gso")
      Signed-off-by: default avatarWillem de Bruijn <willemb@google.com>
      Link: https://lore.kernel.org/r/20211220145027.2784293-1-willemdebruijn.kernel@gmail.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5fefa884
    • Willem de Bruijn's avatar
      net: accept UFOv6 packages in virtio_net_hdr_to_skb · 9c6159ee
      Willem de Bruijn authored
      [ Upstream commit 7e5cced9 ]
      
      Skb with skb->protocol 0 at the time of virtio_net_hdr_to_skb may have
      a protocol inferred from virtio_net_hdr with virtio_net_hdr_set_proto.
      
      Unlike TCP, UDP does not have separate types for IPv4 and IPv6. Type
      VIRTIO_NET_HDR_GSO_UDP is guessed to be IPv4/UDP. As of the below
      commit, UFOv6 packets are dropped due to not matching the protocol as
      obtained from dev_parse_header_protocol.
      
      Invert the test to take that L2 protocol field as starting point and
      pass both UFOv4 and UFOv6 for VIRTIO_NET_HDR_GSO_UDP.
      
      Fixes: 924a9bc3
      
       ("net: check if protocol extracted by virtio_net_hdr_set_proto is correct")
      Link: https://lore.kernel.org/netdev/CABcq3pG9GRCYqFDBAJ48H1vpnnX=41u+MhQnayF1ztLH4WX0Fw@mail.gmail.com/
      Reported-by: default avatarAndrew Melnichenko <andrew@daynix.com>
      Signed-off-by: default avatarWillem de Bruijn <willemb@google.com>
      Link: https://lore.kernel.org/r/20211220144901.2784030-1-willemdebruijn.kernel@gmail.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9c6159ee
    • 蒋家盛's avatar
      qlcnic: potential dereference null pointer of rx_queue->page_ring · f840dfd0
      蒋家盛 authored
      [ Upstream commit 60ec7fcf ]
      
      The return value of kcalloc() needs to be checked.
      To avoid dereference of null pointer in case of the failure of alloc.
      Therefore, it might be better to change the return type of
      qlcnic_sriov_alloc_vlans() and return -ENOMEM when alloc fails and
      return 0 the others.
      Also, qlcnic_sriov_set_guest_vlan_mode() and __qlcnic_pci_sriov_enable()
      should deal with the return value of qlcnic_sriov_alloc_vlans().
      
      Fixes: 154d0c81
      
       ("qlcnic: VLAN enhancement for 84XX adapters")
      Signed-off-by: default avatarJiasheng Jiang <jiasheng@iscas.ac.cn>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f840dfd0
    • Ignacy Gawędzki's avatar
      netfilter: fix regression in looped (broad|multi)cast's MAC handling · 2ba90f19
      Ignacy Gawędzki authored
      [ Upstream commit ebb966d3 ]
      
      In commit 5648b5e1 ("netfilter: nfnetlink_queue: fix OOB when mac
      header was cleared"), the test for non-empty MAC header introduced in
      commit 2c38de4c ("netfilter: fix looped (broad|multi)cast's MAC
      handling") has been replaced with a test for a set MAC header.
      
      This breaks the case when the MAC header has been reset (using
      skb_reset_mac_header), as is the case with looped-back multicast
      packets.  As a result, the packets ending up in NFQUEUE get a bogus
      hwaddr interpreted from the first bytes of the IP header.
      
      This patch adds a test for a non-empty MAC header in addition to the
      test for a set MAC header.  The same two tests are also implemented in
      nfnetlink_log.c, where the initial code of commit 2c38de4c
      ("netfilter: fix looped (broad|multi)cast's MAC handling") has not been
      touched, but where supposedly the same situation may happen.
      
      Fixes: 5648b5e1
      
       ("netfilter: nfnetlink_queue: fix OOB when mac header was cleared")
      Signed-off-by: default avatarIgnacy Gawędzki <ignacy.gawedzki@green-communications.fr>
      Reviewed-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2ba90f19
    • José Expósito's avatar
      IB/qib: Fix memory leak in qib_user_sdma_queue_pkts() · 0aaec9c5
      José Expósito authored
      [ Upstream commit bee90911 ]
      
      The wrong goto label was used for the error case and missed cleanup of the
      pkt allocation.
      
      Fixes: d39bf40e
      
       ("IB/qib: Protect from buffer overflow in struct qib_user_sdma_pkt fields")
      Link: https://lore.kernel.org/r/20211208175238.29983-1-jose.exposito89@gmail.com
      Addresses-Coverity-ID: 1493352 ("Resource leak")
      Signed-off-by: default avatarJosé Expósito <jose.exposito89@gmail.com>
      Acked-by: default avatarMike Marciniszyn <mike.marciniszyn@cornelisnetworks.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0aaec9c5
    • Dongliang Mu's avatar
      spi: change clk_disable_unprepare to clk_unprepare · ab381351
      Dongliang Mu authored
      [ Upstream commit db6689b6 ]
      
      The corresponding API for clk_prepare is clk_unprepare, other than
      clk_disable_unprepare.
      
      Fix this by changing clk_disable_unprepare to clk_unprepare.
      
      Fixes: 5762ab71
      
       ("spi: Add support for Armada 3700 SPI Controller")
      Signed-off-by: default avatarDongliang Mu <mudongliangabcd@gmail.com>
      Link: https://lore.kernel.org/r/20211206101931.2816597-1-mudongliangabcd@gmail.com
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ab381351
    • Robert Marko's avatar
      arm64: dts: allwinner: orangepi-zero-plus: fix PHY mode · 8044451a
      Robert Marko authored
      [ Upstream commit 08d2061f ]
      
      Orange Pi Zero Plus uses a Realtek RTL8211E RGMII Gigabit PHY, but its
      currently set to plain RGMII mode meaning that it doesn't introduce
      delays.
      
      With this setup, TX packets are completely lost and changing the mode to
      RGMII-ID so the PHY will add delays internally fixes the issue.
      
      Fixes: a7affb13
      
       ("arm64: allwinner: H5: Add Xunlong Orange Pi Zero Plus")
      Acked-by: default avatarChen-Yu Tsai <wens@csie.org>
      Tested-by: default avatarRon Goossens <rgoossens@gmail.com>
      Tested-by: default avatarSamuel Holland <samuel@sholland.org>
      Signed-off-by: default avatarRobert Marko <robert.marko@sartura.hr>
      Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
      Link: https://lore.kernel.org/r/20211117140222.43692-1-robert.marko@sartura.hr
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8044451a
    • Benjamin Tissoires's avatar
      HID: holtek: fix mouse probing · 6ccda28d
      Benjamin Tissoires authored
      commit 93a2207c upstream.
      
      An overlook from the previous commit: we don't even parse or start the
      device, meaning that the device is not presented to user space.
      
      Fixes: 93020953
      
       ("HID: check for valid USB device for many HID drivers")
      Cc: stable@vger.kernel.org
      Link: https://bugs.archlinux.org/task/73048
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=215341
      Link: https://lore.kernel.org/r/e4efbf13-bd8d-0370-629b-6c80c0044b15@leemhuis.info/
      Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6ccda28d
    • Paolo Valente's avatar
      block, bfq: fix use after free in bfq_bfqq_expire · 57f93eaf
      Paolo Valente authored
      commit eed47d19 upstream.
      
      The function bfq_bfqq_expire() invokes the function
      __bfq_bfqq_expire(), and the latter may free the in-service bfq-queue.
      If this happens, then no other instruction of bfq_bfqq_expire() must
      be executed, or a use-after-free will occur.
      
      Basing on the assumption that __bfq_bfqq_expire() invokes
      bfq_put_queue() on the in-service bfq-queue exactly once, the queue is
      assumed to be freed if its refcounter is equal to one right before
      invoking __bfq_bfqq_expire().
      
      But, since commit 9dee8b3b ("block, bfq: fix queue removal from
      weights tree") this assumption is false. __bfq_bfqq_expire() may also
      invoke bfq_weights_tree_remove() and, since commit 9dee8b3b
      ("block, bfq: fix queue removal from weights tree"), also
      the latter function may invoke bfq_put_queue(). So __bfq_bfqq_expire()
      may invoke bfq_put_queue() twice, and this is the actual case where
      the in-service queue may happen to be freed.
      
      To address this issue, this commit moves the check on the refcounter
      of the queue right around the last bfq_put_queue() that may be invoked
      on the queue.
      
      Fixes: 9dee8b3b
      
       ("block, bfq: fix queue removal from weights tree")
      Reported-by: default avatarDmitrii Tcvetkov <demfloro@demfloro.ru>
      Reported-by: default avatarDouglas Anderson <dianders@chromium.org>
      Tested-by: default avatarDmitrii Tcvetkov <demfloro@demfloro.ru>
      Tested-by: default avatarDouglas Anderson <dianders@chromium.org>
      Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      57f93eaf
    • Paolo Valente's avatar
      block, bfq: fix queue removal from weights tree · 99ada244
      Paolo Valente authored
      commit 9dee8b3b
      
       upstream.
      
      bfq maintains an ordered list, through a red-black tree, of unique
      weights of active bfq_queues. This list is used to detect whether there
      are active queues with differentiated weights. The weight of a queue is
      removed from the list when both the following two conditions become
      true:
      
      (1) the bfq_queue is flagged as inactive
      (2) the has no in-flight request any longer;
      
      Unfortunately, in the rare cases where condition (2) becomes true before
      condition (1), the removal fails, because the function to remove the
      weight of the queue (bfq_weights_tree_remove) is rightly invoked in the
      path that deactivates the bfq_queue, but mistakenly invoked *before* the
      function that actually performs the deactivation (bfq_deactivate_bfqq).
      
      This commits moves the invocation of bfq_weights_tree_remove for
      condition (1) to after bfq_deactivate_bfqq. As a consequence of this
      move, it is necessary to add a further reference to the queue when the
      weight of a queue is added, because the queue might otherwise be freed
      before bfq_weights_tree_remove is invoked. This commit adds this
      reference and makes all related modifications.
      
      Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      99ada244
    • Paolo Valente's avatar
      block, bfq: fix decrement of num_active_groups · 7d0efcc6
      Paolo Valente authored
      commit ba7aeae5 upstream.
      
      Since commit '2d29c9f8 ("block, bfq: improve asymmetric scenarios
      detection")', if there are process groups with I/O requests waiting for
      completion, then BFQ tags the scenario as 'asymmetric'. This detection
      is needed for preserving service guarantees (for details, see comments
      on the computation * of the variable asymmetric_scenario in the
      function bfq_better_to_idle).
      
      Unfortunately, commit '2d29c9f8 ("block, bfq: improve asymmetric
      scenarios detection")' contains an error exactly in the updating of
      the number of groups with I/O requests waiting for completion: if a
      group has more than one descendant process, then the above number of
      groups, which is renamed from num_active_groups to a more appropriate
      num_groups_with_pending_reqs by this commit, may happen to be wrongly
      decremented multiple times, namely every time one of the descendant
      processes gets all its pending I/O requests completed.
      
      A correct, complete solution should work as follows. Consider a group
      that is inactive, i.e., that has no descendant process with pending
      I/O inside BFQ queues. Then suppose that num_groups_with_pending_reqs
      is still accounting for this group, because the group still has some
      descendant process with some I/O request still in
      flight. num_groups_with_pending_reqs should be decremented when the
      in-flight request of the last descendant process is finally completed
      (assuming that nothing else has changed for the group in the meantime,
      in terms of composition of the group and active/inactive state of
      child groups and processes). To accomplish this, an additional
      pending-request counter must be added to entities, and must be
      updated correctly.
      
      To avoid this additional field and operations, this commit resorts to
      the following tradeoff between simplicity and accuracy: for an
      inactive group that is still counted in num_groups_with_pending_reqs,
      this commit decrements num_groups_with_pending_reqs when the first
      descendant process of the group remains with no request waiting for
      completion.
      
      This simplified scheme provides a fix to the unbalanced decrements
      introduced by 2d29c9f8. Since this error was also caused by lack
      of comments on this non-trivial issue, this commit also adds related
      comments.
      
      Fixes: 2d29c9f8
      
       ("block, bfq: improve asymmetric scenarios detection")
      Reported-by: default avatarSteven Barrett <steven@liquorix.net>
      Tested-by: default avatarSteven Barrett <steven@liquorix.net>
      Tested-by: default avatarLucjan Lucjanov <lucjan.lucjanov@gmail.com>
      Reviewed-by: default avatarFederico Motta <federico@willer.it>
      Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7d0efcc6
    • Federico Motta's avatar
      block, bfq: fix asymmetric scenarios detection · e867d620
      Federico Motta authored
      commit 98fa7a3e upstream.
      
      Since commit 2d29c9f8 ("block, bfq: improve asymmetric scenarios
      detection"), a scenario is defined asymmetric when one of the
      following conditions holds:
      - active bfq_queues have different weights
      - one or more group of entities (bfq_queue or other groups of entities)
        are active
      bfq grants fairness and low latency also in such asymmetric scenarios,
      by plugging the dispatching of I/O if the bfq_queue in service happens
      to be temporarily idle. This plugging may lower throughput, so it is
      important to do it only when strictly needed.
      
      By mistake, in commit '2d29c9f8' ("block, bfq: improve asymmetric
      scenarios detection") the num_active_groups counter was firstly
      incremented and subsequently decremented at any entity (group or
      bfq_queue) weight change.
      
      This is useless, because only transitions from active to inactive and
      vice versa matter for that counter. Unfortunately this is also
      incorrect in the following case: the entity at issue is a bfq_queue
      and it is under weight raising. In fact in this case there is a
      spurious increment of the num_active_groups counter.
      
      This spurious increment may cause scenarios to be wrongly detected as
      asymmetric, thus causing useless plugging and loss of throughput.
      
      This commit fixes this issue by simply removing the above useless and
      wrong increments and decrements.
      
      Fixes: 2d29c9f8
      
       ("block, bfq: improve asymmetric scenarios detection")
      Tested-by: default avatarOleksandr Natalenko <oleksandr@natalenko.name>
      Signed-off-by: default avatarFederico Motta <federico@willer.it>
      Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e867d620
    • Federico Motta's avatar
      block, bfq: improve asymmetric scenarios detection · e4cd53c6
      Federico Motta authored
      commit 2d29c9f8
      
       upstream.
      
      bfq defines as asymmetric a scenario where an active entity, say E
      (representing either a single bfq_queue or a group of other entities),
      has a higher weight than some other entities.  If the entity E does sync
      I/O in such a scenario, then bfq plugs the dispatch of the I/O of the
      other entities in the following situation: E is in service but
      temporarily has no pending I/O request.  In fact, without this plugging,
      all the times that E stops being temporarily idle, it may find the
      internal queues of the storage device already filled with an
      out-of-control number of extra requests, from other entities. So E may
      have to wait for the service of these extra requests, before finally
      having its own requests served. This may easily break service
      guarantees, with E getting less than its fair share of the device
      throughput.  Usually, the end result is that E gets the same fraction of
      the throughput as the other entities, instead of getting more, according
      to its higher weight.
      
      Yet there are two other more subtle cases where E, even if its weight is
      actually equal to or even lower than the weight of any other active
      entities, may get less than its fair share of the throughput in case the
      above I/O plugging is not performed:
      1. other entities issue larger requests than E;
      2. other entities contain more active child entities than E (or in
         general tend to have more backlog than E).
      
      In the first case, other entities may get more service than E because
      they get larger requests, than those of E, served during the temporary
      idle periods of E.  In the second case, other entities get more service
      because, by having many child entities, they have many requests ready
      for dispatching while E is temporarily idle.
      
      This commit addresses this issue by extending the definition of
      asymmetric scenario: a scenario is asymmetric when
      - active entities representing bfq_queues have differentiated weights,
        as in the original definition
      or (inclusive)
      - one or more entities representing groups of entities are active.
      
      This broader definition makes sure that I/O plugging will be performed
      in all the above cases, provided that there is at least one active
      group.  Of course, this definition is very coarse, so it will trigger
      I/O plugging also in cases where it is not needed, such as, e.g.,
      multiple active entities with just one child each, and all with the same
      I/O-request size.  The reason for this coarse definition is just that a
      finer-grained definition would be rather heavy to compute.
      
      On the opposite end, even this new definition does not trigger I/O
      plugging in all cases where there is no active group, and all bfq_queues
      have the same weight.  So, in these cases some unfairness may occur if
      there are asymmetries in I/O-request sizes.  We made this choice because
      I/O plugging may lower throughput, and probably a user that has not
      created any group cares more about throughput than about perfect
      fairness.  At any rate, as for possible applications that may care about
      service guarantees, bfq already guarantees a high responsiveness and a
      low latency to soft real-time applications automatically.
      
      Signed-off-by: default avatarFederico Motta <federico@willer.it>
      Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e4cd53c6
    • Greg Jesionowski's avatar
      net: usb: lan78xx: add Allied Telesis AT29M2-AF · 7a4cd349
      Greg Jesionowski authored
      commit ef8a0f6e
      
       upstream.
      
      This adds the vendor and product IDs for the AT29M2-AF which is a
      lan7801-based device.
      
      Signed-off-by: default avatarGreg Jesionowski <jesionowskigreg@gmail.com>
      Link: https://lore.kernel.org/r/20211214221027.305784-1-jesionowskigreg@gmail.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7a4cd349
  2. Dec 22, 2021