1. 06 Jun, 2022 30 commits
    • Sean Christopherson's avatar
      KVM: x86: Use __try_cmpxchg_user() to update guest PTE A/D bits · 38b88891
      Sean Christopherson authored
      commit f122dfe4 upstream.
      
      Use the recently introduced __try_cmpxchg_user() to update guest PTE A/D
      bits instead of mapping the PTE into kernel address space.  The VM_PFNMAP
      path is broken as it assumes that vm_pgoff is the base pfn of the mapped
      VMA range, which is conceptually wrong as vm_pgoff is the offset relative
      to the file and has nothing to do with the pfn.  The horrific hack worked
      for the original use case (backing guest memory with /dev/mem), but leads
      to accessing "random" pfns for pretty much any other VM_PFNMAP case.
      
      Fixes: bd53cb35
      
       ("X86/KVM: Handle PFNs outside of kernel reach when touching GPTEs")
      Debugged-by: default avatarTadeusz Struk <tadeusz.struk@linaro.org>
      Tested-by: default avatarTadeusz Struk <tadeusz.struk@linaro.org>
      Reported-by: syzbot+6cde2282daa792c49ab8@syzkaller.appspotmail.com
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Message-Id: <20220202004945.2540433-4-seanjc@google.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      38b88891
    • Peter Zijlstra's avatar
      x86/uaccess: Implement macros for CMPXCHG on user addresses · a742f359
      Peter Zijlstra authored
      commit 989b5db2
      
       upstream.
      
      Add support for CMPXCHG loops on userspace addresses.  Provide both an
      "unsafe" version for tight loops that do their own uaccess begin/end, as
      well as a "safe" version for use cases where the CMPXCHG is not buried in
      a loop, e.g. KVM will resume the guest instead of looping when emulation
      of a guest atomic accesses fails the CMPXCHG.
      
      Provide 8-byte versions for 32-bit kernels so that KVM can do CMPXCHG on
      guest PAE PTEs, which are accessed via userspace addresses.
      
      Guard the asm_volatile_goto() variation with CC_HAS_ASM_GOTO_TIED_OUTPUT,
      the "+m" constraint fails on some compilers that otherwise support
      CC_HAS_ASM_GOTO_OUTPUT.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Co-developed-by: default avatarSean Christopherson <seanjc@google.com>
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Message-Id: <20220202004945.2540433-3-seanjc@google.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a742f359
    • Paolo Bonzini's avatar
      x86, kvm: use correct GFP flags for preemption disabled · d8b23d95
      Paolo Bonzini authored
      commit baec4f5a
      
       upstream.
      
      Commit ddd7ed842627 ("x86/kvm: Alloc dummy async #PF token outside of
      raw spinlock") leads to the following Smatch static checker warning:
      
      	arch/x86/kernel/kvm.c:212 kvm_async_pf_task_wake()
      	warn: sleeping in atomic context
      
      arch/x86/kernel/kvm.c
          202         raw_spin_lock(&b->lock);
          203         n = _find_apf_task(b, token);
          204         if (!n) {
          205                 /*
          206                  * Async #PF not yet handled, add a dummy entry for the token.
          207                  * Allocating the token must be down outside of the raw lock
          208                  * as the allocator is preemptible on PREEMPT_RT kernels.
          209                  */
          210                 if (!dummy) {
          211                         raw_spin_unlock(&b->lock);
      --> 212                         dummy = kzalloc(sizeof(*dummy), GFP_KERNEL);
                                                                      ^^^^^^^^^^
      Smatch thinks the caller has preempt disabled.  The `smdb.py preempt
      kvm_async_pf_task_wake` output call tree is:
      
      sysvec_kvm_asyncpf_interrupt() <- disables preempt
      -> __sysvec_kvm_asyncpf_interrupt()
         -> kvm_async_pf_task_wake()
      
      The caller is this:
      
      arch/x86/kernel/kvm.c
         290        DEFINE_IDTENTRY_SYSVEC(sysvec_kvm_asyncpf_interrupt)
         291        {
         292                struct pt_regs *old_regs = set_irq_regs(regs);
         293                u32 token;
         294
         295                ack_APIC_irq();
         296
         297                inc_irq_stat(irq_hv_callback_count);
         298
         299                if (__this_cpu_read(apf_reason.enabled)) {
         300                        token = __this_cpu_read(apf_reason.token);
         301                        kvm_async_pf_task_wake(token);
         302                        __this_cpu_write(apf_reason.token, 0);
         303                        wrmsrl(MSR_KVM_ASYNC_PF_ACK, 1);
         304                }
         305
         306                set_irq_regs(old_regs);
         307        }
      
      The DEFINE_IDTENTRY_SYSVEC() is a wrapper that calls this function
      from the call_on_irqstack_cond().  It's inside the call_on_irqstack_cond()
      where preempt is disabled (unless it's already disabled).  The
      irq_enter/exit_rcu() functions disable/enable preempt.
      Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d8b23d95
    • Sean Christopherson's avatar
      x86/kvm: Alloc dummy async #PF token outside of raw spinlock · 8f4ae296
      Sean Christopherson authored
      commit 0547758a
      
       upstream.
      
      Drop the raw spinlock in kvm_async_pf_task_wake() before allocating the
      the dummy async #PF token, the allocator is preemptible on PREEMPT_RT
      kernels and must not be called from truly atomic contexts.
      
      Opportunistically document why it's ok to loop on allocation failure,
      i.e. why the function won't get stuck in an infinite loop.
      Reported-by: default avatarYajun Deng <yajun.deng@linux.dev>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8f4ae296
    • Sean Christopherson's avatar
      x86/fpu: KVM: Set the base guest FPU uABI size to sizeof(struct kvm_xsave) · 9cf15ebb
      Sean Christopherson authored
      commit d187ba53 upstream.
      
      Set the starting uABI size of KVM's guest FPU to 'struct kvm_xsave',
      i.e. to KVM's historical uABI size.  When saving FPU state for usersapce,
      KVM (well, now the FPU) sets the FP+SSE bits in the XSAVE header even if
      the host doesn't support XSAVE.  Setting the XSAVE header allows the VM
      to be migrated to a host that does support XSAVE without the new host
      having to handle FPU state that may or may not be compatible with XSAVE.
      
      Setting the uABI size to the host's default size results in out-of-bounds
      writes (setting the FP+SSE bits) and data corruption (that is thankfully
      caught by KASAN) when running on hosts without XSAVE, e.g. on Core2 CPUs.
      
      WARN if the default size is larger than KVM's historical uABI size; all
      features that can push the FPU size beyond the historical size must be
      opt-in.
      
        ==================================================================
        BUG: KASAN: slab-out-of-bounds in fpu_copy_uabi_to_guest_fpstate+0x86/0x130
        Read of size 8 at addr ffff888011e33a00 by task qemu-build/681
        CPU: 1 PID: 681 Comm: qemu-build Not tainted 5.18.0-rc5-KASAN-amd64 #1
        Hardware name:  /DG35EC, BIOS ECG3510M.86A.0118.2010.0113.1426 01/13/2010
        Call Trace:
         <TASK>
         dump_stack_lvl+0x34/0x45
         print_report.cold+0x45/0x575
         kasan_report+0x9b/0xd0
         fpu_copy_uabi_to_guest_fpstate+0x86/0x130
         kvm_arch_vcpu_ioctl+0x72a/0x1c50 [kvm]
         kvm_vcpu_ioctl+0x47f/0x7b0 [kvm]
         __x64_sys_ioctl+0x5de/0xc90
         do_syscall_64+0x31/0x50
         entry_SYSCALL_64_after_hwframe+0x44/0xae
         </TASK>
        Allocated by task 0:
        (stack is not available)
        The buggy address belongs to the object at ffff888011e33800
         which belongs to the cache kmalloc-512 of size 512
        The buggy address is located 0 bytes to the right of
         512-byte region [ffff888011e33800, ffff888011e33a00)
        The buggy address belongs to the physical page:
        page:0000000089cd4adb refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x11e30
        head:0000000089cd4adb order:2 compound_mapcount:0 compound_pincount:0
        flags: 0x4000000000010200(slab|head|zone=1)
        raw: 4000000000010200 dead000000000100 dead000000000122 ffff888001041c80
        raw: 0000000000000000 0000000080100010 00000001ffffffff 0000000000000000
        page dumped because: kasan: bad access detected
        Memory state around the buggy address:
         ffff888011e33900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
         ffff888011e33980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        >ffff888011e33a00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
                           ^
         ffff888011e33a80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
         ffff888011e33b00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
        ==================================================================
        Disabling lock debugging due to kernel taint
      
      Fixes: be50b206 ("kvm: x86: Add support for getting/setting expanded xstate buffer")
      Fixes: c60427dd
      
       ("x86/fpu: Add uabi_size to guest_fpu")
      Reported-by: default avatarZdenek Kaspar <zkaspar82@gmail.com>
      Cc: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: kvm@vger.kernel.org
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Tested-by: default avatarZdenek Kaspar <zkaspar82@gmail.com>
      Message-Id: <20220504001219.983513-1-seanjc@google.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9cf15ebb
    • Xiaomeng Tong's avatar
      KVM: PPC: Book3S HV: fix incorrect NULL check on list iterator · 42767265
      Xiaomeng Tong authored
      commit 300981ab upstream.
      
      The bug is here:
      	if (!p)
                      return ret;
      
      The list iterator value 'p' will *always* be set and non-NULL by
      list_for_each_entry(), so it is incorrect to assume that the iterator
      value will be NULL if the list is empty or no element is found.
      
      To fix the bug, Use a new value 'iter' as the list iterator, while use
      the old value 'p' as a dedicated variable to point to the found element.
      
      Fixes: dfaa973a
      
       ("KVM: PPC: Book3S HV: In H_SVM_INIT_DONE, migrate remaining normal-GFNs to secure-GFNs")
      Cc: stable@vger.kernel.org # v5.9+
      Signed-off-by: default avatarXiaomeng Tong <xiam0nd.tong@gmail.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20220414062103.8153-1-xiam0nd.tong@gmail.com
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      42767265
    • Florian Westphal's avatar
      netfilter: conntrack: re-fetch conntrack after insertion · 04f9e910
      Florian Westphal authored
      commit 56b14ece upstream.
      
      In case the conntrack is clashing, insertion can free skb->_nfct and
      set skb->_nfct to the already-confirmed entry.
      
      This wasn't found before because the conntrack entry and the extension
      space used to free'd after an rcu grace period, plus the race needs
      events enabled to trigger.
      
      Reported-by: <syzbot+793a590957d9c1b96620@syzkaller.appspotmail.com>
      Fixes: 71d8c47f ("netfilter: conntrack: introduce clash resolution on insertion race")
      Fixes: 2ad9d774
      
       ("netfilter: conntrack: free extension area immediately")
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      04f9e910
    • Pablo Neira Ayuso's avatar
      netfilter: nf_tables: double hook unregistration in netns path · a3940dcf
      Pablo Neira Ayuso authored
      commit f9a43007 upstream.
      
      __nft_release_hooks() is called from pre_netns exit path which
      unregisters the hooks, then the NETDEV_UNREGISTER event is triggered
      which unregisters the hooks again.
      
      [  565.221461] WARNING: CPU: 18 PID: 193 at net/netfilter/core.c:495 __nf_unregister_net_hook+0x247/0x270
      [...]
      [  565.246890] CPU: 18 PID: 193 Comm: kworker/u64:1 Tainted: G            E     5.18.0-rc7+ #27
      [  565.253682] Workqueue: netns cleanup_net
      [  565.257059] RIP: 0010:__nf_unregister_net_hook+0x247/0x270
      [...]
      [  565.297120] Call Trace:
      [  565.300900]  <TASK>
      [  565.304683]  nf_tables_flowtable_event+0x16a/0x220 [nf_tables]
      [  565.308518]  raw_notifier_call_chain+0x63/0x80
      [  565.312386]  unregister_netdevice_many+0x54f/0xb50
      
      Unregister and destroy netdev hook from netns pre_exit via kfree_rcu
      so the NETDEV_UNREGISTER path see unregistered hooks.
      
      Fixes: 767d1216
      
       ("netfilter: nftables: fix possible UAF over chains from packet path in netns")
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a3940dcf
    • Pablo Neira Ayuso's avatar
      netfilter: nf_tables: hold mutex on netns pre_exit path · f2a489fa
      Pablo Neira Ayuso authored
      commit 3923b1e4 upstream.
      
      clean_net() runs in workqueue while walking over the lists, grab mutex.
      
      Fixes: 767d1216
      
       ("netfilter: nftables: fix possible UAF over chains from packet path in netns")
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f2a489fa
    • Pablo Neira Ayuso's avatar
      netfilter: nf_tables: sanitize nft_set_desc_concat_parse() · c88f3e3d
      Pablo Neira Ayuso authored
      commit fecf31ee upstream.
      
      Add several sanity checks for nft_set_desc_concat_parse():
      
      - validate desc->field_count not larger than desc->field_len array.
      - field length cannot be larger than desc->field_len (ie. U8_MAX)
      - total length of the concatenation cannot be larger than register array.
      
      Joint work with Florian Westphal.
      
      Fixes: f3a2181e
      
       ("netfilter: nf_tables: Support for sets with multiple ranged fields")
      Reported-by: <zhangziming.zzm@antgroup.com>
      Reviewed-by: default avatarStefano Brivio <sbrivio@redhat.com>
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c88f3e3d
    • Phil Sutter's avatar
      netfilter: nft_limit: Clone packet limits' cost value · 67429e67
      Phil Sutter authored
      commit 558254b0 upstream.
      
      When cloning a packet-based limit expression, copy the cost value as
      well. Otherwise the new limit is not functional anymore.
      
      Fixes: 3b9e2ea6
      
       ("netfilter: nft_limit: move stateful fields out of expression data")
      Signed-off-by: default avatarPhil Sutter <phil@nwl.cc>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      67429e67
    • Tadeusz Struk's avatar
      exfat: check if cluster num is valid · 7c58b14b
      Tadeusz Struk authored
      commit 64ba4b15 upstream.
      
      Syzbot reported slab-out-of-bounds read in exfat_clear_bitmap.
      This was triggered by reproducer calling truncute with size 0,
      which causes the following trace:
      
      BUG: KASAN: slab-out-of-bounds in exfat_clear_bitmap+0x147/0x490 fs/exfat/balloc.c:174
      Read of size 8 at addr ffff888115aa9508 by task syz-executor251/365
      
      Call Trace:
       __dump_stack lib/dump_stack.c:77 [inline]
       dump_stack_lvl+0x1e2/0x24b lib/dump_stack.c:118
       print_address_description+0x81/0x3c0 mm/kasan/report.c:233
       __kasan_report mm/kasan/report.c:419 [inline]
       kasan_report+0x1a4/0x1f0 mm/kasan/report.c:436
       __asan_report_load8_noabort+0x14/0x20 mm/kasan/report_generic.c:309
       exfat_clear_bitmap+0x147/0x490 fs/exfat/balloc.c:174
       exfat_free_cluster+0x25a/0x4a0 fs/exfat/fatent.c:181
       __exfat_truncate+0x99e/0xe00 fs/exfat/file.c:217
       exfat_truncate+0x11b/0x4f0 fs/exfat/file.c:243
       exfat_setattr+0xa03/0xd40 fs/exfat/file.c:339
       notify_change+0xb76/0xe10 fs/attr.c:336
       do_truncate+0x1ea/0x2d0 fs/open.c:65
      
      Move the is_valid_cluster() helper from fatent.c to a common
      header to make it reusable in other *.c files. And add is_valid_cluster()
      to validate if cluster number is within valid range in exfat_clear_bitmap()
      and exfat_set_bitmap().
      
      Link: https://syzkaller.appspot.com/bug?id=50381fc73821ecae743b8cf24b4c9a04776f767c
      Reported-by: syzbot+a4087e40b9c13aad7892@syzkaller.appspotmail.com
      Fixes: 1e49a94c
      
       ("exfat: add bitmap operations")
      Cc: stable@vger.kernel.org # v5.7+
      Signed-off-by: default avatarTadeusz Struk <tadeusz.struk@linaro.org>
      Reviewed-by: default avatarSungjong Seo <sj1557.seo@samsung.com>
      Signed-off-by: default avatarNamjae Jeon <linkinjeon@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7c58b14b
    • Gustavo A. R. Silva's avatar
      drm/i915: Fix -Wstringop-overflow warning in call to intel_read_wm_latency() · ad4b2dc2
      Gustavo A. R. Silva authored
      commit 336feb50 upstream.
      
      Fix the following -Wstringop-overflow warnings when building with GCC-11:
      
      drivers/gpu/drm/i915/intel_pm.c:3106:9: warning: ‘intel_read_wm_latency’ accessing 16 bytes in a region of size 10 [-Wstringop-overflow=]
       3106 |         intel_read_wm_latency(dev_priv, dev_priv->wm.pri_latency);
            |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/gpu/drm/i915/intel_pm.c:3106:9: note: referencing argument 2 of type ‘u16 *’ {aka ‘short unsigned int *’}
      drivers/gpu/drm/i915/intel_pm.c:2861:13: note: in a call to function ‘intel_read_wm_latency’
       2861 | static void intel_read_wm_latency(struct drm_i915_private *dev_priv,
            |             ^~~~~~~~~~~~~~~~~~~~~
      
      by removing the over-specified array size from the argument declarations.
      
      It seems that this code is actually safe because the size of the
      array depends on the hardware generation, and the function checks
      for that.
      
      Notice that wm can be an array of 5 elements:
      drivers/gpu/drm/i915/intel_pm.c:3109:   intel_read_wm_latency(dev_priv, dev_priv->wm.pri_latency);
      
      or an array of 8 elements:
      drivers/gpu/drm/i915/intel_pm.c:3131:   intel_read_wm_latency(dev_priv, dev_priv->wm.skl_latency);
      
      and the compiler legitimately complains about that.
      
      This helps with the ongoing efforts to globally enable
      -Wstringop-overflow.
      
      Link: https://github.com/KSPP/linux/issues/181
      
      Signed-off-by: default avatarGustavo A. R. Silva <gustavoars@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ad4b2dc2
    • Alex Elder's avatar
      net: ipa: compute proper aggregation limit · 467ef519
      Alex Elder authored
      commit c5794097
      
       upstream.
      
      The aggregation byte limit for an endpoint is currently computed
      based on the endpoint's receive buffer size.
      
      However, some bytes at the front of each receive buffer are reserved
      on the assumption that--as with SKBs--it might be useful to insert
      data (such as headers) before what lands in the buffer.
      
      The aggregation byte limit currently doesn't take into account that
      reserved space, and as a result, aggregation could require space
      past that which is available in the buffer.
      
      Fix this by reducing the size used to compute the aggregation byte
      limit by the NET_SKB_PAD offset reserved for each receive buffer.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      467ef519
    • David Howells's avatar
      pipe: Fix missing lock in pipe_resize_ring() · f0d6abaa
      David Howells authored
      commit 189b0ddc upstream.
      
      pipe_resize_ring() needs to take the pipe->rd_wait.lock spinlock to
      prevent post_one_notification() from trying to insert into the ring
      whilst the ring is being replaced.
      
      The occupancy check must be done after the lock is taken, and the lock
      must be taken after the new ring is allocated.
      
      The bug can lead to an oops looking something like:
      
       BUG: KASAN: use-after-free in post_one_notification.isra.0+0x62e/0x840
       Read of size 4 at addr ffff88801cc72a70 by task poc/27196
       ...
       Call Trace:
        post_one_notification.isra.0+0x62e/0x840
        __post_watch_notification+0x3b7/0x650
        key_create_or_update+0xb8b/0xd20
        __do_sys_add_key+0x175/0x340
        __x64_sys_add_key+0xbe/0x140
        do_syscall_64+0x5c/0xc0
        entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      Reported by Selim Enes Karaduman @Enesdex working with Trend Micro Zero
      Day Initiative.
      
      Fixes: c73be61c
      
       ("pipe: Add general notification queue support")
      Reported-by: zdi-disclosures@trendmicro.com # ZDI-CAN-17291
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f0d6abaa
    • Kuniyuki Iwashima's avatar
      pipe: make poll_usage boolean and annotate its access · f66c5a2a
      Kuniyuki Iwashima authored
      commit f485922d upstream.
      
      Patch series "Fix data-races around epoll reported by KCSAN."
      
      This series suppresses a false positive KCSAN's message and fixes a real
      data-race.
      
      
      This patch (of 2):
      
      pipe_poll() runs locklessly and assigns 1 to poll_usage.  Once poll_usage
      is set to 1, it never changes in other places.  However, concurrent writes
      of a value trigger KCSAN, so let's make KCSAN happy.
      
      BUG: KCSAN: data-race in pipe_poll / pipe_poll
      
      write to 0xffff8880042f6678 of 4 bytes by task 174 on cpu 3:
       pipe_poll (fs/pipe.c:656)
       ep_item_poll.isra.0 (./include/linux/poll.h:88 fs/eventpoll.c:853)
       do_epoll_wait (fs/eventpoll.c:1692 fs/eventpoll.c:1806 fs/eventpoll.c:2234)
       __x64_sys_epoll_wait (fs/eventpoll.c:2246 fs/eventpoll.c:2241 fs/eventpoll.c:2241)
       do_syscall_64 (arch/x86/entry/common.c:50 arch/x86/entry/common.c:80)
       entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:113)
      
      write to 0xffff8880042f6678 of 4 bytes by task 177 on cpu 1:
       pipe_poll (fs/pipe.c:656)
       ep_item_poll.isra.0 (./include/linux/poll.h:88 fs/eventpoll.c:853)
       do_epoll_wait (fs/eventpoll.c:1692 fs/eventpoll.c:1806 fs/eventpoll.c:2234)
       __x64_sys_epoll_wait (fs/eventpoll.c:2246 fs/eventpoll.c:2241 fs/eventpoll.c:2241)
       do_syscall_64 (arch/x86/entry/common.c:50 arch/x86/entry/common.c:80)
       entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:113)
      
      Reported by Kernel Concurrency Sanitizer on:
      CPU: 1 PID: 177 Comm: epoll_race Not tainted 5.17.0-58927-gf443e374 #6
      Hardware name: Red Hat KVM, BIOS 1.11.0-2.amzn2 04/01/2014
      
      Link: https://lkml.kernel.org/r/20220322002653.33865-1-kuniyu@amazon.co.jp
      Link: https://lkml.kernel.org/r/20220322002653.33865-2-kuniyu@amazon.co.jp
      Fixes: 3b844826
      
       ("pipe: avoid unnecessary EPOLLET wakeups under normal loads")
      Signed-off-by: default avatarKuniyuki Iwashima <kuniyu@amazon.co.jp>
      Cc: Alexander Duyck <alexander.h.duyck@intel.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Kuniyuki Iwashima <kuni1840@gmail.com>
      Cc: "Soheil Hassas Yeganeh" <soheil@google.com>
      Cc: "Sridhar Samudrala" <sridhar.samudrala@intel.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f66c5a2a
    • Stephen Brennan's avatar
      assoc_array: Fix BUG_ON during garbage collect · 33c6a5ee
      Stephen Brennan authored
      commit d1dc8776 upstream.
      
      A rare BUG_ON triggered in assoc_array_gc:
      
          [3430308.818153] kernel BUG at lib/assoc_array.c:1609!
      
      Which corresponded to the statement currently at line 1593 upstream:
      
          BUG_ON(assoc_array_ptr_is_meta(p));
      
      Using the data from the core dump, I was able to generate a userspace
      reproducer[1] and determine the cause of the bug.
      
      [1]: https://github.com/brenns10/kernel_stuff/tree/master/assoc_array_gc
      
      After running the iterator on the entire branch, an internal tree node
      looked like the following:
      
          NODE (nr_leaves_on_branch: 3)
            SLOT [0] NODE (2 leaves)
            SLOT [1] NODE (1 leaf)
            SLOT [2..f] NODE (empty)
      
      In the userspace reproducer, the pr_devel output when compressing this
      node was:
      
          -- compress node 0x5607cc089380 --
          free=0, leaves=0
          [0] retain node 2/1 [nx 0]
          [1] fold node 1/1 [nx 0]
          [2] fold node 0/1 [nx 2]
          [3] fold node 0/2 [nx 2]
          [4] fold node 0/3 [nx 2]
          [5] fold node 0/4 [nx 2]
          [6] fold node 0/5 [nx 2]
          [7] fold node 0/6 [nx 2]
          [8] fold node 0/7 [nx 2]
          [9] fold node 0/8 [nx 2]
          [10] fold node 0/9 [nx 2]
          [11] fold node 0/10 [nx 2]
          [12] fold node 0/11 [nx 2]
          [13] fold node 0/12 [nx 2]
          [14] fold node 0/13 [nx 2]
          [15] fold node 0/14 [nx 2]
          after: 3
      
      At slot 0, an internal node with 2 leaves could not be folded into the
      node, because there was only one available slot (slot 0). Thus, the
      internal node was retained. At slot 1, the node had one leaf, and was
      able to be folded in successfully. The remaining nodes had no leaves,
      and so were removed. By the end of the compression stage, there were 14
      free slots, and only 3 leaf nodes. The tree was ascended and then its
      parent node was compressed. When this node was seen, it could not be
      folded, due to the internal node it contained.
      
      The invariant for compression in this function is: whenever
      nr_leaves_on_branch < ASSOC_ARRAY_FAN_OUT, the node should contain all
      leaf nodes. The compression step currently cannot guarantee this, given
      the corner case shown above.
      
      To fix this issue, retry compression whenever we have retained a node,
      and yet nr_leaves_on_branch < ASSOC_ARRAY_FAN_OUT. This second
      compression will then allow the node in slot 1 to be folded in,
      satisfying the invariant. Below is the output of the reproducer once the
      fix is applied:
      
          -- compress node 0x560e9c562380 --
          free=0, leaves=0
          [0] retain node 2/1 [nx 0]
          [1] fold node 1/1 [nx 0]
          [2] fold node 0/1 [nx 2]
          [3] fold node 0/2 [nx 2]
          [4] fold node 0/3 [nx 2]
          [5] fold node 0/4 [nx 2]
          [6] fold node 0/5 [nx 2]
          [7] fold node 0/6 [nx 2]
          [8] fold node 0/7 [nx 2]
          [9] fold node 0/8 [nx 2]
          [10] fold node 0/9 [nx 2]
          [11] fold node 0/10 [nx 2]
          [12] fold node 0/11 [nx 2]
          [13] fold node 0/12 [nx 2]
          [14] fold node 0/13 [nx 2]
          [15] fold node 0/14 [nx 2]
          internal nodes remain despite enough space, retrying
          -- compress node 0x560e9c562380 --
          free=14, leaves=1
          [0] fold node 2/15 [nx 0]
          after: 3
      
      Changes
      =======
      DH:
       - Use false instead of 0.
       - Reorder the inserted lines in a couple of places to put retained before
         next_slot.
      
      ver #2)
       - Fix typo in pr_devel, correct comparison to "<="
      
      Fixes: 3cb98950
      
       ("Add a generic associative array implementation.")
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarStephen Brennan <stephen.s.brennan@oracle.com>
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      cc: Andrew Morton <akpm@linux-foundation.org>
      cc: keyrings@vger.kernel.org
      Link: https://lore.kernel.org/r/20220511225517.407935-1-stephen.s.brennan@oracle.com/ # v1
      Link: https://lore.kernel.org/r/20220512215045.489140-1-stephen.s.brennan@oracle.com/
      
       # v2
      Reviewed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      33c6a5ee
    • Dan Carpenter's avatar
      i2c: ismt: prevent memory corruption in ismt_access() · fc2f9ee7
      Dan Carpenter authored
      commit 690b2549 upstream.
      
      The "data->block[0]" variable comes from the user and is a number
      between 0-255.  It needs to be capped to prevent writing beyond the end
      of dma_buffer[].
      
      Fixes: 5e9a97b1
      
       ("i2c: ismt: Adding support for I2C_SMBUS_BLOCK_PROC_CALL")
      Reported-and-tested-by: default avatarZheyu Ma <zheyuma97@gmail.com>
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Reviewed-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fc2f9ee7
    • Pablo Neira Ayuso's avatar
      netfilter: nf_tables: disallow non-stateful expression in sets earlier · d8db0465
      Pablo Neira Ayuso authored
      commit 52077804 upstream.
      
      Since 3e135cd4 ("netfilter: nft_dynset: dynamic stateful expression
      instantiation"), it is possible to attach stateful expressions to set
      elements.
      
      cd5125d8 ("netfilter: nf_tables: split set destruction in deactivate
      and destroy phase") introduces conditional destruction on the object to
      accomodate transaction semantics.
      
      nft_expr_init() calls expr->ops->init() first, then check for
      NFT_STATEFUL_EXPR, this stills allows to initialize a non-stateful
      lookup expressions which points to a set, which might lead to UAF since
      the set is not properly detached from the set->binding for this case.
      Anyway, this combination is non-sense from nf_tables perspective.
      
      This patch fixes this problem by checking for NFT_STATEFUL_EXPR before
      expr->ops->init() is called.
      
      The reporter provides a KASAN splat and a poc reproducer (similar to
      those autogenerated by syzbot to report use-after-free errors). It is
      unknown to me if they are using syzbot or if they use similar automated
      tool to locate the bug that they are reporting.
      
      For the record, this is the KASAN splat.
      
      [   85.431824] ==================================================================
      [   85.432901] BUG: KASAN: use-after-free in nf_tables_bind_set+0x81b/0xa20
      [   85.433825] Write of size 8 at addr ffff8880286f0e98 by task poc/776
      [   85.434756]
      [   85.434999] CPU: 1 PID: 776 Comm: poc Tainted: G        W         5.18.0+ #2
      [   85.436023] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-2 04/01/2014
      
      Fixes: 0b2d8a7b
      
       ("netfilter: nf_tables: add helper functions for expression handling")
      Reported-and-tested-by: default avatarAaron Adams <edg-e@nccgroup.com>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d8db0465
    • Piyush Malgujar's avatar
      drivers: i2c: thunderx: Allow driver to work with ACPI defined TWSI controllers · 9fa0d64f
      Piyush Malgujar authored
      [ Upstream commit 03a35bc8
      
       ]
      
      Due to i2c->adap.dev.fwnode not being set, ACPI_COMPANION() wasn't properly
      found for TWSI controllers.
      Signed-off-by: default avatarSzymon Balcerak <sbalcerak@marvell.com>
      Signed-off-by: default avatarPiyush Malgujar <pmalgujar@marvell.com>
      Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9fa0d64f
    • Mika Westerberg's avatar
      i2c: ismt: Provide a DMA buffer for Interrupt Cause Logging · 9cfcf2ce
      Mika Westerberg authored
      [ Upstream commit 17a0f3ac
      
       ]
      
      Before sending a MSI the hardware writes information pertinent to the
      interrupt cause to a memory location pointed by SMTICL register. This
      memory holds three double words where the least significant bit tells
      whether the interrupt cause of master/target/error is valid. The driver
      does not use this but we need to set it up because otherwise it will
      perform DMA write to the default address (0) and this will cause an
      IOMMU fault such as below:
      
        DMAR: DRHD: handling fault status reg 2
        DMAR: [DMA Write] Request device [00:12.0] PASID ffffffff fault addr 0
              [fault reason 05] PTE Write access is not set
      
      To prevent this from happening, provide a proper DMA buffer for this
      that then gets mapped by the IOMMU accordingly.
      Signed-off-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
      Reviewed-by: default avatarFrom: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9cfcf2ce
    • Joel Stanley's avatar
      net: ftgmac100: Disable hardware checksum on AST2600 · 07333169
      Joel Stanley authored
      [ Upstream commit 6fd45e79
      
       ]
      
      The AST2600 when using the i210 NIC over NC-SI has been observed to
      produce incorrect checksum results with specific MTU values. This was
      first observed when sending data across a long distance set of networks.
      
      On a local network, the following test was performed using a 1MB file of
      random data.
      
      On the receiver run this script:
      
       #!/bin/bash
       while [ 1 ]; do
              # Zero the stats
              nstat -r  > /dev/null
              nc -l 9899 > test-file
              # Check for checksum errors
              TcpInCsumErrors=$(nstat | grep TcpInCsumErrors)
              if [ -z "$TcpInCsumErrors" ]; then
                      echo No TcpInCsumErrors
              else
                      echo TcpInCsumErrors = $TcpInCsumErrors
              fi
       done
      
      On an AST2600 system:
      
       # nc <IP of  receiver host> 9899 < test-file
      
      The test was repeated with various MTU values:
      
       # ip link set mtu 1410 dev eth0
      
      The observed results:
      
       1500 - good
       1434 - bad
       1400 - good
       1410 - bad
       1420 - good
      
      The test was repeated after disabling tx checksumming:
      
       # ethtool -K eth0 tx-checksumming off
      
      And all MTU values tested resulted in transfers without error.
      
      An issue with the driver cannot be ruled out, however there has been no
      bug discovered so far.
      
      David has done the work to take the original bug report of slow data
      transfer between long distance connections and triaged it down to this
      test case.
      
      The vendor suspects this this is a hardware issue when using NC-SI. The
      fixes line refers to the patch that introduced AST2600 support.
      Reported-by: default avatarDavid Wilder <wilder@us.ibm.com>
      Reviewed-by: default avatarDylan Hung <dylan_hung@aspeedtech.com>
      Signed-off-by: default avatarJoel Stanley <joel@jms.id.au>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      07333169
    • Lin Ma's avatar
      nfc: pn533: Fix buggy cleanup order · 27836e86
      Lin Ma authored
      [ Upstream commit b8cedb70
      
       ]
      
      When removing the pn533 device (i2c or USB), there is a logic error. The
      original code first cancels the worker (flush_delayed_work) and then
      destroys the workqueue (destroy_workqueue), leaving the timer the last
      one to be deleted (del_timer). This result in a possible race condition
      in a multi-core preempt-able kernel. That is, if the cleanup
      (pn53x_common_clean) is concurrently run with the timer handler
      (pn533_listen_mode_timer), the timer can queue the poll_work to the
      already destroyed workqueue, causing use-after-free.
      
      This patch reorder the cleanup: it uses the del_timer_sync to make sure
      the handler is finished before the routine will destroy the workqueue.
      Note that the timer cannot be activated by the worker again.
      
      static void pn533_wq_poll(struct work_struct *work)
      ...
       rc = pn533_send_poll_frame(dev);
       if (rc)
         return;
      
       if (cur_mod->len == 0 && dev->poll_mod_count > 1)
         mod_timer(&dev->listen_timer, ...);
      
      That is, the mod_timer can be called only when pn533_send_poll_frame()
      returns no error, which is impossible because the device is detaching
      and the lower driver should return ENODEV code.
      Signed-off-by: default avatarLin Ma <linma@zju.edu.cn>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      27836e86
    • Thomas Bartschies's avatar
      net: af_key: check encryption module availability consistency · 888854fc
      Thomas Bartschies authored
      [ Upstream commit 015c44d7
      
       ]
      
      Since the recent introduction supporting the SM3 and SM4 hash algos for IPsec, the kernel
      produces invalid pfkey acquire messages, when these encryption modules are disabled. This
      happens because the availability of the algos wasn't checked in all necessary functions.
      This patch adds these checks.
      Signed-off-by: default avatarThomas Bartschies <thomas.bartschies@cvk.de>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      888854fc
    • Al Viro's avatar
      percpu_ref_init(): clean ->percpu_count_ref on failure · 683a786b
      Al Viro authored
      [ Upstream commit a9171431
      
       ]
      
      That way percpu_ref_exit() is safe after failing percpu_ref_init().
      At least one user (cgroup_create()) had a double-free that way;
      there might be other similar bugs.  Easier to fix in percpu_ref_init(),
      rather than playing whack-a-mole in sloppy users...
      
      Usual symptoms look like a messed refcounting in one of subsystems
      that use percpu allocations (might be percpu-refcount, might be
      something else).  Having refcounts for two different objects share
      memory is Not Nice(tm)...
      
      Reported-by: syzbot+5b1e53987f858500ec00@syzkaller.appspotmail.com
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      683a786b
    • Quentin Perret's avatar
      KVM: arm64: Don't hypercall before EL2 init · dc8ae359
      Quentin Perret authored
      [ Upstream commit 2e403167
      
       ]
      
      Will reported the following splat when running with Protected KVM
      enabled:
      
      [    2.427181] ------------[ cut here ]------------
      [    2.427668] WARNING: CPU: 3 PID: 1 at arch/arm64/kvm/mmu.c:489 __create_hyp_private_mapping+0x118/0x1ac
      [    2.428424] Modules linked in:
      [    2.429040] CPU: 3 PID: 1 Comm: swapper/0 Not tainted 5.18.0-rc2-00084-g8635adc4efc7 #1
      [    2.429589] Hardware name: QEMU QEMU Virtual Machine, BIOS 0.0.0 02/06/2015
      [    2.430286] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      [    2.430734] pc : __create_hyp_private_mapping+0x118/0x1ac
      [    2.431091] lr : create_hyp_exec_mappings+0x40/0x80
      [    2.431377] sp : ffff80000803baf0
      [    2.431597] x29: ffff80000803bb00 x28: 0000000000000000 x27: 0000000000000000
      [    2.432156] x26: 0000000000000000 x25: 0000000000000000 x24: 0000000000000000
      [    2.432561] x23: ffffcd96c343b000 x22: 0000000000000000 x21: ffff80000803bb40
      [    2.433004] x20: 0000000000000004 x19: 0000000000001800 x18: 0000000000000000
      [    2.433343] x17: 0003e68cf7efdd70 x16: 0000000000000004 x15: fffffc81f602a2c8
      [    2.434053] x14: ffffdf8380000000 x13: ffffcd9573200000 x12: ffffcd96c343b000
      [    2.434401] x11: 0000000000000004 x10: ffffcd96c1738000 x9 : 0000000000000004
      [    2.434812] x8 : ffff80000803bb40 x7 : 7f7f7f7f7f7f7f7f x6 : 544f422effff306b
      [    2.435136] x5 : 000000008020001e x4 : ffff207d80a88c00 x3 : 0000000000000005
      [    2.435480] x2 : 0000000000001800 x1 : 000000014f4ab800 x0 : 000000000badca11
      [    2.436149] Call trace:
      [    2.436600]  __create_hyp_private_mapping+0x118/0x1ac
      [    2.437576]  create_hyp_exec_mappings+0x40/0x80
      [    2.438180]  kvm_init_vector_slots+0x180/0x194
      [    2.458941]  kvm_arch_init+0x80/0x274
      [    2.459220]  kvm_init+0x48/0x354
      [    2.459416]  arm_init+0x20/0x2c
      [    2.459601]  do_one_initcall+0xbc/0x238
      [    2.459809]  do_initcall_level+0x94/0xb4
      [    2.460043]  do_initcalls+0x54/0x94
      [    2.460228]  do_basic_setup+0x1c/0x28
      [    2.460407]  kernel_init_freeable+0x110/0x178
      [    2.460610]  kernel_init+0x20/0x1a0
      [    2.460817]  ret_from_fork+0x10/0x20
      [    2.461274] ---[ end trace 0000000000000000 ]---
      
      Indeed, the Protected KVM mode promotes __create_hyp_private_mapping()
      to a hypercall as EL1 no longer has access to the hypervisor's stage-1
      page-table. However, the call from kvm_init_vector_slots() happens after
      pKVM has been initialized on the primary CPU, but before it has been
      initialized on secondaries. As such, if the KVM initcall procedure is
      migrated from one CPU to another in this window, the hypercall may end up
      running on a CPU for which EL2 has not been initialized.
      
      Fortunately, the pKVM hypervisor doesn't rely on the host to re-map the
      vectors in the private range, so the hypercall in question is in fact
      superfluous. Skip it when pKVM is enabled.
      Reported-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarQuentin Perret <qperret@google.com>
      [maz: simplified the checks slightly]
      Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
      Link: https://lore.kernel.org/r/20220513092607.35233-1-qperret@google.com
      
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      dc8ae359
    • IotaHydrae's avatar
      pinctrl: sunxi: fix f1c100s uart2 function · 30ad11d0
      IotaHydrae authored
      [ Upstream commit fa8785e5
      
       ]
      
      Change suniv f1c100s pinctrl,PD14 multiplexing function lvds1 to uart2
      
      When the pin PD13 and PD14 is setting up to uart2 function in dts,
      there's an error occurred:
      1c20800.pinctrl: unsupported function uart2 on pin PD14
      
      Because 'uart2' is not any one multiplexing option of PD14,
      and pinctrl don't know how to configure it.
      
      So change the pin PD14 lvds1 function to uart2.
      Signed-off-by: default avatarIotaHydrae <writeforever@foxmail.com>
      Reviewed-by: default avatarAndre Przywara <andre.przywara@arm.com>
      Link: https://lore.kernel.org/r/tencent_70C1308DDA794C81CAEF389049055BACEC09@qq.com
      
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      30ad11d0
    • Dustin L. Howett's avatar
      ALSA: hda/realtek: Add quirk for the Framework Laptop · 7e5a4f00
      Dustin L. Howett authored
      [ Upstream commit 309d7363
      
       ]
      
      Some board revisions of the Framework Laptop have an ALC295 with a
      disconnected or faulty headset mic presence detect.
      
      The "dell-headset-multi" fixup addresses this issue, but also enables an
      inoperative "Headphone Mic" input device whenever a headset is
      connected.
      
      Adding a new quirk chain specific to the Framework Laptop resolves this
      issue. The one introduced here is based on the System76 "no headphone
      mic" quirk chain.
      
      The VID:PID f111:0001 have been allocated to Framework Computer for this
      board revision.
      
      Revision history:
      - v2: Moved to a custom quirk chain to suppress the "Headphone Mic"
        pincfg.
      Signed-off-by: default avatarDustin L. Howett <dustin@howett.net>
      Link: https://lore.kernel.org/r/20220511010759.3554-1-dustin@howett.net
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7e5a4f00
    • Gabriele Mazzotta's avatar
      ALSA: hda/realtek: Add quirk for Dell Latitude 7520 · 118dc796
      Gabriele Mazzotta authored
      [ Upstream commit 1efcdd9c ]
      
      The driver is currently using ALC269_FIXUP_DELL4_MIC_NO_PRESENCE for
      the Latitude 7520, but this fixup chain has some issues:
      
       - The internal mic is really loud and the recorded audio is distorted
         at "standard" audio levels.
      
       - There are pop noises at system startup and when plugging/unplugging
         headphone jacks.
      
      BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=215885
      
      Signed-off-by: default avatarGabriele Mazzotta <gabriele.mzt@gmail.com>
      Link: https://lore.kernel.org/r/20220501124237.4667-1-gabriele.mzt@gmail.com
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      118dc796
    • Forest Crossman's avatar
      ALSA: usb-audio: Don't get sample rate for MCT Trigger 5 USB-to-HDMI · 0c6ba757
      Forest Crossman authored
      [ Upstream commit d7be2138
      
       ]
      
      This device doesn't support reading the sample rate, so we need to apply
      this quirk to avoid a 15-second delay waiting for three timeouts.
      Signed-off-by: default avatarForest Crossman <cyrozap@gmail.com>
      Link: https://lore.kernel.org/r/20220504002444.114011-2-cyrozap@gmail.com
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0c6ba757
  2. 30 May, 2022 10 commits