Skip to content
  1. Apr 15, 2022
    • Xiaomeng Tong's avatar
      perf: qcom_l2_pmu: fix an incorrect NULL check on list iterator · cbe2c848
      Xiaomeng Tong authored
      commit 2012a9e2 upstream.
      
      The bug is here:
      	return cluster;
      
      The list iterator value 'cluster' 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, return 'cluster' when found, otherwise return NULL.
      
      Cc: stable@vger.kernel.org
      Fixes: 21bdbb71
      
       ("perf: add qcom l2 cache perf events driver")
      Signed-off-by: default avatarXiaomeng Tong <xiam0nd.tong@gmail.com>
      Link: https://lore.kernel.org/r/20220327055733.4070-1-xiam0nd.tong@gmail.com
      Signed-off-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      cbe2c848
    • Christian Lamparter's avatar
      ata: sata_dwc_460ex: Fix crash due to OOB write · 596c7efd
      Christian Lamparter authored
      commit 7aa8104a upstream.
      
      the driver uses libata's "tag" values from in various arrays.
      Since the mentioned patch bumped the ATA_TAG_INTERNAL to 32,
      the value of the SATA_DWC_QCMD_MAX needs to account for that.
      
      Otherwise ATA_TAG_INTERNAL usage cause similar crashes like
      this as reported by Tice Rex on the OpenWrt Forum and
      reproduced (with symbols) here:
      
      | BUG: Kernel NULL pointer dereference at 0x00000000
      | Faulting instruction address: 0xc03ed4b8
      | Oops: Kernel access of bad area, sig: 11 [#1]
      | BE PAGE_SIZE=4K PowerPC 44x Platform
      | CPU: 0 PID: 362 Comm: scsi_eh_1 Not tainted 5.4.163 #0
      | NIP:  c03ed4b8 LR: c03d27e8 CTR: c03ed36c
      | REGS: cfa59950 TRAP: 0300   Not tainted  (5.4.163)
      | MSR:  00021000 <CE,ME>  CR: 42000222  XER: 00000000
      | DEAR: 00000000 ESR: 00000000
      | GPR00: c03d27e8 cfa59a08 cfa55fe0 00000000 0fa46bc0 [...]
      | [..]
      | NIP [c03ed4b8] sata_dwc_qc_issue+0x14c/0x254
      | LR [c03d27e8] ata_qc_issue+0x1c8/0x2dc
      | Call Trace:
      | [cfa59a08] [c003f4e0] __cancel_work_timer+0x124/0x194 (unreliable)
      | [cfa59a78] [c03d27e8] ata_qc_issue+0x1c8/0x2dc
      | [cfa59a98] [c03d2b3c] ata_exec_internal_sg+0x240/0x524
      | [cfa59b08] [c03d2e98] ata_exec_internal+0x78/0xe0
      | [cfa59b58] [c03d30fc] ata_read_log_page.part.38+0x1dc/0x204
      | [cfa59bc8] [c03d324c] ata_identify_page_supported+0x68/0x130
      | [...]
      
      This is because sata_dwc_dma_xfer_complete() NULLs the
      dma_pending's next neighbour "chan" (a *dma_chan struct) in
      this '32' case right here (line ~735):
      > hsdevp->dma_pending[tag] = SATA_DWC_DMA_PENDING_NONE;
      
      Then the next time, a dma gets issued; dma_dwc_xfer_setup() passes
      the NULL'd hsdevp->chan to the dmaengine_slave_config() which then
      causes the crash.
      
      With this patch, SATA_DWC_QCMD_MAX is now set to ATA_MAX_QUEUE + 1.
      This avoids the OOB. But please note, there was a worthwhile discussion
      on what ATA_TAG_INTERNAL and ATA_MAX_QUEUE is. And why there should not
      be a "fake" 33 command-long queue size.
      
      Ideally, the dw driver should account for the ATA_TAG_INTERNAL.
      In Damien Le Moal's words: "... having looked at the driver, it
      is a bigger change than just faking a 33rd "tag" that is in fact
      not a command tag at all."
      
      Fixes: 28361c40
      
       ("libata: add extra internal command")
      Cc: stable@kernel.org # 4.18+
      BugLink: https://github.com/openwrt/openwrt/issues/9505
      Signed-off-by: default avatarChristian Lamparter <chunkeey@gmail.com>
      Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      596c7efd
    • Guo Ren's avatar
      arm64: patch_text: Fixup last cpu should be master · e5b0d0a5
      Guo Ren authored
      commit 31a099db upstream.
      
      These patch_text implementations are using stop_machine_cpuslocked
      infrastructure with atomic cpu_count. The original idea: When the
      master CPU patch_text, the others should wait for it. But current
      implementation is using the first CPU as master, which couldn't
      guarantee the remaining CPUs are waiting. This patch changes the
      last CPU as the master to solve the potential risk.
      
      Fixes: ae164807
      
       ("arm64: introduce interfaces to hotpatch kernel and module code")
      Signed-off-by: default avatarGuo Ren <guoren@linux.alibaba.com>
      Signed-off-by: default avatarGuo Ren <guoren@kernel.org>
      Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Reviewed-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20220407073323.743224-2-guoren@kernel.org
      Signed-off-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e5b0d0a5
    • Ethan Lien's avatar
      btrfs: fix qgroup reserve overflow the qgroup limit · f3d97b22
      Ethan Lien authored
      commit b642b52d
      
       upstream.
      
      We use extent_changeset->bytes_changed in qgroup_reserve_data() to record
      how many bytes we set for EXTENT_QGROUP_RESERVED state. Currently the
      bytes_changed is set as "unsigned int", and it will overflow if we try to
      fallocate a range larger than 4GiB. The result is we reserve less bytes
      and eventually break the qgroup limit.
      
      Unlike regular buffered/direct write, which we use one changeset for
      each ordered extent, which can never be larger than 256M.  For
      fallocate, we use one changeset for the whole range, thus it no longer
      respects the 256M per extent limit, and caused the problem.
      
      The following example test script reproduces the problem:
      
        $ cat qgroup-overflow.sh
        #!/bin/bash
      
        DEV=/dev/sdj
        MNT=/mnt/sdj
      
        mkfs.btrfs -f $DEV
        mount $DEV $MNT
      
        # Set qgroup limit to 2GiB.
        btrfs quota enable $MNT
        btrfs qgroup limit 2G $MNT
      
        # Try to fallocate a 3GiB file. This should fail.
        echo
        echo "Try to fallocate a 3GiB file..."
        fallocate -l 3G $MNT/3G.file
      
        # Try to fallocate a 5GiB file.
        echo
        echo "Try to fallocate a 5GiB file..."
        fallocate -l 5G $MNT/5G.file
      
        # See we break the qgroup limit.
        echo
        sync
        btrfs qgroup show -r $MNT
      
        umount $MNT
      
      When running the test:
      
        $ ./qgroup-overflow.sh
        (...)
      
        Try to fallocate a 3GiB file...
        fallocate: fallocate failed: Disk quota exceeded
      
        Try to fallocate a 5GiB file...
      
        qgroupid         rfer         excl     max_rfer
        --------         ----         ----     --------
        0/5           5.00GiB      5.00GiB      2.00GiB
      
      Since we have no control of how bytes_changed is used, it's better to
      set it to u64.
      
      CC: stable@vger.kernel.org # 4.14+
      Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
      Signed-off-by: default avatarEthan Lien <ethanlien@synology.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f3d97b22
    • Pawan Gupta's avatar
      x86/speculation: Restore speculation related MSRs during S3 resume · edc7b755
      Pawan Gupta authored
      commit e2a1256b upstream.
      
      After resuming from suspend-to-RAM, the MSRs that control CPU's
      speculative execution behavior are not being restored on the boot CPU.
      
      These MSRs are used to mitigate speculative execution vulnerabilities.
      Not restoring them correctly may leave the CPU vulnerable.  Secondary
      CPU's MSRs are correctly being restored at S3 resume by
      identify_secondary_cpu().
      
      During S3 resume, restore these MSRs for boot CPU when restoring its
      processor state.
      
      Fixes: 77243971
      
       ("x86/bugs/intel: Set proper CPU features and setup RDS")
      Reported-by: default avatarNeelima Krishnan <neelima.krishnan@intel.com>
      Signed-off-by: default avatarPawan Gupta <pawan.kumar.gupta@linux.intel.com>
      Tested-by: default avatarNeelima Krishnan <neelima.krishnan@intel.com>
      Acked-by: default avatarBorislav Petkov <bp@suse.de>
      Reviewed-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      edc7b755
    • Pawan Gupta's avatar
      x86/pm: Save the MSR validity status at context setup · 11d692cb
      Pawan Gupta authored
      commit 73924ec4 upstream.
      
      The mechanism to save/restore MSRs during S3 suspend/resume checks for
      the MSR validity during suspend, and only restores the MSR if its a
      valid MSR.  This is not optimal, as an invalid MSR will unnecessarily
      throw an exception for every suspend cycle.  The more invalid MSRs,
      higher the impact will be.
      
      Check and save the MSR validity at setup.  This ensures that only valid
      MSRs that are guaranteed to not throw an exception will be attempted
      during suspend.
      
      Fixes: 7a9c2dd0
      
       ("x86/pm: Introduce quirk framework to save/restore extra MSR registers around suspend/resume")
      Suggested-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
      Signed-off-by: default avatarPawan Gupta <pawan.kumar.gupta@linux.intel.com>
      Reviewed-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
      Acked-by: default avatarBorislav Petkov <bp@suse.de>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      11d692cb
    • Miaohe Lin's avatar
      mm/mempolicy: fix mpol_new leak in shared_policy_replace · 39a32f3c
      Miaohe Lin authored
      commit 4ad09955 upstream.
      
      If mpol_new is allocated but not used in restart loop, mpol_new will be
      freed via mpol_put before returning to the caller.  But refcnt is not
      initialized yet, so mpol_put could not do the right things and might
      leak the unused mpol_new.  This would happen if mempolicy was updated on
      the shared shmem file while the sp->lock has been dropped during the
      memory allocation.
      
      This issue could be triggered easily with the below code snippet if
      there are many processes doing the below work at the same time:
      
        shmid = shmget((key_t)5566, 1024 * PAGE_SIZE, 0666|IPC_CREAT);
        shm = shmat(shmid, 0, 0);
        loop many times {
          mbind(shm, 1024 * PAGE_SIZE, MPOL_LOCAL, mask, maxnode, 0);
          mbind(shm + 128 * PAGE_SIZE, 128 * PAGE_SIZE, MPOL_DEFAULT, mask,
                maxnode, 0);
        }
      
      Link: https://lkml.kernel.org/r/20220329111416.27954-1-linmiaohe@huawei.com
      Fixes: 42288fe3
      
       ("mm: mempolicy: Convert shared_policy mutex to spinlock")
      Signed-off-by: default avatarMiaohe Lin <linmiaohe@huawei.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: <stable@vger.kernel.org>	[3.8]
      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>
      39a32f3c
    • Paolo Bonzini's avatar
      mmmremap.c: avoid pointless invalidate_range_start/end on mremap(old_size=0) · e2c328c2
      Paolo Bonzini authored
      commit 01e67e04
      
       upstream.
      
      If an mremap() syscall with old_size=0 ends up in move_page_tables(), it
      will call invalidate_range_start()/invalidate_range_end() unnecessarily,
      i.e.  with an empty range.
      
      This causes a WARN in KVM's mmu_notifier.  In the past, empty ranges
      have been diagnosed to be off-by-one bugs, hence the WARNing.  Given the
      low (so far) number of unique reports, the benefits of detecting more
      buggy callers seem to outweigh the cost of having to fix cases such as
      this one, where userspace is doing something silly.  In this particular
      case, an early return from move_page_tables() is enough to fix the
      issue.
      
      Link: https://lkml.kernel.org/r/20220329173155.172439-1-pbonzini@redhat.com
      Reported-by: default avatar <syzbot+6bde52d89cfdf9f61425@syzkaller.appspotmail.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Cc: Sean Christopherson <seanjc@google.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>
      e2c328c2
    • Wolfram Sang's avatar
      mmc: renesas_sdhi: don't overwrite TAP settings when HS400 tuning is complete · 024fc7e2
      Wolfram Sang authored
      commit 03e59b1e upstream.
      
      When HS400 tuning is complete and HS400 is going to be activated, we
      have to keep the current number of TAPs and should not overwrite them
      with a hardcoded value. This was probably a copy&paste mistake when
      upporting HS400 support from the BSP.
      
      Fixes: 26eb2607
      
       ("mmc: renesas_sdhi: add eMMC HS400 mode support")
      Reported-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Reviewed-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20220404114902.12175-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      024fc7e2
    • Pali Rohár's avatar
      Revert "mmc: sdhci-xenon: fix annoying 1.8V regulator warning" · 26c432a7
      Pali Rohár authored
      commit 7e2646ed upstream.
      
      This reverts commit bb32e198.
      
      Commit 1a3ed0dc ("mmc: sdhci-xenon: fix 1.8v regulator stabilization")
      contains proper fix for the issue described in commit bb32e198 ("mmc:
      sdhci-xenon: fix annoying 1.8V regulator warning").
      
      Fixes: 8d876bf4 ("mmc: sdhci-xenon: wait 5ms after set 1.8V signal enable")
      Cc: stable@vger.kernel.org # 1a3ed0dc
      
       ("mmc: sdhci-xenon: fix 1.8v regulator stabilization")
      Signed-off-by: default avatarPali Rohár <pali@kernel.org>
      Reviewed-by: default avatarMarek Behún <kabel@kernel.org>
      Reviewed-by: default avatarMarcin Wojtas <mw@semihalf.com>
      Link: https://lore.kernel.org/r/20220318141441.32329-1-pali@kernel.org
      Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      26c432a7
    • Lv Yunlong's avatar
      drbd: Fix five use after free bugs in get_initial_state · 188fe6b2
      Lv Yunlong authored
      [ Upstream commit aadb22ba ]
      
      In get_initial_state, it calls notify_initial_state_done(skb,..) if
      cb->args[5]==1. If genlmsg_put() failed in notify_initial_state_done(),
      the skb will be freed by nlmsg_free(skb).
      Then get_initial_state will goto out and the freed skb will be used by
      return value skb->len, which is a uaf bug.
      
      What's worse, the same problem goes even further: skb can also be
      freed in the notify_*_state_change -> notify_*_state calls below.
      Thus 4 additional uaf bugs happened.
      
      My patch lets the problem callee functions: notify_initial_state_done
      and notify_*_state_change return an error code if errors happen.
      So that the error codes could be propagated and the uaf bugs can be avoid.
      
      v2 reports a compilation warning. This v3 fixed this warning and built
      successfully in my local environment with no additional warnings.
      v2: https://lore.kernel.org/patchwork/patch/1435218/
      
      Fixes: a2972846
      
       ("drbd: Backport the "events2" command")
      Signed-off-by: default avatarLv Yunlong <lyl2019@mail.ustc.edu.cn>
      Reviewed-by: default avatarChristoph Böhmwalder <christoph.boehmwalder@linbit.com>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      188fe6b2
    • Kamal Dasu's avatar
      spi: bcm-qspi: fix MSPI only access with bcm_qspi_exec_mem_op() · e4f970da
      Kamal Dasu authored
      [ Upstream commit 2c7d1b28 ]
      
      This fixes case where MSPI controller is used to access spi-nor
      flash and BSPI block is not present.
      
      Fixes: 5f195ee7
      
       ("spi: bcm-qspi: Implement the spi_mem interface")
      Signed-off-by: default avatarKamal Dasu <kdasu.kdev@gmail.com>
      Acked-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Link: https://lore.kernel.org/r/20220328142442.7553-1-kdasu.kdev@gmail.com
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e4f970da
    • Jamie Bainbridge's avatar
      qede: confirm skb is allocated before using · 9648adb1
      Jamie Bainbridge authored
      [ Upstream commit 4e910dbe ]
      
      qede_build_skb() assumes build_skb() always works and goes straight
      to skb_reserve(). However, build_skb() can fail under memory pressure.
      This results in a kernel panic because the skb to reserve is NULL.
      
      Add a check in case build_skb() failed to allocate and return NULL.
      
      The NULL return is handled correctly in callers to qede_build_skb().
      
      Fixes: 8a863397
      
       ("qede: Add build_skb() support.")
      Signed-off-by: default avatarJamie Bainbridge <jamie.bainbridge@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9648adb1
    • Eric Dumazet's avatar
      rxrpc: fix a race in rxrpc_exit_net() · 864297ee
      Eric Dumazet authored
      [ Upstream commit 1946014c ]
      
      Current code can lead to the following race:
      
      CPU0                                                 CPU1
      
      rxrpc_exit_net()
                                                           rxrpc_peer_keepalive_worker()
                                                             if (rxnet->live)
      
        rxnet->live = false;
        del_timer_sync(&rxnet->peer_keepalive_timer);
      
                                                                   timer_reduce(&rxnet->peer_keepalive_timer, jiffies + delay);
      
        cancel_work_sync(&rxnet->peer_keepalive_work);
      
      rxrpc_exit_net() exits while peer_keepalive_timer is still armed,
      leading to use-after-free.
      
      syzbot report was:
      
      ODEBUG: free active (active state 0) object type: timer_list hint: rxrpc_peer_keepalive_timeout+0x0/0xb0
      WARNING: CPU: 0 PID: 3660 at lib/debugobjects.c:505 debug_print_object+0x16e/0x250 lib/debugobjects.c:505
      Modules linked in:
      CPU: 0 PID: 3660 Comm: kworker/u4:6 Not tainted 5.17.0-syzkaller-13993-g88e6c0207623 #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      Workqueue: netns cleanup_net
      RIP: 0010:debug_print_object+0x16e/0x250 lib/debugobjects.c:505
      Code: ff df 48 89 fa 48 c1 ea 03 80 3c 02 00 0f 85 af 00 00 00 48 8b 14 dd 00 1c 26 8a 4c 89 ee 48 c7 c7 00 10 26 8a e8 b1 e7 28 05 <0f> 0b 83 05 15 eb c5 09 01 48 83 c4 18 5b 5d 41 5c 41 5d 41 5e c3
      RSP: 0018:ffffc9000353fb00 EFLAGS: 00010082
      RAX: 0000000000000000 RBX: 0000000000000003 RCX: 0000000000000000
      RDX: ffff888029196140 RSI: ffffffff815efad8 RDI: fffff520006a7f52
      RBP: 0000000000000001 R08: 0000000000000000 R09: 0000000000000000
      R10: ffffffff815ea4ae R11: 0000000000000000 R12: ffffffff89ce23e0
      R13: ffffffff8a2614e0 R14: ffffffff816628c0 R15: dffffc0000000000
      FS:  0000000000000000(0000) GS:ffff8880b9c00000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007fe1f2908924 CR3: 0000000043720000 CR4: 00000000003506f0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
       <TASK>
       __debug_check_no_obj_freed lib/debugobjects.c:992 [inline]
       debug_check_no_obj_freed+0x301/0x420 lib/debugobjects.c:1023
       kfree+0xd6/0x310 mm/slab.c:3809
       ops_free_list.part.0+0x119/0x370 net/core/net_namespace.c:176
       ops_free_list net/core/net_namespace.c:174 [inline]
       cleanup_net+0x591/0xb00 net/core/net_namespace.c:598
       process_one_work+0x996/0x1610 kernel/workqueue.c:2289
       worker_thread+0x665/0x1080 kernel/workqueue.c:2436
       kthread+0x2e9/0x3a0 kernel/kthread.c:376
       ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:298
       </TASK>
      
      Fixes: ace45bec
      
       ("rxrpc: Fix firewall route keepalive")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Marc Dionne <marc.dionne@auristor.com>
      Cc: linux-afs@lists.infradead.org
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      864297ee
    • Ilya Maximets's avatar
      net: openvswitch: don't send internal clone attribute to the userspace. · 315ed6da
      Ilya Maximets authored
      [ Upstream commit 3f2a3050 ]
      
      'OVS_CLONE_ATTR_EXEC' is an internal attribute that is used for
      performance optimization inside the kernel.  It's added by the kernel
      while parsing user-provided actions and should not be sent during the
      flow dump as it's not part of the uAPI.
      
      The issue doesn't cause any significant problems to the ovs-vswitchd
      process, because reported actions are not really used in the
      application lifecycle and only supposed to be shown to a human via
      ovs-dpctl flow dump.  However, the action list is still incorrect
      and causes the following error if the user wants to look at the
      datapath flows:
      
        # ovs-dpctl add-dp system@ovs-system
        # ovs-dpctl add-flow "<flow match>" "clone(ct(commit),0)"
        # ovs-dpctl dump-flows
        <flow match>, packets:0, bytes:0, used:never,
          actions:clone(bad length 4, expected -1 for: action0(01 00 00 00),
                        ct(commit),0)
      
      With the fix:
      
        # ovs-dpctl dump-flows
        <flow match>, packets:0, bytes:0, used:never,
          actions:clone(ct(commit),0)
      
      Additionally fixed an incorrect attribute name in the comment.
      
      Fixes: b2335040
      
       ("openvswitch: kernel datapath clone action")
      Signed-off-by: default avatarIlya Maximets <i.maximets@ovn.org>
      Acked-by: default avatarAaron Conole <aconole@redhat.com>
      Link: https://lore.kernel.org/r/20220404104150.2865736-1-i.maximets@ovn.org
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      315ed6da
    • José Expósito's avatar
      drm/imx: Fix memory leak in imx_pd_connector_get_modes · 41624d7c
      José Expósito authored
      [ Upstream commit bce81feb ]
      
      Avoid leaking the display mode variable if of_get_drm_display_mode
      fails.
      
      Fixes: 76ecd9c9
      
       ("drm/imx: parallel-display: check return code from of_get_drm_display_mode()")
      Addresses-Coverity-ID: 1443943 ("Resource leak")
      Signed-off-by: default avatarJosé Expósito <jose.exposito89@gmail.com>
      Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
      Link: https://lore.kernel.org/r/20220108165230.44610-1-jose.exposito89@gmail.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      41624d7c
    • Chen-Yu Tsai's avatar
      net: stmmac: Fix unset max_speed difference between DT and non-DT platforms · 08c9f9bc
      Chen-Yu Tsai authored
      [ Upstream commit c21cabb0 ]
      
      In commit 9cbadf09 ("net: stmmac: support max-speed device tree
      property"), when DT platforms don't set "max-speed", max_speed is set to
      -1; for non-DT platforms, it stays the default 0.
      
      Prior to commit eeef2f6b ("net: stmmac: Start adding phylink support"),
      the check for a valid max_speed setting was to check if it was greater
      than zero. This commit got it right, but subsequent patches just checked
      for non-zero, which is incorrect for DT platforms.
      
      In commit 92c3807b ("net: stmmac: convert to phylink_get_linkmodes()")
      the conversion switched completely to checking for non-zero value as a
      valid value, which caused 1000base-T to stop getting advertised by
      default.
      
      Instead of trying to fix all the checks, simply leave max_speed alone if
      DT property parsing fails.
      
      Fixes: 9cbadf09 ("net: stmmac: support max-speed device tree property")
      Fixes: 92c3807b
      
       ("net: stmmac: convert to phylink_get_linkmodes()")
      Signed-off-by: default avatarChen-Yu Tsai <wens@csie.org>
      Acked-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
      Reviewed-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
      Link: https://lore.kernel.org/r/20220331184832.16316-1-wens@kernel.org
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      08c9f9bc
    • Christophe JAILLET's avatar
      scsi: zorro7xx: Fix a resource leak in zorro7xx_remove_one() · db863ab2
      Christophe JAILLET authored
      [ Upstream commit 16ed828b ]
      
      The error handling path of the probe releases a resource that is not freed
      in the remove function. In some cases, a ioremap() must be undone.
      
      Add the missing iounmap() call in the remove function.
      
      Link: https://lore.kernel.org/r/247066a3104d25f9a05de8b3270fc3c848763bcc.1647673264.git.christophe.jaillet@wanadoo.fr
      Fixes: 45804fbb
      
       ("[SCSI] 53c700: Amiga Zorro NCR53c710 SCSI")
      Reviewed-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      db863ab2
    • Guilherme G. Piccoli's avatar
      Drivers: hv: vmbus: Fix potential crash on module unload · 6b4c0149
      Guilherme G. Piccoli authored
      [ Upstream commit 792f232d ]
      
      The vmbus driver relies on the panic notifier infrastructure to perform
      some operations when a panic event is detected. Since vmbus can be built
      as module, it is required that the driver handles both registering and
      unregistering such panic notifier callback.
      
      After commit 74347a99 ("x86/Hyper-V: Unload vmbus channel in hv panic callback")
      though, the panic notifier registration is done unconditionally in the module
      initialization routine whereas the unregistering procedure is conditionally
      guarded and executes only if HV_FEATURE_GUEST_CRASH_MSR_AVAILABLE capability
      is set.
      
      This patch fixes that by unconditionally unregistering the panic notifier
      in the module's exit routine as well.
      
      Fixes: 74347a99
      
       ("x86/Hyper-V: Unload vmbus channel in hv panic callback")
      Signed-off-by: default avatarGuilherme G. Piccoli <gpiccoli@igalia.com>
      Reviewed-by: default avatarMichael Kelley <mikelley@microsoft.com>
      Link: https://lore.kernel.org/r/20220315203535.682306-1-gpiccoli@igalia.com
      Signed-off-by: default avatarWei Liu <wei.liu@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6b4c0149
    • Dan Carpenter's avatar
      drm/amdgpu: fix off by one in amdgpu_gfx_kiq_acquire() · a17d93c9
      Dan Carpenter authored
      [ Upstream commit 1647b54e ]
      
      This post-op should be a pre-op so that we do not pass -1 as the bit
      number to test_bit().  The current code will loop downwards from 63 to
      -1.  After changing to a pre-op, it loops from 63 to 0.
      
      Fixes: 71c37505
      
       ("drm/amdgpu/gfx: move more common KIQ code to amdgpu_gfx.c")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a17d93c9
    • James Morse's avatar
      KVM: arm64: Check arm64_get_bp_hardening_data() didn't return NULL · 7aa0c519
      James Morse authored
      Will reports that with CONFIG_EXPERT=y and CONFIG_HARDEN_BRANCH_PREDICTOR=n,
      the kernel dereferences a NULL pointer during boot:
      
      [    2.384444] Internal error: Oops: 96000004 [#1] PREEMPT SMP
      [    2.384461] pstate: 20400085 (nzCv daIf +PAN -UAO)
      [    2.384472] pc : cpu_hyp_reinit+0x114/0x30c
      [    2.384476] lr : cpu_hyp_reinit+0x80/0x30c
      
      [    2.384529] Call trace:
      [    2.384533]  cpu_hyp_reinit+0x114/0x30c
      [    2.384537]  _kvm_arch_hardware_enable+0x30/0x54
      [    2.384541]  flush_smp_call_function_queue+0xe4/0x154
      [    2.384544]  generic_smp_call_function_single_interrupt+0x10/0x18
      [    2.384549]  ipi_handler+0x170/0x2b0
      [    2.384555]  handle_percpu_devid_fasteoi_ipi+0x120/0x1cc
      [    2.384560]  __handle_domain_irq+0x9c/0xf4
      [    2.384563]  gic_handle_irq+0x6c/0xe4
      [    2.384566]  el1_irq+0xf0/0x1c0
      [    2.384570]  arch_cpu_idle+0x28/0x44
      [    2.384574]  do_idle+0x100/0x2a8
      [    2.384577]  cpu_startup_entry+0x20/0x24
      [    2.384581]  secondary_start_kernel+0x1b0/0x1cc
      [    2.384589] Code: b9469d08 7100011f 540003ad 52800208 (f9400108)
      [    2.384600] ---[ end trace 266d08dbf96ff143 ]---
      [    2.385171] Kernel panic - not syncing: Fatal exception in interrupt
      
      In this configuration arm64_get_bp_hardening_data() returns NULL.
      Add a check in kvm_get_hyp_vector().
      
      Cc: Will Deacon <will@kernel.org>
      Link: https://lore.kernel.org/linux-arm-kernel/20220408120041.GB27685@willie-the-truck/
      Fixes: a68912a3
      
       ("KVM: arm64: Add templates for BHB mitigation sequences")
      Cc: stable@vger.kernel.org # 4.19
      Signed-off-by: default avatarJames Morse <james.morse@arm.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7aa0c519
    • Mauricio Faria de Oliveira's avatar
      mm: fix race between MADV_FREE reclaim and blkdev direct IO read · ef521626
      Mauricio Faria de Oliveira authored
      commit 6c8e2a25 upstream.
      
      Problem:
      =======
      
      Userspace might read the zero-page instead of actual data from a direct IO
      read on a block device if the buffers have been called madvise(MADV_FREE)
      on earlier (this is discussed below) due to a race between page reclaim on
      MADV_FREE and blkdev direct IO read.
      
      - Race condition:
        ==============
      
      During page reclaim, the MADV_FREE page check in try_to_unmap_one() checks
      if the page is not dirty, then discards its rmap PTE(s) (vs.  remap back
      if the page is dirty).
      
      However, after try_to_unmap_one() returns to shrink_page_list(), it might
      keep the page _anyway_ if page_ref_freeze() fails (it expects exactly
      _one_ page reference, from the isolation for page reclaim).
      
      Well, blkdev_direct_IO() gets references for all pages, and on READ
      operations it only sets them dirty _later_.
      
      So, if MADV_FREE'd pages (i.e., not dirty) are used as buffers for direct
      IO read from block devices, and page reclaim happens during
      __blkdev_direct_IO[_simple]() exactly AFTER bio_iov_iter_get_pages()
      returns, but BEFORE the pages are set dirty, the situation happens.
      
      The direct IO read eventually completes.  Now, when userspace reads the
      buffers, the PTE is no longer there and the page fault handler
      do_anonymous_page() services that with the zero-page, NOT the data!
      
      A synthetic reproducer is provided.
      
      - Page faults:
        ===========
      
      If page reclaim happens BEFORE bio_iov_iter_get_pages() the issue doesn't
      happen, because that faults-in all pages as writeable, so
      do_anonymous_page() sets up a new page/rmap/PTE, and that is used by
      direct IO.  The userspace reads don't fault as the PTE is there (thus
      zero-page is not used/setup).
      
      But if page reclaim happens AFTER it / BEFORE setting pages dirty, the PTE
      is no longer there; the subsequent page faults can't help:
      
      The data-read from the block device probably won't generate faults due to
      DMA (no MMU) but even in the case it wouldn't use DMA, that happens on
      different virtual addresses (not user-mapped addresses) because `struct
      bio_vec` stores `struct page` to figure addresses out (which are different
      from user-mapped addresses) for the read.
      
      Thus userspace reads (to user-mapped addresses) still fault, then
      do_anonymous_page() gets another `struct page` that would address/ map to
      other memory than the `struct page` used by `struct bio_vec` for the read.
      (The original `struct page` is not available, since it wasn't freed, as
      page_ref_freeze() failed due to more page refs.  And even if it were
      available, its data cannot be trusted anymore.)
      
      Solution:
      ========
      
      One solution is to check for the expected page reference count in
      try_to_unmap_one().
      
      There should be one reference from the isolation (that is also checked in
      shrink_page_list() with page_ref_freeze()) plus one or more references
      from page mapping(s) (put in discard: label).  Further references mean
      that rmap/PTE cannot be unmapped/nuked.
      
      (Note: there might be more than one reference from mapping due to
      fork()/clone() without CLONE_VM, which use the same `struct page` for
      references, until the copy-on-write page gets copied.)
      
      So, additional page references (e.g., from direct IO read) now prevent the
      rmap/PTE from being unmapped/dropped; similarly to the page is not freed
      per shrink_page_list()/page_ref_freeze()).
      
      - Races and Barriers:
        ==================
      
      The new check in try_to_unmap_one() should be safe in races with
      bio_iov_iter_get_pages() in get_user_pages() fast and slow paths, as it's
      done under the PTE lock.
      
      The fast path doesn't take the lock, but it checks if the PTE has changed
      and if so, it drops the reference and leaves the page for the slow path
      (which does take that lock).
      
      The fast path requires synchronization w/ full memory barrier: it writes
      the page reference count first then it reads the PTE later, while
      try_to_unmap() writes PTE first then it reads page refcount.
      
      And a second barrier is needed, as the page dirty flag should not be read
      before the page reference count (as in __remove_mapping()).  (This can be
      a load memory barrier only; no writes are involved.)
      
      Call stack/comments:
      
      - try_to_unmap_one()
        - page_vma_mapped_walk()
          - map_pte()			# see pte_offset_map_lock():
              pte_offset_map()
              spin_lock()
      
        - ptep_get_and_clear()	# write PTE
        - smp_mb()			# (new barrier) GUP fast path
        - page_ref_count()		# (new check) read refcount
      
        - page_vma_mapped_walk_done()	# see pte_unmap_unlock():
            pte_unmap()
            spin_unlock()
      
      - bio_iov_iter_get_pages()
        - __bio_iov_iter_get_pages()
          - iov_iter_get_pages()
            - get_user_pages_fast()
              - internal_get_user_pages_fast()
      
                # fast path
                - lockless_pages_from_mm()
                  - gup_{pgd,p4d,pud,pmd,pte}_range()
                      ptep = pte_offset_map()		# not _lock()
                      pte = ptep_get_lockless(ptep)
      
                      page = pte_page(pte)
                      try_grab_compound_head(page)	# inc refcount
                                                  	# (RMW/barrier
                                                   	#  on success)
      
                      if (pte_val(pte) != pte_val(*ptep)) # read PTE
                              put_compound_head(page) # dec refcount
                              			# go slow path
      
                # slow path
                - __gup_longterm_unlocked()
                  - get_user_pages_unlocked()
                    - __get_user_pages_locked()
                      - __get_user_pages()
                        - follow_{page,p4d,pud,pmd}_mask()
                          - follow_page_pte()
                              ptep = pte_offset_map_lock()
                              pte = *ptep
                              page = vm_normal_page(pte)
                              try_grab_page(page)	# inc refcount
                              pte_unmap_unlock()
      
      - Huge Pages:
        ==========
      
      Regarding transparent hugepages, that logic shouldn't change, as MADV_FREE
      (aka lazyfree) pages are PageAnon() && !PageSwapBacked()
      (madvise_free_pte_range() -> mark_page_lazyfree() -> lru_lazyfree_fn())
      thus should reach shrink_page_list() -> split_huge_page_to_list() before
      try_to_unmap[_one](), so it deals with normal pages only.
      
      (And in case unlikely/TTU_SPLIT_HUGE_PMD/split_huge_pmd_address() happens,
      which should not or be rare, the page refcount should be greater than
      mapcount: the head page is referenced by tail pages.  That also prevents
      checking the head `page` then incorrectly call page_remove_rmap(subpage)
      for a tail page, that isn't even in the shrink_page_list()'s page_list (an
      effect of split huge pmd/pmvw), as it might happen today in this unlikely
      scenario.)
      
      MADV_FREE'd buffers:
      ===================
      
      So, back to the "if MADV_FREE pages are used as buffers" note.  The case
      is arguable, and subject to multiple interpretations.
      
      The madvise(2) manual page on the MADV_FREE advice value says:
      
      1) 'After a successful MADV_FREE ... data will be lost when
         the kernel frees the pages.'
      2) 'the free operation will be canceled if the caller writes
         into the page' / 'subsequent writes ... will succeed and
         then [the] kernel cannot free those dirtied pages'
      3) 'If there is no subsequent write, the kernel can free the
         pages at any time.'
      
      Thoughts, questions, considerations... respectively:
      
      1) Since the kernel didn't actually free the page (page_ref_freeze()
         failed), should the data not have been lost? (on userspace read.)
      2) Should writes performed by the direct IO read be able to cancel
         the free operation?
         - Should the direct IO read be considered as 'the caller' too,
           as it's been requested by 'the caller'?
         - Should the bio technique to dirty pages on return to userspace
           (bio_check_pages_dirty() is called/used by __blkdev_direct_IO())
           be considered in another/special way here?
      3) Should an upcoming write from a previously requested direct IO
         read be considered as a subsequent write, so the kernel should
         not free the pages? (as it's known at the time of page reclaim.)
      
      And lastly:
      
      Technically, the last point would seem a reasonable consideration and
      balance, as the madvise(2) manual page apparently (and fairly) seem to
      assume that 'writes' are memory access from the userspace process (not
      explicitly considering writes from the kernel or its corner cases; again,
      fairly)..  plus the kernel fix implementation for the corner case of the
      largely 'non-atomic write' encompassed by a direct IO read operation, is
      relatively simple; and it helps.
      
      Reproducer:
      ==========
      
      @ test.c (simplified, but works)
      
      	#define _GNU_SOURCE
      	#include <fcntl.h>
      	#include <stdio.h>
      	#include <unistd.h>
      	#include <sys/mman.h>
      
      	int main() {
      		int fd, i;
      		char *buf;
      
      		fd = open(DEV, O_RDONLY | O_DIRECT);
      
      		buf = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE,
                      	   MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
      
      		for (i = 0; i < BUF_SIZE; i += PAGE_SIZE)
      			buf[i] = 1; // init to non-zero
      
      		madvise(buf, BUF_SIZE, MADV_FREE);
      
      		read(fd, buf, BUF_SIZE);
      
      		for (i = 0; i < BUF_SIZE; i += PAGE_SIZE)
      			printf("%p: 0x%x\n", &buf[i], buf[i]);
      
      		return 0;
      	}
      
      @ block/fops.c (formerly fs/block_dev.c)
      
      	+#include <linux/swap.h>
      	...
      	... __blkdev_direct_IO[_simple](...)
      	{
      	...
      	+	if (!strcmp(current->comm, "good"))
      	+		shrink_all_memory(ULONG_MAX);
      	+
               	ret = bio_iov_iter_get_pages(...);
      	+
      	+	if (!strcmp(current->comm, "bad"))
      	+		shrink_all_memory(ULONG_MAX);
      	...
      	}
      
      @ shell
      
              # NUM_PAGES=4
              # PAGE_SIZE=$(getconf PAGE_SIZE)
      
              # yes | dd of=test.img bs=${PAGE_SIZE} count=${NUM_PAGES}
              # DEV=$(losetup -f --show test.img)
      
              # gcc -DDEV=\"$DEV\" \
                    -DBUF_SIZE=$((PAGE_SIZE * NUM_PAGES)) \
                    -DPAGE_SIZE=${PAGE_SIZE} \
                     test.c -o test
      
              # od -tx1 $DEV
              0000000 79 0a 79 0a 79 0a 79 0a 79 0a 79 0a 79 0a 79 0a
              *
              0040000
      
              # mv test good
              # ./good
              0x7f7c10418000: 0x79
              0x7f7c10419000: 0x79
              0x7f7c1041a000: 0x79
              0x7f7c1041b000: 0x79
      
              # mv good bad
              # ./bad
              0x7fa1b8050000: 0x0
              0x7fa1b8051000: 0x0
              0x7fa1b8052000: 0x0
              0x7fa1b8053000: 0x0
      
      Note: the issue is consistent on v5.17-rc3, but it's intermittent with the
      support of MADV_FREE on v4.5 (60%-70% error; needs swap).  [wrap
      do_direct_IO() in do_blockdev_direct_IO() @ fs/direct-io.c].
      
      - v5.17-rc3:
      
              # for i in {1..1000}; do ./good; done \
                  | cut -d: -f2 | sort | uniq -c
                 4000  0x79
      
              # mv good bad
              # for i in {1..1000}; do ./bad; done \
                  | cut -d: -f2 | sort | uniq -c
                 4000  0x0
      
              # free | grep Swap
              Swap:             0           0           0
      
      - v4.5:
      
              # for i in {1..1000}; do ./good; done \
                  | cut -d: -f2 | sort | uniq -c
                 4000  0x79
      
              # mv good bad
              # for i in {1..1000}; do ./bad; done \
                  | cut -d: -f2 | sort | uniq -c
                 2702  0x0
                 1298  0x79
      
              # swapoff -av
              swapoff /swap
      
              # for i in {1..1000}; do ./bad; done \
                  | cut -d: -f2 | sort | uniq -c
                 4000  0x79
      
      Ceph/TCMalloc:
      =============
      
      For documentation purposes, the use case driving the analysis/fix is Ceph
      on Ubuntu 18.04, as the TCMalloc library there still uses MADV_FREE to
      release unused memory to the system from the mmap'ed page heap (might be
      committed back/used again; it's not munmap'ed.) - PageHeap::DecommitSpan()
      -> TCMalloc_SystemRelease() -> madvise() - PageHeap::CommitSpan() ->
      TCMalloc_SystemCommit() -> do nothing.
      
      Note: TCMalloc switched back to MADV_DONTNEED a few commits after the
      release in Ubuntu 18.04 (google-perftools/gperftools 2.5), so the issue
      just 'disappeared' on Ceph on later Ubuntu releases but is still present
      in the kernel, and can be hit by other use cases.
      
      The observed issue seems to be the old Ceph bug #22464 [1], where checksum
      mismatches are observed (and instrumentation with buffer dumps shows
      zero-pages read from mmap'ed/MADV_FREE'd page ranges).
      
      The issue in Ceph was reasonably deemed a kernel bug (comment #50) and
      mostly worked around with a retry mechanism, but other parts of Ceph could
      still hit that (rocksdb).  Anyway, it's less likely to be hit again as
      TCMalloc switched out of MADV_FREE by default.
      
      (Some kernel versions/reports from the Ceph bug, and relation with
      the MADV_FREE introduction/changes; TCMalloc versions not checked.)
      - 4.4 good
      - 4.5 (madv_free: introduction)
      - 4.9 bad
      - 4.10 good? maybe a swapless system
      - 4.12 (madv_free: no longer free instantly on swapless systems)
      - 4.13 bad
      
      [1] https://tracker.ceph.com/issues/22464
      
      Thanks:
      ======
      
      Several people contributed to analysis/discussions/tests/reproducers in
      the first stages when drilling down on ceph/tcmalloc/linux kernel:
      
      - Dan Hill
      - Dan Streetman
      - Dongdong Tao
      - Gavin Guo
      - Gerald Yang
      - Heitor Alves de Siqueira
      - Ioanna Alifieraki
      - Jay Vosburgh
      - Matthew Ruffell
      - Ponnuvel Palaniyappan
      
      Reviews, suggestions, corrections, comments:
      
      - Minchan Kim
      - Yu Zhao
      - Huang, Ying
      - John Hubbard
      - Christoph Hellwig
      
      [mfo@canonical.com: v4]
        Link: https://lkml.kernel.org/r/20220209202659.183418-1-mfo@canonical.comLink: https://lkml.kernel.org/r/20220131230255.789059-1-mfo@canonical.com
      
      Fixes: 802a3a92
      
       ("mm: reclaim MADV_FREE pages")
      Signed-off-by: default avatarMauricio Faria de Oliveira <mfo@canonical.com>
      Reviewed-by: default avatar"Huang, Ying" <ying.huang@intel.com>
      Cc: Minchan Kim <minchan@kernel.org>
      Cc: Yu Zhao <yuzhao@google.com>
      Cc: Yang Shi <shy828301@gmail.com>
      Cc: Miaohe Lin <linmiaohe@huawei.com>
      Cc: Dan Hill <daniel.hill@canonical.com>
      Cc: Dan Streetman <dan.streetman@canonical.com>
      Cc: Dongdong Tao <dongdong.tao@canonical.com>
      Cc: Gavin Guo <gavin.guo@canonical.com>
      Cc: Gerald Yang <gerald.yang@canonical.com>
      Cc: Heitor Alves de Siqueira <halves@canonical.com>
      Cc: Ioanna Alifieraki <ioanna-maria.alifieraki@canonical.com>
      Cc: Jay Vosburgh <jay.vosburgh@canonical.com>
      Cc: Matthew Ruffell <matthew.ruffell@canonical.com>
      Cc: Ponnuvel Palaniyappan <ponnuvel.palaniyappan@canonical.com>
      Cc: <stable@vger.kernel.org>
      Cc: Christoph Hellwig <hch@infradead.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      [mfo: backport: replace folio/test_flag with page/flag equivalents;
       real Fixes: 854e9ed0
      
       ("mm: support madvise(MADV_FREE)") in v4.]
      Signed-off-by: default avatarMauricio Faria de Oliveira <mfo@canonical.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ef521626
    • Willem de Bruijn's avatar
      net: add missing SOF_TIMESTAMPING_OPT_ID support · cd7295d0
      Willem de Bruijn authored
      [ Upstream commit 8f932f76 ]
      
      SOF_TIMESTAMPING_OPT_ID is supported on TCP, UDP and RAW sockets.
      But it was missing on RAW with IPPROTO_IP, PF_PACKET and CAN.
      
      Add skb_setup_tx_timestamp that configures both tx_flags and tskey
      for these paths that do not need corking or use bytestream keys.
      
      Fixes: 09c2d251
      
       ("net-timestamp: add key to disambiguate concurrent datagrams")
      Signed-off-by: default avatarWillem de Bruijn <willemb@google.com>
      Acked-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      cd7295d0
    • Helge Deller's avatar
      parisc: Fix CPU affinity for Lasi, WAX and Dino chips · 3940ecfc
      Helge Deller authored
      [ Upstream commit 939fc856
      
       ]
      
      Add the missing logic to allow Lasi, WAX and Dino to set the
      CPU affinity. This fixes IRQ migration to other CPUs when a
      CPU is shutdown which currently holds the IRQs for one of those
      chips.
      
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3940ecfc
    • Haimin Zhang's avatar
      jfs: prevent NULL deref in diFree · 2ef74e3e
      Haimin Zhang authored
      [ Upstream commit a5304629
      
       ]
      
      Add validation check for JFS_IP(ipimap)->i_imap to prevent a NULL deref
      in diFree since diFree uses it without do any validations.
      When function jfs_mount calls diMount to initialize fileset inode
      allocation map, it can fail and JFS_IP(ipimap)->i_imap won't be
      initialized. Then it calls diFreeSpecial to close fileset inode allocation
      map inode and it will flow into jfs_evict_inode. Function jfs_evict_inode
      just validates JFS_SBI(inode->i_sb)->ipimap, then calls diFree. diFree use
      JFS_IP(ipimap)->i_imap directly, then it will cause a NULL deref.
      
      Reported-by: default avatarTCS Robot <tcs_robot@tencent.com>
      Signed-off-by: default avatarHaimin Zhang <tcs_kernel@tencent.com>
      Signed-off-by: default avatarDave Kleikamp <dave.kleikamp@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2ef74e3e
    • Randy Dunlap's avatar
      virtio_console: eliminate anonymous module_init & module_exit · 0f3d824b
      Randy Dunlap authored
      [ Upstream commit fefb8a2a
      
       ]
      
      Eliminate anonymous module_init() and module_exit(), which can lead to
      confusion or ambiguity when reading System.map, crashes/oops/bugs,
      or an initcall_debug log.
      
      Give each of these init and exit functions unique driver-specific
      names to eliminate the anonymous names.
      
      Example 1: (System.map)
       ffffffff832fc78c t init
       ffffffff832fc79e t init
       ffffffff832fc8f8 t init
      
      Example 2: (initcall_debug log)
       calling  init+0x0/0x12 @ 1
       initcall init+0x0/0x12 returned 0 after 15 usecs
       calling  init+0x0/0x60 @ 1
       initcall init+0x0/0x60 returned 0 after 2 usecs
       calling  init+0x0/0x9a @ 1
       initcall init+0x0/0x9a returned 0 after 74 usecs
      
      Signed-off-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Reviewed-by: default avatarAmit Shah <amit@kernel.org>
      Cc: virtualization@lists.linux-foundation.org
      Cc: Arnd Bergmann <arnd@arndb.de>
      Link: https://lore.kernel.org/r/20220316192010.19001-3-rdunlap@infradead.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0f3d824b
    • Jiri Slaby's avatar
      serial: samsung_tty: do not unlock port->lock for uart_write_wakeup() · 7abd9a78
      Jiri Slaby authored
      [ Upstream commit 988c7c00 ]
      
      The commit c15c3747
      
       (serial: samsung: fix potential soft lockup
      during uart write) added an unlock of port->lock before
      uart_write_wakeup() and a lock after it. It was always problematic to
      write data from tty_ldisc_ops::write_wakeup and it was even documented
      that way. We fixed the line disciplines to conform to this recently.
      So if there is still a missed one, we should fix them instead of this
      workaround.
      
      On the top of that, s3c24xx_serial_tx_dma_complete() in this driver
      still holds the port->lock while calling uart_write_wakeup().
      
      So revert the wrap added by the commit above.
      
      Cc: Thomas Abraham <thomas.abraham@linaro.org>
      Cc: Kyungmin Park <kyungmin.park@samsung.com>
      Cc: Hyeonkook Kim <hk619.kim@samsung.com>
      Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
      Link: https://lore.kernel.org/r/20220308115153.4225-1-jslaby@suse.cz
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7abd9a78
    • NeilBrown's avatar
      NFS: swap-out must always use STABLE writes. · 194722a9
      NeilBrown authored
      [ Upstream commit c265de25
      
       ]
      
      The commit handling code is not safe against memory-pressure deadlocks
      when writing to swap.  In particular, nfs_commitdata_alloc() blocks
      indefinitely waiting for memory, and this can consume all available
      workqueue threads.
      
      swap-out most likely uses STABLE writes anyway as COND_STABLE indicates
      that a stable write should be used if the write fits in a single
      request, and it normally does.  However if we ever swap with a small
      wsize, or gather unusually large numbers of pages for a single write,
      this might change.
      
      For safety, make it explicit in the code that direct writes used for swap
      must always use FLUSH_STABLE.
      
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      194722a9
    • NeilBrown's avatar
      NFS: swap IO handling is slightly different for O_DIRECT IO · 2615cdae
      NeilBrown authored
      [ Upstream commit 64158668
      
       ]
      
      1/ Taking the i_rwsem for swap IO triggers lockdep warnings regarding
         possible deadlocks with "fs_reclaim".  These deadlocks could, I believe,
         eventuate if a buffered read on the swapfile was attempted.
      
         We don't need coherence with the page cache for a swap file, and
         buffered writes are forbidden anyway.  There is no other need for
         i_rwsem during direct IO.  So never take it for swap_rw()
      
      2/ generic_write_checks() explicitly forbids writes to swap, and
         performs checks that are not needed for swap.  So bypass it
         for swap_rw().
      
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2615cdae
    • NeilBrown's avatar
      SUNRPC/call_alloc: async tasks mustn't block waiting for memory · 9970fca8
      NeilBrown authored
      [ Upstream commit c487216b
      
       ]
      
      When memory is short, new worker threads cannot be created and we depend
      on the minimum one rpciod thread to be able to handle everything.
      So it must not block waiting for memory.
      
      mempools are particularly a problem as memory can only be released back
      to the mempool by an async rpc task running.  If all available
      workqueue threads are waiting on the mempool, no thread is available to
      return anything.
      
      rpc_malloc() can block, and this might cause deadlocks.
      So check RPC_IS_ASYNC(), rather than RPC_IS_SWAPPER() to determine if
      blocking is acceptable.
      
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9970fca8
    • Maxime Ripard's avatar
      clk: Enforce that disjoints limits are invalid · 1b53f514
      Maxime Ripard authored
      [ Upstream commit 10c46f2e
      
       ]
      
      If we were to have two users of the same clock, doing something like:
      
      clk_set_rate_range(user1, 1000, 2000);
      clk_set_rate_range(user2, 3000, 4000);
      
      The second call would fail with -EINVAL, preventing from getting in a
      situation where we end up with impossible limits.
      
      However, this is never explicitly checked against and enforced, and
      works by relying on an undocumented behaviour of clk_set_rate().
      
      Indeed, on the first clk_set_rate_range will make sure the current clock
      rate is within the new range, so it will be between 1000 and 2000Hz. On
      the second clk_set_rate_range(), it will consider (rightfully), that our
      current clock is outside of the 3000-4000Hz range, and will call
      clk_core_set_rate_nolock() to set it to 3000Hz.
      
      clk_core_set_rate_nolock() will then call clk_calc_new_rates() that will
      eventually check that our rate 3000Hz rate is outside the min 3000Hz max
      2000Hz range, will bail out, the error will propagate and we'll
      eventually return -EINVAL.
      
      This solely relies on the fact that clk_calc_new_rates(), and in
      particular clk_core_determine_round_nolock(), won't modify the new rate
      allowing the error to be reported. That assumption won't be true for all
      drivers, and most importantly we'll break that assumption in a later
      patch.
      
      It can also be argued that we shouldn't even reach the point where we're
      calling clk_core_set_rate_nolock().
      
      Let's make an explicit check for disjoints range before we're doing
      anything.
      
      Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
      Link: https://lore.kernel.org/r/20220225143534.405820-4-maxime@cerno.tech
      Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1b53f514
    • Dongli Zhang's avatar
      xen: delay xen_hvm_init_time_ops() if kdump is boot on vcpu>=32 · 0848767d
      Dongli Zhang authored
      [ Upstream commit eed05744 ]
      
      The sched_clock() can be used very early since commit 857baa87
      ("sched/clock: Enable sched clock early"). In addition, with commit
      38669ba2
      
       ("x86/xen/time: Output xen sched_clock time from 0"), kdump
      kernel in Xen HVM guest may panic at very early stage when accessing
      &__this_cpu_read(xen_vcpu)->time as in below:
      
      setup_arch()
       -> init_hypervisor_platform()
           -> x86_init.hyper.init_platform = xen_hvm_guest_init()
               -> xen_hvm_init_time_ops()
                   -> xen_clocksource_read()
                       -> src = &__this_cpu_read(xen_vcpu)->time;
      
      This is because Xen HVM supports at most MAX_VIRT_CPUS=32 'vcpu_info'
      embedded inside 'shared_info' during early stage until xen_vcpu_setup() is
      used to allocate/relocate 'vcpu_info' for boot cpu at arbitrary address.
      
      However, when Xen HVM guest panic on vcpu >= 32, since
      xen_vcpu_info_reset(0) would set per_cpu(xen_vcpu, cpu) = NULL when
      vcpu >= 32, xen_clocksource_read() on vcpu >= 32 would panic.
      
      This patch calls xen_hvm_init_time_ops() again later in
      xen_hvm_smp_prepare_boot_cpu() after the 'vcpu_info' for boot vcpu is
      registered when the boot vcpu is >= 32.
      
      This issue can be reproduced on purpose via below command at the guest
      side when kdump/kexec is enabled:
      
      "taskset -c 33 echo c > /proc/sysrq-trigger"
      
      The bugfix for PVM is not implemented due to the lack of testing
      environment.
      
      [boris: xen_hvm_init_time_ops() returns on errors instead of jumping to end]
      
      Cc: Joe Jin <joe.jin@oracle.com>
      Signed-off-by: default avatarDongli Zhang <dongli.zhang@oracle.com>
      Reviewed-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
      Link: https://lore.kernel.org/r/20220302164032.14569-3-dongli.zhang@oracle.com
      Signed-off-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0848767d
    • Trond Myklebust's avatar
      NFSv4: Protect the state recovery thread against direct reclaim · 2724d774
      Trond Myklebust authored
      [ Upstream commit 3e17898a
      
       ]
      
      If memory allocation triggers a direct reclaim from the state recovery
      thread, then we can deadlock. Use memalloc_nofs_save/restore to ensure
      that doesn't happen.
      
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2724d774
    • Lucas Denefle's avatar
      w1: w1_therm: fixes w1_seq for ds28ea00 sensors · 789988e2
      Lucas Denefle authored
      [ Upstream commit 41a92a89
      
       ]
      
      w1_seq was failing due to several devices responding to the
      CHAIN_DONE at the same time. Now properly selects the current
      device in the chain with MATCH_ROM. Also acknowledgment was
      read twice.
      
      Signed-off-by: default avatarLucas Denefle <lucas.denefle@converge.io>
      Link: https://lore.kernel.org/r/20220223113558.232750-1-lucas.denefle@converge.io
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      789988e2
    • Qinghua Jin's avatar
      minix: fix bug when opening a file with O_DIRECT · 1e395306
      Qinghua Jin authored
      [ Upstream commit 9ce3c0d2
      
       ]
      
      Testcase:
      1. create a minix file system and mount it
      2. open a file on the file system with O_RDWR|O_CREAT|O_TRUNC|O_DIRECT
      3. open fails with -EINVAL but leaves an empty file behind. All other
         open() failures don't leave the failed open files behind.
      
      It is hard to check the direct_IO op before creating the inode.  Just as
      ext4 and btrfs do, this patch will resolve the issue by allowing to
      create the file with O_DIRECT but returning error when writing the file.
      
      Link: https://lkml.kernel.org/r/20220107133626.413379-1-qhjin.dev@gmail.com
      Signed-off-by: default avatarQinghua Jin <qhjin.dev@gmail.com>
      Reported-by: default avatarColin Ian King <colin.king@intel.com>
      Reviewed-by: default avatarJan Kara <jack@suse.cz>
      Acked-by: default avatarChristian Brauner <christian.brauner@ubuntu.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1e395306
    • Randy Dunlap's avatar
      init/main.c: return 1 from handled __setup() functions · c6168086
      Randy Dunlap authored
      [ Upstream commit f9a40b08
      
       ]
      
      initcall_blacklist() should return 1 to indicate that it handled its
      cmdline arguments.
      
      set_debug_rodata() should return 1 to indicate that it handled its
      cmdline arguments.  Print a warning if the option string is invalid.
      
      This prevents these strings from being added to the 'init' program's
      environment as they are not init arguments/parameters.
      
      Link: https://lkml.kernel.org/r/20220221050901.23985-1-rdunlap@infradead.org
      Signed-off-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Reported-by: default avatarIgor Zhbanov <i.zhbanov@omprussia.ru>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.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 avatarSasha Levin <sashal@kernel.org>
      c6168086
    • Luiz Augusto von Dentz's avatar
      Bluetooth: Fix use after free in hci_send_acl · 684e5054
      Luiz Augusto von Dentz authored
      [ Upstream commit f63d24ba
      
       ]
      
      This fixes the following trace caused by receiving
      HCI_EV_DISCONN_PHY_LINK_COMPLETE which does call hci_conn_del without
      first checking if conn->type is in fact AMP_LINK and in case it is
      do properly cleanup upper layers with hci_disconn_cfm:
      
       ==================================================================
          BUG: KASAN: use-after-free in hci_send_acl+0xaba/0xc50
          Read of size 8 at addr ffff88800e404818 by task bluetoothd/142
      
          CPU: 0 PID: 142 Comm: bluetoothd Not tainted
          5.17.0-rc5-00006-gda4022eeac1a #7
          Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
          rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
          Call Trace:
           <TASK>
           dump_stack_lvl+0x45/0x59
           print_address_description.constprop.0+0x1f/0x150
           kasan_report.cold+0x7f/0x11b
           hci_send_acl+0xaba/0xc50
           l2cap_do_send+0x23f/0x3d0
           l2cap_chan_send+0xc06/0x2cc0
           l2cap_sock_sendmsg+0x201/0x2b0
           sock_sendmsg+0xdc/0x110
           sock_write_iter+0x20f/0x370
           do_iter_readv_writev+0x343/0x690
           do_iter_write+0x132/0x640
           vfs_writev+0x198/0x570
           do_writev+0x202/0x280
           do_syscall_64+0x38/0x90
           entry_SYSCALL_64_after_hwframe+0x44/0xae
          RSP: 002b:00007ffce8a099b8 EFLAGS: 00000246 ORIG_RAX: 0000000000000014
          Code: 0f 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3
          0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 14 00 00 00 0f 05
          <48> 3d 00 f0 ff ff 77 51 c3 48 83 ec 28 89 54 24 1c 48 89 74 24 10
          RDX: 0000000000000001 RSI: 00007ffce8a099e0 RDI: 0000000000000015
          RAX: ffffffffffffffda RBX: 00007ffce8a099e0 RCX: 00007f788fc3cf77
          R10: 00007ffce8af7080 R11: 0000000000000246 R12: 000055e4ccf75580
          RBP: 0000000000000015 R08: 0000000000000002 R09: 0000000000000001
          </TASK>
          R13: 000055e4ccf754a0 R14: 000055e4ccf75cd0 R15: 000055e4ccf4a6b0
      
          Allocated by task 45:
              kasan_save_stack+0x1e/0x40
              __kasan_kmalloc+0x81/0xa0
              hci_chan_create+0x9a/0x2f0
              l2cap_conn_add.part.0+0x1a/0xdc0
              l2cap_connect_cfm+0x236/0x1000
              le_conn_complete_evt+0x15a7/0x1db0
              hci_le_conn_complete_evt+0x226/0x2c0
              hci_le_meta_evt+0x247/0x450
              hci_event_packet+0x61b/0xe90
              hci_rx_work+0x4d5/0xc50
              process_one_work+0x8fb/0x15a0
              worker_thread+0x576/0x1240
              kthread+0x29d/0x340
              ret_from_fork+0x1f/0x30
      
          Freed by task 45:
              kasan_save_stack+0x1e/0x40
              kasan_set_track+0x21/0x30
              kasan_set_free_info+0x20/0x30
              __kasan_slab_free+0xfb/0x130
              kfree+0xac/0x350
              hci_conn_cleanup+0x101/0x6a0
              hci_conn_del+0x27e/0x6c0
              hci_disconn_phylink_complete_evt+0xe0/0x120
              hci_event_packet+0x812/0xe90
              hci_rx_work+0x4d5/0xc50
              process_one_work+0x8fb/0x15a0
              worker_thread+0x576/0x1240
              kthread+0x29d/0x340
              ret_from_fork+0x1f/0x30
      
          The buggy address belongs to the object at ffff88800c0f0500
          The buggy address is located 24 bytes inside of
          which belongs to the cache kmalloc-128 of size 128
          The buggy address belongs to the page:
          128-byte region [ffff88800c0f0500, ffff88800c0f0580)
          flags: 0x100000000000200(slab|node=0|zone=1)
          page:00000000fe45cd86 refcount:1 mapcount:0
          mapping:0000000000000000 index:0x0 pfn:0xc0f0
          raw: 0000000000000000 0000000080100010 00000001ffffffff
          0000000000000000
          raw: 0100000000000200 ffffea00003a2c80 dead000000000004
          ffff8880078418c0
          page dumped because: kasan: bad access detected
          ffff88800c0f0400: 00 00 00 00 00 00 00 00 00 00 00 00 00 fc fc fc
          Memory state around the buggy address:
          >ffff88800c0f0500: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
          ffff88800c0f0480: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
          ffff88800c0f0580: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
                                      ^
          ==================================================================
          ffff88800c0f0600: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      
      Reported-by: default avatarSönke Huster <soenke.huster@eknoes.de>
      Tested-by: default avatarSönke Huster <soenke.huster@eknoes.de>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      684e5054
    • Max Filippov's avatar
      xtensa: fix DTC warning unit_address_format · 47218c9c
      Max Filippov authored
      [ Upstream commit e85d29ba
      
       ]
      
      DTC issues the following warnings when building xtfpga device trees:
      
       /soc/flash@00000000/partition@0x0: unit name should not have leading "0x"
       /soc/flash@00000000/partition@0x6000000: unit name should not have leading "0x"
       /soc/flash@00000000/partition@0x6800000: unit name should not have leading "0x"
       /soc/flash@00000000/partition@0x7fe0000: unit name should not have leading "0x"
      
      Drop leading 0x from flash partition unit names.
      
      Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      47218c9c
    • H. Nikolaus Schaller's avatar
      usb: dwc3: omap: fix "unbalanced disables for smps10_out1" on omap5evm · 680a2aa3
      H. Nikolaus Schaller authored
      [ Upstream commit ac01df34
      
       ]
      
      Usually, the vbus_regulator (smps10 on omap5evm) boots up disabled.
      
      Hence calling regulator_disable() indirectly through dwc3_omap_set_mailbox()
      during probe leads to:
      
      [   10.332764] WARNING: CPU: 0 PID: 1628 at drivers/regulator/core.c:2853 _regulator_disable+0x40/0x164
      [   10.351919] unbalanced disables for smps10_out1
      [   10.361298] Modules linked in: dwc3_omap(+) clk_twl6040 at24 gpio_twl6040 palmas_gpadc palmas_pwrbutton
      industrialio snd_soc_omap_mcbsp(+) snd_soc_ti_sdma display_connector ti_tpd12s015 drm leds_gpio
      drm_panel_orientation_quirks ip_tables x_tables ipv6 autofs4
      [   10.387818] CPU: 0 PID: 1628 Comm: systemd-udevd Not tainted 5.17.0-rc1-letux-lpae+ #8139
      [   10.405129] Hardware name: Generic OMAP5 (Flattened Device Tree)
      [   10.411455]  unwind_backtrace from show_stack+0x10/0x14
      [   10.416970]  show_stack from dump_stack_lvl+0x40/0x4c
      [   10.422313]  dump_stack_lvl from __warn+0xb8/0x170
      [   10.427377]  __warn from warn_slowpath_fmt+0x70/0x9c
      [   10.432595]  warn_slowpath_fmt from _regulator_disable+0x40/0x164
      [   10.439037]  _regulator_disable from regulator_disable+0x30/0x64
      [   10.445382]  regulator_disable from dwc3_omap_set_mailbox+0x8c/0xf0 [dwc3_omap]
      [   10.453116]  dwc3_omap_set_mailbox [dwc3_omap] from dwc3_omap_probe+0x2b8/0x394 [dwc3_omap]
      [   10.467021]  dwc3_omap_probe [dwc3_omap] from platform_probe+0x58/0xa8
      [   10.481762]  platform_probe from really_probe+0x168/0x2fc
      [   10.481782]  really_probe from __driver_probe_device+0xc4/0xd8
      [   10.481782]  __driver_probe_device from driver_probe_device+0x24/0xa4
      [   10.503762]  driver_probe_device from __driver_attach+0xc4/0xd8
      [   10.510018]  __driver_attach from bus_for_each_dev+0x64/0xa0
      [   10.516001]  bus_for_each_dev from bus_add_driver+0x148/0x1a4
      [   10.524880]  bus_add_driver from driver_register+0xb4/0xf8
      [   10.530678]  driver_register from do_one_initcall+0x90/0x1c4
      [   10.536661]  do_one_initcall from do_init_module+0x4c/0x200
      [   10.536683]  do_init_module from load_module+0x13dc/0x1910
      [   10.551159]  load_module from sys_finit_module+0xc8/0xd8
      [   10.561319]  sys_finit_module from __sys_trace_return+0x0/0x18
      [   10.561336] Exception stack(0xc344bfa8 to 0xc344bff0)
      [   10.561341] bfa0:                   b6fb5778 b6fab8d8 00000007 b6ecfbb8 00000000 b6ed0398
      [   10.561341] bfc0: b6fb5778 b6fab8d8 855c0500 0000017b 00020000 b6f9a3cc 00000000 b6fb5778
      [   10.595500] bfe0: bede18f8 bede18e8 b6ec9aeb b6dda1c2
      [   10.601345] ---[ end trace 0000000000000000 ]---
      
      Fix this unnecessary warning by checking if the regulator is enabled.
      
      Signed-off-by: default avatarH. Nikolaus Schaller <hns@goldelico.com>
      Link: https://lore.kernel.org/r/af3b750dc2265d875deaabcf5f80098c9645da45.1646744616.git.hns@goldelico.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      680a2aa3
    • Jianglei Nie's avatar
      scsi: libfc: Fix use after free in fc_exch_abts_resp() · 6044ad64
      Jianglei Nie authored
      [ Upstream commit 271add11
      
       ]
      
      fc_exch_release(ep) will decrease the ep's reference count. When the
      reference count reaches zero, it is freed. But ep is still used in the
      following code, which will lead to a use after free.
      
      Return after the fc_exch_release() call to avoid use after free.
      
      Link: https://lore.kernel.org/r/20220303015115.459778-1-niejianglei2021@163.com
      Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
      Signed-off-by: default avatarJianglei Nie <niejianglei2021@163.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6044ad64