1. 30 Jun, 2020 40 commits
    • Chen Yu's avatar
      e1000e: Do not wake up the system via WOL if device wakeup is disabled · 97a17ed4
      Chen Yu authored
      [ Upstream commit 6bf6be11 ]
      
      Currently the system will be woken up via WOL(Wake On LAN) even if the
      device wakeup ability has been disabled via sysfs:
       cat /sys/devices/pci0000:00/0000:00:1f.6/power/wakeup
       disabled
      
      The system should not be woken up if the user has explicitly
      disabled the wake up ability for this device.
      
      This patch clears the WOL ability of this network device if the
      user has disabled the wake up ability in sysfs.
      
      Fixes: bc7f75fa ("[E1000E]: New pci-express e1000 driver")
      Reported-by: default avatar"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
      Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: <Stable@vger.kernel.org>
      Signed-off-by: default avatarChen Yu <yu.c.chen@intel.com>
      Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      97a17ed4
    • Jiri Olsa's avatar
      kretprobe: Prevent triggering kretprobe from within kprobe_flush_task · ed61e8c5
      Jiri Olsa authored
      [ Upstream commit 9b38cc70 ]
      
      Ziqian reported lockup when adding retprobe on _raw_spin_lock_irqsave.
      My test was also able to trigger lockdep output:
      
       ============================================
       WARNING: possible recursive locking detected
       5.6.0-rc6+ #6 Not tainted
       --------------------------------------------
       sched-messaging/2767 is trying to acquire lock:
       ffffffff9a492798 (&(kretprobe_table_locks[i].lock)){-.-.}, at: kretprobe_hash_lock+0x52/0xa0
      
       but task is already holding lock:
       ffffffff9a491a18 (&(kretprobe_table_locks[i].lock)){-.-.}, at: kretprobe_trampoline+0x0/0x50
      
       other info that might help us debug this:
        Possible unsafe locking scenario:
      
              CPU0
              ----
         lock(&(kretprobe_table_locks[i].lock));
         lock(&(kretprobe_table_locks[i].lock));
      
        *** DEADLOCK ***
      
        May be due to missing lock nesting notation
      
       1 lock held by sched-messaging/2767:
        #0: ffffffff9a491a18 (&(kretprobe_table_locks[i].lock)){-.-.}, at: kretprobe_trampoline+0x0/0x50
      
       stack backtrace:
       CPU: 3 PID: 2767 Comm: sched-messaging Not tainted 5.6.0-rc6+ #6
       Call Trace:
        dump_stack+0x96/0xe0
        __lock_acquire.cold.57+0x173/0x2b7
        ? native_queued_spin_lock_slowpath+0x42b/0x9e0
        ? lockdep_hardirqs_on+0x590/0x590
        ? __lock_acquire+0xf63/0x4030
        lock_acquire+0x15a/0x3d0
        ? kretprobe_hash_lock+0x52/0xa0
        _raw_spin_lock_irqsave+0x36/0x70
        ? kretprobe_hash_lock+0x52/0xa0
        kretprobe_hash_lock+0x52/0xa0
        trampoline_handler+0xf8/0x940
        ? kprobe_fault_handler+0x380/0x380
        ? find_held_lock+0x3a/0x1c0
        kretprobe_trampoline+0x25/0x50
        ? lock_acquired+0x392/0xbc0
        ? _raw_spin_lock_irqsave+0x50/0x70
        ? __get_valid_kprobe+0x1f0/0x1f0
        ? _raw_spin_unlock_irqrestore+0x3b/0x40
        ? finish_task_switch+0x4b9/0x6d0
        ? __switch_to_asm+0x34/0x70
        ? __switch_to_asm+0x40/0x70
      
      The code within the kretprobe handler checks for probe reentrancy,
      so we won't trigger any _raw_spin_lock_irqsave probe in there.
      
      The problem is in outside kprobe_flush_task, where we call:
      
        kprobe_flush_task
          kretprobe_table_lock
            raw_spin_lock_irqsave
              _raw_spin_lock_irqsave
      
      where _raw_spin_lock_irqsave triggers the kretprobe and installs
      kretprobe_trampoline handler on _raw_spin_lock_irqsave return.
      
      The kretprobe_trampoline handler is then executed with already
      locked kretprobe_table_locks, and first thing it does is to
      lock kretprobe_table_locks ;-) the whole lockup path like:
      
        kprobe_flush_task
          kretprobe_table_lock
            raw_spin_lock_irqsave
              _raw_spin_lock_irqsave ---> probe triggered, kretprobe_trampoline installed
      
              ---> kretprobe_table_locks locked
      
              kretprobe_trampoline
                trampoline_handler
                  kretprobe_hash_lock(current, &head, &flags);  <--- deadlock
      
      Adding kprobe_busy_begin/end helpers that mark code with fake
      probe installed to prevent triggering of another kprobe within
      this code.
      
      Using these helpers in kprobe_flush_task, so the probe recursion
      protection check is hit and the probe is never set to prevent
      above lockup.
      
      Link: http://lkml.kernel.org/r/158927059835.27680.7011202830041561604.stgit@devnote2
      
      Fixes: ef53d9c5 ("kprobes: improve kretprobe scalability with hashed locking")
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: "Gustavo A . R . Silva" <gustavoars@kernel.org>
      Cc: Anders Roxell <anders.roxell@linaro.org>
      Cc: "Naveen N . Rao" <naveen.n.rao@linux.ibm.com>
      Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
      Cc: David Miller <davem@davemloft.net>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: stable@vger.kernel.org
      Reported-by: default avatar"Ziqian SUN (Zamir)" <zsun@redhat.com>
      Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ed61e8c5
    • Masami Hiramatsu's avatar
      x86/kprobes: Avoid kretprobe recursion bug · 45ac65d2
      Masami Hiramatsu authored
      [ Upstream commit b191fa96 ]
      
      Avoid kretprobe recursion loop bg by setting a dummy
      kprobes to current_kprobe per-CPU variable.
      
      This bug has been introduced with the asm-coded trampoline
      code, since previously it used another kprobe for hooking
      the function return placeholder (which only has a nop) and
      trampoline handler was called from that kprobe.
      
      This revives the old lost kprobe again.
      
      With this fix, we don't see deadlock anymore.
      
      And you can see that all inner-called kretprobe are skipped.
      
        event_1                                  235               0
        event_2                                19375           19612
      
      The 1st column is recorded count and the 2nd is missed count.
      Above shows (event_1 rec) + (event_2 rec) ~= (event_2 missed)
      (some difference are here because the counter is racy)
      Reported-by: default avatarAndrea Righi <righi.andrea@gmail.com>
      Tested-by: default avatarAndrea Righi <righi.andrea@gmail.com>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Acked-by: default avatarSteven Rostedt <rostedt@goodmis.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: stable@vger.kernel.org
      Fixes: c9becf58 ("[PATCH] kretprobe: kretprobe-booster")
      Link: http://lkml.kernel.org/r/155094064889.6137.972160690963039.stgit@devboxSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      45ac65d2
    • Naveen N. Rao's avatar
      powerpc/kprobes: Fixes for kprobe_lookup_name() on BE · a07f99a6
      Naveen N. Rao authored
      [ Upstream commit 30176466 ]
      
      Fix two issues with kprobes.h on BE which were exposed with the
      optprobes work:
        - one, having to do with a missing include for linux/module.h for
          MODULE_NAME_LEN -- this didn't show up previously since the only
          users of kprobe_lookup_name were in kprobes.c, which included
          linux/module.h through other headers, and
        - two, with a missing const qualifier for a local variable which ends
          up referring a string literal. Again, this is unique to how
          kprobe_lookup_name is being invoked in optprobes.c
      Signed-off-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a07f99a6
    • Masami Hiramatsu's avatar
      kprobes: Fix to protect kick_kprobe_optimizer() by kprobe_mutex · 354fb595
      Masami Hiramatsu authored
      [ Upstream commit 1a0aa991 ]
      
      In kprobe_optimizer() kick_kprobe_optimizer() is called
      without kprobe_mutex, but this can race with other caller
      which is protected by kprobe_mutex.
      
      To fix that, expand kprobe_mutex protected area to protect
      kick_kprobe_optimizer() call.
      
      Link: http://lkml.kernel.org/r/158927057586.27680.5036330063955940456.stgit@devnote2
      
      Fixes: cd7ebe22 ("kprobes: Use text_poke_smp_batch for optimizing")
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: "Gustavo A . R . Silva" <gustavoars@kernel.org>
      Cc: Anders Roxell <anders.roxell@linaro.org>
      Cc: "Naveen N . Rao" <naveen.n.rao@linux.ibm.com>
      Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
      Cc: David Miller <davem@davemloft.net>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ziqian SUN <zsun@redhat.com>
      Cc: stable@vger.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 avatarSasha Levin <sashal@kernel.org>
      354fb595
    • Eric Biggers's avatar
      crypto: algboss - don't wait during notifier callback · 3f51fa23
      Eric Biggers authored
      commit 77251e41 upstream.
      
      When a crypto template needs to be instantiated, CRYPTO_MSG_ALG_REQUEST
      is sent to crypto_chain.  cryptomgr_schedule_probe() handles this by
      starting a thread to instantiate the template, then waiting for this
      thread to complete via crypto_larval::completion.
      
      This can deadlock because instantiating the template may require loading
      modules, and this (apparently depending on userspace) may need to wait
      for the crc-t10dif module (lib/crc-t10dif.c) to be loaded.  But
      crc-t10dif's module_init function uses crypto_register_notifier() and
      therefore takes crypto_chain.rwsem for write.  That can't proceed until
      the notifier callback has finished, as it holds this semaphore for read.
      
      Fix this by removing the wait on crypto_larval::completion from within
      cryptomgr_schedule_probe().  It's actually unnecessary because
      crypto_alg_mod_lookup() calls crypto_larval_wait() itself after sending
      CRYPTO_MSG_ALG_REQUEST.
      
      This only actually became a problem in v4.20 due to commit b7637754
      ("crc-t10dif: Pick better transform if one becomes available"), but the
      unnecessary wait was much older.
      
      BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=207159Reported-by: default avatarMike Gerow <gerow@google.com>
      Fixes: 39871037 ("crypto: algapi - Move larval completion into algboss")
      Cc: <stable@vger.kernel.org> # v3.6+
      Cc: Martin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Reported-by: default avatarKai Lüke <kai@kinvolk.io>
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3f51fa23
    • Chris Wilson's avatar
      drm/i915: Whitelist context-local timestamp in the gen9 cmdparser · 5dfd73f2
      Chris Wilson authored
      commit 273500ae upstream.
      
      Allow batch buffers to read their own _local_ cumulative HW runtime of
      their logical context.
      
      Fixes: 0f2f3975 ("drm/i915: Add gen9 BCS cmdparsing")
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Cc: <stable@vger.kernel.org> # v5.4+
      Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200601161942.30854-1-chris@chris-wilson.co.uk
      (cherry picked from commit f9496520)
      Signed-off-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5dfd73f2
    • Dmitry V. Levin's avatar
      s390: fix syscall_get_error for compat processes · 11c46697
      Dmitry V. Levin authored
      commit b3583fca upstream.
      
      If both the tracer and the tracee are compat processes, and gprs[2]
      is assigned a value by __poke_user_compat, then the higher 32 bits
      of gprs[2] are cleared, IS_ERR_VALUE() always returns false, and
      syscall_get_error() always returns 0.
      
      Fix the implementation by sign-extending the value for compat processes
      the same way as x86 implementation does.
      
      The bug was exposed to user space by commit 201766a2 ("ptrace: add
      PTRACE_GET_SYSCALL_INFO request") and detected by strace test suite.
      
      This change fixes strace syscall tampering on s390.
      
      Link: https://lkml.kernel.org/r/20200602180051.GA2427@altlinux.org
      Fixes: 753c4dd6 ("[S390] ptrace changes")
      Cc: Elvira Khabirova <lineprinter@altlinux.org>
      Cc: stable@vger.kernel.org # v2.6.28+
      Signed-off-by: default avatarDmitry V. Levin <ldv@altlinux.org>
      Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      11c46697
    • Ahmed S. Darwish's avatar
      block: nr_sects_write(): Disable preemption on seqcount write · 5fbc7c94
      Ahmed S. Darwish authored
      [ Upstream commit 15b81ce5 ]
      
      For optimized block readers not holding a mutex, the "number of sectors"
      64-bit value is protected from tearing on 32-bit architectures by a
      sequence counter.
      
      Disable preemption before entering that sequence counter's write side
      critical section. Otherwise, the read side can preempt the write side
      section and spin for the entire scheduler tick. If the reader belongs to
      a real-time scheduling class, it can spin forever and the kernel will
      livelock.
      
      Fixes: c83f6bf9 ("block: add partition resize function to blkpg ioctl")
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAhmed S. Darwish <a.darwish@linutronix.de>
      Reviewed-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5fbc7c94
    • Ard Biesheuvel's avatar
      x86/boot/compressed: Relax sed symbol type regex for LLVM ld.lld · 800a0635
      Ard Biesheuvel authored
      commit bc310baf upstream.
      
      The final build stage of the x86 kernel captures some symbol
      addresses from the decompressor binary and copies them into zoffset.h.
      It uses sed with a regular expression that matches the address, symbol
      type and symbol name, and mangles the captured addresses and the names
      of symbols of interest into #define directives that are added to
      zoffset.h
      
      The symbol type is indicated by a single letter, which we match
      strictly: only letters in the set 'ABCDGRSTVW' are matched, even
      though the actual symbol type is relevant and therefore ignored.
      
      Commit bc7c9d62 ("efi/libstub/x86: Force 'hidden' visibility for
      extern declarations") made a change to the way external symbol
      references are classified, resulting in 'startup_32' now being
      emitted as a hidden symbol. This prevents the use of GOT entries to
      refer to this symbol via its absolute address, which recent toolchains
      (including Clang based ones) already avoid by default, making this
      change a no-op in the majority of cases.
      
      However, as it turns out, the LLVM linker classifies such hidden
      symbols as symbols with static linkage in fully linked ELF binaries,
      causing tools such as NM to output a lowercase 't' rather than an upper
      case 'T' for the type of such symbols. Since our sed expression only
      matches upper case letters for the symbol type, the line describing
      startup_32 is disregarded, resulting in a build error like the following
      
        arch/x86/boot/header.S:568:18: error: symbol 'ZO_startup_32' can not be
                                              undefined in a subtraction expression
        init_size: .long (0x00000000008fd000 - ZO_startup_32 +
                          (((0x0000000001f6361c + ((0x0000000001f6361c >> 8) + 65536)
                           - 0x00000000008c32e5) + 4095) & ~4095)) # kernel initialization size
      
      Given that we are only interested in the value of the symbol, let's match
      any character in the set 'a-zA-Z' instead.
      Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Tested-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Signed-off-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      800a0635
    • Lyude Paul's avatar
      drm/dp_mst: Increase ACT retry timeout to 3s · 0d6115ea
      Lyude Paul authored
      [ Upstream commit 873a95e0 ]
      
      Currently we only poll for an ACT up to 30 times, with a busy-wait delay
      of 100µs between each attempt - giving us a timeout of 2900µs. While
      this might seem sensible, it would appear that in certain scenarios it
      can take dramatically longer then that for us to receive an ACT. On one
      of the EVGA MST hubs that I have available, I observed said hub
      sometimes taking longer then a second before signalling the ACT. These
      delays mostly seem to occur when previous sideband messages we've sent
      are NAKd by the hub, however it wouldn't be particularly surprising if
      it's possible to reproduce times like this simply by introducing branch
      devices with large LCTs since payload allocations have to take effect on
      every downstream device up to the payload's target.
      
      So, instead of just retrying 30 times we poll for the ACT for up to 3ms,
      and additionally use usleep_range() to avoid a very long and rude
      busy-wait. Note that the previous retry count of 30 appears to have been
      arbitrarily chosen, as I can't find any mention of a recommended timeout
      or retry count for ACTs in the DisplayPort 2.0 specification. This also
      goes for the range we were previously using for udelay(), although I
      suspect that was just copied from the recommended delay for link
      training on SST devices.
      
      Changes since v1:
      * Use readx_poll_timeout() instead of open-coding timeout loop - Sean
        Paul
      Changes since v2:
      * Increase poll interval to 200us - Sean Paul
      * Print status in hex when we timeout waiting for ACT - Sean Paul
      Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
      Fixes: ad7f8a1f ("drm/helper: add Displayport multi-stream helper (v0.6)")
      Cc: Sean Paul <sean@poorly.run>
      Cc: <stable@vger.kernel.org> # v3.17+
      Reviewed-by: default avatarSean Paul <sean@poorly.run>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200406221253.1307209-4-lyude@redhat.comSigned-off-by: default avatarSasha Levin <sashal@kernel.org>
      0d6115ea
    • Jeffle Xu's avatar
      ext4: fix partial cluster initialization when splitting extent · e09cb9c8
      Jeffle Xu authored
      [ Upstream commit cfb3c85a ]
      
      Fix the bug when calculating the physical block number of the first
      block in the split extent.
      
      This bug will cause xfstests shared/298 failure on ext4 with bigalloc
      enabled occasionally. Ext4 error messages indicate that previously freed
      blocks are being freed again, and the following fsck will fail due to
      the inconsistency of block bitmap and bg descriptor.
      
      The following is an example case:
      
      1. First, Initialize a ext4 filesystem with cluster size '16K', block size
      '4K', in which case, one cluster contains four blocks.
      
      2. Create one file (e.g., xxx.img) on this ext4 filesystem. Now the extent
      tree of this file is like:
      
      ...
      36864:[0]4:220160
      36868:[0]14332:145408
      51200:[0]2:231424
      ...
      
      3. Then execute PUNCH_HOLE fallocate on this file. The hole range is
      like:
      
      ..
      ext4_ext_remove_space: dev 254,16 ino 12 since 49506 end 49506 depth 1
      ext4_ext_remove_space: dev 254,16 ino 12 since 49544 end 49546 depth 1
      ext4_ext_remove_space: dev 254,16 ino 12 since 49605 end 49607 depth 1
      ...
      
      4. Then the extent tree of this file after punching is like
      
      ...
      49507:[0]37:158047
      49547:[0]58:158087
      ...
      
      5. Detailed procedure of punching hole [49544, 49546]
      
      5.1. The block address space:
      ```
      lblk        ~49505  49506   49507~49543     49544~49546    49547~
      	  ---------+------+-------------+----------------+--------
      	    extent | hole |   extent	|	hole	 | extent
      	  ---------+------+-------------+----------------+--------
      pblk       ~158045  158046  158047~158083  158084~158086   158087~
      ```
      
      5.2. The detailed layout of cluster 39521:
      ```
      		cluster 39521
      	<------------------------------->
      
      		hole		  extent
      	<----------------------><--------
      
      lblk      49544   49545   49546   49547
      	+-------+-------+-------+-------+
      	|	|	|	|	|
      	+-------+-------+-------+-------+
      pblk     158084  1580845  158086  158087
      ```
      
      5.3. The ftrace output when punching hole [49544, 49546]:
      - ext4_ext_remove_space (start 49544, end 49546)
        - ext4_ext_rm_leaf (start 49544, end 49546, last_extent [49507(158047), 40], partial [pclu 39522 lblk 0 state 2])
          - ext4_remove_blocks (extent [49507(158047), 40], from 49544 to 49546, partial [pclu 39522 lblk 0 state 2]
            - ext4_free_blocks: (block 158084 count 4)
              - ext4_mballoc_free (extent 1/6753/1)
      
      5.4. Ext4 error message in dmesg:
      EXT4-fs error (device vdb): mb_free_blocks:1457: group 1, block 158084:freeing already freed block (bit 6753); block bitmap corrupt.
      EXT4-fs error (device vdb): ext4_mb_generate_buddy:747: group 1, block bitmap and bg descriptor inconsistent: 19550 vs 19551 free clusters
      
      In this case, the whole cluster 39521 is freed mistakenly when freeing
      pblock 158084~158086 (i.e., the first three blocks of this cluster),
      although pblock 158087 (the last remaining block of this cluster) has
      not been freed yet.
      
      The root cause of this isuue is that, the pclu of the partial cluster is
      calculated mistakenly in ext4_ext_remove_space(). The correct
      partial_cluster.pclu (i.e., the cluster number of the first block in the
      next extent, that is, lblock 49597 (pblock 158086)) should be 39521 rather
      than 39522.
      
      Fixes: f4226d9e ("ext4: fix partial cluster initialization")
      Signed-off-by: default avatarJeffle Xu <jefflexu@linux.alibaba.com>
      Reviewed-by: default avatarEric Whitney <enwlinux@gmail.com>
      Cc: stable@kernel.org # v3.19+
      Link: https://lore.kernel.org/r/1590121124-37096-1-git-send-email-jefflexu@linux.alibaba.comSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e09cb9c8
    • Tom Rix's avatar
      selinux: fix double free · 30627877
      Tom Rix authored
      commit 65de5096 upstream.
      
      Clang's static analysis tool reports these double free memory errors.
      
      security/selinux/ss/services.c:2987:4: warning: Attempt to free released memory [unix.Malloc]
                              kfree(bnames[i]);
                              ^~~~~~~~~~~~~~~~
      security/selinux/ss/services.c:2990:2: warning: Attempt to free released memory [unix.Malloc]
              kfree(bvalues);
              ^~~~~~~~~~~~~~
      
      So improve the security_get_bools error handling by freeing these variables
      and setting their return pointers to NULL and the return len to 0
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarTom Rix <trix@redhat.com>
      Acked-by: default avatarStephen Smalley <stephen.smalley.work@gmail.com>
      Signed-off-by: default avatarPaul Moore <paul@paul-moore.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      30627877
    • Huacai Chen's avatar
      drm/qxl: Use correct notify port address when creating cursor ring · d604a3a1
      Huacai Chen authored
      commit 80e5f89d upstream.
      
      The command ring and cursor ring use different notify port addresses
      definition: QXL_IO_NOTIFY_CMD and QXL_IO_NOTIFY_CURSOR. However, in
      qxl_device_init() we use QXL_IO_NOTIFY_CMD to create both command ring
      and cursor ring. This doesn't cause any problems now, because QEMU's
      behaviors on QXL_IO_NOTIFY_CMD and QXL_IO_NOTIFY_CURSOR are the same.
      However, QEMU's behavior may be change in future, so let's fix it.
      
      P.S.: In the X.org QXL driver, the notify port address of cursor ring
            is correct.
      Signed-off-by: default avatarHuacai Chen <chenhc@lemote.com>
      Cc: <stable@vger.kernel.org>
      Link: http://patchwork.freedesktop.org/patch/msgid/1585635488-17507-1-git-send-email-chenhc@lemote.comSigned-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d604a3a1
    • Lyude Paul's avatar
      drm/dp_mst: Reformat drm_dp_check_act_status() a bit · 203de655
      Lyude Paul authored
      commit a5cb5fa6 upstream.
      
      Just add a bit more line wrapping, get rid of some extraneous
      whitespace, remove an unneeded goto label, and move around some variable
      declarations. No functional changes here.
      Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
      [this isn't a fix, but it's needed for the fix that comes after this]
      Fixes: ad7f8a1f ("drm/helper: add Displayport multi-stream helper (v0.6)")
      Cc: Sean Paul <sean@poorly.run>
      Cc: <stable@vger.kernel.org> # v3.17+
      Reviewed-by: default avatarSean Paul <sean@poorly.run>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200406221253.1307209-3-lyude@redhat.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      203de655
    • Wolfram Sang's avatar
      drm: encoder_slave: fix refcouting error for modules · ecc2b1e5
      Wolfram Sang authored
      [ Upstream commit f78d4032 ]
      
      module_put() balances try_module_get(), not request_module(). Fix the
      error path to match that.
      
      Fixes: 2066facc ("drm/kms: slave encoder interface.")
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Reviewed-by: default avatarEmil Velikov <emil.l.velikov@gmail.com>
      Acked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ecc2b1e5
    • Kai-Heng Feng's avatar
      libata: Use per port sync for detach · 3a4b0960
      Kai-Heng Feng authored
      [ Upstream commit b5292111 ]
      
      Commit 130f4caf ("libata: Ensure ata_port probe has completed before
      detach") may cause system freeze during suspend.
      
      Using async_synchronize_full() in PM callbacks is wrong, since async
      callbacks that are already scheduled may wait for not-yet-scheduled
      callbacks, causes a circular dependency.
      
      Instead of using big hammer like async_synchronize_full(), use async
      cookie to make sure port probe are synced, without affecting other
      scheduled PM callbacks.
      
      Fixes: 130f4caf ("libata: Ensure ata_port probe has completed before detach")
      Suggested-by: default avatarJohn Garry <john.garry@huawei.com>
      Signed-off-by: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
      Tested-by: default avatarJohn Garry <john.garry@huawei.com>
      BugLink: https://bugs.launchpad.net/bugs/1867983Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3a4b0960
    • Jason Yan's avatar
      block: Fix use-after-free in blkdev_get() · a54b15af
      Jason Yan authored
      [ Upstream commit 2d3a8e2d ]
      
      In blkdev_get() we call __blkdev_get() to do some internal jobs and if
      there is some errors in __blkdev_get(), the bdput() is called which
      means we have released the refcount of the bdev (actually the refcount of
      the bdev inode). This means we cannot access bdev after that point. But
      acctually bdev is still accessed in blkdev_get() after calling
      __blkdev_get(). This results in use-after-free if the refcount is the
      last one we released in __blkdev_get(). Let's take a look at the
      following scenerio:
      
        CPU0            CPU1                    CPU2
      blkdev_open     blkdev_open           Remove disk
                        bd_acquire
      		  blkdev_get
      		    __blkdev_get      del_gendisk
      					bdev_unhash_inode
        bd_acquire          bdev_get_gendisk
          bd_forget           failed because of unhashed
      	  bdput
      	              bdput (the last one)
      		        bdev_evict_inode
      
      	  	    access bdev => use after free
      
      [  459.350216] BUG: KASAN: use-after-free in __lock_acquire+0x24c1/0x31b0
      [  459.351190] Read of size 8 at addr ffff88806c815a80 by task syz-executor.0/20132
      [  459.352347]
      [  459.352594] CPU: 0 PID: 20132 Comm: syz-executor.0 Not tainted 4.19.90 #2
      [  459.353628] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1ubuntu1 04/01/2014
      [  459.354947] Call Trace:
      [  459.355337]  dump_stack+0x111/0x19e
      [  459.355879]  ? __lock_acquire+0x24c1/0x31b0
      [  459.356523]  print_address_description+0x60/0x223
      [  459.357248]  ? __lock_acquire+0x24c1/0x31b0
      [  459.357887]  kasan_report.cold+0xae/0x2d8
      [  459.358503]  __lock_acquire+0x24c1/0x31b0
      [  459.359120]  ? _raw_spin_unlock_irq+0x24/0x40
      [  459.359784]  ? lockdep_hardirqs_on+0x37b/0x580
      [  459.360465]  ? _raw_spin_unlock_irq+0x24/0x40
      [  459.361123]  ? finish_task_switch+0x125/0x600
      [  459.361812]  ? finish_task_switch+0xee/0x600
      [  459.362471]  ? mark_held_locks+0xf0/0xf0
      [  459.363108]  ? __schedule+0x96f/0x21d0
      [  459.363716]  lock_acquire+0x111/0x320
      [  459.364285]  ? blkdev_get+0xce/0xbe0
      [  459.364846]  ? blkdev_get+0xce/0xbe0
      [  459.365390]  __mutex_lock+0xf9/0x12a0
      [  459.365948]  ? blkdev_get+0xce/0xbe0
      [  459.366493]  ? bdev_evict_inode+0x1f0/0x1f0
      [  459.367130]  ? blkdev_get+0xce/0xbe0
      [  459.367678]  ? destroy_inode+0xbc/0x110
      [  459.368261]  ? mutex_trylock+0x1a0/0x1a0
      [  459.368867]  ? __blkdev_get+0x3e6/0x1280
      [  459.369463]  ? bdev_disk_changed+0x1d0/0x1d0
      [  459.370114]  ? blkdev_get+0xce/0xbe0
      [  459.370656]  blkdev_get+0xce/0xbe0
      [  459.371178]  ? find_held_lock+0x2c/0x110
      [  459.371774]  ? __blkdev_get+0x1280/0x1280
      [  459.372383]  ? lock_downgrade+0x680/0x680
      [  459.373002]  ? lock_acquire+0x111/0x320
      [  459.373587]  ? bd_acquire+0x21/0x2c0
      [  459.374134]  ? do_raw_spin_unlock+0x4f/0x250
      [  459.374780]  blkdev_open+0x202/0x290
      [  459.375325]  do_dentry_open+0x49e/0x1050
      [  459.375924]  ? blkdev_get_by_dev+0x70/0x70
      [  459.376543]  ? __x64_sys_fchdir+0x1f0/0x1f0
      [  459.377192]  ? inode_permission+0xbe/0x3a0
      [  459.377818]  path_openat+0x148c/0x3f50
      [  459.378392]  ? kmem_cache_alloc+0xd5/0x280
      [  459.379016]  ? entry_SYSCALL_64_after_hwframe+0x49/0xbe
      [  459.379802]  ? path_lookupat.isra.0+0x900/0x900
      [  459.380489]  ? __lock_is_held+0xad/0x140
      [  459.381093]  do_filp_open+0x1a1/0x280
      [  459.381654]  ? may_open_dev+0xf0/0xf0
      [  459.382214]  ? find_held_lock+0x2c/0x110
      [  459.382816]  ? lock_downgrade+0x680/0x680
      [  459.383425]  ? __lock_is_held+0xad/0x140
      [  459.384024]  ? do_raw_spin_unlock+0x4f/0x250
      [  459.384668]  ? _raw_spin_unlock+0x1f/0x30
      [  459.385280]  ? __alloc_fd+0x448/0x560
      [  459.385841]  do_sys_open+0x3c3/0x500
      [  459.386386]  ? filp_open+0x70/0x70
      [  459.386911]  ? trace_hardirqs_on_thunk+0x1a/0x1c
      [  459.387610]  ? trace_hardirqs_off_caller+0x55/0x1c0
      [  459.388342]  ? do_syscall_64+0x1a/0x520
      [  459.388930]  do_syscall_64+0xc3/0x520
      [  459.389490]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
      [  459.390248] RIP: 0033:0x416211
      [  459.390720] Code: 75 14 b8 02 00 00 00 0f 05 48 3d 01 f0 ff ff 0f 83
      04 19 00 00 c3 48 83 ec 08 e8 0a fa ff ff 48 89 04 24 b8 02 00 00 00 0f
         05 <48> 8b 3c 24 48 89 c2 e8 53 fa ff ff 48 89 d0 48 83 c4 08 48 3d
            01
      [  459.393483] RSP: 002b:00007fe45dfe9a60 EFLAGS: 00000293 ORIG_RAX: 0000000000000002
      [  459.394610] RAX: ffffffffffffffda RBX: 00007fe45dfea6d4 RCX: 0000000000416211
      [  459.395678] RDX: 00007fe45dfe9b0a RSI: 0000000000000002 RDI: 00007fe45dfe9b00
      [  459.396758] RBP: 000000000076bf20 R08: 0000000000000000 R09: 000000000000000a
      [  459.397930] R10: 0000000000000075 R11: 0000000000000293 R12: 00000000ffffffff
      [  459.399022] R13: 0000000000000bd9 R14: 00000000004cdb80 R15: 000000000076bf2c
      [  459.400168]
      [  459.400430] Allocated by task 20132:
      [  459.401038]  kasan_kmalloc+0xbf/0xe0
      [  459.401652]  kmem_cache_alloc+0xd5/0x280
      [  459.402330]  bdev_alloc_inode+0x18/0x40
      [  459.402970]  alloc_inode+0x5f/0x180
      [  459.403510]  iget5_locked+0x57/0xd0
      [  459.404095]  bdget+0x94/0x4e0
      [  459.404607]  bd_acquire+0xfa/0x2c0
      [  459.405113]  blkdev_open+0x110/0x290
      [  459.405702]  do_dentry_open+0x49e/0x1050
      [  459.406340]  path_openat+0x148c/0x3f50
      [  459.406926]  do_filp_open+0x1a1/0x280
      [  459.407471]  do_sys_open+0x3c3/0x500
      [  459.408010]  do_syscall_64+0xc3/0x520
      [  459.408572]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
      [  459.409415]
      [  459.409679] Freed by task 1262:
      [  459.410212]  __kasan_slab_free+0x129/0x170
      [  459.410919]  kmem_cache_free+0xb2/0x2a0
      [  459.411564]  rcu_process_callbacks+0xbb2/0x2320
      [  459.412318]  __do_softirq+0x225/0x8ac
      
      Fix this by delaying bdput() to the end of blkdev_get() which means we
      have finished accessing bdev.
      
      Fixes: 77ea887e ("implement in-kernel gendisk events handling")
      Reported-by: default avatarHulk Robot <hulkci@huawei.com>
      Signed-off-by: default avatarJason Yan <yanaijie@huawei.com>
      Tested-by: default avatarSedat Dilek <sedat.dilek@gmail.com>
      Reviewed-by: default avatarJan Kara <jack@suse.cz>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Reviewed-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Ming Lei <ming.lei@redhat.com>
      Cc: Jan Kara <jack@suse.cz>
      Cc: Dan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a54b15af
    • Zhiqiang Liu's avatar
      bcache: fix potential deadlock problem in btree_gc_coalesce · be676835
      Zhiqiang Liu authored
      [ Upstream commit be23e837 ]
      
      coccicheck reports:
        drivers/md//bcache/btree.c:1538:1-7: preceding lock on line 1417
      
      In btree_gc_coalesce func, if the coalescing process fails, we will goto
      to out_nocoalesce tag directly without releasing new_nodes[i]->write_lock.
      Then, it will cause a deadlock when trying to acquire new_nodes[i]->
      write_lock for freeing new_nodes[i] before return.
      
      btree_gc_coalesce func details as follows:
      	if alloc new_nodes[i] fails:
      		goto out_nocoalesce;
      	// obtain new_nodes[i]->write_lock
      	mutex_lock(&new_nodes[i]->write_lock)
      	// main coalescing process
      	for (i = nodes - 1; i > 0; --i)
      		[snipped]
      		if coalescing process fails:
      			// Here, directly goto out_nocoalesce
      			 // tag will cause a deadlock
      			goto out_nocoalesce;
      		[snipped]
      	// release new_nodes[i]->write_lock
      	mutex_unlock(&new_nodes[i]->write_lock)
      	// coalesing succ, return
      	return;
      out_nocoalesce:
      	btree_node_free(new_nodes[i])	// free new_nodes[i]
      	// obtain new_nodes[i]->write_lock
      	mutex_lock(&new_nodes[i]->write_lock);
      	// set flag for reuse
      	clear_bit(BTREE_NODE_dirty, &ew_nodes[i]->flags);
      	// release new_nodes[i]->write_lock
      	mutex_unlock(&new_nodes[i]->write_lock);
      
      To fix the problem, we add a new tag 'out_unlock_nocoalesce' for
      releasing new_nodes[i]->write_lock before out_nocoalesce tag. If
      coalescing process fails, we will go to out_unlock_nocoalesce tag
      for releasing new_nodes[i]->write_lock before free new_nodes[i] in
      out_nocoalesce tag.
      
      (Coly Li helps to clean up commit log format.)
      
      Fixes: 2a285686 ("bcache: btree locking rework")
      Signed-off-by: default avatarZhiqiang Liu <liuzhiqiang26@huawei.com>
      Signed-off-by: default avatarColy Li <colyli@suse.de>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      be676835
    • Gaurav Singh's avatar
      perf report: Fix NULL pointer dereference in hists__fprintf_nr_sample_events() · 0f61e86b
      Gaurav Singh authored
      [ Upstream commit 11b6e548 ]
      
      The 'evname' variable can be NULL, as it is checked a few lines back,
      check it before using.
      
      Fixes: 9e207ddf ("perf report: Show call graph from reference events")
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@intel.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/Signed-off-by: default avatarGaurav Singh <gaurav1086@gmail.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0f61e86b
    • Qais Yousef's avatar
      usb/ehci-platform: Set PM runtime as active on resume · 104592a5
      Qais Yousef authored
      [ Upstream commit 16bdc04c ]
      
      Follow suit of ohci-platform.c and perform pm_runtime_set_active() on
      resume.
      
      ohci-platform.c had a warning reported due to the missing
      pm_runtime_set_active() [1].
      
      [1] https://lore.kernel.org/lkml/20200323143857.db5zphxhq4hz3hmd@e107158-lin.cambridge.arm.com/Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarQais Yousef <qais.yousef@arm.com>
      CC: Tony Prisk <linux@prisktech.co.nz>
      CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      CC: Mathias Nyman <mathias.nyman@intel.com>
      CC: Oliver Neukum <oneukum@suse.de>
      CC: linux-arm-kernel@lists.infradead.org
      CC: linux-usb@vger.kernel.org
      CC: linux-kernel@vger.kernel.org
      Link: https://lore.kernel.org/r/20200518154931.6144-3-qais.yousef@arm.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      104592a5
    • Qais Yousef's avatar
      usb/xhci-plat: Set PM runtime as active on resume · 9e148a5e
      Qais Yousef authored
      [ Upstream commit 79112cc3 ]
      
      Follow suit of ohci-platform.c and perform pm_runtime_set_active() on
      resume.
      
      ohci-platform.c had a warning reported due to the missing
      pm_runtime_set_active() [1].
      
      [1] https://lore.kernel.org/lkml/20200323143857.db5zphxhq4hz3hmd@e107158-lin.cambridge.arm.com/Signed-off-by: default avatarQais Yousef <qais.yousef@arm.com>
      CC: Tony Prisk <linux@prisktech.co.nz>
      CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      CC: Mathias Nyman <mathias.nyman@intel.com>
      CC: Oliver Neukum <oneukum@suse.de>
      CC: linux-arm-kernel@lists.infradead.org
      CC: linux-usb@vger.kernel.org
      CC: linux-kernel@vger.kernel.org
      Link: https://lore.kernel.org/r/20200518154931.6144-2-qais.yousef@arm.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9e148a5e
    • Christophe JAILLET's avatar
      scsi: acornscsi: Fix an error handling path in acornscsi_probe() · a91af579
      Christophe JAILLET authored
      [ Upstream commit 42c76c98 ]
      
      'ret' is known to be 0 at this point.  Explicitly return -ENOMEM if one of
      the 'ecardm_iomap()' calls fail.
      
      Link: https://lore.kernel.org/r/20200530081622.577888-1-christophe.jaillet@wanadoo.fr
      Fixes: e95a1b65 ("[ARM] rpc: acornscsi: update to new style ecard driver")
      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>
      a91af579
    • tannerlove's avatar
      selftests/net: in timestamping, strncpy needs to preserve null byte · c5560e91
      tannerlove authored
      [ Upstream commit 8027bc03 ]
      
      If user passed an interface option longer than 15 characters, then
      device.ifr_name and hwtstamp.ifr_name became non-null-terminated
      strings. The compiler warned about this:
      
      timestamping.c:353:2: warning: ‘strncpy’ specified bound 16 equals \
      destination size [-Wstringop-truncation]
        353 |  strncpy(device.ifr_name, interface, sizeof(device.ifr_name));
      
      Fixes: cb9eff09 ("net: new user space API for time stamping of incoming and outgoing packets")
      Signed-off-by: default avatarTanner Love <tannerlove@google.com>
      Acked-by: default avatarWillem de Bruijn <willemb@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c5560e91
    • Ram Pai's avatar
      selftests/vm/pkeys: fix alloc_random_pkey() to make it really random · 88b35c5f
      Ram Pai authored
      [ Upstream commit 6e373263 ]
      
      alloc_random_pkey() was allocating the same pkey every time.  Not all
      pkeys were geting tested.  This fixes it.
      Signed-off-by: default avatarRam Pai <linuxram@us.ibm.com>
      Signed-off-by: default avatarSandipan Das <sandipan@linux.ibm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarDave Hansen <dave.hansen@intel.com>
      Cc: Dave Hansen <dave.hansen@intel.com>
      Cc: Florian Weimer <fweimer@redhat.com>
      Cc: "Desnes A. Nunes do Rosario" <desnesn@linux.vnet.ibm.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Thiago Jung Bauermann <bauerman@linux.ibm.com>
      Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: Michal Hocko <mhocko@kernel.org>
      Cc: Michal Suchanek <msuchanek@suse.de>
      Cc: Shuah Khan <shuah@kernel.org>
      Link: http://lkml.kernel.org/r/0162f55816d4e783a0d6e49e554d0ab9a3c9a23b.1585646528.git.sandipan@linux.ibm.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      88b35c5f
    • Nick Desaulniers's avatar
      elfnote: mark all .note sections SHF_ALLOC · 1bb5b80d
      Nick Desaulniers authored
      [ Upstream commit 51da9dfb ]
      
      ELFNOTE_START allows callers to specify flags for .pushsection assembler
      directives.  All callsites but ELF_NOTE use "a" for SHF_ALLOC.  For vdso's
      that explicitly use ELF_NOTE_START and BUILD_SALT, the same section is
      specified twice after preprocessing, once with "a" flag, once without.
      Example:
      
      .pushsection .note.Linux, "a", @note ;
      .pushsection .note.Linux, "", @note ;
      
      While GNU as allows this ordering, it warns for the opposite ordering,
      making these directives position dependent.  We'd prefer not to precisely
      match this behavior in Clang's integrated assembler.  Instead, the non
      __ASSEMBLY__ definition of ELF_NOTE uses
      __attribute__((section(".note.Linux"))) which is created with SHF_ALLOC,
      so let's make the __ASSEMBLY__ definition of ELF_NOTE consistent with C
      and just always use "a" flag.
      
      This allows Clang to assemble a working mainline (5.6) kernel via:
      $ make CC=clang AS=clang
      Signed-off-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Reviewed-by: default avatarFangrui Song <maskray@google.com>
      Cc: Jeremy Fitzhardinge <jeremy@goop.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
      Link: https://github.com/ClangBuiltLinux/linux/issues/913
      Link: http://lkml.kernel.org/r/20200325231250.99205-1-ndesaulniers@google.comDebugged-by: default avatarIlie Halip <ilie.halip@gmail.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1bb5b80d
    • Arnd Bergmann's avatar
      include/linux/bitops.h: avoid clang shift-count-overflow warnings · ea202717
      Arnd Bergmann authored
      [ Upstream commit bd93f003 ]
      
      Clang normally does not warn about certain issues in inline functions when
      it only happens in an eliminated code path. However if something else
      goes wrong, it does tend to complain about the definition of hweight_long()
      on 32-bit targets:
      
        include/linux/bitops.h:75:41: error: shift count >= width of type [-Werror,-Wshift-count-overflow]
                return sizeof(w) == 4 ? hweight32(w) : hweight64(w);
                                                       ^~~~~~~~~~~~
        include/asm-generic/bitops/const_hweight.h:29:49: note: expanded from macro 'hweight64'
         define hweight64(w) (__builtin_constant_p(w) ? __const_hweight64(w) : __arch_hweight64(w))
                                                        ^~~~~~~~~~~~~~~~~~~~
        include/asm-generic/bitops/const_hweight.h:21:76: note: expanded from macro '__const_hweight64'
         define __const_hweight64(w) (__const_hweight32(w) + __const_hweight32((w) >> 32))
                                                                                   ^  ~~
        include/asm-generic/bitops/const_hweight.h:20:49: note: expanded from macro '__const_hweight32'
         define __const_hweight32(w) (__const_hweight16(w) + __const_hweight16((w) >> 16))
                                                        ^
        include/asm-generic/bitops/const_hweight.h:19:72: note: expanded from macro '__const_hweight16'
         define __const_hweight16(w) (__const_hweight8(w)  + __const_hweight8((w)  >> 8 ))
                                                                               ^
        include/asm-generic/bitops/const_hweight.h:12:9: note: expanded from macro '__const_hweight8'
                  (!!((w) & (1ULL << 2))) +     \
      
      Adding an explicit cast to __u64 avoids that warning and makes it easier
      to read other output.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarChristian Brauner <christian.brauner@ubuntu.com>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Nick Desaulniers <ndesaulniers@google.com>
      Link: http://lkml.kernel.org/r/20200505135513.65265-1-arnd@arndb.deSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ea202717
    • Jann Horn's avatar
      lib/zlib: remove outdated and incorrect pre-increment optimization · 900bf0e2
      Jann Horn authored
      [ Upstream commit acaab733 ]
      
      The zlib inflate code has an old micro-optimization based on the
      assumption that for pre-increment memory accesses, the compiler will
      generate code that fits better into the processor's pipeline than what
      would be generated for post-increment memory accesses.
      
      This optimization was already removed in upstream zlib in 2016:
      https://github.com/madler/zlib/commit/9aaec95e8211
      
      This optimization causes UB according to C99, which says in section 6.5.6
      "Additive operators": "If both the pointer operand and the result point to
      elements of the same array object, or one past the last element of the
      array object, the evaluation shall not produce an overflow; otherwise, the
      behavior is undefined".
      
      This UB is not only a theoretical concern, but can also cause trouble for
      future work on compiler-based sanitizers.
      
      According to the zlib commit, this optimization also is not optimal
      anymore with modern compilers.
      
      Replace uses of OFF, PUP and UP_UNALIGNED with their definitions in the
      POSTINC case, and remove the macro definitions, just like in the upstream
      patch.
      Signed-off-by: default avatarJann Horn <jannh@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Mikhail Zaslonko <zaslonko@linux.ibm.com>
      Link: http://lkml.kernel.org/r/20200507123112.252723-1-jannh@google.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      900bf0e2
    • Tero Kristo's avatar
      crypto: omap-sham - add proper load balancing support for multicore · 7b2dbe40
      Tero Kristo authored
      [ Upstream commit 281c3778 ]
      
      The current implementation of the multiple accelerator core support for
      OMAP SHA does not work properly. It always picks up the first probed
      accelerator core if this is available, and rest of the book keeping also
      gets confused if there are two cores available. Add proper load
      balancing support for SHA, and also fix any bugs related to the
      multicore support while doing it.
      Signed-off-by: default avatarTero Kristo <t-kristo@ti.com>
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7b2dbe40
    • Christophe JAILLET's avatar
      pinctrl: imxl: Fix an error handling path in 'imx1_pinctrl_core_probe()' · c2f9a6bc
      Christophe JAILLET authored
      [ Upstream commit 9eb72832 ]
      
      When 'pinctrl_register()' has been turned into 'devm_pinctrl_register()',
      an error handling path has not been updated.
      
      Axe a now unneeded 'pinctrl_unregister()'.
      
      Fixes: e55e025d ("pinctrl: imxl: Use devm_pinctrl_register() for pinctrl registration")
      Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
      Link: https://lore.kernel.org/r/20200530201952.585798-1-christophe.jaillet@wanadoo.frSigned-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c2f9a6bc
    • Qiushi Wu's avatar
      scsi: iscsi: Fix reference count leak in iscsi_boot_create_kobj · fbffea5c
      Qiushi Wu authored
      [ Upstream commit 0267ffce ]
      
      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.
      
      Link: https://lore.kernel.org/r/20200528201353.14849-1-wu000273@umn.eduReviewed-by: default avatarLee Duncan <lduncan@suse.com>
      Signed-off-by: default avatarQiushi Wu <wu000273@umn.edu>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fbffea5c
    • Bob Peterson's avatar
      gfs2: Allow lock_nolock mount to specify jid=X · d534300d
      Bob Peterson authored
      [ Upstream commit ea22eee4 ]
      
      Before this patch, a simple typo accidentally added \n to the jid=
      string for lock_nolock mounts. This made it impossible to mount a
      gfs2 file system with a journal other than journal0. Thus:
      
      mount -tgfs2 -o hostdata="jid=1" <device> <mount pt>
      
      Resulted in:
      mount: wrong fs type, bad option, bad superblock on <device>
      
      In most cases this is not a problem. However, for debugging and
      testing purposes we sometimes want to test the integrity of other
      journals. This patch removes the unnecessary \n and thus allows
      lock_nolock users to specify an alternate journal.
      Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
      Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d534300d
    • Stafford Horne's avatar
      openrisc: Fix issue with argument clobbering for clone/fork · 168b845f
      Stafford Horne authored
      [ Upstream commit 6bd140e1 ]
      
      Working on the OpenRISC glibc port I found that sometimes clone was
      working strange.  That the tls data argument sent in r7 was always
      wrong.  Further investigation revealed that the arguments were getting
      clobbered in the entry code.  This patch removes the code that writes to
      the argument registers.  This was likely due to some old code hanging
      around.
      
      This patch fixes this up for clone and fork.  This fork clobber is
      harmless but also useless so remove.
      Signed-off-by: default avatarStafford Horne <shorne@gmail.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      168b845f
    • Xiyu Yang's avatar
      ASoC: fsl_asrc_dma: Fix dma_chan leak when config DMA channel failed · aa332872
      Xiyu Yang authored
      [ Upstream commit 36124fb1 ]
      
      fsl_asrc_dma_hw_params() invokes dma_request_channel() or
      fsl_asrc_get_dma_channel(), which returns a reference of the specified
      dma_chan object to "pair->dma_chan[dir]" with increased refcnt.
      
      The reference counting issue happens in one exception handling path of
      fsl_asrc_dma_hw_params(). When config DMA channel failed for Back-End,
      the function forgets to decrease the refcnt increased by
      dma_request_channel() or fsl_asrc_get_dma_channel(), causing a refcnt
      leak.
      
      Fix this issue by calling dma_release_channel() when config DMA channel
      failed.
      Signed-off-by: default avatarXiyu Yang <xiyuyang19@fudan.edu.cn>
      Signed-off-by: default avatarXin Tan <tanxin.ctf@gmail.com>
      Link: https://lore.kernel.org/r/1590415966-52416-1-git-send-email-xiyuyang19@fudan.edu.cnSigned-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      aa332872
    • Christophe JAILLET's avatar
      extcon: adc-jack: Fix an error handling path in 'adc_jack_probe()' · ae7a9734
      Christophe JAILLET authored
      [ Upstream commit bc84cff2 ]
      
      In some error handling paths, a call to 'iio_channel_get()' is not balanced
      by a corresponding call to 'iio_channel_release()'.
      
      This can be achieved easily by using the devm_ variant of
      'iio_channel_get()'.
      
      This has the extra benefit to simplify the remove function.
      
      Fixes: 19939860 ("extcon: adc_jack: adc-jack driver to support 3.5 pi or simliar devices")
      Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
      Signed-off-by: default avatarChanwoo Choi <cw00.choi@samsung.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ae7a9734
    • Olga Kornievskaia's avatar
      NFSv4.1 fix rpc_call_done assignment for BIND_CONN_TO_SESSION · bda938df
      Olga Kornievskaia authored
      [ Upstream commit 1c709b76 ]
      
      Fixes: 02a95dee ("NFS add callback_ops to nfs4_proc_bind_conn_to_session_callback")
      Signed-off-by: default avatarOlga Kornievskaia <kolga@netapp.com>
      Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      bda938df
    • Fedor Tokarev's avatar
      net: sunrpc: Fix off-by-one issues in 'rpc_ntop6' · d5f224c5
      Fedor Tokarev authored
      [ Upstream commit 118917d6 ]
      
      Fix off-by-one issues in 'rpc_ntop6':
       - 'snprintf' returns the number of characters which would have been
         written if enough space had been available, excluding the terminating
         null byte. Thus, a return value of 'sizeof(scopebuf)' means that the
         last character was dropped.
       - 'strcat' adds a terminating null byte to the string, thus if len ==
         buflen, the null byte is written past the end of the buffer.
      Signed-off-by: default avatarFedor Tokarev <ftokarev@gmail.com>
      Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d5f224c5
    • Nathan Chancellor's avatar
      clk: bcm2835: Fix return type of bcm2835_register_gate · db2451de
      Nathan Chancellor authored
      [ Upstream commit f376c43b ]
      
      bcm2835_register_gate is used as a callback for the clk_register member
      of bcm2835_clk_desc, which expects a struct clk_hw * return type but
      bcm2835_register_gate returns a struct clk *.
      
      This discrepancy is hidden by the fact that bcm2835_register_gate is
      cast to the typedef bcm2835_clk_register by the _REGISTER macro. This
      turns out to be a control flow integrity violation, which is how this
      was noticed.
      
      Change the return type of bcm2835_register_gate to be struct clk_hw *
      and use clk_hw_register_gate to do so. This should be a non-functional
      change as clk_register_gate calls clk_hw_register_gate anyways but this
      is needed to avoid issues with further changes.
      
      Fixes: b19f009d ("clk: bcm2835: Migrate to clk_hw based registration and OF APIs")
      Link: https://github.com/ClangBuiltLinux/linux/issues/1028Signed-off-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Link: https://lkml.kernel.org/r/20200516080806.1459784-1-natechancellor@gmail.comSigned-off-by: default avatarStephen Boyd <sboyd@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      db2451de
    • Pawel Laszczak's avatar
      usb: gadget: Fix issue with config_ep_by_speed function · b4a4925a
      Pawel Laszczak authored
      [ Upstream commit 5d363120 ]
      
      This patch adds new config_ep_by_speed_and_alt function which
      extends the config_ep_by_speed about alt parameter.
      This additional parameter allows to find proper usb_ss_ep_comp_descriptor.
      
      Problem has appeared during testing f_tcm (BOT/UAS) driver function.
      
      f_tcm function for SS use array of headers for both  BOT/UAS alternate
      setting:
      
      static struct usb_descriptor_header *uasp_ss_function_desc[] = {
              (struct usb_descriptor_header *) &bot_intf_desc,
              (struct usb_descriptor_header *) &uasp_ss_bi_desc,
              (struct usb_descriptor_header *) &bot_bi_ep_comp_desc,
              (struct usb_descriptor_header *) &uasp_ss_bo_desc,
              (struct usb_descriptor_header *) &bot_bo_ep_comp_desc,
      
              (struct usb_descriptor_header *) &uasp_intf_desc,
              (struct usb_descriptor_header *) &uasp_ss_bi_desc,
              (struct usb_descriptor_header *) &uasp_bi_ep_comp_desc,
              (struct usb_descriptor_header *) &uasp_bi_pipe_desc,
              (struct usb_descriptor_header *) &uasp_ss_bo_desc,
              (struct usb_descriptor_header *) &uasp_bo_ep_comp_desc,
              (struct usb_descriptor_header *) &uasp_bo_pipe_desc,
              (struct usb_descriptor_header *) &uasp_ss_status_desc,
              (struct usb_descriptor_header *) &uasp_status_in_ep_comp_desc,
              (struct usb_descriptor_header *) &uasp_status_pipe_desc,
              (struct usb_descriptor_header *) &uasp_ss_cmd_desc,
              (struct usb_descriptor_header *) &uasp_cmd_comp_desc,
              (struct usb_descriptor_header *) &uasp_cmd_pipe_desc,
              NULL,
      };
      
      The first 5 descriptors are associated with BOT alternate setting,
      and others are associated with UAS.
      
      During handling UAS alternate setting f_tcm driver invokes
      config_ep_by_speed and this function sets incorrect companion endpoint
      descriptor in usb_ep object.
      
      Instead setting ep->comp_desc to uasp_bi_ep_comp_desc function in this
      case set ep->comp_desc to uasp_ss_bi_desc.
      
      This is due to the fact that it searches endpoint based on endpoint
      address:
      
              for_each_ep_desc(speed_desc, d_spd) {
                      chosen_desc = (struct usb_endpoint_descriptor *)*d_spd;
                      if (chosen_desc->bEndpoitAddress == _ep->address)
                              goto ep_found;
              }
      
      And in result it uses the descriptor from BOT alternate setting
      instead UAS.
      
      Finally, it causes that controller driver during enabling endpoints
      detect that just enabled endpoint for bot.
      Signed-off-by: default avatarJayshri Pawar <jpawar@cadence.com>
      Signed-off-by: default avatarPawel Laszczak <pawell@cadence.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b4a4925a
    • Qiushi Wu's avatar
      usb: gadget: fix potential double-free in m66592_probe. · 03eeb914
      Qiushi Wu authored
      [ Upstream commit 44734a59 ]
      
      m66592_free_request() is called under label "err_add_udc"
      and "clean_up", and m66592->ep0_req is not set to NULL after
      first free, leading to a double-free. Fix this issue by
      setting m66592->ep0_req to NULL after the first free.
      
      Fixes: 0f91349b ("usb: gadget: convert all users to the new udc infrastructure")
      Signed-off-by: default avatarQiushi Wu <wu000273@umn.edu>
      Signed-off-by: default avatarFelipe Balbi <balbi@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      03eeb914