1. 04 Jan, 2020 40 commits
    • Eric Dumazet's avatar
      netfilter: bridge: make sure to pull arp header in br_nf_forward_arp() · d47d4d01
      Eric Dumazet authored
      commit 56042858 upstream.
      
      syzbot is kind enough to remind us we need to call skb_may_pull()
      
      BUG: KMSAN: uninit-value in br_nf_forward_arp+0xe61/0x1230 net/bridge/br_netfilter_hooks.c:665
      CPU: 1 PID: 11631 Comm: syz-executor.1 Not tainted 5.4.0-rc8-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      Call Trace:
       <IRQ>
       __dump_stack lib/dump_stack.c:77 [inline]
       dump_stack+0x1c9/0x220 lib/dump_stack.c:118
       kmsan_report+0x128/0x220 mm/kmsan/kmsan_report.c:108
       __msan_warning+0x64/0xc0 mm/kmsan/kmsan_instr.c:245
       br_nf_forward_arp+0xe61/0x1230 net/bridge/br_netfilter_hooks.c:665
       nf_hook_entry_hookfn include/linux/netfilter.h:135 [inline]
       nf_hook_slow+0x18b/0x3f0 net/netfilter/core.c:512
       nf_hook include/linux/netfilter.h:260 [inline]
       NF_HOOK include/linux/netfilter.h:303 [inline]
       __br_forward+0x78f/0xe30 net/bridge/br_forward.c:109
       br_flood+0xef0/0xfe0 net/bridge/br_forward.c:234
       br_handle_frame_finish+0x1a77/0x1c20 net/bridge/br_input.c:162
       nf_hook_bridge_pre net/bridge/br_input.c:245 [inline]
       br_handle_frame+0xfb6/0x1eb0 net/bridge/br_input.c:348
       __netif_receive_skb_core+0x20b9/0x51a0 net/core/dev.c:4830
       __netif_receive_skb_one_core net/core/dev.c:4927 [inline]
       __netif_receive_skb net/core/dev.c:5043 [inline]
       process_backlog+0x610/0x13c0 net/core/dev.c:5874
       napi_poll net/core/dev.c:6311 [inline]
       net_rx_action+0x7a6/0x1aa0 net/core/dev.c:6379
       __do_softirq+0x4a1/0x83a kernel/softirq.c:293
       do_softirq_own_stack+0x49/0x80 arch/x86/entry/entry_64.S:1091
       </IRQ>
       do_softirq kernel/softirq.c:338 [inline]
       __local_bh_enable_ip+0x184/0x1d0 kernel/softirq.c:190
       local_bh_enable+0x36/0x40 include/linux/bottom_half.h:32
       rcu_read_unlock_bh include/linux/rcupdate.h:688 [inline]
       __dev_queue_xmit+0x38e8/0x4200 net/core/dev.c:3819
       dev_queue_xmit+0x4b/0x60 net/core/dev.c:3825
       packet_snd net/packet/af_packet.c:2959 [inline]
       packet_sendmsg+0x8234/0x9100 net/packet/af_packet.c:2984
       sock_sendmsg_nosec net/socket.c:637 [inline]
       sock_sendmsg net/socket.c:657 [inline]
       __sys_sendto+0xc44/0xc70 net/socket.c:1952
       __do_sys_sendto net/socket.c:1964 [inline]
       __se_sys_sendto+0x107/0x130 net/socket.c:1960
       __x64_sys_sendto+0x6e/0x90 net/socket.c:1960
       do_syscall_64+0xb6/0x160 arch/x86/entry/common.c:291
       entry_SYSCALL_64_after_hwframe+0x44/0xa9
      RIP: 0033:0x45a679
      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:00007f0a3c9e5c78 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
      RAX: ffffffffffffffda RBX: 0000000000000006 RCX: 000000000045a679
      RDX: 000000000000000e RSI: 0000000020000200 RDI: 0000000000000003
      RBP: 000000000075bf20 R08: 00000000200000c0 R09: 0000000000000014
      R10: 0000000000000000 R11: 0000000000000246 R12: 00007f0a3c9e66d4
      R13: 00000000004c8ec1 R14: 00000000004dfe28 R15: 00000000ffffffff
      
      Uninit was created at:
       kmsan_save_stack_with_flags mm/kmsan/kmsan.c:149 [inline]
       kmsan_internal_poison_shadow+0x5c/0x110 mm/kmsan/kmsan.c:132
       kmsan_slab_alloc+0x97/0x100 mm/kmsan/kmsan_hooks.c:86
       slab_alloc_node mm/slub.c:2773 [inline]
       __kmalloc_node_track_caller+0xe27/0x11a0 mm/slub.c:4381
       __kmalloc_reserve net/core/skbuff.c:141 [inline]
       __alloc_skb+0x306/0xa10 net/core/skbuff.c:209
       alloc_skb include/linux/skbuff.h:1049 [inline]
       alloc_skb_with_frags+0x18c/0xa80 net/core/skbuff.c:5662
       sock_alloc_send_pskb+0xafd/0x10a0 net/core/sock.c:2244
       packet_alloc_skb net/packet/af_packet.c:2807 [inline]
       packet_snd net/packet/af_packet.c:2902 [inline]
       packet_sendmsg+0x63a6/0x9100 net/packet/af_packet.c:2984
       sock_sendmsg_nosec net/socket.c:637 [inline]
       sock_sendmsg net/socket.c:657 [inline]
       __sys_sendto+0xc44/0xc70 net/socket.c:1952
       __do_sys_sendto net/socket.c:1964 [inline]
       __se_sys_sendto+0x107/0x130 net/socket.c:1960
       __x64_sys_sendto+0x6e/0x90 net/socket.c:1960
       do_syscall_64+0xb6/0x160 arch/x86/entry/common.c:291
       entry_SYSCALL_64_after_hwframe+0x44/0xa9
      
      Fixes: c4e70a87 ("netfilter: bridge: rename br_netfilter.c to br_netfilter_hooks.c")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Reviewed-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d47d4d01
    • Eric Dumazet's avatar
      6pack,mkiss: fix possible deadlock · c8c17adc
      Eric Dumazet authored
      commit 5c9934b6 upstream.
      
      We got another syzbot report [1] that tells us we must use
      write_lock_irq()/write_unlock_irq() to avoid possible deadlock.
      
      [1]
      
      WARNING: inconsistent lock state
      5.5.0-rc1-syzkaller #0 Not tainted
      --------------------------------
      inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-R} usage.
      syz-executor826/9605 [HC1[1]:SC0[0]:HE0:SE1] takes:
      ffffffff8a128718 (disc_data_lock){+-..}, at: sp_get.isra.0+0x1d/0xf0 drivers/net/ppp/ppp_synctty.c:138
      {HARDIRQ-ON-W} state was registered at:
        lock_acquire+0x190/0x410 kernel/locking/lockdep.c:4485
        __raw_write_lock_bh include/linux/rwlock_api_smp.h:203 [inline]
        _raw_write_lock_bh+0x33/0x50 kernel/locking/spinlock.c:319
        sixpack_close+0x1d/0x250 drivers/net/hamradio/6pack.c:657
        tty_ldisc_close.isra.0+0x119/0x1a0 drivers/tty/tty_ldisc.c:489
        tty_set_ldisc+0x230/0x6b0 drivers/tty/tty_ldisc.c:585
        tiocsetd drivers/tty/tty_io.c:2337 [inline]
        tty_ioctl+0xe8d/0x14f0 drivers/tty/tty_io.c:2597
        vfs_ioctl fs/ioctl.c:47 [inline]
        file_ioctl fs/ioctl.c:545 [inline]
        do_vfs_ioctl+0x977/0x14e0 fs/ioctl.c:732
        ksys_ioctl+0xab/0xd0 fs/ioctl.c:749
        __do_sys_ioctl fs/ioctl.c:756 [inline]
        __se_sys_ioctl fs/ioctl.c:754 [inline]
        __x64_sys_ioctl+0x73/0xb0 fs/ioctl.c:754
        do_syscall_64+0xfa/0x790 arch/x86/entry/common.c:294
        entry_SYSCALL_64_after_hwframe+0x49/0xbe
      irq event stamp: 3946
      hardirqs last  enabled at (3945): [<ffffffff87c86e43>] __raw_spin_unlock_irq include/linux/spinlock_api_smp.h:168 [inline]
      hardirqs last  enabled at (3945): [<ffffffff87c86e43>] _raw_spin_unlock_irq+0x23/0x80 kernel/locking/spinlock.c:199
      hardirqs last disabled at (3946): [<ffffffff8100675f>] trace_hardirqs_off_thunk+0x1a/0x1c arch/x86/entry/thunk_64.S:42
      softirqs last  enabled at (2658): [<ffffffff86a8b4df>] spin_unlock_bh include/linux/spinlock.h:383 [inline]
      softirqs last  enabled at (2658): [<ffffffff86a8b4df>] clusterip_netdev_event+0x46f/0x670 net/ipv4/netfilter/ipt_CLUSTERIP.c:222
      softirqs last disabled at (2656): [<ffffffff86a8b22b>] spin_lock_bh include/linux/spinlock.h:343 [inline]
      softirqs last disabled at (2656): [<ffffffff86a8b22b>] clusterip_netdev_event+0x1bb/0x670 net/ipv4/netfilter/ipt_CLUSTERIP.c:196
      
      other info that might help us debug this:
       Possible unsafe locking scenario:
      
             CPU0
             ----
        lock(disc_data_lock);
        <Interrupt>
          lock(disc_data_lock);
      
       *** DEADLOCK ***
      
      5 locks held by syz-executor826/9605:
       #0: ffff8880a905e198 (&tty->legacy_mutex){+.+.}, at: tty_lock+0xc7/0x130 drivers/tty/tty_mutex.c:19
       #1: ffffffff899a56c0 (rcu_read_lock){....}, at: mutex_spin_on_owner+0x0/0x330 kernel/locking/mutex.c:413
       #2: ffff8880a496a2b0 (&(&i->lock)->rlock){-.-.}, at: spin_lock include/linux/spinlock.h:338 [inline]
       #2: ffff8880a496a2b0 (&(&i->lock)->rlock){-.-.}, at: serial8250_interrupt+0x2d/0x1a0 drivers/tty/serial/8250/8250_core.c:116
       #3: ffffffff8c104048 (&port_lock_key){-.-.}, at: serial8250_handle_irq.part.0+0x24/0x330 drivers/tty/serial/8250/8250_port.c:1823
       #4: ffff8880a905e090 (&tty->ldisc_sem){++++}, at: tty_ldisc_ref+0x22/0x90 drivers/tty/tty_ldisc.c:288
      
      stack backtrace:
      CPU: 1 PID: 9605 Comm: syz-executor826 Not tainted 5.5.0-rc1-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      Call Trace:
       <IRQ>
       __dump_stack lib/dump_stack.c:77 [inline]
       dump_stack+0x197/0x210 lib/dump_stack.c:118
       print_usage_bug.cold+0x327/0x378 kernel/locking/lockdep.c:3101
       valid_state kernel/locking/lockdep.c:3112 [inline]
       mark_lock_irq kernel/locking/lockdep.c:3309 [inline]
       mark_lock+0xbb4/0x1220 kernel/locking/lockdep.c:3666
       mark_usage kernel/locking/lockdep.c:3554 [inline]
       __lock_acquire+0x1e55/0x4a00 kernel/locking/lockdep.c:3909
       lock_acquire+0x190/0x410 kernel/locking/lockdep.c:4485
       __raw_read_lock include/linux/rwlock_api_smp.h:149 [inline]
       _raw_read_lock+0x32/0x50 kernel/locking/spinlock.c:223
       sp_get.isra.0+0x1d/0xf0 drivers/net/ppp/ppp_synctty.c:138
       sixpack_write_wakeup+0x25/0x340 drivers/net/hamradio/6pack.c:402
       tty_wakeup+0xe9/0x120 drivers/tty/tty_io.c:536
       tty_port_default_wakeup+0x2b/0x40 drivers/tty/tty_port.c:50
       tty_port_tty_wakeup+0x57/0x70 drivers/tty/tty_port.c:387
       uart_write_wakeup+0x46/0x70 drivers/tty/serial/serial_core.c:104
       serial8250_tx_chars+0x495/0xaf0 drivers/tty/serial/8250/8250_port.c:1761
       serial8250_handle_irq.part.0+0x2a2/0x330 drivers/tty/serial/8250/8250_port.c:1834
       serial8250_handle_irq drivers/tty/serial/8250/8250_port.c:1820 [inline]
       serial8250_default_handle_irq+0xc0/0x150 drivers/tty/serial/8250/8250_port.c:1850
       serial8250_interrupt+0xf1/0x1a0 drivers/tty/serial/8250/8250_core.c:126
       __handle_irq_event_percpu+0x15d/0x970 kernel/irq/handle.c:149
       handle_irq_event_percpu+0x74/0x160 kernel/irq/handle.c:189
       handle_irq_event+0xa7/0x134 kernel/irq/handle.c:206
       handle_edge_irq+0x25e/0x8d0 kernel/irq/chip.c:830
       generic_handle_irq_desc include/linux/irqdesc.h:156 [inline]
       do_IRQ+0xde/0x280 arch/x86/kernel/irq.c:250
       common_interrupt+0xf/0xf arch/x86/entry/entry_64.S:607
       </IRQ>
      RIP: 0010:cpu_relax arch/x86/include/asm/processor.h:685 [inline]
      RIP: 0010:mutex_spin_on_owner+0x247/0x330 kernel/locking/mutex.c:579
      Code: c3 be 08 00 00 00 4c 89 e7 e8 e5 06 59 00 4c 89 e0 48 c1 e8 03 42 80 3c 38 00 0f 85 e1 00 00 00 49 8b 04 24 a8 01 75 96 f3 90 <e9> 2f fe ff ff 0f 0b e8 0d 19 09 00 84 c0 0f 85 ff fd ff ff 48 c7
      RSP: 0018:ffffc90001eafa20 EFLAGS: 00000246 ORIG_RAX: ffffffffffffffd7
      RAX: 0000000000000000 RBX: ffff88809fd9e0c0 RCX: 1ffffffff13266dd
      RDX: 0000000000000000 RSI: 0000000000000008 RDI: 0000000000000000
      RBP: ffffc90001eafa60 R08: 1ffff11013d22898 R09: ffffed1013d22899
      R10: ffffed1013d22898 R11: ffff88809e9144c7 R12: ffff8880a905e138
      R13: ffff88809e9144c0 R14: 0000000000000000 R15: dffffc0000000000
       mutex_optimistic_spin kernel/locking/mutex.c:673 [inline]
       __mutex_lock_common kernel/locking/mutex.c:962 [inline]
       __mutex_lock+0x32b/0x13c0 kernel/locking/mutex.c:1106
       mutex_lock_nested+0x16/0x20 kernel/locking/mutex.c:1121
       tty_lock+0xc7/0x130 drivers/tty/tty_mutex.c:19
       tty_release+0xb5/0xe90 drivers/tty/tty_io.c:1665
       __fput+0x2ff/0x890 fs/file_table.c:280
       ____fput+0x16/0x20 fs/file_table.c:313
       task_work_run+0x145/0x1c0 kernel/task_work.c:113
       exit_task_work include/linux/task_work.h:22 [inline]
       do_exit+0x8e7/0x2ef0 kernel/exit.c:797
       do_group_exit+0x135/0x360 kernel/exit.c:895
       __do_sys_exit_group kernel/exit.c:906 [inline]
       __se_sys_exit_group kernel/exit.c:904 [inline]
       __x64_sys_exit_group+0x44/0x50 kernel/exit.c:904
       do_syscall_64+0xfa/0x790 arch/x86/entry/common.c:294
       entry_SYSCALL_64_after_hwframe+0x49/0xbe
      RIP: 0033:0x43fef8
      Code: Bad RIP value.
      RSP: 002b:00007ffdb07d2338 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
      RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 000000000043fef8
      RDX: 0000000000000000 RSI: 000000000000003c RDI: 0000000000000000
      RBP: 00000000004bf730 R08: 00000000000000e7 R09: ffffffffffffffd0
      R10: 00000000004002c8 R11: 0000000000000246 R12: 0000000000000001
      R13: 00000000006d1180 R14: 0000000000000000 R15: 0000000000000000
      
      Fixes: 6e4e2f81 ("6pack,mkiss: fix lock inconsistency")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c8c17adc
    • Florian Westphal's avatar
      netfilter: ebtables: compat: reject all padding in matches/watchers · 35b61a14
      Florian Westphal authored
      commit e608f631 upstream.
      
      syzbot reported following splat:
      
      BUG: KASAN: vmalloc-out-of-bounds in size_entry_mwt net/bridge/netfilter/ebtables.c:2063 [inline]
      BUG: KASAN: vmalloc-out-of-bounds in compat_copy_entries+0x128b/0x1380 net/bridge/netfilter/ebtables.c:2155
      Read of size 4 at addr ffffc900004461f4 by task syz-executor267/7937
      
      CPU: 1 PID: 7937 Comm: syz-executor267 Not tainted 5.5.0-rc1-syzkaller #0
       size_entry_mwt net/bridge/netfilter/ebtables.c:2063 [inline]
       compat_copy_entries+0x128b/0x1380 net/bridge/netfilter/ebtables.c:2155
       compat_do_replace+0x344/0x720 net/bridge/netfilter/ebtables.c:2249
       compat_do_ebt_set_ctl+0x22f/0x27e net/bridge/netfilter/ebtables.c:2333
       [..]
      
      Because padding isn't considered during computation of ->buf_user_offset,
      "total" is decremented by fewer bytes than it should.
      
      Therefore, the first part of
      
      if (*total < sizeof(*entry) || entry->next_offset < sizeof(*entry))
      
      will pass, -- it should not have.  This causes oob access:
      entry->next_offset is past the vmalloced size.
      
      Reject padding and check that computed user offset (sum of ebt_entry
      structure plus all individual matches/watchers/targets) is same
      value that userspace gave us as the offset of the next entry.
      
      Reported-by: syzbot+f68108fed972453a0ad4@syzkaller.appspotmail.com
      Fixes: 81e675c2 ("netfilter: ebtables: add CONFIG_COMPAT support")
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      35b61a14
    • Linus Torvalds's avatar
      filldir[64]: remove WARN_ON_ONCE() for bad directory entries · 19446871
      Linus Torvalds authored
      commit b9959c7a upstream.
      
      This was always meant to be a temporary thing, just for testing and to
      see if it actually ever triggered.
      
      The only thing that reported it was syzbot doing disk image fuzzing, and
      then that warning is expected.  So let's just remove it before -rc4,
      because the extra sanity testing should probably go to -stable, but we
      don't want the warning to do so.
      
      Reported-by: syzbot+3031f712c7ad5dd4d926@syzkaller.appspotmail.com
      Fixes: 8a23eb80 ("Make filldir[64]() verify the directory entry filename is valid")
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSiddharth Chandrasekaran <csiddharth@vmware.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      19446871
    • Linus Torvalds's avatar
      Make filldir[64]() verify the directory entry filename is valid · 89f58402
      Linus Torvalds authored
      commit 8a23eb80 upstream.
      
      This has been discussed several times, and now filesystem people are
      talking about doing it individually at the filesystem layer, so head
      that off at the pass and just do it in getdents{64}().
      
      This is partially based on a patch by Jann Horn, but checks for NUL
      bytes as well, and somewhat simplified.
      
      There's also commentary about how it might be better if invalid names
      due to filesystem corruption don't cause an immediate failure, but only
      an error at the end of the readdir(), so that people can still see the
      filenames that are ok.
      
      There's also been discussion about just how much POSIX strictly speaking
      requires this since it's about filesystem corruption.  It's really more
      "protect user space from bad behavior" as pointed out by Jann.  But
      since Eric Biederman looked up the POSIX wording, here it is for context:
      
       "From readdir:
      
         The readdir() function shall return a pointer to a structure
         representing the directory entry at the current position in the
         directory stream specified by the argument dirp, and position the
         directory stream at the next entry. It shall return a null pointer
         upon reaching the end of the directory stream. The structure dirent
         defined in the <dirent.h> header describes a directory entry.
      
        From definitions:
      
         3.129 Directory Entry (or Link)
      
         An object that associates a filename with a file. Several directory
         entries can associate names with the same file.
      
        ...
      
         3.169 Filename
      
         A name consisting of 1 to {NAME_MAX} bytes used to name a file. The
         characters composing the name may be selected from the set of all
         character values excluding the slash character and the null byte. The
         filenames dot and dot-dot have special meaning. A filename is
         sometimes referred to as a 'pathname component'."
      
      Note that I didn't bother adding the checks to any legacy interfaces
      that nobody uses.
      
      Also note that if this ends up being noticeable as a performance
      regression, we can fix that to do a much more optimized model that
      checks for both NUL and '/' at the same time one word at a time.
      
      We haven't really tended to optimize 'memchr()', and it only checks for
      one pattern at a time anyway, and we really _should_ check for NUL too
      (but see the comment about "soft errors" in the code about why it
      currently only checks for '/')
      
      See the CONFIG_DCACHE_WORD_ACCESS case of hash_name() for how the name
      lookup code looks for pathname terminating characters in parallel.
      
      Link: https://lore.kernel.org/lkml/20190118161440.220134-2-jannh@google.com/
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: Jann Horn <jannh@google.com>
      Cc: Eric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSiddharth Chandrasekaran <csiddharth@vmware.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      89f58402
    • Mattias Jacobsson's avatar
      perf strbuf: Remove redundant va_end() in strbuf_addv() · c578977e
      Mattias Jacobsson authored
      commit 099be748 upstream.
      
      Each call to va_copy() should have one, and only one, corresponding call
      to va_end(). In strbuf_addv() some code paths result in va_end() getting
      called multiple times. Remove the superfluous va_end().
      Signed-off-by: default avatarMattias Jacobsson <2pi@mok.nu>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Sanskriti Sharma <sansharm@redhat.com>
      Link: http://lkml.kernel.org/r/20181229141750.16945-1-2pi@mok.nu
      Fixes: ce49d843 ("perf strbuf: Match va_{add,copy} with va_end")
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarNobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c578977e
    • Takashi Iwai's avatar
      ALSA: hda - Downgrade error message for single-cmd fallback · b69259a1
      Takashi Iwai authored
      [ Upstream commit 475feec0 ]
      
      We made the error message for the CORB/RIRB communication clearer by
      upgrading to dev_WARN() so that user can notice better.  But this
      struck us like a boomerang: now it caught syzbot and reported back as
      a fatal issue although it's not really any too serious bug that worth
      for stopping the whole system.
      
      OK, OK, let's be softy, downgrade it to the standard dev_err() again.
      
      Fixes: dd65f7e1 ("ALSA: hda - Show the fatal CORB/RIRB error more clearly")
      Reported-by: syzbot+b3028ac3933f5c466389@syzkaller.appspotmail.com
      Link: https://lore.kernel.org/r/20191216151224.30013-1-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b69259a1
    • Alexander Lobakin's avatar
      net, sysctl: Fix compiler warning when only cBPF is present · 35df5170
      Alexander Lobakin authored
      [ Upstream commit 1148f9ad ]
      
      proc_dointvec_minmax_bpf_restricted() has been firstly introduced
      in commit 2e4a3098 ("bpf: restrict access to core bpf sysctls")
      under CONFIG_HAVE_EBPF_JIT. Then, this ifdef has been removed in
      ede95a63 ("bpf: add bpf_jit_limit knob to restrict unpriv
      allocations"), because a new sysctl, bpf_jit_limit, made use of it.
      Finally, this parameter has become long instead of integer with
      fdadd049 ("bpf: fix bpf_jit_limit knob for PAGE_SIZE >= 64K")
      and thus, a new proc_dolongvec_minmax_bpf_restricted() has been
      added.
      
      With this last change, we got back to that
      proc_dointvec_minmax_bpf_restricted() is used only under
      CONFIG_HAVE_EBPF_JIT, but the corresponding ifdef has not been
      brought back.
      
      So, in configurations like CONFIG_BPF_JIT=y && CONFIG_HAVE_EBPF_JIT=n
      since v4.20 we have:
      
        CC      net/core/sysctl_net_core.o
      net/core/sysctl_net_core.c:292:1: warning: ‘proc_dointvec_minmax_bpf_restricted’ defined but not used [-Wunused-function]
        292 | proc_dointvec_minmax_bpf_restricted(struct ctl_table *table, int write,
            | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      Suppress this by guarding it with CONFIG_HAVE_EBPF_JIT again.
      
      Fixes: fdadd049 ("bpf: fix bpf_jit_limit knob for PAGE_SIZE >= 64K")
      Signed-off-by: default avatarAlexander Lobakin <alobakin@dlink.ru>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Link: https://lore.kernel.org/bpf/20191218091821.7080-1-alobakin@dlink.ruSigned-off-by: default avatarSasha Levin <sashal@kernel.org>
      35df5170
    • Jan H. Schönherr's avatar
      x86/mce: Fix possibly incorrect severity calculation on AMD · f3a8d2c8
      Jan H. Schönherr authored
      [ Upstream commit a3a57dda ]
      
      The function mce_severity_amd_smca() requires m->bank to be initialized
      for correct operation. Fix the one case, where mce_severity() is called
      without doing so.
      
      Fixes: 6bda529e ("x86/mce: Grade uncorrected errors for SMCA-enabled systems")
      Fixes: d28af26f ("x86/MCE: Initialize mce.bank in the case of a fatal error in mce_no_way_out()")
      Signed-off-by: default avatarJan H. Schönherr <jschoenh@amazon.de>
      Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
      Reviewed-by: default avatarTony Luck <tony.luck@intel.com>
      Cc: "H. Peter Anvin" <hpa@zytor.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: linux-edac <linux-edac@vger.kernel.org>
      Cc: <stable@vger.kernel.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: x86-ml <x86@kernel.org>
      Cc: Yazen Ghannam <Yazen.Ghannam@amd.com>
      Link: https://lkml.kernel.org/r/20191210000733.17979-4-jschoenh@amazon.deSigned-off-by: default avatarSasha Levin <sashal@kernel.org>
      f3a8d2c8
    • Johannes Weiner's avatar
      kernel: sysctl: make drop_caches write-only · b231f9db
      Johannes Weiner authored
      [ Upstream commit 204cb79a ]
      
      Currently, the drop_caches proc file and sysctl read back the last value
      written, suggesting this is somehow a stateful setting instead of a
      one-time command.  Make it write-only, like e.g.  compact_memory.
      
      While mitigating a VM problem at scale in our fleet, there was confusion
      about whether writing to this file will permanently switch the kernel into
      a non-caching mode.  This influences the decision making in a tense
      situation, where tens of people are trying to fix tens of thousands of
      affected machines: Do we need a rollback strategy?  What are the
      performance implications of operating in a non-caching state for several
      days?  It also caused confusion when the kernel team said we may need to
      write the file several times to make sure it's effective ("But it already
      reads back 3?").
      
      Link: http://lkml.kernel.org/r/20191031221602.9375-1-hannes@cmpxchg.orgSigned-off-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
      Acked-by: default avatarChris Down <chris@chrisdown.name>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Acked-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b231f9db
    • Ding Xiang's avatar
      ocfs2: fix passing zero to 'PTR_ERR' warning · 8da06d38
      Ding Xiang authored
      [ Upstream commit 188c523e ]
      
      Fix a static code checker warning:
      fs/ocfs2/acl.c:331
      	ocfs2_acl_chmod() warn: passing zero to 'PTR_ERR'
      
      Link: http://lkml.kernel.org/r/1dee278b-6c96-eec2-ce76-fe6e07c6e20f@linux.alibaba.com
      Fixes: 5ee0fbd5 ("ocfs2: revert using ocfs2_acl_chmod to avoid inode cluster lock hang")
      Signed-off-by: default avatarDing Xiang <dingxiang@cmss.chinamobile.com>
      Reviewed-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
      Cc: Mark Fasheh <mark@fasheh.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Junxiao Bi <junxiao.bi@oracle.com>
      Cc: Changwei Ge <gechangwei@live.cn>
      Cc: Gang He <ghe@suse.com>
      Cc: Jun Piao <piaojun@huawei.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8da06d38
    • Thomas Richter's avatar
      s390/cpum_sf: Check for SDBT and SDB consistency · fdfc605b
      Thomas Richter authored
      [ Upstream commit 247f265f ]
      
      Each SBDT is located at a 4KB page and contains 512 entries.
      Each entry of a SDBT points to a SDB, a 4KB page containing
      sampled data. The last entry is a link to another SDBT page.
      
      When an event is created the function sequence executed is:
      
        __hw_perf_event_init()
        +--> allocate_buffers()
             +--> realloc_sampling_buffers()
      	    +---> alloc_sample_data_block()
      
      Both functions realloc_sampling_buffers() and
      alloc_sample_data_block() allocate pages and the allocation
      can fail. This is handled correctly and all allocated
      pages are freed and error -ENOMEM is returned to the
      top calling function. Finally the event is not created.
      
      Once the event has been created, the amount of initially
      allocated SDBT and SDB can be too low. This is detected
      during measurement interrupt handling, where the amount
      of lost samples is calculated. If the number of lost samples
      is too high considering sampling frequency and already allocated
      SBDs, the number of SDBs is enlarged during the next execution
      of cpumsf_pmu_enable().
      
      If more SBDs need to be allocated, functions
      
             realloc_sampling_buffers()
             +---> alloc-sample_data_block()
      
      are called to allocate more pages. Page allocation may fail
      and the returned error is ignored. A SDBT and SDB setup
      already exists.
      
      However the modified SDBTs and SDBs might end up in a situation
      where the first entry of an SDBT does not point to an SDB,
      but another SDBT, basicly an SBDT without payload.
      This can not be handled by the interrupt handler, where an SDBT
      must have at least one entry pointing to an SBD.
      
      Add a check to avoid SDBTs with out payload (SDBs) when enlarging
      the buffer setup.
      Signed-off-by: default avatarThomas Richter <tmricht@linux.ibm.com>
      Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fdfc605b
    • Masahiro Yamada's avatar
      libfdt: define INT32_MAX and UINT32_MAX in libfdt_env.h · 6a60df8e
      Masahiro Yamada authored
      [ Upstream commit a8de1304 ]
      
      The DTC v1.5.1 added references to (U)INT32_MAX.
      
      This is no problem for user-space programs since <stdint.h> defines
      (U)INT32_MAX along with (u)int32_t.
      
      For the kernel space, libfdt_env.h needs to be adjusted before we
      pull in the changes.
      
      In the kernel, we usually use s/u32 instead of (u)int32_t for the
      fixed-width types.
      
      Accordingly, we already have S/U32_MAX for their max values.
      So, we should not add (U)INT32_MAX to <linux/limits.h> any more.
      
      Instead, add them to the in-kernel libfdt_env.h to compile the
      latest libfdt.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Signed-off-by: default avatarRob Herring <robh@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6a60df8e
    • Arnaldo Carvalho de Melo's avatar
      perf regs: Make perf_reg_name() return "unknown" instead of NULL · 2d31ea6f
      Arnaldo Carvalho de Melo authored
      [ Upstream commit 5b596e0f ]
      
      To avoid breaking the build on arches where this is not wired up, at
      least all the other features should be made available and when using
      this specific routine, the "unknown" should point the user/developer to
      the need to wire this up on this particular hardware architecture.
      
      Detected in a container mipsel debian cross build environment, where it
      shows up as:
      
        In file included from /usr/mipsel-linux-gnu/include/stdio.h:867,
                         from /git/linux/tools/perf/lib/include/perf/cpumap.h:6,
                         from util/session.c:13:
        In function 'printf',
            inlined from 'regs_dump__printf' at util/session.c:1103:3,
            inlined from 'regs__printf' at util/session.c:1131:2:
        /usr/mipsel-linux-gnu/include/bits/stdio2.h:107:10: error: '%-5s' directive argument is null [-Werror=format-overflow=]
          107 |   return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
              |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      cross compiler details:
      
        mipsel-linux-gnu-gcc (Debian 9.2.1-8) 9.2.1 20190909
      
      Also on mips64:
      
        In file included from /usr/mips64-linux-gnuabi64/include/stdio.h:867,
                         from /git/linux/tools/perf/lib/include/perf/cpumap.h:6,
                         from util/session.c:13:
        In function 'printf',
            inlined from 'regs_dump__printf' at util/session.c:1103:3,
            inlined from 'regs__printf' at util/session.c:1131:2,
            inlined from 'regs_user__printf' at util/session.c:1139:3,
            inlined from 'dump_sample' at util/session.c:1246:3,
            inlined from 'machines__deliver_event' at util/session.c:1421:3:
        /usr/mips64-linux-gnuabi64/include/bits/stdio2.h:107:10: error: '%-5s' directive argument is null [-Werror=format-overflow=]
          107 |   return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
              |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        In function 'printf',
            inlined from 'regs_dump__printf' at util/session.c:1103:3,
            inlined from 'regs__printf' at util/session.c:1131:2,
            inlined from 'regs_intr__printf' at util/session.c:1147:3,
            inlined from 'dump_sample' at util/session.c:1249:3,
            inlined from 'machines__deliver_event' at util/session.c:1421:3:
        /usr/mips64-linux-gnuabi64/include/bits/stdio2.h:107:10: error: '%-5s' directive argument is null [-Werror=format-overflow=]
          107 |   return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
              |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      cross compiler details:
      
        mips64-linux-gnuabi64-gcc (Debian 9.2.1-8) 9.2.1 20190909
      
      Fixes: 2bcd355b ("perf tools: Add interface to arch registers sets")
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-95wjyv4o65nuaeweq31t7l1s@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2d31ea6f
    • Diego Elio Pettenò's avatar
      cdrom: respect device capabilities during opening action · 3f58a3f0
      Diego Elio Pettenò authored
      [ Upstream commit 366ba7c7 ]
      
      Reading the TOC only works if the device can play audio, otherwise
      these commands fail (and possibly bring the device to an unhealthy
      state.)
      
      Similarly, cdrom_mmc3_profile() should only be called if the device
      supports generic packet commands.
      
      To: Jens Axboe <axboe@kernel.dk>
      Cc: linux-kernel@vger.kernel.org
      Cc: linux-scsi@vger.kernel.org
      Signed-off-by: default avatarDiego Elio Pettenò <flameeyes@flameeyes.com>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3f58a3f0
    • Masahiro Yamada's avatar
      scripts/kallsyms: fix definitely-lost memory leak · 9abb8f60
      Masahiro Yamada authored
      [ Upstream commit 21915eca ]
      
      build_initial_tok_table() overwrites unused sym_entry to shrink the
      table size. Before the entry is overwritten, table[i].sym must be freed
      since it is malloc'ed data.
      
      This fixes the 'definitely lost' report from valgrind. I ran valgrind
      against x86_64_defconfig of v5.4-rc8 kernel, and here is the summary:
      
      [Before the fix]
      
        LEAK SUMMARY:
           definitely lost: 53,184 bytes in 2,874 blocks
      
      [After the fix]
      
        LEAK SUMMARY:
           definitely lost: 0 bytes in 0 blocks
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9abb8f60
    • Vladimir Oltean's avatar
      gpio: mpc8xxx: Don't overwrite default irq_set_type callback · dac861db
      Vladimir Oltean authored
      [ Upstream commit 4e50573f ]
      
      The per-SoC devtype structures can contain their own callbacks that
      overwrite mpc8xxx_gpio_devtype_default.
      
      The clear intention is that mpc8xxx_irq_set_type is used in case the SoC
      does not specify a more specific callback. But what happens is that if
      the SoC doesn't specify one, its .irq_set_type is de-facto NULL, and
      this overwrites mpc8xxx_irq_set_type to a no-op. This means that the
      following SoCs are affected:
      
      - fsl,mpc8572-gpio
      - fsl,ls1028a-gpio
      - fsl,ls1088a-gpio
      
      On these boards, the irq_set_type does exactly nothing, and the GPIO
      controller keeps its GPICR register in the hardware-default state. On
      the LS1028A, that is ACTIVE_BOTH, which means 2 interrupts are raised
      even if the IRQ client requests LEVEL_HIGH. Another implication is that
      the IRQs are not checked (e.g. level-triggered interrupts are not
      rejected, although they are not supported).
      
      Fixes: 82e39b0d ("gpio: mpc8xxx: handle differences between incarnations at a single place")
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Link: https://lore.kernel.org/r/20191115125551.31061-1-olteanv@gmail.comTested-by: default avatarMichael Walle <michael@walle.cc>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      dac861db
    • Bart Van Assche's avatar
      scsi: target: iscsi: Wait for all commands to finish before freeing a session · 6d94f0de
      Bart Van Assche authored
      [ Upstream commit e9d3009c ]
      
      The iSCSI target driver is the only target driver that does not wait for
      ongoing commands to finish before freeing a session. Make the iSCSI target
      driver wait for ongoing commands to finish before freeing a session. This
      patch fixes the following KASAN complaint:
      
      BUG: KASAN: use-after-free in __lock_acquire+0xb1a/0x2710
      Read of size 8 at addr ffff8881154eca70 by task kworker/0:2/247
      
      CPU: 0 PID: 247 Comm: kworker/0:2 Not tainted 5.4.0-rc1-dbg+ #6
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
      Workqueue: target_completion target_complete_ok_work [target_core_mod]
      Call Trace:
       dump_stack+0x8a/0xd6
       print_address_description.constprop.0+0x40/0x60
       __kasan_report.cold+0x1b/0x33
       kasan_report+0x16/0x20
       __asan_load8+0x58/0x90
       __lock_acquire+0xb1a/0x2710
       lock_acquire+0xd3/0x200
       _raw_spin_lock_irqsave+0x43/0x60
       target_release_cmd_kref+0x162/0x7f0 [target_core_mod]
       target_put_sess_cmd+0x2e/0x40 [target_core_mod]
       lio_check_stop_free+0x12/0x20 [iscsi_target_mod]
       transport_cmd_check_stop_to_fabric+0xd8/0xe0 [target_core_mod]
       target_complete_ok_work+0x1b0/0x790 [target_core_mod]
       process_one_work+0x549/0xa40
       worker_thread+0x7a/0x5d0
       kthread+0x1bc/0x210
       ret_from_fork+0x24/0x30
      
      Allocated by task 889:
       save_stack+0x23/0x90
       __kasan_kmalloc.constprop.0+0xcf/0xe0
       kasan_slab_alloc+0x12/0x20
       kmem_cache_alloc+0xf6/0x360
       transport_alloc_session+0x29/0x80 [target_core_mod]
       iscsi_target_login_thread+0xcd6/0x18f0 [iscsi_target_mod]
       kthread+0x1bc/0x210
       ret_from_fork+0x24/0x30
      
      Freed by task 1025:
       save_stack+0x23/0x90
       __kasan_slab_free+0x13a/0x190
       kasan_slab_free+0x12/0x20
       kmem_cache_free+0x146/0x400
       transport_free_session+0x179/0x2f0 [target_core_mod]
       transport_deregister_session+0x130/0x180 [target_core_mod]
       iscsit_close_session+0x12c/0x350 [iscsi_target_mod]
       iscsit_logout_post_handler+0x136/0x380 [iscsi_target_mod]
       iscsit_response_queue+0x8de/0xbe0 [iscsi_target_mod]
       iscsi_target_tx_thread+0x27f/0x370 [iscsi_target_mod]
       kthread+0x1bc/0x210
       ret_from_fork+0x24/0x30
      
      The buggy address belongs to the object at ffff8881154ec9c0
       which belongs to the cache se_sess_cache of size 352
      The buggy address is located 176 bytes inside of
       352-byte region [ffff8881154ec9c0, ffff8881154ecb20)
      The buggy address belongs to the page:
      page:ffffea0004553b00 refcount:1 mapcount:0 mapping:ffff888101755400 index:0x0 compound_mapcount: 0
      flags: 0x2fff000000010200(slab|head)
      raw: 2fff000000010200 dead000000000100 dead000000000122 ffff888101755400
      raw: 0000000000000000 0000000080130013 00000001ffffffff 0000000000000000
      page dumped because: kasan: bad access detected
      
      Memory state around the buggy address:
       ffff8881154ec900: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
       ffff8881154ec980: fc fc fc fc fc fc fc fc fb fb fb fb fb fb fb fb
      >ffff8881154eca00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                                                   ^
       ffff8881154eca80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
       ffff8881154ecb00: fb fb fb fb fc fc fc fc fc fc fc fc fc fc fc fc
      
      Cc: Mike Christie <mchristi@redhat.com>
      Link: https://lore.kernel.org/r/20191113220508.198257-3-bvanassche@acm.orgReviewed-by: default avatarRoman Bolshakov <r.bolshakov@yadro.com>
      Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6d94f0de
    • Maurizio Lombardi's avatar
      scsi: scsi_debug: num_tgts must be >= 0 · cda09f74
      Maurizio Lombardi authored
      [ Upstream commit aa5334c4 ]
      
      Passing the parameter "num_tgts=-1" will start an infinite loop that
      exhausts the system memory
      
      Link: https://lore.kernel.org/r/20191115163727.24626-1-mlombard@redhat.comSigned-off-by: default avatarMaurizio Lombardi <mlombard@redhat.com>
      Acked-by: default avatarDouglas Gilbert <dgilbert@interlog.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      cda09f74
    • peter chang's avatar
      scsi: pm80xx: Fix for SATA device discovery · bc07cb62
      peter chang authored
      [ Upstream commit ce21c63e ]
      
      Driver was missing complete() call in mpi_sata_completion which result in
      SATA abort error handling timing out. That causes the device to be left in
      the in_recovery state so subsequent commands sent to the device fail and
      the OS removes access to it.
      
      Link: https://lore.kernel.org/r/20191114100910.6153-2-deepak.ukey@microchip.comAcked-by: default avatarJack Wang <jinpu.wang@cloud.ionos.com>
      Signed-off-by: default avatarpeter chang <dpf@google.com>
      Signed-off-by: default avatarDeepak Ukey <deepak.ukey@microchip.com>
      Signed-off-by: default avatarViswas G <Viswas.G@microchip.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      bc07cb62
    • Theodore Ts'o's avatar
      ext4: work around deleting a file with i_nlink == 0 safely · e1513b36
      Theodore Ts'o authored
      [ Upstream commit c7df4a1e ]
      
      If the file system is corrupted such that a file's i_links_count is
      too small, then it's possible that when unlinking that file, i_nlink
      will already be zero.  Previously we were working around this kind of
      corruption by forcing i_nlink to one; but we were doing this before
      trying to delete the directory entry --- and if the file system is
      corrupted enough that ext4_delete_entry() fails, then we exit with
      i_nlink elevated, and this causes the orphan inode list handling to be
      FUBAR'ed, such that when we unmount the file system, the orphan inode
      list can get corrupted.
      
      A better way to fix this is to simply skip trying to call drop_nlink()
      if i_nlink is already zero, thus moving the check to the place where
      it makes the most sense.
      
      https://bugzilla.kernel.org/show_bug.cgi?id=205433
      
      Link: https://lore.kernel.org/r/20191112032903.8828-1-tytso@mit.eduSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Cc: stable@kernel.org
      Reviewed-by: default avatarAndreas Dilger <adilger@dilger.ca>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e1513b36
    • Blaž Hrastnik's avatar
      HID: Improve Windows Precision Touchpad detection. · 6deeb487
      Blaž Hrastnik authored
      [ Upstream commit 2dbc6f11 ]
      
      Per Microsoft spec, usage 0xC5 (page 0xFF) returns a blob containing
      data used to verify the touchpad as a Windows Precision Touchpad.
      
         0x85, REPORTID_PTPHQA,    //    REPORT_ID (PTPHQA)
          0x09, 0xC5,              //    USAGE (Vendor Usage 0xC5)
          0x15, 0x00,              //    LOGICAL_MINIMUM (0)
          0x26, 0xff, 0x00,        //    LOGICAL_MAXIMUM (0xff)
          0x75, 0x08,              //    REPORT_SIZE (8)
          0x96, 0x00, 0x01,        //    REPORT_COUNT (0x100 (256))
          0xb1, 0x02,              //    FEATURE (Data,Var,Abs)
      
      However, some devices, namely Microsoft's Surface line of products
      instead implement a "segmented device certification report" (usage 0xC6)
      which returns the same report, but in smaller chunks.
      
          0x06, 0x00, 0xff,        //     USAGE_PAGE (Vendor Defined)
          0x85, REPORTID_PTPHQA,   //     REPORT_ID (PTPHQA)
          0x09, 0xC6,              //     USAGE (Vendor usage for segment #)
          0x25, 0x08,              //     LOGICAL_MAXIMUM (8)
          0x75, 0x08,              //     REPORT_SIZE (8)
          0x95, 0x01,              //     REPORT_COUNT (1)
          0xb1, 0x02,              //     FEATURE (Data,Var,Abs)
          0x09, 0xC7,              //     USAGE (Vendor Usage)
          0x26, 0xff, 0x00,        //     LOGICAL_MAXIMUM (0xff)
          0x95, 0x20,              //     REPORT_COUNT (32)
          0xb1, 0x02,              //     FEATURE (Data,Var,Abs)
      
      By expanding Win8 touchpad detection to also look for the segmented
      report, all Surface touchpads are now properly recognized by
      hid-multitouch.
      Signed-off-by: default avatarBlaž Hrastnik <blaz@mxxn.io>
      Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6deeb487
    • Coly Li's avatar
      bcache: at least try to shrink 1 node in bch_mca_scan() · 116d44d1
      Coly Li authored
      [ Upstream commit 9fcc34b1 ]
      
      In bch_mca_scan(), the number of shrinking btree node is calculated
      by code like this,
      	unsigned long nr = sc->nr_to_scan;
      
              nr /= c->btree_pages;
              nr = min_t(unsigned long, nr, mca_can_free(c));
      variable sc->nr_to_scan is number of objects (here is bcache B+tree
      nodes' number) to shrink, and pointer variable sc is sent from memory
      management code as parametr of a callback.
      
      If sc->nr_to_scan is smaller than c->btree_pages, after the above
      calculation, variable 'nr' will be 0 and nothing will be shrunk. It is
      frequeently observed that only 1 or 2 is set to sc->nr_to_scan and make
      nr to be zero. Then bch_mca_scan() will do nothing more then acquiring
      and releasing mutex c->bucket_lock.
      
      This patch checkes whether nr is 0 after the above calculation, if 0
      is the result then set 1 to variable 'n'. Then at least bch_mca_scan()
      will try to shrink a single B+tree node.
      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>
      116d44d1
    • Robert Jarzmik's avatar
      clk: pxa: fix one of the pxa RTC clocks · de60421a
      Robert Jarzmik authored
      [ Upstream commit 46acbcb4 ]
      
      The pxa27x platforms have a single IP with 2 drivers, sa1100-rtc and
      rtc-pxa drivers.
      
      A previous patch fixed the sa1100-rtc case, but the pxa-rtc wasn't
      fixed. This patch completes the previous one.
      
      Fixes: 8b6d1034 ("clk: pxa: add missing pxa27x clocks for Irda and sa1100-rtc")
      Signed-off-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
      Link: https://lkml.kernel.org/r/20191026194420.11918-1-robert.jarzmik@free.frSigned-off-by: default avatarStephen Boyd <sboyd@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      de60421a
    • Finn Thain's avatar
      scsi: atari_scsi: sun3_scsi: Set sg_tablesize to 1 instead of SG_NONE · ce2db8cf
      Finn Thain authored
      [ Upstream commit 79172ab2 ]
      
      Since the scsi subsystem adopted the blk-mq API, a host with zero
      sg_tablesize crashes with a NULL pointer dereference.
      
      blk_queue_max_segments: set to minimum 1
      scsi 0:0:0:0: Direct-Access     QEMU     QEMU HARDDISK    2.5+ PQ: 0 ANSI: 5
      scsi target0:0:0: Beginning Domain Validation
      scsi target0:0:0: Domain Validation skipping write tests
      scsi target0:0:0: Ending Domain Validation
      blk_queue_max_segments: set to minimum 1
      scsi 0:0:1:0: Direct-Access     QEMU     QEMU HARDDISK    2.5+ PQ: 0 ANSI: 5
      scsi target0:0:1: Beginning Domain Validation
      scsi target0:0:1: Domain Validation skipping write tests
      scsi target0:0:1: Ending Domain Validation
      blk_queue_max_segments: set to minimum 1
      scsi 0:0:2:0: CD-ROM            QEMU     QEMU CD-ROM      2.5+ PQ: 0 ANSI: 5
      scsi target0:0:2: Beginning Domain Validation
      scsi target0:0:2: Domain Validation skipping write tests
      scsi target0:0:2: Ending Domain Validation
      blk_queue_max_segments: set to minimum 1
      blk_queue_max_segments: set to minimum 1
      blk_queue_max_segments: set to minimum 1
      blk_queue_max_segments: set to minimum 1
      sr 0:0:2:0: Power-on or device reset occurred
      sd 0:0:0:0: Power-on or device reset occurred
      sd 0:0:1:0: Power-on or device reset occurred
      sd 0:0:0:0: [sda] 10485762 512-byte logical blocks: (5.37 GB/5.00 GiB)
      sd 0:0:0:0: [sda] Write Protect is off
      sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
      Unable to handle kernel NULL pointer dereference at virtual address (ptrval)
      Oops: 00000000
      Modules linked in:
      PC: [<001cd874>] blk_mq_free_request+0x66/0xe2
      SR: 2004  SP: (ptrval)  a2: 00874520
      d0: 00000000    d1: 00000000    d2: 009ba800    d3: 00000000
      d4: 00000000    d5: 08000002    a0: 0087be68    a1: 009a81e0
      Process kworker/u2:2 (pid: 15, task=(ptrval))
      Frame format=7 eff addr=0000007a ssw=0505 faddr=0000007a
      wb 1 stat/addr/data: 0000 00000000 00000000
      wb 2 stat/addr/data: 0000 00000000 00000000
      wb 3 stat/addr/data: 0000 0000007a 00000000
      push data: 00000000 00000000 00000000 00000000
      Stack from 0087bd98:
              00000002 00000000 0087be72 009a7820 0087bdb4 001c4f6c 009a7820 0087bdd4
              0024d200 009a7820 0024d0dc 0087be72 009baa00 0087be68 009a5000 0087be7c
              00265d10 009a5000 0087be72 00000003 00000000 00000000 00000000 0087be68
              00000bb8 00000005 00000000 00000000 00000000 00000000 00265c56 00000000
              009ba60c 0036ddf4 00000002 ffffffff 009baa00 009ba600 009a50d6 0087be74
              00227ba0 009baa08 00000001 009baa08 009ba60c 0036ddf4 00000000 00000000
      Call Trace: [<001c4f6c>] blk_put_request+0xe/0x14
       [<0024d200>] __scsi_execute+0x124/0x174
       [<0024d0dc>] __scsi_execute+0x0/0x174
       [<00265d10>] sd_revalidate_disk+0xba/0x1f02
       [<00265c56>] sd_revalidate_disk+0x0/0x1f02
       [<0036ddf4>] strlen+0x0/0x22
       [<00227ba0>] device_add+0x3da/0x604
       [<0036ddf4>] strlen+0x0/0x22
       [<00267e64>] sd_probe+0x30c/0x4b4
       [<0002da44>] process_one_work+0x0/0x402
       [<0022b978>] really_probe+0x226/0x354
       [<0022bc34>] driver_probe_device+0xa4/0xf0
       [<0002da44>] process_one_work+0x0/0x402
       [<0022bcd0>] __driver_attach_async_helper+0x50/0x70
       [<00035dae>] async_run_entry_fn+0x36/0x130
       [<0002db88>] process_one_work+0x144/0x402
       [<0002e1aa>] worker_thread+0x0/0x570
       [<0002e29a>] worker_thread+0xf0/0x570
       [<0002e1aa>] worker_thread+0x0/0x570
       [<003768d8>] schedule+0x0/0xb8
       [<0003f58c>] __init_waitqueue_head+0x0/0x12
       [<00033e92>] kthread+0xc2/0xf6
       [<000331e8>] kthread_parkme+0x0/0x4e
       [<003768d8>] schedule+0x0/0xb8
       [<00033dd0>] kthread+0x0/0xf6
       [<00002c10>] ret_from_kernel_thread+0xc/0x14
      Code: 0280 0006 0800 56c0 4400 0280 0000 00ff <52b4> 0c3a 082b 0006 0013 6706 2042 53a8 00c4 4ab9 0047 3374 6640 202d 000c 670c
      Disabling lock debugging due to kernel taint
      
      Avoid this by setting sg_tablesize = 1.
      
      Link: https://lore.kernel.org/r/4567bcae94523b47d6f3b77450ba305823bca479.1572656814.git.fthain@telegraphics.com.auReported-and-tested-by: default avatarMichael Schmitz <schmitzmic@gmail.com>
      Reviewed-by: default avatarMichael Schmitz <schmitzmic@gmail.com>
      References: commit 68ab2d76 ("scsi: cxlflash: Set sg_tablesize to 1 instead of SG_NONE")
      Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ce2db8cf
    • Gustavo L. F. Walbon's avatar
      powerpc/security: Fix wrong message when RFI Flush is disable · 9da4be36
      Gustavo L. F. Walbon authored
      [ Upstream commit 4e706af3 ]
      
      The issue was showing "Mitigation" message via sysfs whatever the
      state of "RFI Flush", but it should show "Vulnerable" when it is
      disabled.
      
      If you have "L1D private" feature enabled and not "RFI Flush" you are
      vulnerable to meltdown attacks.
      
      "RFI Flush" is the key feature to mitigate the meltdown whatever the
      "L1D private" state.
      
      SEC_FTR_L1D_THREAD_PRIV is a feature for Power9 only.
      
      So the message should be as the truth table shows:
      
        CPU | L1D private | RFI Flush |                sysfs
        ----|-------------|-----------|-------------------------------------
         P9 |    False    |   False   | Vulnerable
         P9 |    False    |   True    | Mitigation: RFI Flush
         P9 |    True     |   False   | Vulnerable: L1D private per thread
         P9 |    True     |   True    | Mitigation: RFI Flush, L1D private per thread
         P8 |    False    |   False   | Vulnerable
         P8 |    False    |   True    | Mitigation: RFI Flush
      
      Output before this fix:
        # cat /sys/devices/system/cpu/vulnerabilities/meltdown
        Mitigation: RFI Flush, L1D private per thread
        # echo 0 > /sys/kernel/debug/powerpc/rfi_flush
        # cat /sys/devices/system/cpu/vulnerabilities/meltdown
        Mitigation: L1D private per thread
      
      Output after fix:
        # cat /sys/devices/system/cpu/vulnerabilities/meltdown
        Mitigation: RFI Flush, L1D private per thread
        # echo 0 > /sys/kernel/debug/powerpc/rfi_flush
        # cat /sys/devices/system/cpu/vulnerabilities/meltdown
        Vulnerable: L1D private per thread
      Signed-off-by: default avatarGustavo L. F. Walbon <gwalbon@linux.ibm.com>
      Signed-off-by: default avatarMauro S. M. Rodrigues <maurosr@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20190502210907.42375-1-gwalbon@linux.ibm.comSigned-off-by: default avatarSasha Levin <sashal@kernel.org>
      9da4be36
    • David Hildenbrand's avatar
      powerpc/pseries/cmm: Implement release() function for sysfs device · e393b78e
      David Hildenbrand authored
      [ Upstream commit 7d821274 ]
      
      When unloading the module, one gets
        ------------[ cut here ]------------
        Device 'cmm0' does not have a release() function, it is broken and must be fixed. See Documentation/kobject.txt.
        WARNING: CPU: 0 PID: 19308 at drivers/base/core.c:1244 .device_release+0xcc/0xf0
        ...
      
      We only have one static fake device. There is nothing to do when
      releasing the device (via cmm_exit()).
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20191031142933.10779-2-david@redhat.comSigned-off-by: default avatarSasha Levin <sashal@kernel.org>
      e393b78e
    • Bean Huo's avatar
      scsi: ufs: fix potential bug which ends in system hang · 6ebc434f
      Bean Huo authored
      [ Upstream commit cfcbae38 ]
      
      In function __ufshcd_query_descriptor(), in the event of an error
      happening, we directly goto out_unlock and forget to invaliate
      hba->dev_cmd.query.descriptor pointer. This results in this pointer still
      valid in ufshcd_copy_query_response() for other query requests which go
      through ufshcd_exec_raw_upiu_cmd(). This will cause __memcpy() crash and
      system hangs. Log as shown below:
      
      Unable to handle kernel paging request at virtual address
      ffff000012233c40
      Mem abort info:
         ESR = 0x96000047
         Exception class = DABT (current EL), IL = 32 bits
         SET = 0, FnV = 0
         EA = 0, S1PTW = 0
      Data abort info:
         ISV = 0, ISS = 0x00000047
         CM = 0, WnR = 1
      swapper pgtable: 4k pages, 48-bit VAs, pgdp = 0000000028cc735c
      [ffff000012233c40] pgd=00000000bffff003, pud=00000000bfffe003,
      pmd=00000000ba8b8003, pte=0000000000000000
       Internal error: Oops: 96000047 [#2] PREEMPT SMP
       ...
       Call trace:
        __memcpy+0x74/0x180
        ufshcd_issue_devman_upiu_cmd+0x250/0x3c0
        ufshcd_exec_raw_upiu_cmd+0xfc/0x1a8
        ufs_bsg_request+0x178/0x3b0
        bsg_queue_rq+0xc0/0x118
        blk_mq_dispatch_rq_list+0xb0/0x538
        blk_mq_sched_dispatch_requests+0x18c/0x1d8
        __blk_mq_run_hw_queue+0xb4/0x118
        blk_mq_run_work_fn+0x28/0x38
        process_one_work+0x1ec/0x470
        worker_thread+0x48/0x458
        kthread+0x130/0x138
        ret_from_fork+0x10/0x1c
       Code: 540000ab a8c12027 a88120c7 a8c12027 (a88120c7)
       ---[ end trace 793e1eb5dff69f2d ]---
       note: kworker/0:2H[2054] exited with preempt_count 1
      
      This patch is to move "descriptor = NULL" down to below the label
      "out_unlock".
      
      Fixes: d44a5f98(ufs: query descriptor API)
      Link: https://lore.kernel.org/r/20191112223436.27449-3-huobean@gmail.comReviewed-by: default avatarAlim Akhtar <alim.akhtar@samsung.com>
      Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
      Signed-off-by: default avatarBean Huo <beanhuo@micron.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6ebc434f
    • James Smart's avatar
      scsi: lpfc: fix: Coverity: lpfc_cmpl_els_rsp(): Null pointer dereferences · b5ad5840
      James Smart authored
      [ Upstream commit 6c6d59e0 ]
      
      Coverity reported the following:
      
      *** CID 101747:  Null pointer dereferences  (FORWARD_NULL)
      /drivers/scsi/lpfc/lpfc_els.c: 4439 in lpfc_cmpl_els_rsp()
      4433     			kfree(mp);
      4434     		}
      4435     		mempool_free(mbox, phba->mbox_mem_pool);
      4436     	}
      4437     out:
      4438     	if (ndlp && NLP_CHK_NODE_ACT(ndlp)) {
      vvv     CID 101747:  Null pointer dereferences  (FORWARD_NULL)
      vvv     Dereferencing null pointer "shost".
      4439     		spin_lock_irq(shost->host_lock);
      4440     		ndlp->nlp_flag &= ~(NLP_ACC_REGLOGIN | NLP_RM_DFLT_RPI);
      4441     		spin_unlock_irq(shost->host_lock);
      4442
      4443     		/* If the node is not being used by another discovery thread,
      4444     		 * and we are sending a reject, we are done with it.
      
      Fix by adding a check for non-null shost in line 4438.
      The scenario when shost is set to null is when ndlp is null.
      As such, the ndlp check present was sufficient. But better safe
      than sorry so add the shost check.
      Reported-by: default avatarcoverity-bot <keescook+coverity-bot@chromium.org>
      Addresses-Coverity-ID: 101747 ("Null pointer dereferences")
      Fixes: 2e0fef85 ("[SCSI] lpfc: NPIV: split ports")
      
      CC: James Bottomley <James.Bottomley@SteelEye.com>
      CC: "Gustavo A. R. Silva" <gustavo@embeddedor.com>
      CC: linux-next@vger.kernel.org
      Link: https://lore.kernel.org/r/20191111230401.12958-3-jsmart2021@gmail.comReviewed-by: default avatarEwan D. Milne <emilne@redhat.com>
      Signed-off-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
      Signed-off-by: default avatarJames Smart <jsmart2021@gmail.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b5ad5840
    • Konstantin Khlebnikov's avatar
      fs/quota: handle overflows of sysctl fs.quota.* and report as unsigned long · 4cfee666
      Konstantin Khlebnikov authored
      [ Upstream commit 6fcbcec9 ]
      
      Quota statistics counted as 64-bit per-cpu counter. Reading sums per-cpu
      fractions as signed 64-bit int, filters negative values and then reports
      lower half as signed 32-bit int.
      
      Result may looks like:
      
      fs.quota.allocated_dquots = 22327
      fs.quota.cache_hits = -489852115
      fs.quota.drops = -487288718
      fs.quota.free_dquots = 22083
      fs.quota.lookups = -486883485
      fs.quota.reads = 22327
      fs.quota.syncs = 335064
      fs.quota.writes = 3088689
      
      Values bigger than 2^31-1 reported as negative.
      
      All counters except "allocated_dquots" and "free_dquots" are monotonic,
      thus they should be reported as is without filtering negative values.
      
      Kernel doesn't have generic helper for 64-bit sysctl yet,
      let's use at least unsigned long.
      
      Link: https://lore.kernel.org/r/157337934693.2078.9842146413181153727.stgit@buzzSigned-off-by: default avatarKonstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Signed-off-by: default avatarJan Kara <jack@suse.cz>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      4cfee666
    • Paul Cercueil's avatar
      irqchip: ingenic: Error out if IRQ domain creation failed · c4c2250c
      Paul Cercueil authored
      [ Upstream commit 52ecc876 ]
      
      If we cannot create the IRQ domain, the driver should fail to probe
      instead of succeeding with just a warning message.
      Signed-off-by: default avatarPaul Cercueil <paul@crapouillou.net>
      Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
      Link: https://lore.kernel.org/r/1570015525-27018-3-git-send-email-zhouyanjie@zoho.comSigned-off-by: default avatarSasha Levin <sashal@kernel.org>
      c4c2250c
    • Florian Fainelli's avatar
      irqchip/irq-bcm7038-l1: Enable parent IRQ if necessary · 8f5f88c6
      Florian Fainelli authored
      [ Upstream commit 27eebb60 ]
      
      If the 'brcm,irq-can-wake' property is specified, make sure we also
      enable the corresponding parent interrupt we are attached to.
      Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
      Link: https://lore.kernel.org/r/20191024201415.23454-4-f.fainelli@gmail.comSigned-off-by: default avatarSasha Levin <sashal@kernel.org>
      8f5f88c6
    • Jeffrey Hugo's avatar
      clk: qcom: Allow constant ratio freq tables for rcg · b119250f
      Jeffrey Hugo authored
      [ Upstream commit efd164b5 ]
      
      Some RCGs (the gfx_3d_src_clk in msm8998 for example) are basically just
      some constant ratio from the input across the entire frequency range.  It
      would be great if we could specify the frequency table as a single entry
      constant ratio instead of a long list, ie:
      
      	{ .src = P_GPUPLL0_OUT_EVEN, .pre_div = 3 },
              { }
      
      So, lets support that.
      
      We need to fix a corner case in qcom_find_freq() where if the freq table
      is non-null, but has no frequencies, we end up returning an "entry" before
      the table array, which is bad.  Then, we need ignore the freq from the
      table, and instead base everything on the requested freq.
      Suggested-by: default avatarStephen Boyd <sboyd@kernel.org>
      Signed-off-by: default avatarJeffrey Hugo <jeffrey.l.hugo@gmail.com>
      Link: https://lkml.kernel.org/r/20191031185715.15504-1-jeffrey.l.hugo@gmail.comSigned-off-by: default avatarStephen Boyd <sboyd@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b119250f
    • James Smart's avatar
      scsi: lpfc: Fix duplicate unreg_rpi error in port offline flow · c7f4e4db
      James Smart authored
      [ Upstream commit 7cfd5639 ]
      
      If the driver receives a login that is later then LOGO'd by the remote port
      (aka ndlp), the driver, upon the completion of the LOGO ACC transmission,
      will logout the node and unregister the rpi that is being used for the
      node.  As part of the unreg, the node's rpi value is replaced by the
      LPFC_RPI_ALLOC_ERROR value.  If the port is subsequently offlined, the
      offline walks the nodes and ensures they are logged out, which possibly
      entails unreg'ing their rpi values.  This path does not validate the node's
      rpi value, thus doesn't detect that it has been unreg'd already.  The
      replaced rpi value is then used when accessing the rpi bitmask array which
      tracks active rpi values.  As the LPFC_RPI_ALLOC_ERROR value is not a valid
      index for the bitmask, it may fault the system.
      
      Revise the rpi release code to detect when the rpi value is the replaced
      RPI_ALLOC_ERROR value and ignore further release steps.
      
      Link: https://lore.kernel.org/r/20191105005708.7399-2-jsmart2021@gmail.comSigned-off-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
      Signed-off-by: default avatarJames Smart <jsmart2021@gmail.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c7f4e4db
    • Bart Van Assche's avatar
      scsi: tracing: Fix handling of TRANSFER LENGTH == 0 for READ(6) and WRITE(6) · 41e2db93
      Bart Van Assche authored
      [ Upstream commit f6b8540f ]
      
      According to SBC-2 a TRANSFER LENGTH field of zero means that 256 logical
      blocks must be transferred. Make the SCSI tracing code follow SBC-2.
      
      Fixes: bf816235 ("[SCSI] add scsi trace core functions and put trace points")
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Hannes Reinecke <hare@suse.com>
      Cc: Douglas Gilbert <dgilbert@interlog.com>
      Link: https://lore.kernel.org/r/20191105215553.185018-1-bvanassche@acm.orgSigned-off-by: default avatarBart Van Assche <bvanassche@acm.org>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      41e2db93
    • Jan Kara's avatar
      jbd2: Fix statistics for the number of logged blocks · 90244f0d
      Jan Kara authored
      [ Upstream commit 015c6033 ]
      
      jbd2 statistics counting number of blocks logged in a transaction was
      wrong. It didn't count the commit block and more importantly it didn't
      count revoke descriptor blocks. Make sure these get properly counted.
      Reviewed-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Signed-off-by: default avatarJan Kara <jack@suse.cz>
      Link: https://lore.kernel.org/r/20191105164437.32602-13-jack@suse.czSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      90244f0d
    • Aneesh Kumar K.V's avatar
      powerpc/book3s64/hash: Add cond_resched to avoid soft lockup warning · d12ceedc
      Aneesh Kumar K.V authored
      [ Upstream commit 16f6b67c ]
      
      With large memory (8TB and more) hotplug, we can get soft lockup
      warnings as below. These were caused by a long loop without any
      explicit cond_resched which is a problem for !PREEMPT kernels.
      
      Avoid this using cond_resched() while inserting hash page table
      entries. We already do similar cond_resched() in __add_pages(), see
      commit f64ac5e6 ("mm, memory_hotplug: add scheduling point to
      __add_pages").
      
        rcu:     3-....: (24002 ticks this GP) idle=13e/1/0x4000000000000002 softirq=722/722 fqs=12001
         (t=24003 jiffies g=4285 q=2002)
        NMI backtrace for cpu 3
        CPU: 3 PID: 3870 Comm: ndctl Not tainted 5.3.0-197.18-default+ #2
        Call Trace:
          dump_stack+0xb0/0xf4 (unreliable)
          nmi_cpu_backtrace+0x124/0x130
          nmi_trigger_cpumask_backtrace+0x1ac/0x1f0
          arch_trigger_cpumask_backtrace+0x28/0x3c
          rcu_dump_cpu_stacks+0xf8/0x154
          rcu_sched_clock_irq+0x878/0xb40
          update_process_times+0x48/0x90
          tick_sched_handle.isra.16+0x4c/0x80
          tick_sched_timer+0x68/0xe0
          __hrtimer_run_queues+0x180/0x430
          hrtimer_interrupt+0x110/0x300
          timer_interrupt+0x108/0x2f0
          decrementer_common+0x114/0x120
        --- interrupt: 901 at arch_add_memory+0xc0/0x130
            LR = arch_add_memory+0x74/0x130
          memremap_pages+0x494/0x650
          devm_memremap_pages+0x3c/0xa0
          pmem_attach_disk+0x188/0x750
          nvdimm_bus_probe+0xac/0x2c0
          really_probe+0x148/0x570
          driver_probe_device+0x19c/0x1d0
          device_driver_attach+0xcc/0x100
          bind_store+0x134/0x1c0
          drv_attr_store+0x44/0x60
          sysfs_kf_write+0x64/0x90
          kernfs_fop_write+0x1a0/0x270
          __vfs_write+0x3c/0x70
          vfs_write+0xd0/0x260
          ksys_write+0xdc/0x130
          system_call+0x5c/0x68
      Signed-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20191001084656.31277-1-aneesh.kumar@linux.ibm.comSigned-off-by: default avatarSasha Levin <sashal@kernel.org>
      d12ceedc
    • Anthony Steinhauser's avatar
      powerpc/security/book3s64: Report L1TF status in sysfs · cb4bbe25
      Anthony Steinhauser authored
      [ Upstream commit 8e6b6da9 ]
      
      Some PowerPC CPUs are vulnerable to L1TF to the same extent as to
      Meltdown. It is also mitigated by flushing the L1D on privilege
      transition.
      
      Currently the sysfs gives a false negative on L1TF on CPUs that I
      verified to be vulnerable, a Power9 Talos II Boston 004e 1202, PowerNV
      T2P9D01.
      Signed-off-by: default avatarAnthony Steinhauser <asteinhauser@google.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      [mpe: Just have cpu_show_l1tf() call cpu_show_meltdown() directly]
      Link: https://lore.kernel.org/r/20191029190759.84821-1-asteinhauser@google.comSigned-off-by: default avatarSasha Levin <sashal@kernel.org>
      cb4bbe25
    • Chuhong Yuan's avatar
      clocksource/drivers/asm9260: Add a check for of_clk_get · f56519e9
      Chuhong Yuan authored
      [ Upstream commit 6e001f6a ]
      
      asm9260_timer_init misses a check for of_clk_get.
      Add a check for it and print errors like other clocksource drivers.
      Signed-off-by: default avatarChuhong Yuan <hslester96@gmail.com>
      Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
      Link: https://lore.kernel.org/r/20191016124330.22211-1-hslester96@gmail.comSigned-off-by: default avatarSasha Levin <sashal@kernel.org>
      f56519e9
    • Eric Dumazet's avatar
      dma-debug: add a schedule point in debug_dma_dump_mappings() · bbed8ffa
      Eric Dumazet authored
      [ Upstream commit 9ff6aa02 ]
      
      debug_dma_dump_mappings() can take a lot of cpu cycles :
      
      lpk43:/# time wc -l /sys/kernel/debug/dma-api/dump
      163435 /sys/kernel/debug/dma-api/dump
      
      real	0m0.463s
      user	0m0.003s
      sys	0m0.459s
      
      Let's add a cond_resched() to avoid holding cpu for too long.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Cc: Corentin Labbe <clabbe@baylibre.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Marek Szyprowski <m.szyprowski@samsung.com>
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      bbed8ffa