Skip to content
  1. Jun 30, 2020
    • Sasha Levin's avatar
      Linux 4.14.187 · 4139fb08
      Sasha Levin authored
      
      
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      v4.14.187
      4139fb08
    • Greg Kroah-Hartman's avatar
      Revert "tty: hvc: Fix data abort due to race in hvc_open" · f1bd26cf
      Greg Kroah-Hartman authored
      
      
      commit cf9c9445 upstream.
      
      This reverts commit e2bd1dcb.
      
      In discussion on the mailing list, it has been determined that this is
      not the correct type of fix for this issue.  Revert it so that we can do
      this correctly.
      
      Reported-by: default avatarJiri Slaby <jslaby@suse.cz>
      Reported-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Link: https://lore.kernel.org/r/20200428032601.22127-1-rananta@codeaurora.org
      
      
      Cc: Raghavendra Rao Ananta <rananta@codeaurora.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f1bd26cf
    • Zheng Bin's avatar
      xfs: add agf freeblocks verify in xfs_agf_verify · 115267e8
      Zheng Bin authored
      
      
      [ Upstream commit d0c7feaf ]
      
      We recently used fuzz(hydra) to test XFS and automatically generate
      tmp.img(XFS v5 format, but some metadata is wrong)
      
      xfs_repair information(just one AG):
      agf_freeblks 0, counted 3224 in ag 0
      agf_longest 536874136, counted 3224 in ag 0
      sb_fdblocks 613, counted 3228
      
      Test as follows:
      mount tmp.img tmpdir
      cp file1M tmpdir
      sync
      
      In 4.19-stable, sync will stuck, the reason is:
      xfs_mountfs
        xfs_check_summary_counts
          if ((!xfs_sb_version_haslazysbcount(&mp->m_sb) ||
             XFS_LAST_UNMOUNT_WAS_CLEAN(mp)) &&
             !xfs_fs_has_sickness(mp, XFS_SICK_FS_COUNTERS))
      	return 0;  -->just return, incore sb_fdblocks still be 613
          xfs_initialize_perag_data
      
      cp file1M tmpdir -->ok(write file to pagecache)
      sync -->stuck(write pagecache to disk)
      xfs_map_blocks
        xfs_iomap_write_allocate
          while (count_fsb != 0) {
            nimaps = 0;
            while (nimaps == 0) { --> endless loop
               nimaps = 1;
               xfs_bmapi_write(..., &nimaps) --> nimaps becomes 0 again
      xfs_bmapi_write
        xfs_bmap_alloc
          xfs_bmap_btalloc
            xfs_alloc_vextent
              xfs_alloc_fix_freelist
                xfs_alloc_space_available -->fail(agf_freeblks is 0)
      
      In linux-next, sync not stuck, cause commit c2b31643 ("xfs:
      use the latest extent at writeback delalloc conversion time") remove
      the above while, dmesg is as follows:
      [   55.250114] XFS (loop0): page discard on page ffffea0008bc7380, inode 0x1b0c, offset 0.
      
      Users do not know why this page is discard, the better soultion is:
      1. Like xfs_repair, make sure sb_fdblocks is equal to counted
      (xfs_initialize_perag_data did this, who is not called at this mount)
      2. Add agf verify, if fail, will tell users to repair
      
      This patch use the second soultion.
      
      Signed-off-by: default avatarZheng Bin <zhengbin13@huawei.com>
      Signed-off-by: default avatarRen Xudong <renxudong1@huawei.com>
      Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
      Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      115267e8
    • Olga Kornievskaia's avatar
      NFSv4 fix CLOSE not waiting for direct IO compeletion · 76c3f19c
      Olga Kornievskaia authored
      
      
      commit d03727b2 upstream.
      
      Figuring out the root case for the REMOVE/CLOSE race and
      suggesting the solution was done by Neil Brown.
      
      Currently what happens is that direct IO calls hold a reference
      on the open context which is decremented as an asynchronous task
      in the nfs_direct_complete(). Before reference is decremented,
      control is returned to the application which is free to close the
      file. When close is being processed, it decrements its reference
      on the open_context but since directIO still holds one, it doesn't
      sent a close on the wire. It returns control to the application
      which is free to do other operations. For instance, it can delete a
      file. Direct IO is finally releasing its reference and triggering
      an asynchronous close. Which races with the REMOVE. On the server,
      REMOVE can be processed before the CLOSE, failing the REMOVE with
      EACCES as the file is still opened.
      
      Signed-off-by: default avatarOlga Kornievskaia <kolga@netapp.com>
      Suggested-by: default avatarNeil Brown <neilb@suse.com>
      CC: stable@vger.kernel.org
      Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      76c3f19c
    • Trond Myklebust's avatar
      pNFS/flexfiles: Fix list corruption if the mirror count changes · 75aceaa6
      Trond Myklebust authored
      
      
      commit 8b040137 upstream.
      
      If the mirror count changes in the new layout we pick up inside
      ff_layout_pg_init_write(), then we can end up adding the
      request to the wrong mirror and corrupting the mirror->pg_list.
      
      Fixes: d600ad1f ("NFS41: pop some layoutget errors to application")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      75aceaa6
    • Chuck Lever's avatar
      SUNRPC: Properly set the @subbuf parameter of xdr_buf_subsegment() · 653db173
      Chuck Lever authored
      
      
      commit 89a3c9f5 upstream.
      
      @subbuf is an output parameter of xdr_buf_subsegment(). A survey of
      call sites shows that @subbuf is always uninitialized before
      xdr_buf_segment() is invoked by callers.
      
      There are some execution paths through xdr_buf_subsegment() that do
      not set all of the fields in @subbuf, leaving some pointer fields
      containing garbage addresses. Subsequent processing of that buffer
      then results in a page fault.
      
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      653db173
    • Vasily Averin's avatar
      sunrpc: fixed rollback in rpc_gssd_dummy_populate() · bbffca92
      Vasily Averin authored
      
      
      commit b7ade381 upstream.
      
      __rpc_depopulate(gssd_dentry) was lost on error path
      
      cc: stable@vger.kernel.org
      Fixes: commit 4b9a445e ("sunrpc: create a new dummy pipe for gssd to hold open")
      Signed-off-by: default avatarVasily Averin <vvs@virtuozzo.com>
      Reviewed-by: default avatarJeff Layton <jlayton@redhat.com>
      Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bbffca92
    • Dan Carpenter's avatar
      Staging: rtl8723bs: prevent buffer overflow in update_sta_support_rate() · a6b8dfe9
      Dan Carpenter authored
      
      
      commit b65a2d8c upstream.
      
      The "ie_len" variable is in the 0-255 range and it comes from the
      network.  If it's over NDIS_802_11_LENGTH_RATES_EX (16) then that will
      lead to memory corruption.
      
      Fixes: 554c0a3a ("staging: Add rtl8723bs sdio wifi driver")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Cc: stable <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20200603101958.GA1845750@mwanda
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a6b8dfe9
    • Denis Efremov's avatar
      drm/radeon: fix fb_div check in ni_init_smc_spll_table() · d51c789b
      Denis Efremov authored
      
      
      commit 35f760b4 upstream.
      
      clk_s is checked twice in a row in ni_init_smc_spll_table().
      fb_div should be checked instead.
      
      Fixes: 69e0b57a ("drm/radeon/kms: add dpm support for cayman (v5)")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDenis Efremov <efremov@linux.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d51c789b
    • Masami Hiramatsu's avatar
      tracing: Fix event trigger to accept redundant spaces · 9e88cda0
      Masami Hiramatsu authored
      commit 6784bead upstream.
      
      Fix the event trigger to accept redundant spaces in
      the trigger input.
      
      For example, these return -EINVAL
      
      echo " traceon" > events/ftrace/print/trigger
      echo "traceon  if common_pid == 0" > events/ftrace/print/trigger
      echo "disable_event:kmem:kmalloc " > events/ftrace/print/trigger
      
      But these are hard to find what is wrong.
      
      To fix this issue, use skip_spaces() to remove spaces
      in front of actual tokens, and set NULL if there is no
      token.
      
      Link: http://lkml.kernel.org/r/159262476352.185015.5261566783045364186.stgit@devnote2
      
      
      
      Cc: Tom Zanussi <zanussi@kernel.org>
      Cc: stable@vger.kernel.org
      Fixes: 85f2b082 ("tracing: Add basic event trigger framework")
      Reviewed-by: default avatarTom Zanussi <zanussi@kernel.org>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9e88cda0
    • Jiping Ma's avatar
      arm64: perf: Report the PC value in REGS_ABI_32 mode · 1c7b654a
      Jiping Ma authored
      
      
      commit 8dfe804a upstream.
      
      A 32-bit perf querying the registers of a compat task using REGS_ABI_32
      will receive zeroes from w15, when it expects to find the PC.
      
      Return the PC value for register dwarf register 15 when returning register
      values for a compat task to perf.
      
      Cc: <stable@vger.kernel.org>
      Acked-by: Mark Rutland's avatarMark Rutland <mark.rutland@arm.com>
      Signed-off-by: default avatarJiping Ma <jiping.ma2@windriver.com>
      Link: https://lore.kernel.org/r/1589165527-188401-1-git-send-email-jiping.ma2@windriver.com
      
      
      [will: Shuffled code and added a comment]
      Signed-off-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1c7b654a
    • Junxiao Bi's avatar
      ocfs2: fix panic on nfs server over ocfs2 · 91d8b24b
      Junxiao Bi authored
      commit e5a15e17 upstream.
      
      The following kernel panic was captured when running nfs server over
      ocfs2, at that time ocfs2_test_inode_bit() was checking whether one
      inode locating at "blkno" 5 was valid, that is ocfs2 root inode, its
      "suballoc_slot" was OCFS2_INVALID_SLOT(65535) and it was allocted from
      //global_inode_alloc, but here it wrongly assumed that it was got from per
      slot inode alloctor which would cause array overflow and trigger kernel
      panic.
      
        BUG: unable to handle kernel paging request at 0000000000001088
        IP: [<ffffffff816f6898>] _raw_spin_lock+0x18/0xf0
        PGD 1e06ba067 PUD 1e9e7d067 PMD 0
        Oops: 0002 [#1] SMP
        CPU: 6 PID: 24873 Comm: nfsd Not tainted 4.1.12-124.36.1.el6uek.x86_64 #2
        Hardware name: Huawei CH121 V3/IT11SGCA1, BIOS 3.87 02/02/2018
        RIP: _raw_spin_lock+0x18/0xf0
        RSP: e02b:ffff88005ae97908  EFLAGS: 00010206
        RAX: ffff88005ae98000 RBX: 0000000000001088 RCX: 0000000000000000
        RDX: 0000000000020000 RSI: 0000000000000009 RDI: 0000000000001088
        RBP: ffff88005ae97928 R08: 0000000000000000 R09: ffff880212878e00
        R10: 0000000000007ff0 R11: 0000000000000000 R12: 0000000000001088
        R13: ffff8800063c0aa8 R14: ffff8800650c27d0 R15: 000000000000ffff
        FS:  0000000000000000(0000) GS:ffff880218180000(0000) knlGS:ffff880218180000
        CS:  e033 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 0000000000001088 CR3: 00000002033d0000 CR4: 0000000000042660
        Call Trace:
          igrab+0x1e/0x60
          ocfs2_get_system_file_inode+0x63/0x3a0 [ocfs2]
          ocfs2_test_inode_bit+0x328/0xa00 [ocfs2]
          ocfs2_get_parent+0xba/0x3e0 [ocfs2]
          reconnect_path+0xb5/0x300
          exportfs_decode_fh+0xf6/0x2b0
          fh_verify+0x350/0x660 [nfsd]
          nfsd4_putfh+0x4d/0x60 [nfsd]
          nfsd4_proc_compound+0x3d3/0x6f0 [nfsd]
          nfsd_dispatch+0xe0/0x290 [nfsd]
          svc_process_common+0x412/0x6a0 [sunrpc]
          svc_process+0x123/0x210 [sunrpc]
          nfsd+0xff/0x170 [nfsd]
          kthread+0xcb/0xf0
          ret_from_fork+0x61/0x90
        Code: 83 c2 02 0f b7 f2 e8 18 dc 91 ff 66 90 eb bf 0f 1f 40 00 55 48 89 e5 41 56 41 55 41 54 53 0f 1f 44 00 00 48 89 fb ba 00 00 02 00 <f0> 0f c1 17 89 d0 45 31 e4 45 31 ed c1 e8 10 66 39 d0 41 89 c6
        RIP   _raw_spin_lock+0x18/0xf0
        CR2: 0000000000001088
        ---[ end trace 7264463cd1aac8f9 ]---
        Kernel panic - not syncing: Fatal exception
      
      Link: http://lkml.kernel.org/r/20200616183829.87211-4-junxiao.bi@oracle.com
      
      
      Signed-off-by: default avatarJunxiao Bi <junxiao.bi@oracle.com>
      Reviewed-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
      Cc: Changwei Ge <gechangwei@live.cn>
      Cc: Gang He <ghe@suse.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Jun Piao <piaojun@huawei.com>
      Cc: Mark Fasheh <mark@fasheh.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>
      91d8b24b
    • Junxiao Bi's avatar
      ocfs2: fix value of OCFS2_INVALID_SLOT · b40e7538
      Junxiao Bi authored
      commit 9277f833 upstream.
      
      In the ocfs2 disk layout, slot number is 16 bits, but in ocfs2
      implementation, slot number is 32 bits.  Usually this will not cause any
      issue, because slot number is converted from u16 to u32, but
      OCFS2_INVALID_SLOT was defined as -1, when an invalid slot number from
      disk was obtained, its value was (u16)-1, and it was converted to u32.
      Then the following checking in get_local_system_inode will be always
      skipped:
      
       static struct inode **get_local_system_inode(struct ocfs2_super *osb,
                                                     int type,
                                                     u32 slot)
       {
       	BUG_ON(slot == OCFS2_INVALID_SLOT);
      	...
       }
      
      Link: http://lkml.kernel.org/r/20200616183829.87211-5-junxiao.bi@oracle.com
      
      
      Signed-off-by: default avatarJunxiao Bi <junxiao.bi@oracle.com>
      Reviewed-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
      Cc: Mark Fasheh <mark@fasheh.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Changwei Ge <gechangwei@live.cn>
      Cc: Gang He <ghe@suse.com>
      Cc: Jun Piao <piaojun@huawei.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>
      b40e7538
    • Junxiao Bi's avatar
      ocfs2: load global_inode_alloc · 0c01d249
      Junxiao Bi authored
      commit 7569d3c7 upstream.
      
      Set global_inode_alloc as OCFS2_FIRST_ONLINE_SYSTEM_INODE, that will
      make it load during mount.  It can be used to test whether some
      global/system inodes are valid.  One use case is that nfsd will test
      whether root inode is valid.
      
      Link: http://lkml.kernel.org/r/20200616183829.87211-3-junxiao.bi@oracle.com
      
      
      Signed-off-by: default avatarJunxiao Bi <junxiao.bi@oracle.com>
      Reviewed-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
      Cc: Changwei Ge <gechangwei@live.cn>
      Cc: Gang He <ghe@suse.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Jun Piao <piaojun@huawei.com>
      Cc: Mark Fasheh <mark@fasheh.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>
      0c01d249
    • Waiman Long's avatar
      mm/slab: use memzero_explicit() in kzfree() · 06491c36
      Waiman Long authored
      commit 8982ae52 upstream.
      
      The kzfree() function is normally used to clear some sensitive
      information, like encryption keys, in the buffer before freeing it back to
      the pool.  Memset() is currently used for buffer clearing.  However
      unlikely, there is still a non-zero probability that the compiler may
      choose to optimize away the memory clearing especially if LTO is being
      used in the future.
      
      To make sure that this optimization will never happen,
      memzero_explicit(), which is introduced in v3.18, is now used in
      kzfree() to future-proof it.
      
      Link: http://lkml.kernel.org/r/20200616154311.12314-2-longman@redhat.com
      
      
      Fixes: 3ef0e5ba ("slab: introduce kzfree()")
      Signed-off-by: default avatarWaiman Long <longman@redhat.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
      Cc: James Morris <jmorris@namei.org>
      Cc: "Serge E. Hallyn" <serge@hallyn.com>
      Cc: Joe Perches <joe@perches.com>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Dan Carpenter <dan.carpenter@oracle.com>
      Cc: "Jason A . Donenfeld" <Jason@zx2c4.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>
      06491c36
    • Filipe Manana's avatar
      btrfs: fix failure of RWF_NOWAIT write into prealloc extent beyond eof · bdbae19b
      Filipe Manana authored
      
      
      commit 4b194628 upstream.
      
      If we attempt to write to prealloc extent located after eof using a
      RWF_NOWAIT write, we always fail with -EAGAIN.
      
      We do actually check if we have an allocated extent for the write at
      the start of btrfs_file_write_iter() through a call to check_can_nocow(),
      but later when we go into the actual direct IO write path we simply
      return -EAGAIN if the write starts at or beyond EOF.
      
      Trivial to reproduce:
      
        $ mkfs.btrfs -f /dev/sdb
        $ mount /dev/sdb /mnt
      
        $ touch /mnt/foo
        $ chattr +C /mnt/foo
      
        $ xfs_io -d -c "pwrite -S 0xab 0 64K" /mnt/foo
        wrote 65536/65536 bytes at offset 0
        64 KiB, 16 ops; 0.0004 sec (135.575 MiB/sec and 34707.1584 ops/sec)
      
        $ xfs_io -c "falloc -k 64K 1M" /mnt/foo
      
        $ xfs_io -d -c "pwrite -N -V 1 -S 0xfe -b 64K 64K 64K" /mnt/foo
        pwrite: Resource temporarily unavailable
      
      On xfs and ext4 the write succeeds, as expected.
      
      Fix this by removing the wrong check at btrfs_direct_IO().
      
      Fixes: edf064e7 ("btrfs: nowait aio support")
      CC: stable@vger.kernel.org # 4.14+
      Signed-off-by: default avatarFilipe Manana <fdmanana@suse.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>
      bdbae19b
    • Sean Christopherson's avatar
      KVM: nVMX: Plumb L2 GPA through to PML emulation · 4e387bed
      Sean Christopherson authored
      
      
      commit 2dbebf7a upstream.
      
      Explicitly pass the L2 GPA to kvm_arch_write_log_dirty(), which for all
      intents and purposes is vmx_write_pml_buffer(), instead of having the
      latter pull the GPA from vmcs.GUEST_PHYSICAL_ADDRESS.  If the dirty bit
      update is the result of KVM emulation (rare for L2), then the GPA in the
      VMCS may be stale and/or hold a completely unrelated GPA.
      
      Fixes: c5f983f6 ("nVMX: Implement emulated Page Modification Logging")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
      Message-Id: <20200622215832.22090-2-sean.j.christopherson@intel.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4e387bed
    • Xiaoyao Li's avatar
      KVM: X86: Fix MSR range of APIC registers in X2APIC mode · cdf6d1e6
      Xiaoyao Li authored
      
      
      commit bf10bd0b upstream.
      
      Only MSR address range 0x800 through 0x8ff is architecturally reserved
      and dedicated for accessing APIC registers in x2APIC mode.
      
      Fixes: 0105d1a5 ("KVM: x2apic interface to lapic")
      Signed-off-by: default avatarXiaoyao Li <xiaoyao.li@intel.com>
      Message-Id: <20200616073307.16440-1-xiaoyao.li@intel.com>
      Cc: stable@vger.kernel.org
      Reviewed-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
      Reviewed-by: default avatarJim Mattson <jmattson@google.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      cdf6d1e6
    • Nathan Chancellor's avatar
      ACPI: sysfs: Fix pm_profile_attr type · f8902c34
      Nathan Chancellor authored
      commit e6d701dc upstream.
      
      When running a kernel with Clang's Control Flow Integrity implemented,
      there is a violation that happens when accessing
      /sys/firmware/acpi/pm_profile:
      
      $ cat /sys/firmware/acpi/pm_profile
      0
      
      $ dmesg
      ...
      [   17.352564] ------------[ cut here ]------------
      [   17.352568] CFI failure (target: acpi_show_profile+0x0/0x8):
      [   17.352572] WARNING: CPU: 3 PID: 497 at kernel/cfi.c:29 __cfi_check_fail+0x33/0x40
      [   17.352573] Modules linked in:
      [   17.352575] CPU: 3 PID: 497 Comm: cat Tainted: G        W         5.7.0-microsoft-standard+ #1
      [   17.352576] RIP: 0010:__cfi_check_fail+0x33/0x40
      [   17.352577] Code: 48 c7 c7 50 b3 85 84 48 c7 c6 50 0a 4e 84 e8 a4 d8 60 00 85 c0 75 02 5b c3 48 c7 c7 dc 5e 49 84 48 89 de 31 c0 e8 7d 06 eb ff <0f> 0b 5b c3 00 00 cc cc 00 00 cc cc 00 85 f6 74 25 41 b9 ea ff ff
      [   17.352577] RSP: 0018:ffffaa6dc3c53d30 EFLAGS: 00010246
      [   17.352578] RAX: 331267e0c06cee00 RBX: ffffffff83d85890 RCX: ffffffff8483a6f8
      [   17.352579] RDX: ffff9cceabbb37c0 RSI: 0000000000000082 RDI: ffffffff84bb9e1c
      [   17.352579] RBP: ffffffff845b2bc8 R08: 0000000000000001 R09: ffff9cceabbba200
      [   17.352579] R10: 000000000000019d R11: 0000000000000000 R12: ffff9cc947766f00
      [   17.352580] R13: ffffffff83d6bd50 R14: ffff9ccc6fa80000 R15: ffffffff845bd328
      [   17.352582] FS:  00007fdbc8d13580(0000) GS:ffff9cce91ac0000(0000) knlGS:0000000000000000
      [   17.352582] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   17.352583] CR2: 00007fdbc858e000 CR3: 00000005174d0000 CR4: 0000000000340ea0
      [   17.352584] Call Trace:
      [   17.352586]  ? rev_id_show+0x8/0x8
      [   17.352587]  ? __cfi_check+0x45bac/0x4b640
      [   17.352589]  ? kobj_attr_show+0x73/0x80
      [   17.352590]  ? sysfs_kf_seq_show+0xc1/0x140
      [   17.352592]  ? ext4_seq_options_show.cfi_jt+0x8/0x8
      [   17.352593]  ? seq_read+0x180/0x600
      [   17.352595]  ? sysfs_create_file_ns.cfi_jt+0x10/0x10
      [   17.352596]  ? tlbflush_read_file+0x8/0x8
      [   17.352597]  ? __vfs_read+0x6b/0x220
      [   17.352598]  ? handle_mm_fault+0xa23/0x11b0
      [   17.352599]  ? vfs_read+0xa2/0x130
      [   17.352599]  ? ksys_read+0x6a/0xd0
      [   17.352601]  ? __do_sys_getpgrp+0x8/0x8
      [   17.352602]  ? do_syscall_64+0x72/0x120
      [   17.352603]  ? entry_SYSCALL_64_after_hwframe+0x44/0xa9
      [   17.352604] ---[ end trace 7b1fa81dc897e419 ]---
      
      When /sys/firmware/acpi/pm_profile is read, sysfs_kf_seq_show is called,
      which in turn calls kobj_attr_show, which gets the ->show callback
      member by calling container_of on attr (casting it to struct
      kobj_attribute) then calls it.
      
      There is a CFI violation because pm_profile_attr is of type
      struct device_attribute but kobj_attr_show calls ->show expecting it
      to be from struct kobj_attribute. CFI checking ensures that function
      pointer types match when doing indirect calls. Fix pm_profile_attr to
      be defined in terms of kobj_attribute so there is no violation or
      mismatch.
      
      Fixes: 362b6460 ("ACPI: Export FADT pm_profile integer value to userspace")
      Link: https://github.com/ClangBuiltLinux/linux/issues/1051
      
      
      Reported-by: default avataryuu ichii <byahu140@heisei.be>
      Signed-off-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Cc: 3.10+ <stable@vger.kernel.org> # 3.10+
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f8902c34
    • Aaron Plattner's avatar
      ALSA: hda: Add NVIDIA codec IDs 9a & 9d through a0 to patch table · 494cb2d6
      Aaron Plattner authored
      
      
      commit adb36a82 upstream.
      
      These IDs are for upcoming NVIDIA chips with audio functions that are largely
      similar to the existing ones.
      
      Signed-off-by: default avatarAaron Plattner <aplattner@nvidia.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20200611180845.39942-1-aplattner@nvidia.com
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      494cb2d6
    • Luis Chamberlain's avatar
      blktrace: break out of blktrace setup on concurrent calls · b851d4c9
      Luis Chamberlain authored
      [ Upstream commit 1b0b2836 ]
      
      We use one blktrace per request_queue, that means one per the entire
      disk.  So we cannot run one blktrace on say /dev/vda and then /dev/vda1,
      or just two calls on /dev/vda.
      
      We check for concurrent setup only at the very end of the blktrace setup though.
      
      If we try to run two concurrent blktraces on the same block device the
      second one will fail, and the first one seems to go on. However when
      one tries to kill the first one one will see things like this:
      
      The kernel will show these:
      
      ```
      debugfs: File 'dropped' in directory 'nvme1n1' already present!
      debugfs: File 'msg' in directory 'nvme1n1' already present!
      debugfs: File 'trace0' in directory 'nvme1n1' already present!
      ``
      
      And userspace just sees this error message for the second call:
      
      ```
      blktrace /dev/nvme1n1
      BLKTRACESETUP(2) /dev/nvme1n1 failed: 5/Input/output error
      ```
      
      The first userspace process #1 will also claim that the files
      were taken underneath their nose as well. The files are taken
      away form the first process given that when the second blktrace
      fails, it will follow up with a BLKTRACESTOP and BLKTRACETEARDOWN.
      This means that even if go-happy process #1 is waiting for blktrace
      data, we *have* been asked to take teardown the blktrace.
      
      This can easily be reproduced with break-blktrace [0] run_0005.sh test.
      
      Just break out early if we know we're already going to fail, this will
      prevent trying to create the files all over again, which we know still
      exist.
      
      [0] https://github.com/mcgrof/break-blktrace
      
      
      
      Signed-off-by: default avatarLuis Chamberlain <mcgrof@kernel.org>
      Signed-off-by: default avatarJan Kara <jack@suse.cz>
      Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b851d4c9
    • Masahiro Yamada's avatar
      kbuild: improve cc-option to clean up all temporary files · b066e9ee
      Masahiro Yamada authored
      
      
      [ Upstream commit f2f02ebd ]
      
      When cc-option and friends evaluate compiler flags, the temporary file
      $$TMP is created as an output object, and automatically cleaned up.
      The actual file path of $$TMP is .<pid>.tmp, here <pid> is the process
      ID of $(shell ...) invoked from cc-option. (Please note $$$$ is the
      escape sequence of $$).
      
      Such garbage files are cleaned up in most cases, but some compiler flags
      create additional output files.
      
      For example, -gsplit-dwarf creates a .dwo file.
      
      When CONFIG_DEBUG_INFO_SPLIT=y, you will see a bunch of .<pid>.dwo files
      left in the top of build directories. You may not notice them unless you
      do 'ls -a', but the garbage files will increase every time you run 'make'.
      
      This commit changes the temporary object path to .tmp_<pid>/tmp, and
      removes .tmp_<pid> directory when exiting. Separate build artifacts such
      as *.dwo will be cleaned up all together because their file paths are
      usually determined based on the base name of the object.
      
      Another example is -ftest-coverage, which outputs the coverage data into
      <base-name-of-object>.gcno
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b066e9ee
    • Sven Schnelle's avatar
      s390/ptrace: fix setting syscall number · 5f311c5e
      Sven Schnelle authored
      
      
      [ Upstream commit 873e5a76 ]
      
      When strace wants to update the syscall number, it sets GPR2
      to the desired number and updates the GPR via PTRACE_SETREGSET.
      It doesn't update regs->int_code which would cause the old syscall
      executed on syscall restart. As we cannot change the ptrace ABI and
      don't have a field for the interruption code, check whether the tracee
      is in a syscall and the last instruction was svc. In that case assume
      that the tracer wants to update the syscall number and copy the GPR2
      value to regs->int_code.
      
      Signed-off-by: default avatarSven Schnelle <svens@linux.ibm.com>
      Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5f311c5e
    • Zekun Shen's avatar
      net: alx: fix race condition in alx_remove · 9cef5a57
      Zekun Shen authored
      
      
      [ Upstream commit e89df5c4 ]
      
      There is a race condition exist during termination. The path is
      alx_stop and then alx_remove. An alx_schedule_link_check could be called
      before alx_stop by interrupt handler and invoke alx_link_check later.
      Alx_stop frees the napis, and alx_remove cancels any pending works.
      If any of the work is scheduled before termination and invoked before
      alx_remove, a null-ptr-deref occurs because both expect alx->napis[i].
      
      This patch fix the race condition by moving cancel_work_sync functions
      before alx_free_napis inside alx_stop. Because interrupt handler can call
      alx_schedule_link_check again, alx_free_irq is moved before
      cancel_work_sync calls too.
      
      Signed-off-by: default avatarZekun Shen <bruceshenzk@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9cef5a57
    • Ye Bin's avatar
      ata/libata: Fix usage of page address by page_address in ata_scsi_mode_select_xlat function · a5eda762
      Ye Bin authored
      [ Upstream commit f650ef61 ]
      
      BUG: KASAN: use-after-free in ata_scsi_mode_select_xlat+0x10bd/0x10f0
      drivers/ata/libata-scsi.c:4045
      Read of size 1 at addr ffff88803b8cd003 by task syz-executor.6/12621
      
      CPU: 1 PID: 12621 Comm: syz-executor.6 Not tainted 4.19.95 #1
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
      1.10.2-1ubuntu1 04/01/2014
      Call Trace:
      __dump_stack lib/dump_stack.c:77 [inline]
      dump_stack+0xac/0xee lib/dump_stack.c:118
      print_address_description+0x60/0x223 mm/kasan/report.c:253
      kasan_report_error mm/kasan/report.c:351 [inline]
      kasan_report mm/kasan/report.c:409 [inline]
      kasan_report.cold+0xae/0x2d8 mm/kasan/report.c:393
      ata_scsi_mode_select_xlat+0x10bd/0x10f0 drivers/ata/libata-scsi.c:4045
      ata_scsi_translate+0x2da/0x680 drivers/ata/libata-scsi.c:2035
      __ata_scsi_queuecmd drivers/ata/libata-scsi.c:4360 [inline]
      ata_scsi_queuecmd+0x2e4/0x790 drivers/ata/libata-scsi.c:4409
      scsi_dispatch_cmd+0x2ee/0x6c0 drivers/scsi/scsi_lib.c:1867
      scsi_queue_rq+0xfd7/0x1990 drivers/scsi/scsi_lib.c:2170
      blk_mq_dispatch_rq_list+0x1e1/0x19a0 block/blk-mq.c:1186
      blk_mq_do_dispatch_sched+0x147/0x3d0 block/blk-mq-sched.c:108
      blk_mq_sched_dispatch_requests+0x427/0x680 block/blk-mq-sched.c:204
      __blk_mq_run_hw_queue+0xbc/0x200 block/blk-mq.c:1308
      __blk_mq_delay_run_hw_queue+0x3c0/0x460 block/blk-mq.c:1376
      blk_mq_run_hw_queue+0x152/0x310 block/blk-mq.c:1413
      blk_mq_sched_insert_request+0x337/0x6c0 block/blk-mq-sched.c:397
      blk_execute_rq_nowait+0x124/0x320 block/blk-exec.c:64
      blk_execute_rq+0xc5/0x112 block/blk-exec.c:101
      sg_scsi_ioctl+0x3b0/0x6a0 block/scsi_ioctl.c:507
      sg_ioctl+0xd37/0x23f0 drivers/scsi/sg.c:1106
      vfs_ioctl fs/ioctl.c:46 [inline]
      file_ioctl fs/ioctl.c:501 [inline]
      do_vfs_ioctl+0xae6/0x1030 fs/ioctl.c:688
      ksys_ioctl+0x76/0xa0 fs/ioctl.c:705
      __do_sys_ioctl fs/ioctl.c:712 [inline]
      __se_sys_ioctl fs/ioctl.c:710 [inline]
      __x64_sys_ioctl+0x6f/0xb0 fs/ioctl.c:710
      do_syscall_64+0xa0/0x2e0 arch/x86/entry/common.c:293
      entry_SYSCALL_64_after_hwframe+0x44/0xa9
      RIP: 0033:0x45c479
      Code: ad b6 fb ff c3 66 2e 0f 1f 84 00 00 00 00 00 66 90 48 89 f8 48 89
      f7 48
      89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff
      ff 0f
      83 7b b6 fb ff c3 66 2e 0f 1f 84 00 00 00 00
      RSP: 002b:00007fb0e9602c78 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
      RAX: ffffffffffffffda RBX: 00007fb0e96036d4 RCX: 000000000045c479
      RDX: 0000000020000040 RSI: 0000000000000001 RDI: 0000000000000003
      RBP: 000000000076bfc0 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000246 R12: 00000000ffffffff
      R13: 000000000000046d R14: 00000000004c6e1a R15: 000000000076bfcc
      
      Allocated by task 12577:
      set_track mm/kasan/kasan.c:460 [inline]
      kasan_kmalloc mm/kasan/kasan.c:553 [inline]
      kasan_kmalloc+0xbf/0xe0 mm/kasan/kasan.c:531
      __kmalloc+0xf3/0x1e0 mm/slub.c:3749
      kmalloc include/linux/slab.h:520 [inline]
      load_elf_phdrs+0x118/0x1b0 fs/binfmt_elf.c:441
      load_elf_binary+0x2de/0x4610 fs/binfmt_elf.c:737
      search_binary_handler fs/exec.c:1654 [inline]
      search_binary_handler+0x15c/0x4e0 fs/exec.c:1632
      exec_binprm fs/exec.c:1696 [inline]
      __do_execve_file.isra.0+0xf52/0x1a90 fs/exec.c:1820
      do_execveat_common fs/exec.c:1866 [inline]
      do_execve fs/exec.c:1883 [inline]
      __do_sys_execve fs/exec.c:1964 [inline]
      __se_sys_execve fs/exec.c:1959 [inline]
      __x64_sys_execve+0x8a/0xb0 fs/exec.c:1959
      do_syscall_64+0xa0/0x2e0 arch/x86/entry/common.c:293
      entry_SYSCALL_64_after_hwframe+0x44/0xa9
      
      Freed by task 12577:
      set_track mm/kasan/kasan.c:460 [inline]
      __kasan_slab_free+0x129/0x170 mm/kasan/kasan.c:521
      slab_free_hook mm/slub.c:1370 [inline]
      slab_free_freelist_hook mm/slub.c:1397 [inline]
      slab_free mm/slub.c:2952 [inline]
      kfree+0x8b/0x1a0 mm/slub.c:3904
      load_elf_binary+0x1be7/0x4610 fs/binfmt_elf.c:1118
      search_binary_handler fs/exec.c:1654 [inline]
      search_binary_handler+0x15c/0x4e0 fs/exec.c:1632
      exec_binprm fs/exec.c:1696 [inline]
      __do_execve_file.isra.0+0xf52/0x1a90 fs/exec.c:1820
      do_execveat_common fs/exec.c:1866 [inline]
      do_execve fs/exec.c:1883 [inline]
      __do_sys_execve fs/exec.c:1964 [inline]
      __se_sys_execve fs/exec.c:1959 [inline]
      __x64_sys_execve+0x8a/0xb0 fs/exec.c:1959
      do_syscall_64+0xa0/0x2e0 arch/x86/entry/common.c:293
      entry_SYSCALL_64_after_hwframe+0x44/0xa9
      
      The buggy address belongs to the object at ffff88803b8ccf00
      which belongs to the cache kmalloc-512 of size 512
      The buggy address is located 259 bytes inside of
      512-byte region [ffff88803b8ccf00, ffff88803b8cd100)
      The buggy address belongs to the page:
      page:ffffea0000ee3300 count:1 mapcount:0 mapping:ffff88806cc03080
      index:0xffff88803b8cc780 compound_mapcount: 0
      flags: 0x100000000008100(slab|head)
      raw: 0100000000008100 ffffea0001104080 0000000200000002 ffff88806cc03080
      raw: ffff88803b8cc780 00000000800c000b 00000001ffffffff 0000000000000000
      page dumped because: kasan: bad access detected
      
      Memory state around the buggy address:
      ffff88803b8ccf00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      ffff88803b8ccf80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      >ffff88803b8cd000: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      ^
      ffff88803b8cd080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      ffff88803b8cd100: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      
      You can refer to "https://www.lkml.org/lkml/2019/1/17/474
      
      " reproduce
      this error.
      
      The exception code is "bd_len = p[3];", "p" value is ffff88803b8cd000
      which belongs to the cache kmalloc-512 of size 512. The "page_address(sg_page(scsi_sglist(scmd)))"
      maybe from sg_scsi_ioctl function "buffer" which allocated by kzalloc, so "buffer"
      may not page aligned.
      This also looks completely buggy on highmem systems and really needs to use a
      kmap_atomic.      --Christoph Hellwig
      To address above bugs, Paolo Bonzini advise to simpler to just make a char array
      of size CACHE_MPAGE_LEN+8+8+4-2(or just 64 to make it easy), use sg_copy_to_buffer
      to copy from the sglist into the buffer, and workthere.
      
      Signed-off-by: default avatarYe Bin <yebin10@huawei.com>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a5eda762
    • Juri Lelli's avatar
      sched/core: Fix PI boosting between RT and DEADLINE tasks · ea8e50ab
      Juri Lelli authored
      
      
      [ Upstream commit 740797ce ]
      
      syzbot reported the following warning:
      
       WARNING: CPU: 1 PID: 6351 at kernel/sched/deadline.c:628
       enqueue_task_dl+0x22da/0x38a0 kernel/sched/deadline.c:1504
      
      At deadline.c:628 we have:
      
       623 static inline void setup_new_dl_entity(struct sched_dl_entity *dl_se)
       624 {
       625 	struct dl_rq *dl_rq = dl_rq_of_se(dl_se);
       626 	struct rq *rq = rq_of_dl_rq(dl_rq);
       627
       628 	WARN_ON(dl_se->dl_boosted);
       629 	WARN_ON(dl_time_before(rq_clock(rq), dl_se->deadline));
              [...]
           }
      
      Which means that setup_new_dl_entity() has been called on a task
      currently boosted. This shouldn't happen though, as setup_new_dl_entity()
      is only called when the 'dynamic' deadline of the new entity
      is in the past w.r.t. rq_clock and boosted tasks shouldn't verify this
      condition.
      
      Digging through the PI code I noticed that what above might in fact happen
      if an RT tasks blocks on an rt_mutex hold by a DEADLINE task. In the
      first branch of boosting conditions we check only if a pi_task 'dynamic'
      deadline is earlier than mutex holder's and in this case we set mutex
      holder to be dl_boosted. However, since RT 'dynamic' deadlines are only
      initialized if such tasks get boosted at some point (or if they become
      DEADLINE of course), in general RT 'dynamic' deadlines are usually equal
      to 0 and this verifies the aforementioned condition.
      
      Fix it by checking that the potential donor task is actually (even if
      temporary because in turn boosted) running at DEADLINE priority before
      using its 'dynamic' deadline value.
      
      Fixes: 2d3d891d ("sched/deadline: Add SCHED_DEADLINE inheritance logic")
      Reported-by: default avatar <syzbot+119ba87189432ead09b4@syzkaller.appspotmail.com>
      Signed-off-by: default avatarJuri Lelli <juri.lelli@redhat.com>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Reviewed-by: default avatarDaniel Bristot de Oliveira <bristot@redhat.com>
      Tested-by: default avatarDaniel Wagner <dwagner@suse.de>
      Link: https://lkml.kernel.org/r/20181119153201.GB2119@localhost.localdomain
      
      
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ea8e50ab
    • Doug Berger's avatar
      net: bcmgenet: use hardware padding of runt frames · 2a0ef851
      Doug Berger authored
      
      
      [ Upstream commit 20d1f2d1 ]
      
      When commit 474ea9ca ("net: bcmgenet: correctly pad short
      packets") added the call to skb_padto() it should have been
      located before the nr_frags parameter was read since that value
      could be changed when padding packets with lengths between 55
      and 59 bytes (inclusive).
      
      The use of a stale nr_frags value can cause corruption of the
      pad data when tx-scatter-gather is enabled. This corruption of
      the pad can cause invalid checksum computation when hardware
      offload of tx-checksum is also enabled.
      
      Since the original reason for the padding was corrected by
      commit 7dd39913 ("net: bcmgenet: fix skb_len in
      bcmgenet_xmit_single()") we can remove the software padding all
      together and make use of hardware padding of short frames as
      long as the hardware also always appends the FCS value to the
      frame.
      
      Fixes: 474ea9ca ("net: bcmgenet: correctly pad short packets")
      Signed-off-by: default avatarDoug Berger <opendmb@gmail.com>
      Acked-by: Florian Fainelli's avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2a0ef851
    • Russell King's avatar
      netfilter: ipset: fix unaligned atomic access · 64c4a9d9
      Russell King authored
      
      
      [ Upstream commit 71502846 ]
      
      When using ip_set with counters and comment, traffic causes the kernel
      to panic on 32-bit ARM:
      
      Alignment trap: not handling instruction e1b82f9f at [<bf01b0dc>]
      Unhandled fault: alignment exception (0x221) at 0xea08133c
      PC is at ip_set_match_extensions+0xe0/0x224 [ip_set]
      
      The problem occurs when we try to update the 64-bit counters - the
      faulting address above is not 64-bit aligned.  The problem occurs
      due to the way elements are allocated, for example:
      
      	set->dsize = ip_set_elem_len(set, tb, 0, 0);
      	map = ip_set_alloc(sizeof(*map) + elements * set->dsize);
      
      If the element has a requirement for a member to be 64-bit aligned,
      and set->dsize is not a multiple of 8, but is a multiple of four,
      then every odd numbered elements will be misaligned - and hitting
      an atomic64_add() on that element will cause the kernel to panic.
      
      ip_set_elem_len() must return a size that is rounded to the maximum
      alignment of any extension field stored in the element.  This change
      ensures that is the case.
      
      Fixes: 95ad1f4a ("netfilter: ipset: Fix extension alignment")
      Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
      Acked-by: default avatarJozsef Kadlecsik <kadlec@netfilter.org>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      64c4a9d9
    • Dan Carpenter's avatar
      usb: gadget: udc: Potential Oops in error handling code · a861f428
      Dan Carpenter authored
      
      
      [ Upstream commit e55f3c37 ]
      
      If this is in "transceiver" mode the the ->qwork isn't required and is
      a NULL pointer.  This can lead to a NULL dereference when we call
      destroy_workqueue(udc->qwork).
      
      Fixes: 3517c31a ("usb: gadget: mv_udc: use devm_xxx for probe")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a861f428
    • yu kuai's avatar
      ARM: imx5: add missing put_device() call in imx_suspend_alloc_ocram() · 9be0376a
      yu kuai authored
      
      
      [ Upstream commit 586745f1 ]
      
      if of_find_device_by_node() succeed, imx_suspend_alloc_ocram() doesn't
      have a corresponding put_device(). Thus add a jump target to fix the
      exception handling for this function implementation.
      
      Fixes: 1579c7b9 ("ARM: imx53: Set DDR pins to high impedance when in suspend to RAM.")
      Signed-off-by: default avataryu kuai <yukuai3@huawei.com>
      Signed-off-by: default avatarShawn Guo <shawnguo@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9be0376a
    • Alexander Lobakin's avatar
      net: qed: fix excessive QM ILT lines consumption · 24495b2b
      Alexander Lobakin authored
      
      
      [ Upstream commit d434d02f ]
      
      This is likely a copy'n'paste mistake. The amount of ILT lines to
      reserve for a single VF was being multiplied by the total VFs count.
      This led to a huge redundancy in reservation and potential lines
      drainouts.
      
      Fixes: 1408cc1f ("qed: Introduce VFs")
      Signed-off-by: default avatarAlexander Lobakin <alobakin@marvell.com>
      Signed-off-by: default avatarIgor Russkikh <irusskikh@marvell.com>
      Signed-off-by: default avatarMichal Kalderon <michal.kalderon@marvell.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      24495b2b
    • Alexander Lobakin's avatar
      net: qed: fix NVMe login fails over VFs · b8fa3e8d
      Alexander Lobakin authored
      
      
      [ Upstream commit ccd7c7ce ]
      
      25ms sleep cycles in waiting for PF response are excessive and may lead
      to different timeout failures.
      
      Start to wait with short udelays, and in most cases polling will end
      here. If the time was not sufficient, switch to msleeps.
      usleep_range() may go far beyond 100us depending on platform and tick
      configuration, hence atomic udelays for consistency.
      
      Also add explicit DMA barriers since 'done' always comes from a shared
      request-response DMA pool, and note that in the comment nearby.
      
      Fixes: 1408cc1f ("qed: Introduce VFs")
      Signed-off-by: default avatarAlexander Lobakin <alobakin@marvell.com>
      Signed-off-by: default avatarIgor Russkikh <irusskikh@marvell.com>
      Signed-off-by: default avatarMichal Kalderon <michal.kalderon@marvell.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b8fa3e8d
    • Alexander Lobakin's avatar
      net: qed: fix left elements count calculation · 04fcef5c
      Alexander Lobakin authored
      
      
      [ Upstream commit 97dd1abd ]
      
      qed_chain_get_element_left{,_u32} returned 0 when the difference
      between producer and consumer page count was equal to the total
      page count.
      Fix this by conditional expanding of producer value (vs
      unconditional). This allowed to eliminate normalizaton against
      total page count, which was the cause of this bug.
      
      Misc: replace open-coded constants with common defines.
      
      Fixes: a91eb52a ("qed: Revisit chain implementation")
      Signed-off-by: default avatarAlexander Lobakin <alobakin@marvell.com>
      Signed-off-by: default avatarIgor Russkikh <irusskikh@marvell.com>
      Signed-off-by: default avatarMichal Kalderon <michal.kalderon@marvell.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      04fcef5c
    • Fan Guo's avatar
      RDMA/mad: Fix possible memory leak in ib_mad_post_receive_mads() · 1e865dd2
      Fan Guo authored
      [ Upstream commit a17f4bed ]
      
      If ib_dma_mapping_error() returns non-zero value,
      ib_mad_post_receive_mads() will jump out of loops and return -ENOMEM
      without freeing mad_priv. Fix this memory-leak problem by freeing mad_priv
      in this case.
      
      Fixes: 2c34e68f ("IB/mad: Check and handle potential DMA mapping errors")
      Link: https://lore.kernel.org/r/20200612063824.180611-1-guofan5@huawei.com
      
      
      Signed-off-by: default avatarFan Guo <guofan5@huawei.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1e865dd2
    • Qiushi Wu's avatar
      ASoC: rockchip: Fix a reference count leak. · 5ef8e112
      Qiushi Wu authored
      
      
      [ Upstream commit f141a422 ]
      
      Calling pm_runtime_get_sync increments the counter even in case of
      failure, causing incorrect ref count if pm_runtime_put is not called in
      error handling paths. Call pm_runtime_put if pm_runtime_get_sync fails.
      
      Fixes: fc05a5b2 ("ASoC: rockchip: add support for pdm controller")
      Signed-off-by: default avatarQiushi Wu <wu000273@umn.edu>
      Reviewed-by: default avatarHeiko Stuebner <heiko@sntech.de>
      Link: https://lore.kernel.org/r/20200613205158.27296-1-wu000273@umn.edu
      
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5ef8e112
    • Mark Zhang's avatar
      RDMA/cma: Protect bind_list and listen_list while finding matching cm id · b6c4066a
      Mark Zhang authored
      [ Upstream commit 730c8912 ]
      
      The bind_list and listen_list must be accessed under a lock, add the
      missing locking around the access in cm_ib_id_from_event()
      
      In addition add lockdep asserts to make it clearer what the locking
      semantic is here.
      
        general protection fault: 0000 [#1] SMP NOPTI
        CPU: 226 PID: 126135 Comm: kworker/226:1 Tainted: G OE 4.12.14-150.47-default #1 SLE15
        Hardware name: Cray Inc. Windom/Windom, BIOS 0.8.7 01-10-2020
        Workqueue: ib_cm cm_work_handler [ib_cm]
        task: ffff9c5a60a1d2c0 task.stack: ffffc1d91f554000
        RIP: 0010:cma_ib_req_handler+0x3f1/0x11b0 [rdma_cm]
        RSP: 0018:ffffc1d91f557b40 EFLAGS: 00010286
        RAX: deacffffffffff30 RBX: 0000000000000001 RCX: ffff9c2af5bb6000
        RDX: 00000000000000a9 RSI: ffff9c5aa4ed2f10 RDI: ffffc1d91f557b08
        RBP: ffffc1d91f557d90 R08: ffff9c340cc80000 R09: ffff9c2c0f901900
        R10: 0000000000000000 R11: 0000000000000001 R12: deacffffffffff30
        R13: ffff9c5a48aeec00 R14: ffffc1d91f557c30 R15: ffff9c5c2eea3688
        FS: 0000000000000000(0000) GS:ffff9c5c2fa80000(0000) knlGS:0000000000000000
        CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 00002b5cc03fa320 CR3: 0000003f8500a000 CR4: 00000000003406e0
        Call Trace:
        ? rdma_addr_cancel+0xa0/0xa0 [ib_core]
        ? cm_process_work+0x28/0x140 [ib_cm]
        cm_process_work+0x28/0x140 [ib_cm]
        ? cm_get_bth_pkey.isra.44+0x34/0xa0 [ib_cm]
        cm_work_handler+0xa06/0x1a6f [ib_cm]
        ? __switch_to_asm+0x34/0x70
        ? __switch_to_asm+0x34/0x70
        ? __switch_to_asm+0x40/0x70
        ? __switch_to_asm+0x34/0x70
        ? __switch_to_asm+0x40/0x70
        ? __switch_to_asm+0x34/0x70
        ? __switch_to_asm+0x40/0x70
        ? __switch_to+0x7c/0x4b0
        ? __switch_to_asm+0x40/0x70
        ? __switch_to_asm+0x34/0x70
        process_one_work+0x1da/0x400
        worker_thread+0x2b/0x3f0
        ? process_one_work+0x400/0x400
        kthread+0x118/0x140
        ? kthread_create_on_node+0x40/0x40
        ret_from_fork+0x22/0x40
        Code: 00 66 83 f8 02 0f 84 ca 05 00 00 49 8b 84 24 d0 01 00 00 48 85 c0 0f 84 68 07 00 00 48 2d d0 01
        00 00 49 89 c4 0f 84 59 07 00 00 <41> 0f b7 44 24 20 49 8b 77 50 66 83 f8 0a 75 9e 49 8b 7c 24 28
      
      Fixes: 4c21b5bc ("IB/cma: Add net_dev and private data checks to RDMA CM")
      Link: https://lore.kernel.org/r/20200616104304.2426081-1-leon@kernel.org
      
      
      Signed-off-by: default avatarMark Zhang <markz@mellanox.com>
      Reviewed-by: default avatarMaor Gottlieb <maorg@mellanox.com>
      Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b6c4066a
    • David Howells's avatar
      rxrpc: Fix handling of rwind from an ACK packet · 9cdc8934
      David Howells authored
      
      
      [ Upstream commit a2ad7c21 ]
      
      The handling of the receive window size (rwind) from a received ACK packet
      is not correct.  The rxrpc_input_ackinfo() function currently checks the
      current Tx window size against the rwind from the ACK to see if it has
      changed, but then limits the rwind size before storing it in the tx_winsize
      member and, if it increased, wake up the transmitting process.  This means
      that if rwind > RXRPC_RXTX_BUFF_SIZE - 1, this path will always be
      followed.
      
      Fix this by limiting rwind before we compare it to tx_winsize.
      
      The effect of this can be seen by enabling the rxrpc_rx_rwind_change
      tracepoint.
      
      Fixes: 702f2ac8 ("rxrpc: Wake up the transmitter if Rx window size increases on the peer")
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9cdc8934
    • Matthew Hagan's avatar
      ARM: dts: NSP: Correct FA2 mailbox node · 1688ebca
      Matthew Hagan authored
      
      
      [ Upstream commit ac4e106d ]
      
      The FA2 mailbox is specified at 0x18025000 but should actually be
      0x18025c00, length 0x400 according to socregs_nsp.h and board_bu.c. Also
      the interrupt was off by one and should be GIC SPI 151 instead of 150.
      
      Fixes: 17d51717 ("ARM: dts: NSP: Add mailbox (PDC) to NSP")
      Signed-off-by: default avatarMatthew Hagan <mnhagan88@gmail.com>
      Signed-off-by: Florian Fainelli's avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1688ebca
    • Qiushi Wu's avatar
      efi/esrt: Fix reference count leak in esre_create_sysfs_entry. · cebee767
      Qiushi Wu authored
      
      
      [ Upstream commit 4ddf4739 ]
      
      kobject_init_and_add() takes reference even when it fails.
      If this function returns an error, kobject_put() must be called to
      properly clean up the memory associated with the object. Previous
      commit "b8eb7183" fixed a similar problem.
      
      Fixes: 0bb54905 ("efi: Add esrt support")
      Signed-off-by: default avatarQiushi Wu <wu000273@umn.edu>
      Link: https://lore.kernel.org/r/20200528183804.4497-1-wu000273@umn.edu
      
      
      Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      cebee767
    • Zhang Xiaoxu's avatar
      cifs/smb3: Fix data inconsistent when zero file range · a174c868
      Zhang Xiaoxu authored
      
      
      [ Upstream commit 6b690402 ]
      
      CIFS implements the fallocate(FALLOC_FL_ZERO_RANGE) with send SMB
      ioctl(FSCTL_SET_ZERO_DATA) to server. It just set the range of the
      remote file to zero, but local page cache not update, then the data
      inconsistent with server, which leads the xfstest generic/008 failed.
      
      So we need to remove the local page caches before send SMB
      ioctl(FSCTL_SET_ZERO_DATA) to server. After next read, it will
      re-cache it.
      
      Fixes: 30175628 ("[SMB3] Enable fallocate -z support for SMB3 mounts")
      Reported-by: default avatarHulk Robot <hulkci@huawei.com>
      Signed-off-by: default avatarZhang Xiaoxu <zhangxiaoxu5@huawei.com>
      Reviewed-by: default avatarPavel Shilovsky <pshilov@microsoft.com>
      Cc: stable@vger.kernel.org # v3.17
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a174c868
Loading