Skip to content
  1. Feb 09, 2022
    • Maor Gottlieb's avatar
      RDMA/cma: Use correct address when leaving multicast group · 7715682f
      Maor Gottlieb authored
      commit d9e410eb upstream.
      
      In RoCE we should use cma_iboe_set_mgid() and not cma_set_mgid to generate
      the mgid, otherwise we will generate an IGMP for an incorrect address.
      
      Fixes: b5de0c60 ("RDMA/cma: Fix use after free race in roce multicast join")
      Link: https://lore.kernel.org/r/913bc6783fd7a95fe71ad9454e01653ee6fb4a9a.1642491047.git.leonro@nvidia.com
      
      
      Signed-off-by: default avatarMaor Gottlieb <maorg@nvidia.com>
      Signed-off-by: default avatarLeon Romanovsky <leonro@nvidia.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7715682f
    • James Morse's avatar
      KVM: arm64: Stop handle_exit() from handling HVC twice when an SError occurs · 0452c3dc
      James Morse authored
      
      
      commit 1229630a upstream.
      
      Prior to commit defe21f4 ("KVM: arm64: Move PC rollback on SError to
      HYP"), when an SError is synchronised due to another exception, KVM
      handles the SError first. If the guest survives, the instruction that
      triggered the original exception is re-exectued to handle the first
      exception. HVC is treated as a special case as the instruction wouldn't
      normally be re-exectued, as its not a trap.
      
      Commit defe21f4 didn't preserve the behaviour of the 'return 1'
      that skips the rest of handle_exit().
      
      Since commit defe21f4, KVM will try to handle the SError and the
      original exception at the same time. When the exception was an HVC,
      fixup_guest_exit() has already rolled back ELR_EL2, meaning if the
      guest has virtual SError masked, it will execute and handle the HVC
      twice.
      
      Restore the original behaviour.
      
      Fixes: defe21f4 ("KVM: arm64: Move PC rollback on SError to HYP")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarJames Morse <james.morse@arm.com>
      Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
      Link: https://lore.kernel.org/r/20220127122052.1584324-4-james.morse@arm.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0452c3dc
    • James Morse's avatar
      KVM: arm64: Avoid consuming a stale esr value when SError occur · e1e85274
      James Morse authored
      
      
      commit 1c71dbc8 upstream.
      
      When any exception other than an IRQ occurs, the CPU updates the ESR_EL2
      register with the exception syndrome. An SError may also become pending,
      and will be synchronised by KVM. KVM notes the exception type, and whether
      an SError was synchronised in exit_code.
      
      When an exception other than an IRQ occurs, fixup_guest_exit() updates
      vcpu->arch.fault.esr_el2 from the hardware register. When an SError was
      synchronised, the vcpu esr value is used to determine if the exception
      was due to an HVC. If so, ELR_EL2 is moved back one instruction. This
      is so that KVM can process the SError first, and re-execute the HVC if
      the guest survives the SError.
      
      But if an IRQ synchronises an SError, the vcpu's esr value is stale.
      If the previous non-IRQ exception was an HVC, KVM will corrupt ELR_EL2,
      causing an unrelated guest instruction to be executed twice.
      
      Check ARM_EXCEPTION_CODE() before messing with ELR_EL2, IRQs don't
      update this register so don't need to check.
      
      Fixes: defe21f4 ("KVM: arm64: Move PC rollback on SError to HYP")
      Cc: stable@vger.kernel.org
      Reported-by: default avatarSteven Price <steven.price@arm.com>
      Signed-off-by: default avatarJames Morse <james.morse@arm.com>
      Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
      Link: https://lore.kernel.org/r/20220127122052.1584324-3-james.morse@arm.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e1e85274
    • Guenter Roeck's avatar
      Revert "ASoC: mediatek: Check for error clk pointer" · aff6657f
      Guenter Roeck authored
      This reverts commit 38accfd8 which is
      commit 9de2b928 upstream
      
      With this patch in the tree, Chromebooks running the affected hardware
      no longer boot. Bisect points to this patch, and reverting it fixes
      the problem.
      
      An analysis of the code with this patch applied shows:
      
              ret = init_clks(pdev, clk);
              if (ret)
                      return ERR_PTR(ret);
      ...
                      for (j = 0; j < MAX_CLKS && data->clk_id[j]; j++) {
                              struct clk *c = clk[data->clk_id[j]];
      
                              if (IS_ERR(c)) {
                                      dev_err(&pdev->dev, "%s: clk unavailable\n",
                                              data->name);
                                      return ERR_CAST(c);
                              }
      
                              scpd->clk[j] = c;
                      }
      
      Not all clocks in the clk_names array have to be present. Only the clocks
      in the data->clk_id array are actually needed. The code already checks if
      the required clocks are available and bails out if not. The assumption that
      all clocks have to be present is wrong, and commit 9de2b928 needs to be
      reverted.
      
      Fixes: 9de2b928 ("ASoC: mediatek: Check for error clk pointer")
      Cc: Jiasheng Jiang <jiasheng@iscas.ac.cn>
      Cc: Mark Brown <broonie@kernel.org>
      Cc: James Liao <jamesjj.liao@mediatek.com>
      Cc: Kevin Hilman <khilman@baylibre.com>
      Cc: Matthias Brugger <matthias.bgg@gmail.com
      Cc: Frank Wunderlich <frank-w@public-files.de>
      Cc: Daniel Golle <daniel@makrotopia.org>
      Link: https://lore.kernel.org/lkml/20220205014755.699603-1-linux@roeck-us.net/
      
      
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      aff6657f
    • Paolo Abeni's avatar
      mptcp: fix msk traversal in mptcp_nl_cmd_set_flags() · 9908c759
      Paolo Abeni authored
      
      
      commit 8e9eacad upstream.
      
      The MPTCP endpoint list is under RCU protection, guarded by the
      pernet spinlock. mptcp_nl_cmd_set_flags() traverses the list
      without acquiring the spin-lock nor under the RCU critical section.
      
      This change addresses the issue performing the lookup and the endpoint
      update under the pernet spinlock.
      
      [The upstream commit had to handle a lookup_by_id variable that is only
       present in 5.17. This version of the patch removes that variable, so
       the __lookup_addr() function only handles the lookup as it is
       implemented in 5.15 and 5.16. It also removes one 'const' keyword to
       prevent a warning due to differing const-ness in the 5.17 version of
       addresses_equal().]
      
      Fixes: 0f9f696a ("mptcp: add set_flags command in PM netlink")
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9908c759
    • Helge Deller's avatar
      fbcon: Add option to enable legacy hardware acceleration · 778283dc
      Helge Deller authored
      
      
      commit a3f781a9 upstream.
      
      Add a config option CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION to
      enable bitblt and fillrect hardware acceleration in the framebuffer
      console. If disabled, such acceleration will not be used, even if it is
      supported by the graphics hardware driver.
      
      If you plan to use DRM as your main graphics output system, you should
      disable this option since it will prevent compiling in code which isn't
      used later on when DRM takes over.
      
      For all other configurations, e.g. if none of your graphic cards support
      DRM (yet), DRM isn't available for your architecture, or you can't be
      sure that the graphic card in the target system will support DRM, you
      most likely want to enable this option.
      
      In the non-accelerated case (e.g. when DRM is used), the inlined
      fb_scrollmode() function is hardcoded to return SCROLL_REDRAW and as such the
      compiler is able to optimize much unneccesary code away.
      
      In this v3 patch version I additionally changed the GETVYRES() and GETVXRES()
      macros to take a pointer to the fbcon_display struct. This fixes the build when
      console rotation is enabled and helps the compiler again to optimize out code.
      
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Cc: stable@vger.kernel.org # v5.10+
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220202135531.92183-4-deller@gmx.de
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      778283dc
    • Helge Deller's avatar
      Revert "fbcon: Disable accelerated scrolling" · 2a2629db
      Helge Deller authored
      
      
      commit 87ab9f6b upstream.
      
      This reverts commit 39aead83.
      
      Revert the first (of 2) commits which disabled scrolling acceleration in
      fbcon/fbdev.  It introduced a regression for fbdev-supported graphic cards
      because of the performance penalty by doing screen scrolling by software
      instead of using the existing graphic card 2D hardware acceleration.
      
      Console scrolling acceleration was disabled by dropping code which
      checked at runtime the driver hardware capabilities for the
      BINFO_HWACCEL_COPYAREA or FBINFO_HWACCEL_FILLRECT flags and if set, it
      enabled scrollmode SCROLL_MOVE which uses hardware acceleration to move
      screen contents.  After dropping those checks scrollmode was hard-wired
      to SCROLL_REDRAW instead, which forces all graphic cards to redraw every
      character at the new screen position when scrolling.
      
      This change effectively disabled all hardware-based scrolling acceleration for
      ALL drivers, because now all kind of 2D hardware acceleration (bitblt,
      fillrect) in the drivers isn't used any longer.
      
      The original commit message mentions that only 3 DRM drivers (nouveau, omapdrm
      and gma500) used hardware acceleration in the past and thus code for checking
      and using scrolling acceleration is obsolete.
      
      This statement is NOT TRUE, because beside the DRM drivers there are around 35
      other fbdev drivers which depend on fbdev/fbcon and still provide hardware
      acceleration for fbdev/fbcon.
      
      The original commit message also states that syzbot found lots of bugs in fbcon
      and thus it's "often the solution to just delete code and remove features".
      This is true, and the bugs - which actually affected all users of fbcon,
      including DRM - were fixed, or code was dropped like e.g. the support for
      software scrollback in vgacon (commit 973c096f).
      
      So to further analyze which bugs were found by syzbot, I've looked through all
      patches in drivers/video which were tagged with syzbot or syzkaller back to
      year 2005. The vast majority fixed the reported issues on a higher level, e.g.
      when screen is to be resized, or when font size is to be changed. The few ones
      which touched driver code fixed a real driver bug, e.g. by adding a check.
      
      But NONE of those patches touched code of either the SCROLL_MOVE or the
      SCROLL_REDRAW case.
      
      That means, there was no real reason why SCROLL_MOVE had to be ripped-out and
      just SCROLL_REDRAW had to be used instead. The only reason I can imagine so far
      was that SCROLL_MOVE wasn't used by DRM and as such it was assumed that it
      could go away. That argument completely missed the fact that SCROLL_MOVE is
      still heavily used by fbdev (non-DRM) drivers.
      
      Some people mention that using memcpy() instead of the hardware acceleration is
      pretty much the same speed. But that's not true, at least not for older graphic
      cards and machines where we see speed decreases by factor 10 and more and thus
      this change leads to console responsiveness way worse than before.
      
      That's why the original commit is to be reverted. By reverting we
      reintroduce hardware-based scrolling acceleration and fix the
      performance regression for fbdev drivers.
      
      There isn't any impact on DRM when reverting those patches.
      
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Acked-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Acked-by: default avatarSven Schnelle <svens@stackframe.org>
      Cc: stable@vger.kernel.org # v5.10+
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220202135531.92183-3-deller@gmx.de
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2a2629db
    • Mike Marciniszyn's avatar
      IB/hfi1: Fix AIP early init panic · a3dd4d26
      Mike Marciniszyn authored
      commit 5f8f55b9 upstream.
      
      An early failure in hfi1_ipoib_setup_rn() can lead to the following panic:
      
        BUG: unable to handle kernel NULL pointer dereference at 00000000000001b0
        PGD 0 P4D 0
        Oops: 0002 [#1] SMP NOPTI
        Workqueue: events work_for_cpu_fn
        RIP: 0010:try_to_grab_pending+0x2b/0x140
        Code: 1f 44 00 00 41 55 41 54 55 48 89 d5 53 48 89 fb 9c 58 0f 1f 44 00 00 48 89 c2 fa 66 0f 1f 44 00 00 48 89 55 00 40 84 f6 75 77 <f0> 48 0f ba 2b 00 72 09 31 c0 5b 5d 41 5c 41 5d c3 48 89 df e8 6c
        RSP: 0018:ffffb6b3cf7cfa48 EFLAGS: 00010046
        RAX: 0000000000000246 RBX: 00000000000001b0 RCX: 0000000000000000
        RDX: 0000000000000246 RSI: 0000000000000000 RDI: 00000000000001b0
        RBP: ffffb6b3cf7cfa70 R08: 0000000000000f09 R09: 0000000000000001
        R10: 0000000000000000 R11: 0000000000000001 R12: 0000000000000000
        R13: ffffb6b3cf7cfa90 R14: ffffffff9b2fbfc0 R15: ffff8a4fdf244690
        FS:  0000000000000000(0000) GS:ffff8a527f400000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 00000000000001b0 CR3: 00000017e2410003 CR4: 00000000007706f0
        DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
        DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
        PKRU: 55555554
        Call Trace:
         __cancel_work_timer+0x42/0x190
         ? dev_printk_emit+0x4e/0x70
         iowait_cancel_work+0x15/0x30 [hfi1]
         hfi1_ipoib_txreq_deinit+0x5a/0x220 [hfi1]
         ? dev_err+0x6c/0x90
         hfi1_ipoib_netdev_dtor+0x15/0x30 [hfi1]
         hfi1_ipoib_setup_rn+0x10e/0x150 [hfi1]
         rdma_init_netdev+0x5a/0x80 [ib_core]
         ? hfi1_ipoib_free_rdma_netdev+0x20/0x20 [hfi1]
         ipoib_intf_init+0x6c/0x350 [ib_ipoib]
         ipoib_intf_alloc+0x5c/0xc0 [ib_ipoib]
         ipoib_add_one+0xbe/0x300 [ib_ipoib]
         add_client_context+0x12c/0x1a0 [ib_core]
         enable_device_and_get+0xdc/0x1d0 [ib_core]
         ib_register_device+0x572/0x6b0 [ib_core]
         rvt_register_device+0x11b/0x220 [rdmavt]
         hfi1_register_ib_device+0x6b4/0x770 [hfi1]
         do_init_one.isra.20+0x3e3/0x680 [hfi1]
         local_pci_probe+0x41/0x90
         work_for_cpu_fn+0x16/0x20
         process_one_work+0x1a7/0x360
         ? create_worker+0x1a0/0x1a0
         worker_thread+0x1cf/0x390
         ? create_worker+0x1a0/0x1a0
         kthread+0x116/0x130
         ? kthread_flush_work_fn+0x10/0x10
         ret_from_fork+0x1f/0x40
      
      The panic happens in hfi1_ipoib_txreq_deinit() because there is a NULL
      deref when hfi1_ipoib_netdev_dtor() is called in this error case.
      
      hfi1_ipoib_txreq_init() and hfi1_ipoib_rxq_init() are self unwinding so
      fix by adjusting the error paths accordingly.
      
      Other changes:
      - hfi1_ipoib_free_rdma_netdev() is deleted including the free_netdev()
        since the netdev core code deletes calls free_netdev()
      - The switch to the accelerated entrances is moved to the success path.
      
      Cc: stable@vger.kernel.org
      Fixes: d99dc602 ("IB/hfi1: Add functions to transmit datagram ipoib packets")
      Link: https://lore.kernel.org/r/1642287756-182313-4-git-send-email-mike.marciniszyn@cornelisnetworks.com
      
      
      Reviewed-by: default avatarDennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>
      Signed-off-by: default avatarMike Marciniszyn <mike.marciniszyn@cornelisnetworks.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a3dd4d26
    • Jordy Zomer's avatar
      dma-buf: heaps: Fix potential spectre v1 gadget · 24f8e12d
      Jordy Zomer authored
      
      
      commit 92c4cfae upstream.
      
      It appears like nr could be a Spectre v1 gadget as it's supplied by a
      user and used as an array index. Prevent the contents
      of kernel memory from being leaked to userspace via speculative
      execution by using array_index_nospec.
      
      Signed-off-by: default avatarJordy Zomer <jordy@pwning.systems>
      Fixes: c02a81fb ("dma-buf: Add dma-buf heaps framework")
      Cc: <stable@vger.kernel.org> # v5.6+
      Acked-by: default avatarJohn Stultz <john.stultz@linaro.org>
      Signed-off-by: default avatarSumit Semwal <sumit.semwal@linaro.org>
       [sumits: added fixes and cc: stable tags]
      Link: https://patchwork.freedesktop.org/patch/msgid/20220129150604.3461652-1-jordy@pwning.systems
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      24f8e12d
    • Martin K. Petersen's avatar
      block: bio-integrity: Advance seed correctly for larger interval sizes · f5767211
      Martin K. Petersen authored
      
      
      commit b13e0c71 upstream.
      
      Commit 309a62fa ("bio-integrity: bio_integrity_advance must update
      integrity seed") added code to update the integrity seed value when
      advancing a bio. However, it failed to take into account that the
      integrity interval might be larger than the 512-byte block layer
      sector size. This broke bio splitting on PI devices with 4KB logical
      blocks.
      
      The seed value should be advanced by bio_integrity_intervals() and not
      the number of sectors.
      
      Cc: Dmitry Monakhov <dmonakhov@openvz.org>
      Cc: stable@vger.kernel.org
      Fixes: 309a62fa ("bio-integrity: bio_integrity_advance must update integrity seed")
      Tested-by: default avatarDmitry Ivanov <dmitry.ivanov2@hpe.com>
      Reported-by: default avatarAlexey Lyashkov <alexey.lyashkov@hpe.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Link: https://lore.kernel.org/r/20220204034209.4193-1-martin.petersen@oracle.com
      
      
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f5767211
    • Lang Yu's avatar
      mm/kmemleak: avoid scanning potential huge holes · a5389c80
      Lang Yu authored
      commit c10a0f87 upstream.
      
      When using devm_request_free_mem_region() and devm_memremap_pages() to
      add ZONE_DEVICE memory, if requested free mem region's end pfn were
      huge(e.g., 0x400000000), the node_end_pfn() will be also huge (see
      move_pfn_range_to_zone()).  Thus it creates a huge hole between
      node_start_pfn() and node_end_pfn().
      
      We found on some AMD APUs, amdkfd requested such a free mem region and
      created a huge hole.  In such a case, following code snippet was just
      doing busy test_bit() looping on the huge hole.
      
        for (pfn = start_pfn; pfn < end_pfn; pfn++) {
      	struct page *page = pfn_to_online_page(pfn);
      		if (!page)
      			continue;
      	...
        }
      
      So we got a soft lockup:
      
        watchdog: BUG: soft lockup - CPU#6 stuck for 26s! [bash:1221]
        CPU: 6 PID: 1221 Comm: bash Not tainted 5.15.0-custom #1
        RIP: 0010:pfn_to_online_page+0x5/0xd0
        Call Trace:
          ? kmemleak_scan+0x16a/0x440
          kmemleak_write+0x306/0x3a0
          ? common_file_perm+0x72/0x170
          full_proxy_write+0x5c/0x90
          vfs_write+0xb9/0x260
          ksys_write+0x67/0xe0
          __x64_sys_write+0x1a/0x20
          do_syscall_64+0x3b/0xc0
          entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      I did some tests with the patch.
      
      (1) amdgpu module unloaded
      
      before the patch:
      
        real    0m0.976s
        user    0m0.000s
        sys     0m0.968s
      
      after the patch:
      
        real    0m0.981s
        user    0m0.000s
        sys     0m0.973s
      
      (2) amdgpu module loaded
      
      before the patch:
      
        real    0m35.365s
        user    0m0.000s
        sys     0m35.354s
      
      after the patch:
      
        real    0m1.049s
        user    0m0.000s
        sys     0m1.042s
      
      Link: https://lkml.kernel.org/r/20211108140029.721144-1-lang.yu@amd.com
      
      
      Signed-off-by: default avatarLang Yu <lang.yu@amd.com>
      Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
      Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Oscar Salvador <osalvador@suse.de>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a5389c80
    • Mike Rapoport's avatar
      mm/pgtable: define pte_index so that preprocessor could recognize it · 65a4863a
      Mike Rapoport authored
      commit 314c459a upstream.
      
      Since commit 974b9b2c ("mm: consolidate pte_index() and
      pte_offset_*() definitions") pte_index is a static inline and there is
      no define for it that can be recognized by the preprocessor.  As a
      result, vm_insert_pages() uses slower loop over vm_insert_page() instead
      of insert_pages() that amortizes the cost of spinlock operations when
      inserting multiple pages.
      
      Link: https://lkml.kernel.org/r/20220111145457.20748-1-rppt@kernel.org
      
      
      Fixes: 974b9b2c ("mm: consolidate pte_index() and pte_offset_*() definitions")
      Signed-off-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Reported-by: default avatarChristian Dietrich <stettberger@dokucode.de>
      Reviewed-by: default avatarKhalid Aziz <khalid.aziz@oracle.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      65a4863a
    • Pasha Tatashin's avatar
      mm/debug_vm_pgtable: remove pte entry from the page table · 120973e6
      Pasha Tatashin authored
      commit fb5222aa upstream.
      
      Patch series "page table check fixes and cleanups", v5.
      
      This patch (of 4):
      
      The pte entry that is used in pte_advanced_tests() is never removed from
      the page table at the end of the test.
      
      The issue is detected by page_table_check, to repro compile kernel with
      the following configs:
      
      CONFIG_DEBUG_VM_PGTABLE=y
      CONFIG_PAGE_TABLE_CHECK=y
      CONFIG_PAGE_TABLE_CHECK_ENFORCED=y
      
      During the boot the following BUG is printed:
      
        debug_vm_pgtable: [debug_vm_pgtable         ]: Validating architecture page table helpers
        ------------[ cut here ]------------
        kernel BUG at mm/page_table_check.c:162!
        invalid opcode: 0000 [#1] PREEMPT SMP PTI
        CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.16.0-11413-g2c271fe77d52 #3
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.15.0-0-g2dd4b9b3f840-prebuilt.qemu.org 04/01/2014
        ...
      
      The entry should be properly removed from the page table before the page
      is released to the free list.
      
      Link: https://lkml.kernel.org/r/20220131203249.2832273-1-pasha.tatashin@soleen.com
      Link: https://lkml.kernel.org/r/20220131203249.2832273-2-pasha.tatashin@soleen.com
      
      
      Fixes: a5c3b9ff ("mm/debug_vm_pgtable: add tests validating advanced arch page table helpers")
      Signed-off-by: default avatarPasha Tatashin <pasha.tatashin@soleen.com>
      Reviewed-by: default avatarZi Yan <ziy@nvidia.com>
      Tested-by: default avatarZi Yan <ziy@nvidia.com>
      Acked-by: default avatarDavid Rientjes <rientjes@google.com>
      Reviewed-by: default avatarAnshuman Khandual <anshuman.khandual@arm.com>
      Cc: Paul Turner <pjt@google.com>
      Cc: Wei Xu <weixugc@google.com>
      Cc: Greg Thelen <gthelen@google.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Will Deacon <will@kernel.org>
      Cc: Mike Rapoport <rppt@kernel.org>
      Cc: Dave Hansen <dave.hansen@linux.intel.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
      Cc: Jiri Slaby <jirislaby@kernel.org>
      Cc: Muchun Song <songmuchun@bytedance.com>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: <stable@vger.kernel.org>	[5.9+]
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      120973e6
    • Uday Shankar's avatar
      nvme-fabrics: fix state check in nvmf_ctlr_matches_baseopts() · 90391ac6
      Uday Shankar authored
      
      
      commit 6a51abde upstream.
      
      Controller deletion/reset, immediately followed by or concurrent with
      a reconnect, is hard failing the connect attempt resulting in a
      complete loss of connectivity to the controller.
      
      In the connect request, fabrics looks for an existing controller with
      the same address components and aborts the connect if a controller
      already exists and the duplicate connect option isn't set. The match
      routine filters out controllers that are dead or dying, so they don't
      interfere with the new connect request.
      
      When NVME_CTRL_DELETING_NOIO was added, it missed updating the state
      filters in the nvmf_ctlr_matches_baseopts() routine. Thus, when in this
      new state, it's seen as a live controller and fails the connect request.
      
      Correct by adding the DELETING_NIO state to the match checks.
      
      Fixes: ecca390e ("nvme: fix deadlock in disconnect during scan_work and/or ana_work")
      Cc: <stable@vger.kernel.org> # v5.7+
      Signed-off-by: default avatarUday Shankar <ushankar@purestorage.com>
      Reviewed-by: default avatarJames Smart <jsmart2021@gmail.com>
      Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      90391ac6
    • Aun-Ali Zaidi's avatar
      drm/amd/display: Force link_rate as LINK_RATE_RBR2 for 2018 15" Apple Retina panels · 2093ecf5
      Aun-Ali Zaidi authored
      
      
      commit 30fbce37 upstream.
      
      The eDP link rate reported by the DP_MAX_LINK_RATE dpcd register (0xa) is
      contradictory to the highest rate supported reported by
      EDID (0xc = LINK_RATE_RBR2). The effects of this compounded with commit
      '4a8ca46b ("drm/amd/display: Default max bpc to 16 for eDP")' results
      in no display modes being found and a dark panel.
      
      For now, simply force the maximum supported link rate for the eDP attached
      2018 15" Apple Retina panels.
      
      Additionally, we must also check the firmware revision since the device ID
      reported by the DPCD is identical to that of the more capable 16,1,
      incorrectly quirking it. We also use said firmware check to quirk the
      refreshed 15,1 models with Vega graphics as they use a slightly newer
      firmware version.
      
      Tested-by: default avatarAun-Ali Zaidi <admin@kodeit.net>
      Reviewed-by: default avatarHarry Wentland <harry.wentland@amd.com>
      Signed-off-by: default avatarAun-Ali Zaidi <admin@kodeit.net>
      Signed-off-by: default avatarAditya Garg <gargaditya08@live.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2093ecf5
    • Paul Hsieh's avatar
      drm/amd/display: watermark latencies is not enough on DCN31 · 7ff0ed88
      Paul Hsieh authored
      
      
      commit f5fa54f4 upstream.
      
      [Why]
      The original latencies were causing underflow in some modes.
      Resolution: 2880x1620@60p when HDR enable
      
      [How]
      1. Replace with the up-to-date watermark values based on new measurments
      2. Correct the ddr_wm_table name to DDR5 on DCN31
      
      Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
      Reviewed-by: default avatarAric Cyr <Aric.Cyr@amd.com>
      Acked-by: default avatarStylon Wang <stylon.wang@amd.com>
      Signed-off-by: default avatarPaul Hsieh <paul.hsieh@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7ff0ed88
    • Evan Quan's avatar
      drm/amd/pm: correct the MGpuFanBoost support for Beige Goby · 4f4c77ad
      Evan Quan authored
      
      
      commit 3ec5586b upstream.
      
      The existing way cannot handle Beige Goby well as a different
      PPTable data structure(PPTable_beige_goby_t instead of PPTable_t)
      is used there.
      
      Signed-off-by: default avatarEvan Quan <evan.quan@amd.com>
      Acked-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4f4c77ad
    • Imre Deak's avatar
      drm/i915/adlp: Fix TypeC PHY-ready status readout · 39ac3945
      Imre Deak authored
      
      
      commit 3c6f13ad upstream.
      
      The TCSS_DDI_STATUS register is indexed by tc_port not by the FIA port
      index, fix this up. This only caused an issue on TC#3/4 ports in legacy
      mode, as in all other cases the two indices either match (on TC#1/2) or
      the TCSS_DDI_STATUS_READY flag is set regardless of something being
      connected or not (on TC#1/2/3/4 in dp-alt and tbt-alt modes).
      
      Reported-and-tested-by: default avatarChia-Lin Kao (AceLan) <acelan.kao@canonical.com>
      Fixes: 55ce306c ("drm/i915/adl_p: Implement TC sequences")
      Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/4698
      
      
      Cc: José Roberto de Souza <jose.souza@intel.com>
      Cc: <stable@vger.kernel.org> # v5.14+
      Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
      Reviewed-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220126104356.2022975-1-imre.deak@intel.com
      
      
      (cherry picked from commit 516b3346)
      Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      39ac3945
    • Nick Lopez's avatar
      drm/nouveau: fix off by one in BIOS boundary checking · d877e814
      Nick Lopez authored
      
      
      commit 1b777d4d upstream.
      
      Bounds checking when parsing init scripts embedded in the BIOS reject
      access to the last byte. This causes driver initialization to fail on
      Apple eMac's with GeForce 2 MX GPUs, leaving the system with no working
      console.
      
      This is probably only seen on OpenFirmware machines like PowerPC Macs
      because the BIOS image provided by OF is only the used parts of the ROM,
      not a power-of-two blocks read from PCI directly so PCs always have
      empty bytes at the end that are never accessed.
      
      Signed-off-by: default avatarNick Lopez <github@glowingmonkey.org>
      Fixes: 4d4e9907 ("drm/nouveau/bios: guard against out-of-bounds accesses to image")
      Cc: <stable@vger.kernel.org> # v4.10+
      Reviewed-by: default avatarIlia Mirkin <imirkin@alum.mit.edu>
      Reviewed-by: default avatarKarol Herbst <kherbst@redhat.com>
      Signed-off-by: default avatarKarol Herbst <kherbst@redhat.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220122081906.2633061-1-github@glowingmonkey.org
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d877e814
    • Dominique Martinet's avatar
      Revert "fs/9p: search open fids first" · b9e9f848
      Dominique Martinet authored
      commit 22e424fe upstream.
      
      This reverts commit 478ba09e.
      
      That commit was meant as a fix for setattrs with by fd (e.g. ftruncate)
      to use an open fid instead of the first fid it found on lookup.
      The proper fix for that is to use the fid associated with the open file
      struct, available in iattr->ia_file for such operations, and was
      actually done just before in 66246641 ("9p: retrieve fid from file
      when file instance exist.")
      As such, this commit is no longer required.
      
      Furthermore, changing lookup to return open fids first had unwanted side
      effects, as it turns out the protocol forbids the use of open fids for
      further walks (e.g. clone_fid) and we broke mounts for some servers
      enforcing this rule.
      
      Note this only reverts to the old working behaviour, but it's still
      possible for lookup to return open fids if dentry->d_fsdata is not set,
      so more work is needed to make sure we respect this rule in the future,
      for example by adding a flag to the lookup functions to only match
      certain fid open modes depending on caller requirements.
      
      Link: https://lkml.kernel.org/r/20220130130651.712293-1-asmadeus@codewreck.org
      
      
      Fixes: 478ba09e ("fs/9p: search open fids first")
      Cc: stable@vger.kernel.org # v5.11+
      Reported-by: default avatarron minnich <rminnich@gmail.com>
      Reported-by: default avatar <ng@0x80.stream>
      Signed-off-by: default avatarDominique Martinet <asmadeus@codewreck.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b9e9f848
    • Filipe Manana's avatar
      btrfs: fix use-after-free after failure to create a snapshot · a7b717fa
      Filipe Manana authored
      
      
      commit 28b21c55 upstream.
      
      At ioctl.c:create_snapshot(), we allocate a pending snapshot structure and
      then attach it to the transaction's list of pending snapshots. After that
      we call btrfs_commit_transaction(), and if that returns an error we jump
      to 'fail' label, where we kfree() the pending snapshot structure. This can
      result in a later use-after-free of the pending snapshot:
      
      1) We allocated the pending snapshot and added it to the transaction's
         list of pending snapshots;
      
      2) We call btrfs_commit_transaction(), and it fails either at the first
         call to btrfs_run_delayed_refs() or btrfs_start_dirty_block_groups().
         In both cases, we don't abort the transaction and we release our
         transaction handle. We jump to the 'fail' label and free the pending
         snapshot structure. We return with the pending snapshot still in the
         transaction's list;
      
      3) Another task commits the transaction. This time there's no error at
         all, and then during the transaction commit it accesses a pointer
         to the pending snapshot structure that the snapshot creation task
         has already freed, resulting in a user-after-free.
      
      This issue could actually be detected by smatch, which produced the
      following warning:
      
        fs/btrfs/ioctl.c:843 create_snapshot() warn: '&pending_snapshot->list' not removed from list
      
      So fix this by not having the snapshot creation ioctl directly add the
      pending snapshot to the transaction's list. Instead add the pending
      snapshot to the transaction handle, and then at btrfs_commit_transaction()
      we add the snapshot to the list only when we can guarantee that any error
      returned after that point will result in a transaction abort, in which
      case the ioctl code can safely free the pending snapshot and no one can
      access it anymore.
      
      CC: stable@vger.kernel.org # 5.10+
      Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a7b717fa
    • Shin'ichiro Kawasaki's avatar
      btrfs: fix deadlock between quota disable and qgroup rescan worker · 89d4cca5
      Shin'ichiro Kawasaki authored
      
      
      commit e804861b upstream.
      
      Quota disable ioctl starts a transaction before waiting for the qgroup
      rescan worker completes. However, this wait can be infinite and results
      in deadlock because of circular dependency among the quota disable
      ioctl, the qgroup rescan worker and the other task with transaction such
      as block group relocation task.
      
      The deadlock happens with the steps following:
      
      1) Task A calls ioctl to disable quota. It starts a transaction and
         waits for qgroup rescan worker completes.
      2) Task B such as block group relocation task starts a transaction and
         joins to the transaction that task A started. Then task B commits to
         the transaction. In this commit, task B waits for a commit by task A.
      3) Task C as the qgroup rescan worker starts its job and starts a
         transaction. In this transaction start, task C waits for completion
         of the transaction that task A started and task B committed.
      
      This deadlock was found with fstests test case btrfs/115 and a zoned
      null_blk device. The test case enables and disables quota, and the
      block group reclaim was triggered during the quota disable by chance.
      The deadlock was also observed by running quota enable and disable in
      parallel with 'btrfs balance' command on regular null_blk devices.
      
      An example report of the deadlock:
      
        [372.469894] INFO: task kworker/u16:6:103 blocked for more than 122 seconds.
        [372.479944]       Not tainted 5.16.0-rc8 #7
        [372.485067] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
        [372.493898] task:kworker/u16:6   state:D stack:    0 pid:  103 ppid:     2 flags:0x00004000
        [372.503285] Workqueue: btrfs-qgroup-rescan btrfs_work_helper [btrfs]
        [372.510782] Call Trace:
        [372.514092]  <TASK>
        [372.521684]  __schedule+0xb56/0x4850
        [372.530104]  ? io_schedule_timeout+0x190/0x190
        [372.538842]  ? lockdep_hardirqs_on+0x7e/0x100
        [372.547092]  ? _raw_spin_unlock_irqrestore+0x3e/0x60
        [372.555591]  schedule+0xe0/0x270
        [372.561894]  btrfs_commit_transaction+0x18bb/0x2610 [btrfs]
        [372.570506]  ? btrfs_apply_pending_changes+0x50/0x50 [btrfs]
        [372.578875]  ? free_unref_page+0x3f2/0x650
        [372.585484]  ? finish_wait+0x270/0x270
        [372.591594]  ? release_extent_buffer+0x224/0x420 [btrfs]
        [372.599264]  btrfs_qgroup_rescan_worker+0xc13/0x10c0 [btrfs]
        [372.607157]  ? lock_release+0x3a9/0x6d0
        [372.613054]  ? btrfs_qgroup_account_extent+0xda0/0xda0 [btrfs]
        [372.620960]  ? do_raw_spin_lock+0x11e/0x250
        [372.627137]  ? rwlock_bug.part.0+0x90/0x90
        [372.633215]  ? lock_is_held_type+0xe4/0x140
        [372.639404]  btrfs_work_helper+0x1ae/0xa90 [btrfs]
        [372.646268]  process_one_work+0x7e9/0x1320
        [372.652321]  ? lock_release+0x6d0/0x6d0
        [372.658081]  ? pwq_dec_nr_in_flight+0x230/0x230
        [372.664513]  ? rwlock_bug.part.0+0x90/0x90
        [372.670529]  worker_thread+0x59e/0xf90
        [372.676172]  ? process_one_work+0x1320/0x1320
        [372.682440]  kthread+0x3b9/0x490
        [372.687550]  ? _raw_spin_unlock_irq+0x24/0x50
        [372.693811]  ? set_kthread_struct+0x100/0x100
        [372.700052]  ret_from_fork+0x22/0x30
        [372.705517]  </TASK>
        [372.709747] INFO: task btrfs-transacti:2347 blocked for more than 123 seconds.
        [372.729827]       Not tainted 5.16.0-rc8 #7
        [372.745907] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
        [372.767106] task:btrfs-transacti state:D stack:    0 pid: 2347 ppid:     2 flags:0x00004000
        [372.787776] Call Trace:
        [372.801652]  <TASK>
        [372.812961]  __schedule+0xb56/0x4850
        [372.830011]  ? io_schedule_timeout+0x190/0x190
        [372.852547]  ? lockdep_hardirqs_on+0x7e/0x100
        [372.871761]  ? _raw_spin_unlock_irqrestore+0x3e/0x60
        [372.886792]  schedule+0xe0/0x270
        [372.901685]  wait_current_trans+0x22c/0x310 [btrfs]
        [372.919743]  ? btrfs_put_transaction+0x3d0/0x3d0 [btrfs]
        [372.938923]  ? finish_wait+0x270/0x270
        [372.959085]  ? join_transaction+0xc75/0xe30 [btrfs]
        [372.977706]  start_transaction+0x938/0x10a0 [btrfs]
        [372.997168]  transaction_kthread+0x19d/0x3c0 [btrfs]
        [373.013021]  ? btrfs_cleanup_transaction.isra.0+0xfc0/0xfc0 [btrfs]
        [373.031678]  kthread+0x3b9/0x490
        [373.047420]  ? _raw_spin_unlock_irq+0x24/0x50
        [373.064645]  ? set_kthread_struct+0x100/0x100
        [373.078571]  ret_from_fork+0x22/0x30
        [373.091197]  </TASK>
        [373.105611] INFO: task btrfs:3145 blocked for more than 123 seconds.
        [373.114147]       Not tainted 5.16.0-rc8 #7
        [373.120401] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
        [373.130393] task:btrfs           state:D stack:    0 pid: 3145 ppid:  3141 flags:0x00004000
        [373.140998] Call Trace:
        [373.145501]  <TASK>
        [373.149654]  __schedule+0xb56/0x4850
        [373.155306]  ? io_schedule_timeout+0x190/0x190
        [373.161965]  ? lockdep_hardirqs_on+0x7e/0x100
        [373.168469]  ? _raw_spin_unlock_irqrestore+0x3e/0x60
        [373.175468]  schedule+0xe0/0x270
        [373.180814]  wait_for_commit+0x104/0x150 [btrfs]
        [373.187643]  ? test_and_set_bit+0x20/0x20 [btrfs]
        [373.194772]  ? kmem_cache_free+0x124/0x550
        [373.201191]  ? btrfs_put_transaction+0x69/0x3d0 [btrfs]
        [373.208738]  ? finish_wait+0x270/0x270
        [373.214704]  ? __btrfs_end_transaction+0x347/0x7b0 [btrfs]
        [373.222342]  btrfs_commit_transaction+0x44d/0x2610 [btrfs]
        [373.230233]  ? join_transaction+0x255/0xe30 [btrfs]
        [373.237334]  ? btrfs_record_root_in_trans+0x4d/0x170 [btrfs]
        [373.245251]  ? btrfs_apply_pending_changes+0x50/0x50 [btrfs]
        [373.253296]  relocate_block_group+0x105/0xc20 [btrfs]
        [373.260533]  ? mutex_lock_io_nested+0x1270/0x1270
        [373.267516]  ? btrfs_wait_nocow_writers+0x85/0x180 [btrfs]
        [373.275155]  ? merge_reloc_roots+0x710/0x710 [btrfs]
        [373.283602]  ? btrfs_wait_ordered_extents+0xd30/0xd30 [btrfs]
        [373.291934]  ? kmem_cache_free+0x124/0x550
        [373.298180]  btrfs_relocate_block_group+0x35c/0x930 [btrfs]
        [373.306047]  btrfs_relocate_chunk+0x85/0x210 [btrfs]
        [373.313229]  btrfs_balance+0x12f4/0x2d20 [btrfs]
        [373.320227]  ? lock_release+0x3a9/0x6d0
        [373.326206]  ? btrfs_relocate_chunk+0x210/0x210 [btrfs]
        [373.333591]  ? lock_is_held_type+0xe4/0x140
        [373.340031]  ? rcu_read_lock_sched_held+0x3f/0x70
        [373.346910]  btrfs_ioctl_balance+0x548/0x700 [btrfs]
        [373.354207]  btrfs_ioctl+0x7f2/0x71b0 [btrfs]
        [373.360774]  ? lockdep_hardirqs_on_prepare+0x410/0x410
        [373.367957]  ? lockdep_hardirqs_on_prepare+0x410/0x410
        [373.375327]  ? btrfs_ioctl_get_supported_features+0x20/0x20 [btrfs]
        [373.383841]  ? find_held_lock+0x2c/0x110
        [373.389993]  ? lock_release+0x3a9/0x6d0
        [373.395828]  ? mntput_no_expire+0xf7/0xad0
        [373.402083]  ? lock_is_held_type+0xe4/0x140
        [373.408249]  ? vfs_fileattr_set+0x9f0/0x9f0
        [373.414486]  ? selinux_file_ioctl+0x349/0x4e0
        [373.420938]  ? trace_raw_output_lock+0xb4/0xe0
        [373.427442]  ? selinux_inode_getsecctx+0x80/0x80
        [373.434224]  ? lockdep_hardirqs_on+0x7e/0x100
        [373.440660]  ? force_qs_rnp+0x2a0/0x6b0
        [373.446534]  ? lock_is_held_type+0x9b/0x140
        [373.452763]  ? __blkcg_punt_bio_submit+0x1b0/0x1b0
        [373.459732]  ? security_file_ioctl+0x50/0x90
        [373.466089]  __x64_sys_ioctl+0x127/0x190
        [373.472022]  do_syscall_64+0x3b/0x90
        [373.477513]  entry_SYSCALL_64_after_hwframe+0x44/0xae
        [373.484823] RIP: 0033:0x7f8f4af7e2bb
        [373.490493] RSP: 002b:00007ffcbf936178 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
        [373.500197] RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f8f4af7e2bb
        [373.509451] RDX: 00007ffcbf936220 RSI: 00000000c4009420 RDI: 0000000000000003
        [373.518659] RBP: 00007ffcbf93774a R08: 0000000000000013 R09: 00007f8f4b02d4e0
        [373.527872] R10: 00007f8f4ae87740 R11: 0000000000000246 R12: 0000000000000001
        [373.537222] R13: 00007ffcbf936220 R14: 0000000000000000 R15: 0000000000000002
        [373.546506]  </TASK>
        [373.550878] INFO: task btrfs:3146 blocked for more than 123 seconds.
        [373.559383]       Not tainted 5.16.0-rc8 #7
        [373.565748] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
        [373.575748] task:btrfs           state:D stack:    0 pid: 3146 ppid:  2168 flags:0x00000000
        [373.586314] Call Trace:
        [373.590846]  <TASK>
        [373.595121]  __schedule+0xb56/0x4850
        [373.600901]  ? __lock_acquire+0x23db/0x5030
        [373.607176]  ? io_schedule_timeout+0x190/0x190
        [373.613954]  schedule+0xe0/0x270
        [373.619157]  schedule_timeout+0x168/0x220
        [373.625170]  ? usleep_range_state+0x150/0x150
        [373.631653]  ? mark_held_locks+0x9e/0xe0
        [373.637767]  ? do_raw_spin_lock+0x11e/0x250
        [373.643993]  ? lockdep_hardirqs_on_prepare+0x17b/0x410
        [373.651267]  ? _raw_spin_unlock_irq+0x24/0x50
        [373.657677]  ? lockdep_hardirqs_on+0x7e/0x100
        [373.664103]  wait_for_completion+0x163/0x250
        [373.670437]  ? bit_wait_timeout+0x160/0x160
        [373.676585]  btrfs_quota_disable+0x176/0x9a0 [btrfs]
        [373.683979]  ? btrfs_quota_enable+0x12f0/0x12f0 [btrfs]
        [373.691340]  ? down_write+0xd0/0x130
        [373.696880]  ? down_write_killable+0x150/0x150
        [373.703352]  btrfs_ioctl+0x3945/0x71b0 [btrfs]
        [373.710061]  ? find_held_lock+0x2c/0x110
        [373.716192]  ? lock_release+0x3a9/0x6d0
        [373.722047]  ? __handle_mm_fault+0x23cd/0x3050
        [373.728486]  ? btrfs_ioctl_get_supported_features+0x20/0x20 [btrfs]
        [373.737032]  ? set_pte+0x6a/0x90
        [373.742271]  ? do_raw_spin_unlock+0x55/0x1f0
        [373.748506]  ? lock_is_held_type+0xe4/0x140
        [373.754792]  ? vfs_fileattr_set+0x9f0/0x9f0
        [373.761083]  ? selinux_file_ioctl+0x349/0x4e0
        [373.767521]  ? selinux_inode_getsecctx+0x80/0x80
        [373.774247]  ? __up_read+0x182/0x6e0
        [373.780026]  ? count_memcg_events.constprop.0+0x46/0x60
        [373.787281]  ? up_write+0x460/0x460
        [373.792932]  ? security_file_ioctl+0x50/0x90
        [373.799232]  __x64_sys_ioctl+0x127/0x190
        [373.805237]  do_syscall_64+0x3b/0x90
        [373.810947]  entry_SYSCALL_64_after_hwframe+0x44/0xae
        [373.818102] RIP: 0033:0x7f1383ea02bb
        [373.823847] RSP: 002b:00007fffeb4d71f8 EFLAGS: 00000202 ORIG_RAX: 0000000000000010
        [373.833641] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f1383ea02bb
        [373.842961] RDX: 00007fffeb4d7210 RSI: 00000000c0109428 RDI: 0000000000000003
        [373.852179] RBP: 0000000000000003 R08: 0000000000000003 R09: 0000000000000078
        [373.861408] R10: 00007f1383daec78 R11: 0000000000000202 R12: 00007fffeb4d874a
        [373.870647] R13: 0000000000493099 R14: 0000000000000001 R15: 0000000000000000
        [373.879838]  </TASK>
        [373.884018]
                     Showing all locks held in the system:
        [373.894250] 3 locks held by kworker/4:1/58:
        [373.900356] 1 lock held by khungtaskd/63:
        [373.906333]  #0: ffffffff8945ff60 (rcu_read_lock){....}-{1:2}, at: debug_show_all_locks+0x53/0x260
        [373.917307] 3 locks held by kworker/u16:6/103:
        [373.923938]  #0: ffff888127b4f138 ((wq_completion)btrfs-qgroup-rescan){+.+.}-{0:0}, at: process_one_work+0x712/0x1320
        [373.936555]  #1: ffff88810b817dd8 ((work_completion)(&work->normal_work)){+.+.}-{0:0}, at: process_one_work+0x73f/0x1320
        [373.951109]  #2: ffff888102dd4650 (sb_internal#2){.+.+}-{0:0}, at: btrfs_qgroup_rescan_worker+0x1f6/0x10c0 [btrfs]
        [373.964027] 2 locks held by less/1803:
        [373.969982]  #0: ffff88813ed56098 (&tty->ldisc_sem){++++}-{0:0}, at: tty_ldisc_ref_wait+0x24/0x80
        [373.981295]  #1: ffffc90000b3b2e8 (&ldata->atomic_read_lock){+.+.}-{3:3}, at: n_tty_read+0x9e2/0x1060
        [373.992969] 1 lock held by btrfs-transacti/2347:
        [373.999893]  #0: ffff88813d4887a8 (&fs_info->transaction_kthread_mutex){+.+.}-{3:3}, at: transaction_kthread+0xe3/0x3c0 [btrfs]
        [374.015872] 3 locks held by btrfs/3145:
        [374.022298]  #0: ffff888102dd4460 (sb_writers#18){.+.+}-{0:0}, at: btrfs_ioctl_balance+0xc3/0x700 [btrfs]
        [374.034456]  #1: ffff88813d48a0a0 (&fs_info->reclaim_bgs_lock){+.+.}-{3:3}, at: btrfs_balance+0xfe5/0x2d20 [btrfs]
        [374.047646]  #2: ffff88813d488838 (&fs_info->cleaner_mutex){+.+.}-{3:3}, at: btrfs_relocate_block_group+0x354/0x930 [btrfs]
        [374.063295] 4 locks held by btrfs/3146:
        [374.069647]  #0: ffff888102dd4460 (sb_writers#18){.+.+}-{0:0}, at: btrfs_ioctl+0x38b1/0x71b0 [btrfs]
        [374.081601]  #1: ffff88813d488bb8 (&fs_info->subvol_sem){+.+.}-{3:3}, at: btrfs_ioctl+0x38fd/0x71b0 [btrfs]
        [374.094283]  #2: ffff888102dd4650 (sb_internal#2){.+.+}-{0:0}, at: btrfs_quota_disable+0xc8/0x9a0 [btrfs]
        [374.106885]  #3: ffff88813d489800 (&fs_info->qgroup_ioctl_lock){+.+.}-{3:3}, at: btrfs_quota_disable+0xd5/0x9a0 [btrfs]
      
        [374.126780] =============================================
      
      To avoid the deadlock, wait for the qgroup rescan worker to complete
      before starting the transaction for the quota disable ioctl. Clear
      BTRFS_FS_QUOTA_ENABLE flag before the wait and the transaction to
      request the worker to complete. On transaction start failure, set the
      BTRFS_FS_QUOTA_ENABLE flag again. These BTRFS_FS_QUOTA_ENABLE flag
      changes can be done safely since the function btrfs_quota_disable is not
      called concurrently because of fs_info->subvol_sem.
      
      Also check the BTRFS_FS_QUOTA_ENABLE flag in qgroup_rescan_init to avoid
      another qgroup rescan worker to start after the previous qgroup worker
      completed.
      
      CC: stable@vger.kernel.org # 5.4+
      Suggested-by: default avatarNikolay Borisov <nborisov@suse.com>
      Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
      Signed-off-by: default avatarShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      89d4cca5
    • Qu Wenruo's avatar
      btrfs: don't start transaction for scrub if the fs is mounted read-only · f4b2736e
      Qu Wenruo authored
      
      
      commit 2d192fc4 upstream.
      
      [BUG]
      The following super simple script would crash btrfs at unmount time, if
      CONFIG_BTRFS_ASSERT() is set.
      
       mkfs.btrfs -f $dev
       mount $dev $mnt
       xfs_io -f -c "pwrite 0 4k" $mnt/file
       umount $mnt
       mount -r ro $dev $mnt
       btrfs scrub start -Br $mnt
       umount $mnt
      
      This will trigger the following ASSERT() introduced by commit
      0a31daa4 ("btrfs: add assertion for empty list of transactions at
      late stage of umount").
      
      That patch is definitely not the cause, it just makes enough noise for
      developers.
      
      [CAUSE]
      We will start transaction for the following call chain during scrub:
      
        scrub_enumerate_chunks()
        |- btrfs_inc_block_group_ro()
           |- btrfs_join_transaction()
      
      However for RO mount, there is no running transaction at all, thus
      btrfs_join_transaction() will start a new transaction.
      
      Furthermore, since it's read-only mount, btrfs_sync_fs() will not call
      btrfs_commit_super() to commit the new but empty transaction.
      
      And leads to the ASSERT().
      
      The bug has been there for a long time. Only the new ASSERT() makes it
      noisy enough to be noticed.
      
      [FIX]
      For read-only scrub on read-only mount, there is no need to start a
      transaction nor to allocate new chunks in btrfs_inc_block_group_ro().
      
      Just do extra read-only mount check in btrfs_inc_block_group_ro(), and
      if it's read-only, skip all chunk allocation and go inc_block_group_ro()
      directly.
      
      CC: stable@vger.kernel.org # 5.4+
      Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f4b2736e
    • Christian Lachner's avatar
      ALSA: hda/realtek: Fix silent output on Gigabyte X570 Aorus Xtreme after reboot from Windows · 7ccf5849
      Christian Lachner authored
      commit ea354196 upstream.
      
      This commit switches the Gigabyte X570 Aorus Xtreme from using the
      ALC1220_FIXUP_CLEVO_P950 to the ALC1220_FIXUP_GB_X570 quirk. This fixes
      the no-audio after reboot from windows problem.
      
      BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=205275
      
      
      Signed-off-by: default avatarChristian Lachner <gladiac@gmail.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20220129113243.93068-4-gladiac@gmail.com
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7ccf5849
    • Christian Lachner's avatar
      ALSA: hda/realtek: Fix silent output on Gigabyte X570S Aorus Master (newer chipset) · 9fc509f8
      Christian Lachner authored
      commit 41a86013 upstream.
      
      Newer versions of the X570 Master come with a newer revision of the
      mainboard chipset - the X570S. These boards have the same ALC1220 codec
      but seem to initialize the codec with a different parameter in Coef 0x7
      which causes the output audio to be very low. We therefore write a
      known-good value to Coef 0x7 to fix that. As the value is the exact same
      as on the other X570(non-S) boards the same quirk-function can be shared
      between both generations.
      
      This commit adds the Gigabyte X570S Aorus Master to the list of boards
      using the ALC1220_FIXUP_GB_X570 quirk. This fixes both, the silent output
      and the no-audio after reboot from windows problems.
      
      This work has been tested by the folks over at the level1techs forum here:
      https://forum.level1techs.com/t/has-anybody-gotten-audio-working-in-linux-on-aorus-x570-master/154072
      
      
      
      Signed-off-by: default avatarChristian Lachner <gladiac@gmail.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20220129113243.93068-3-gladiac@gmail.com
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9fc509f8
    • Christian Lachner's avatar
      ALSA: hda/realtek: Add missing fixup-model entry for Gigabyte X570 ALC1220 quirks · b3625b00
      Christian Lachner authored
      
      
      commit 63394a16 upstream.
      
      The initial commit of the new Gigabyte X570 ALC1220 quirks lacked the
      fixup-model entry in alc882_fixup_models[]. It seemed not to cause any ill
      effects but for completeness sake this commit makes up for that.
      
      Signed-off-by: default avatarChristian Lachner <gladiac@gmail.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20220129113243.93068-2-gladiac@gmail.com
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b3625b00
    • Albert Geantă's avatar
      ALSA: hda/realtek: Add quirk for ASUS GU603 · 730f823e
      Albert Geantă authored
      
      
      commit 94db9cc8 upstream.
      
      The ASUS GU603 (Zephyrus M16 - SSID 1043:16b2) requires a quirk similar to
      other ASUS devices for correctly routing the 4 integrated speakers. This
      fixes it by adding a corresponding quirk entry, which connects the bass
      speakers to the proper DAC.
      
      Signed-off-by: default avatarAlbert Geantă <albertgeanta@gmail.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20220131010523.546386-1-albertgeanta@gmail.com
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      730f823e
    • Takashi Iwai's avatar
      ALSA: hda: realtek: Fix race at concurrent COEF updates · 586d71dd
      Takashi Iwai authored
      
      
      commit b837a9f5 upstream.
      
      The COEF access is done with two steps: setting the index then read or
      write the data.  When multiple COEF accesses are performed
      concurrently, the index and data might be paired unexpectedly.
      In most cases, this isn't a big problem as the COEF setup is done at
      the initialization, but some dynamic changes like the mute LED may hit
      such a race.
      
      For avoiding the racy COEF accesses, this patch introduces a new
      mutex coef_mutex to alc_spec, and wrap the COEF accessing functions
      with it.
      
      Reported-by: default avatarAlexander Sergeyev <sergeev917@gmail.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20220111195229.a77wrpjclqwrx4bx@localhost.localdomain
      Link: https://lore.kernel.org/r/20220131075738.24323-1-tiwai@suse.de
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      586d71dd
    • Takashi Iwai's avatar
      ALSA: hda: Fix UAF of leds class devs at unbinding · 0e629052
      Takashi Iwai authored
      
      
      commit 549f8ffc upstream.
      
      The LED class devices that are created by HD-audio codec drivers are
      registered via devm_led_classdev_register() and associated with the
      HD-audio codec device.  Unfortunately, it turned out that the devres
      release doesn't work for this case; namely, since the codec resource
      release happens before the devm call chain, it triggers a NULL
      dereference or a UAF for a stale set_brightness_delay callback.
      
      For fixing the bug, this patch changes the LED class device register
      and unregister in a manual manner without devres, keeping the
      instances in hda_gen_spec.
      
      Reported-by: default avatarAlexander Sergeyev <sergeev917@gmail.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20220111195229.a77wrpjclqwrx4bx@localhost.localdomain
      Link: https://lore.kernel.org/r/20220126145011.16728-1-tiwai@suse.de
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0e629052
    • Jonas Hahnfeld's avatar
      ALSA: usb-audio: Correct quirk for VF0770 · 303e89f9
      Jonas Hahnfeld authored
      
      
      commit 4ee02e20 upstream.
      
      This device provides both audio and video. The original quirk added in
      commit 48827e1d ("ALSA: usb-audio: Add quirk for VF0770") used
      USB_DEVICE to match the vendor and product ID. Depending on module order,
      if snd-usb-audio was asked first, it would match the entire device and
      uvcvideo wouldn't get to see it. Change the matching to USB_AUDIO_DEVICE
      to restore uvcvideo matching in all cases.
      
      Fixes: 48827e1d ("ALSA: usb-audio: Add quirk for VF0770")
      Reported-by: default avatarJukka Heikintalo <heikintalo.jukka@gmail.com>
      Tested-by: default avatarJukka Heikintalo <heikintalo.jukka@gmail.com>
      Reported-by: default avatarPaweł Susicki <pawel.susicki@gmail.com>
      Tested-by: default avatarPaweł Susicki <pawel.susicki@gmail.com>
      Cc: <stable@vger.kernel.org> # 5.4, 5.10, 5.14, 5.15
      Signed-off-by: default avatarJonas Hahnfeld <hahnjo@hahnjo.de>
      Link: https://lore.kernel.org/r/20220131183516.61191-1-hahnjo@hahnjo.de
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      303e89f9
    • Mark Brown's avatar
      ASoC: ops: Reject out of bounds values in snd_soc_put_xr_sx() · b0a7836e
      Mark Brown authored
      
      
      commit 4cf28e9a upstream.
      
      We don't currently validate that the values being set are within the range
      we advertised to userspace as being valid, do so and reject any values
      that are out of range.
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20220124153253.3548853-4-broonie@kernel.org
      
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b0a7836e
    • Mark Brown's avatar
      ASoC: ops: Reject out of bounds values in snd_soc_put_volsw_sx() · e8e07c5e
      Mark Brown authored
      
      
      commit 4f1e50d6 upstream.
      
      We don't currently validate that the values being set are within the range
      we advertised to userspace as being valid, do so and reject any values
      that are out of range.
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20220124153253.3548853-3-broonie@kernel.org
      
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e8e07c5e
    • Mark Brown's avatar
      ASoC: ops: Reject out of bounds values in snd_soc_put_volsw() · 9e8895f1
      Mark Brown authored
      
      
      commit 817f7c93 upstream.
      
      We don't currently validate that the values being set are within the range
      we advertised to userspace as being valid, do so and reject any values
      that are out of range.
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20220124153253.3548853-2-broonie@kernel.org
      
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9e8895f1
    • Dmitry Osipenko's avatar
      ASoC: hdmi-codec: Fix OOB memory accesses · 10007bd9
      Dmitry Osipenko authored
      
      
      commit 06feec60 upstream.
      
      Correct size of iec_status array by changing it to the size of status
      array of the struct snd_aes_iec958. This fixes out-of-bounds slab
      read accesses made by memcpy() of the hdmi-codec driver. This problem
      is reported by KASAN.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDmitry Osipenko <digetx@gmail.com>
      Link: https://lore.kernel.org/r/20220112195039.1329-1-digetx@gmail.com
      
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      10007bd9
    • Patrice Chotard's avatar
      spi: stm32-qspi: Update spi registering · 0b8b0290
      Patrice Chotard authored
      
      
      commit e4d63473 upstream.
      
      Some device driver need to communicate to qspi device during the remove
      process, qspi controller must be functional when spi_unregister_master()
      is called.
      
      To ensure this, replace devm_spi_register_master() by spi_register_master()
      and spi_unregister_master() is called directly in .remove callback before
      stopping the qspi controller.
      
      This issue was put in evidence using kernel v5.11 and later
      with a spi-nor which supports the software reset feature introduced
      by commit d73ee753 ("mtd: spi-nor: core: perform a Soft Reset on
      shutdown")
      
      Fixes: c530cd1d ("spi: spi-mem: add stm32 qspi controller")
      
      Signed-off-by: default avatarPatrice Chotard <patrice.chotard@foss.st.com>
      Cc: <stable@vger.kernel.org> # 5.8.x
      Reviewed-by: default avatarLukas Wunner <lukas@wunner.de>
      Link: https://lore.kernel.org/r/20220117121744.29729-1-patrice.chotard@foss.st.com
      
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0b8b0290
    • Minghao Chi's avatar
      ipc/sem: do not sleep with a spin lock held · 45ba0a5f
      Minghao Chi authored
      commit 520ba724 upstream.
      
      We can't call kvfree() with a spin lock held, so defer it.
      
      Link: https://lkml.kernel.org/r/20211223031207.556189-1-chi.minghao@zte.com.cn
      
      
      Fixes: fc37a3b8 ("[PATCH] ipc sem: use kvmalloc for sem_undo allocation")
      Reported-by: default avatarZeal Robot <zealci@zte.com.cn>
      Signed-off-by: default avatarMinghao Chi <chi.minghao@zte.com.cn>
      Reviewed-by: default avatarShakeel Butt <shakeelb@google.com>
      Reviewed-by: default avatarManfred Spraul <manfred@colorfullife.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Yang Guang <cgel.zte@gmail.com>
      Cc: Davidlohr Bueso <dbueso@suse.de>
      Cc: Randy Dunlap <rdunlap@infradead.org>
      Cc: Bhaskar Chowdhury <unixbhaskar@gmail.com>
      Cc: Vasily Averin <vvs@virtuozzo.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      45ba0a5f
    • Paul Moore's avatar
      audit: improve audit queue handling when "audit=1" on cmdline · b8d9e0ae
      Paul Moore authored
      
      
      commit f26d0433 upstream.
      
      When an admin enables audit at early boot via the "audit=1" kernel
      command line the audit queue behavior is slightly different; the
      audit subsystem goes to greater lengths to avoid dropping records,
      which unfortunately can result in problems when the audit daemon is
      forcibly stopped for an extended period of time.
      
      This patch makes a number of changes designed to improve the audit
      queuing behavior so that leaving the audit daemon in a stopped state
      for an extended period does not cause a significant impact to the
      system.
      
      - kauditd_send_queue() is now limited to looping through the
        passed queue only once per call.  This not only prevents the
        function from looping indefinitely when records are returned
        to the current queue, it also allows any recovery handling in
        kauditd_thread() to take place when kauditd_send_queue()
        returns.
      
      - Transient netlink send errors seen as -EAGAIN now cause the
        record to be returned to the retry queue instead of going to
        the hold queue.  The intention of the hold queue is to store,
        perhaps for an extended period of time, the events which led
        up to the audit daemon going offline.  The retry queue remains
        a temporary queue intended to protect against transient issues
        between the kernel and the audit daemon.
      
      - The retry queue is now limited by the audit_backlog_limit
        setting, the same as the other queues.  This allows admins
        to bound the size of all of the audit queues on the system.
      
      - kauditd_rehold_skb() now returns records to the end of the
        hold queue to ensure ordering is preserved in the face of
        recent changes to kauditd_send_queue().
      
      Cc: stable@vger.kernel.org
      Fixes: 5b52330b ("audit: fix auditd/kernel connection state tracking")
      Fixes: f4b3ee3c ("audit: improve robustness of the audit queue handling")
      Reported-by: default avatarGaosheng Cui <cuigaosheng1@huawei.com>
      Tested-by: default avatarGaosheng Cui <cuigaosheng1@huawei.com>
      Reviewed-by: default avatarRichard Guy Briggs <rgb@redhat.com>
      Signed-off-by: default avatarPaul Moore <paul@paul-moore.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b8d9e0ae
    • Vratislav Bendel's avatar
      selinux: fix double free of cond_list on error paths · 70caa32e
      Vratislav Bendel authored
      
      
      commit 186edf7e upstream.
      
      On error path from cond_read_list() and duplicate_policydb_cond_list()
      the cond_list_destroy() gets called a second time in caller functions,
      resulting in NULL pointer deref.  Fix this by resetting the
      cond_list_len to 0 in cond_list_destroy(), making subsequent calls a
      noop.
      
      Also consistently reset the cond_list pointer to NULL after freeing.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarVratislav Bendel <vbendel@redhat.com>
      [PM: fix line lengths in the description]
      Signed-off-by: default avatarPaul Moore <paul@paul-moore.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      70caa32e
    • Ville Syrjälä's avatar
      drm/i915: Disable DSB usage for now · d63d077f
      Ville Syrjälä authored
      commit 99510e1a upstream.
      
      Turns out the DSB has trouble correctly loading the gamma LUT.
      From a cursory look maybe like some entries do not load
      properly, or they get loaded with some gibberish. Unfortunately
      our current kms_color/etc. tests do not seem to catch this.
      
      I had a brief look at the generated DSB batch and it looked
      correct. Tried a few quick tricks like writing the index
      register twice/etc. but didn't see any improvement.
      Also tried switching to the 10bit gamma mode in case
      there is yet another issue with the multi-segment mode, but
      even the 10bit mode was showing issues.
      
      Switching to mmio fixes all of it. I suppose one theory is that
      maybe the DSB bangs on the LUT too quickly and it can't keep up
      and instead some data either gets dropped or corrupted. To confirm
      that someone should try to slow down the DSB's progress a bit.
      Another thought was that maybe the LUT has crappy dual porting
      and you get contention if you try to load it during active
      scanout. But why then would the mmio path work, unless it's
      just sufficiently slow?
      
      Whatever the case, this is currently busted so let's disable
      it until we get to the root of the problem.
      
      Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/3916
      
      
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211014181856.17581-2-ville.syrjala@linux.intel.com
      
      
      Reviewed-by: default avatarUma Shankar <uma.shankar@intel.com>
      Cc: Mario Kleiner <mario.kleiner.de@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d63d077f
  2. Feb 06, 2022