1. 22 Jul, 2020 24 commits
    • Vineet Gupta's avatar
      ARC: entry: fix potential EFA clobber when TIF_SYSCALL_TRACE · 1815979b
      Vineet Gupta authored
      commit 00fdec98 upstream.
      
      Trap handler for syscall tracing reads EFA (Exception Fault Address),
      in case strace wants PC of trap instruction (EFA is not part of pt_regs
      as of current code).
      
      However this EFA read is racy as it happens after dropping to pure
      kernel mode (re-enabling interrupts). A taken interrupt could
      context-switch, trigger a different task's trap, clobbering EFA for this
      execution context.
      
      Fix this by reading EFA early, before re-enabling interrupts. A slight
      side benefit is de-duplication of FAKE_RET_FROM_EXCPN in trap handler.
      The trap handler is common to both ARCompact and ARCv2 builds too.
      
      This just came out of code rework/review and no real problem was reported
      but is clearly a potential problem specially for strace.
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1815979b
    • Tom Rix's avatar
      drm/radeon: fix double free · a2e46b84
      Tom Rix authored
      commit 41855a89 upstream.
      
      clang static analysis flags this error
      
      drivers/gpu/drm/radeon/ci_dpm.c:5652:9: warning: Use of memory after it is freed [unix.Malloc]
                      kfree(rdev->pm.dpm.ps[i].ps_priv);
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/gpu/drm/radeon/ci_dpm.c:5654:2: warning: Attempt to free released memory [unix.Malloc]
              kfree(rdev->pm.dpm.ps);
              ^~~~~~~~~~~~~~~~~~~~~~
      
      problem is reported in ci_dpm_fini, with these code blocks.
      
      	for (i = 0; i < rdev->pm.dpm.num_ps; i++) {
      		kfree(rdev->pm.dpm.ps[i].ps_priv);
      	}
      	kfree(rdev->pm.dpm.ps);
      
      The first free happens in ci_parse_power_table where it cleans up locally
      on a failure.  ci_dpm_fini also does a cleanup.
      
      	ret = ci_parse_power_table(rdev);
      	if (ret) {
      		ci_dpm_fini(rdev);
      		return ret;
      	}
      
      So remove the cleanup in ci_parse_power_table and
      move the num_ps calculation to inside the loop so ci_dpm_fini
      will know how many array elements to free.
      
      Fixes: cc8dbbb4 ("drm/radeon: add dpm support for CI dGPUs (v2)")
      Signed-off-by: default avatarTom Rix <trix@redhat.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a2e46b84
    • Boris Burkov's avatar
      btrfs: fix fatal extent_buffer readahead vs releasepage race · 4940999d
      Boris Burkov authored
      commit 6bf9cd2e upstream.
      
      Under somewhat convoluted conditions, it is possible to attempt to
      release an extent_buffer that is under io, which triggers a BUG_ON in
      btrfs_release_extent_buffer_pages.
      
      This relies on a few different factors. First, extent_buffer reads done
      as readahead for searching use WAIT_NONE, so they free the local extent
      buffer reference while the io is outstanding. However, they should still
      be protected by TREE_REF. However, if the system is doing signficant
      reclaim, and simultaneously heavily accessing the extent_buffers, it is
      possible for releasepage to race with two concurrent readahead attempts
      in a way that leaves TREE_REF unset when the readahead extent buffer is
      released.
      
      Essentially, if two tasks race to allocate a new extent_buffer, but the
      winner who attempts the first io is rebuffed by a page being locked
      (likely by the reclaim itself) then the loser will still go ahead with
      issuing the readahead. The loser's call to find_extent_buffer must also
      race with the reclaim task reading the extent_buffer's refcount as 1 in
      a way that allows the reclaim to re-clear the TREE_REF checked by
      find_extent_buffer.
      
      The following represents an example execution demonstrating the race:
      
                  CPU0                                                         CPU1                                           CPU2
      reada_for_search                                            reada_for_search
        readahead_tree_block                                        readahead_tree_block
          find_create_tree_block                                      find_create_tree_block
            alloc_extent_buffer                                         alloc_extent_buffer
                                                                        find_extent_buffer // not found
                                                                        allocates eb
                                                                        lock pages
                                                                        associate pages to eb
                                                                        insert eb into radix tree
                                                                        set TREE_REF, refs == 2
                                                                        unlock pages
                                                                    read_extent_buffer_pages // WAIT_NONE
                                                                      not uptodate (brand new eb)
                                                                                                                  lock_page
                                                                      if !trylock_page
                                                                        goto unlock_exit // not an error
                                                                    free_extent_buffer
                                                                      release_extent_buffer
                                                                        atomic_dec_and_test refs to 1
              find_extent_buffer // found
                                                                                                                  try_release_extent_buffer
                                                                                                                    take refs_lock
                                                                                                                    reads refs == 1; no io
                atomic_inc_not_zero refs to 2
                mark_buffer_accessed
                  check_buffer_tree_ref
                    // not STALE, won't take refs_lock
                    refs == 2; TREE_REF set // no action
          read_extent_buffer_pages // WAIT_NONE
                                                                                                                    clear TREE_REF
                                                                                                                    release_extent_buffer
                                                                                                                      atomic_dec_and_test refs to 1
                                                                                                                      unlock_page
            still not uptodate (CPU1 read failed on trylock_page)
            locks pages
            set io_pages > 0
            submit io
            return
          free_extent_buffer
            release_extent_buffer
              dec refs to 0
              delete from radix tree
              btrfs_release_extent_buffer_pages
                BUG_ON(io_pages > 0)!!!
      
      We observe this at a very low rate in production and were also able to
      reproduce it in a test environment by introducing some spurious delays
      and by introducing probabilistic trylock_page failures.
      
      To fix it, we apply check_tree_ref at a point where it could not
      possibly be unset by a competing task: after io_pages has been
      incremented. All the codepaths that clear TREE_REF check for io, so they
      would not be able to clear it after this point until the io is done.
      
      Stack trace, for reference:
      [1417839.424739] ------------[ cut here ]------------
      [1417839.435328] kernel BUG at fs/btrfs/extent_io.c:4841!
      [1417839.447024] invalid opcode: 0000 [#1] SMP
      [1417839.502972] RIP: 0010:btrfs_release_extent_buffer_pages+0x20/0x1f0
      [1417839.517008] Code: ed e9 ...
      [1417839.558895] RSP: 0018:ffffc90020bcf798 EFLAGS: 00010202
      [1417839.570816] RAX: 0000000000000002 RBX: ffff888102d6def0 RCX: 0000000000000028
      [1417839.586962] RDX: 0000000000000002 RSI: ffff8887f0296482 RDI: ffff888102d6def0
      [1417839.603108] RBP: ffff88885664a000 R08: 0000000000000046 R09: 0000000000000238
      [1417839.619255] R10: 0000000000000028 R11: ffff88885664af68 R12: 0000000000000000
      [1417839.635402] R13: 0000000000000000 R14: ffff88875f573ad0 R15: ffff888797aafd90
      [1417839.651549] FS:  00007f5a844fa700(0000) GS:ffff88885f680000(0000) knlGS:0000000000000000
      [1417839.669810] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [1417839.682887] CR2: 00007f7884541fe0 CR3: 000000049f609002 CR4: 00000000003606e0
      [1417839.699037] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [1417839.715187] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [1417839.731320] Call Trace:
      [1417839.737103]  release_extent_buffer+0x39/0x90
      [1417839.746913]  read_block_for_search.isra.38+0x2a3/0x370
      [1417839.758645]  btrfs_search_slot+0x260/0x9b0
      [1417839.768054]  btrfs_lookup_file_extent+0x4a/0x70
      [1417839.778427]  btrfs_get_extent+0x15f/0x830
      [1417839.787665]  ? submit_extent_page+0xc4/0x1c0
      [1417839.797474]  ? __do_readpage+0x299/0x7a0
      [1417839.806515]  __do_readpage+0x33b/0x7a0
      [1417839.815171]  ? btrfs_releasepage+0x70/0x70
      [1417839.824597]  extent_readpages+0x28f/0x400
      [1417839.833836]  read_pages+0x6a/0x1c0
      [1417839.841729]  ? startup_64+0x2/0x30
      [1417839.849624]  __do_page_cache_readahead+0x13c/0x1a0
      [1417839.860590]  filemap_fault+0x6c7/0x990
      [1417839.869252]  ? xas_load+0x8/0x80
      [1417839.876756]  ? xas_find+0x150/0x190
      [1417839.884839]  ? filemap_map_pages+0x295/0x3b0
      [1417839.894652]  __do_fault+0x32/0x110
      [1417839.902540]  __handle_mm_fault+0xacd/0x1000
      [1417839.912156]  handle_mm_fault+0xaa/0x1c0
      [1417839.921004]  __do_page_fault+0x242/0x4b0
      [1417839.930044]  ? page_fault+0x8/0x30
      [1417839.937933]  page_fault+0x1e/0x30
      [1417839.945631] RIP: 0033:0x33c4bae
      [1417839.952927] Code: Bad RIP value.
      [1417839.960411] RSP: 002b:00007f5a844f7350 EFLAGS: 00010206
      [1417839.972331] RAX: 000000000000006e RBX: 1614b3ff6a50398a RCX: 0000000000000000
      [1417839.988477] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000002
      [1417840.004626] RBP: 00007f5a844f7420 R08: 000000000000006e R09: 00007f5a94aeccb8
      [1417840.020784] R10: 00007f5a844f7350 R11: 0000000000000000 R12: 00007f5a94aecc79
      [1417840.036932] R13: 00007f5a94aecc78 R14: 00007f5a94aecc90 R15: 00007f5a94aecc40
      
      CC: stable@vger.kernel.org # 4.4+
      Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
      Signed-off-by: default avatarBoris Burkov <boris@bur.io>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4940999d
    • Greg Kroah-Hartman's avatar
      Revert "ath9k: Fix general protection fault in ath9k_hif_usb_rx_cb" · 612edf97
      Greg Kroah-Hartman authored
      This reverts commit 5317abc4 which is
      commit 2bbcaaee upstream.
      
      It is being reverted upstream, just hasn't made it there yet and is
      causing lots of problems.
      Reported-by: default avatarHans de Goede <hdegoede@redhat.com>
      Cc: Qiujun Huang <hqjagain@gmail.com>
      Cc: Kalle Valo <kvalo@codeaurora.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      612edf97
    • Paolo Bonzini's avatar
      KVM: x86: bit 8 of non-leaf PDPEs is not reserved · 9dc33e69
      Paolo Bonzini authored
      commit 5ecad245 upstream.
      
      Bit 8 would be the "global" bit, which does not quite make sense for non-leaf
      page table entries.  Intel ignores it; AMD ignores it in PDEs and PDPEs, but
      reserves it in PML4Es.
      
      Probably, earlier versions of the AMD manual documented it as reserved in PDPEs
      as well, and that behavior made it into KVM as well as kvm-unit-tests; fix it.
      
      Cc: stable@vger.kernel.org
      Reported-by: default avatarNadav Amit <namit@vmware.com>
      Fixes: a0c0feb5 ("KVM: x86: reserve bit 8 of non-leaf PDPEs and PML4Es in 64-bit mode on AMD", 2014-09-03)
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9dc33e69
    • Will Deacon's avatar
      KVM: arm64: Fix definition of PAGE_HYP_DEVICE · db3ad21c
      Will Deacon authored
      commit 68cf6173 upstream.
      
      PAGE_HYP_DEVICE is intended to encode attribute bits for an EL2 stage-1
      pte mapping a device. Unfortunately, it includes PROT_DEVICE_nGnRE which
      encodes attributes for EL1 stage-1 mappings such as UXN and nG, which are
      RES0 for EL2, and DBM which is meaningless as TCR_EL2.HD is not set.
      
      Fix the definition of PAGE_HYP_DEVICE so that it doesn't set RES0 bits
      at EL2.
      Acked-by: default avatarMarc Zyngier <maz@kernel.org>
      Cc: Marc Zyngier <maz@kernel.org>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: James Morse <james.morse@arm.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20200708162546.26176-1-will@kernel.orgSigned-off-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      db3ad21c
    • Hector Martin's avatar
      ALSA: usb-audio: add quirk for MacroSilicon MS2109 · 02d84f6e
      Hector Martin authored
      commit e337bf19 upstream.
      
      These devices claim to be 96kHz mono, but actually are 48kHz stereo with
      swapped channels and unaligned transfers.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarHector Martin <marcan@marcan.st>
      Link: https://lore.kernel.org/r/20200702071433.237843-1-marcan@marcan.stSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      02d84f6e
    • Hui Wang's avatar
      ALSA: hda - let hs_mic be picked ahead of hp_mic · e8fa9b9d
      Hui Wang authored
      commit 6a6ca788 upstream.
      
      We have a Dell AIO, there is neither internal speaker nor internal
      mic, only a multi-function audio jack on it.
      
      Users reported that after freshly installing the OS and plug
      a headset to the audio jack, the headset can't output sound. I
      reproduced this bug, at that moment, the Input Source is as below:
      Simple mixer control 'Input Source',0
        Capabilities: cenum
        Items: 'Headphone Mic' 'Headset Mic'
        Item0: 'Headphone Mic'
      
      That is because the patch_realtek will set this audio jack as mic_in
      mode if Input Source's value is hp_mic.
      
      If it is not fresh installing, this issue will not happen since the
      systemd will run alsactl restore -f /var/lib/alsa/asound.state, this
      will set the 'Input Source' according to history value.
      
      If there is internal speaker or internal mic, this issue will not
      happen since there is valid sink/source in the pulseaudio, the PA will
      set the 'Input Source' according to active_port.
      
      To fix this issue, change the parser function to let the hs_mic be
      stored ahead of hp_mic.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarHui Wang <hui.wang@canonical.com>
      Link: https://lore.kernel.org/r/20200625083833.11264-1-hui.wang@canonical.comSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e8fa9b9d
    • xidongwang's avatar
      ALSA: opl3: fix infoleak in opl3 · af48a55d
      xidongwang authored
      commit ad155712 upstream.
      
      The stack object “info” in snd_opl3_ioctl() has a leaking problem.
      It has 2 padding bytes which are not initialized and leaked via
      “copy_to_user”.
      Signed-off-by: default avatarxidongwang <wangxidong_97@163.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/1594006058-30362-1-git-send-email-wangxidong_97@163.comSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      af48a55d
    • Nicolas Ferre's avatar
      net: macb: mark device wake capable when "magic-packet" property present · 0e253b4c
      Nicolas Ferre authored
      [ Upstream commit ced4799d ]
      
      Change the way the "magic-packet" DT property is handled in the
      macb_probe() function, matching DT binding documentation.
      Now we mark the device as "wakeup capable" instead of calling the
      device_init_wakeup() function that would enable the wakeup source.
      
      For Ethernet WoL, enabling the wakeup_source is done by
      using ethtool and associated macb_set_wol() function that
      already calls device_set_wakeup_enable() for this purpose.
      
      That would reduce power consumption by cutting more clocks if
      "magic-packet" property is set but WoL is not configured by ethtool.
      
      Fixes: 3e2a5e15 ("net: macb: add wake-on-lan support via magic packet")
      Cc: Claudiu Beznea <claudiu.beznea@microchip.com>
      Cc: Harini Katakam <harini.katakam@xilinx.com>
      Cc: Sergio Prado <sergio.prado@e-labworks.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarNicolas Ferre <nicolas.ferre@microchip.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0e253b4c
    • Davide Caratti's avatar
      bnxt_en: fix NULL dereference in case SR-IOV configuration fails · 4d32785c
      Davide Caratti authored
      [ Upstream commit c8b1d743 ]
      
      we need to set 'active_vfs' back to 0, if something goes wrong during the
      allocation of SR-IOV resources: otherwise, further VF configurations will
      wrongly assume that bp->pf.vf[x] are valid memory locations, and commands
      like the ones in the following sequence:
      
       # echo 2 >/sys/bus/pci/devices/${ADDR}/sriov_numvfs
       # ip link set dev ens1f0np0 up
       # ip link set dev ens1f0np0 vf 0 trust on
      
      will cause a kernel crash similar to this:
      
       bnxt_en 0000:3b:00.0: not enough MMIO resources for SR-IOV
       BUG: kernel NULL pointer dereference, address: 0000000000000014
       #PF: supervisor read access in kernel mode
       #PF: error_code(0x0000) - not-present page
       PGD 0 P4D 0
       Oops: 0000 [#1] SMP PTI
       CPU: 43 PID: 2059 Comm: ip Tainted: G          I       5.8.0-rc2.upstream+ #871
       Hardware name: Dell Inc. PowerEdge R740/08D89F, BIOS 2.2.11 06/13/2019
       RIP: 0010:bnxt_set_vf_trust+0x5b/0x110 [bnxt_en]
       Code: 44 24 58 31 c0 e8 f5 fb ff ff 85 c0 0f 85 b6 00 00 00 48 8d 1c 5b 41 89 c6 b9 0b 00 00 00 48 c1 e3 04 49 03 9c 24 f0 0e 00 00 <8b> 43 14 89 c2 83 c8 10 83 e2 ef 45 84 ed 49 89 e5 0f 44 c2 4c 89
       RSP: 0018:ffffac6246a1f570 EFLAGS: 00010246
       RAX: 0000000000000000 RBX: 0000000000000000 RCX: 000000000000000b
       RDX: 0000000000000001 RSI: 0000000000000000 RDI: ffff98b28f538900
       RBP: ffff98b28f538900 R08: 0000000000000000 R09: 0000000000000008
       R10: ffffffffb9515be0 R11: ffffac6246a1f678 R12: ffff98b28f538000
       R13: 0000000000000001 R14: 0000000000000000 R15: ffffffffc05451e0
       FS:  00007fde0f688800(0000) GS:ffff98baffd40000(0000) knlGS:0000000000000000
       CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       CR2: 0000000000000014 CR3: 000000104bb0a003 CR4: 00000000007606e0
       DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
       DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
       PKRU: 55555554
       Call Trace:
        do_setlink+0x994/0xfe0
        __rtnl_newlink+0x544/0x8d0
        rtnl_newlink+0x47/0x70
        rtnetlink_rcv_msg+0x29f/0x350
        netlink_rcv_skb+0x4a/0x110
        netlink_unicast+0x21d/0x300
        netlink_sendmsg+0x329/0x450
        sock_sendmsg+0x5b/0x60
        ____sys_sendmsg+0x204/0x280
        ___sys_sendmsg+0x88/0xd0
        __sys_sendmsg+0x5e/0xa0
        do_syscall_64+0x47/0x80
        entry_SYSCALL_64_after_hwframe+0x44/0xa9
      
      Fixes: c0c050c5 ("bnxt_en: New Broadcom ethernet driver.")
      Reported-by: default avatarFei Liu <feliu@redhat.com>
      CC: Jonathan Toppins <jtoppins@redhat.com>
      CC: Michael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavide Caratti <dcaratti@redhat.com>
      Reviewed-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Acked-by: default avatarJonathan Toppins <jtoppins@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      4d32785c
    • Wei Li's avatar
      arm64: kgdb: Fix single-step exception handling oops · e01a5af4
      Wei Li authored
      [ Upstream commit 8523c006 ]
      
      After entering kdb due to breakpoint, when we execute 'ss' or 'go' (will
      delay installing breakpoints, do single-step first), it won't work
      correctly, and it will enter kdb due to oops.
      
      It's because the reason gotten in kdb_stub() is not as expected, and it
      seems that the ex_vector for single-step should be 0, like what arch
      powerpc/sh/parisc has implemented.
      
      Before the patch:
      Entering kdb (current=0xffff8000119e2dc0, pid 0) on processor 0 due to Keyboard Entry
      [0]kdb> bp printk
      Instruction(i) BP #0 at 0xffff8000101486cc (printk)
          is enabled   addr at ffff8000101486cc, hardtype=0 installed=0
      
      [0]kdb> g
      
      / # echo h > /proc/sysrq-trigger
      
      Entering kdb (current=0xffff0000fa878040, pid 266) on processor 3 due to Breakpoint @ 0xffff8000101486cc
      [3]kdb> ss
      
      Entering kdb (current=0xffff0000fa878040, pid 266) on processor 3 Oops: (null)
      due to oops @ 0xffff800010082ab8
      CPU: 3 PID: 266 Comm: sh Not tainted 5.7.0-rc4-13839-gf0e5ad491718 #6
      Hardware name: linux,dummy-virt (DT)
      pstate: 00000085 (nzcv daIf -PAN -UAO)
      pc : el1_irq+0x78/0x180
      lr : __handle_sysrq+0x80/0x190
      sp : ffff800015003bf0
      x29: ffff800015003d20 x28: ffff0000fa878040
      x27: 0000000000000000 x26: ffff80001126b1f0
      x25: ffff800011b6a0d8 x24: 0000000000000000
      x23: 0000000080200005 x22: ffff8000101486cc
      x21: ffff800015003d30 x20: 0000ffffffffffff
      x19: ffff8000119f2000 x18: 0000000000000000
      x17: 0000000000000000 x16: 0000000000000000
      x15: 0000000000000000 x14: 0000000000000000
      x13: 0000000000000000 x12: 0000000000000000
      x11: 0000000000000000 x10: 0000000000000000
      x9 : 0000000000000000 x8 : ffff800015003e50
      x7 : 0000000000000002 x6 : 00000000380b9990
      x5 : ffff8000106e99e8 x4 : ffff0000fadd83c0
      x3 : 0000ffffffffffff x2 : ffff800011b6a0d8
      x1 : ffff800011b6a000 x0 : ffff80001130c9d8
      Call trace:
       el1_irq+0x78/0x180
       printk+0x0/0x84
       write_sysrq_trigger+0xb0/0x118
       proc_reg_write+0xb4/0xe0
       __vfs_write+0x18/0x40
       vfs_write+0xb0/0x1b8
       ksys_write+0x64/0xf0
       __arm64_sys_write+0x14/0x20
       el0_svc_common.constprop.2+0xb0/0x168
       do_el0_svc+0x20/0x98
       el0_sync_handler+0xec/0x1a8
       el0_sync+0x140/0x180
      
      [3]kdb>
      
      After the patch:
      Entering kdb (current=0xffff8000119e2dc0, pid 0) on processor 0 due to Keyboard Entry
      [0]kdb> bp printk
      Instruction(i) BP #0 at 0xffff8000101486cc (printk)
          is enabled   addr at ffff8000101486cc, hardtype=0 installed=0
      
      [0]kdb> g
      
      / # echo h > /proc/sysrq-trigger
      
      Entering kdb (current=0xffff0000fa852bc0, pid 268) on processor 0 due to Breakpoint @ 0xffff8000101486cc
      [0]kdb> g
      
      Entering kdb (current=0xffff0000fa852bc0, pid 268) on processor 0 due to Breakpoint @ 0xffff8000101486cc
      [0]kdb> ss
      
      Entering kdb (current=0xffff0000fa852bc0, pid 268) on processor 0 due to SS trap @ 0xffff800010082ab8
      [0]kdb>
      
      Fixes: 44679a4f ("arm64: KGDB: Add step debugging support")
      Signed-off-by: default avatarWei Li <liwei391@huawei.com>
      Tested-by: default avatarDouglas Anderson <dianders@chromium.org>
      Reviewed-by: default avatarDouglas Anderson <dianders@chromium.org>
      Link: https://lore.kernel.org/r/20200509214159.19680-2-liwei391@huawei.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e01a5af4
    • Vinod Koul's avatar
      ALSA: compress: fix partial_drain completion state · 1709c333
      Vinod Koul authored
      [ Upstream commit f79a732a ]
      
      On partial_drain completion we should be in SNDRV_PCM_STATE_RUNNING
      state, so set that for partially draining streams in
      snd_compr_drain_notify() and use a flag for partially draining streams
      
      While at it, add locks for stream state change in
      snd_compr_drain_notify() as well.
      
      Fixes: f44f2a54 ("ALSA: compress: fix drain calls blocking other compress functions (v6)")
      Reviewed-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
      Tested-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
      Reviewed-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
      Tested-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
      Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
      Link: https://lore.kernel.org/r/20200629134737.105993-4-vkoul@kernel.orgSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1709c333
    • Andre Edich's avatar
      smsc95xx: avoid memory leak in smsc95xx_bind · 1f813584
      Andre Edich authored
      [ Upstream commit 3ed58f96 ]
      
      In a case where the ID_REV register read is failed, the memory for a
      private data structure has to be freed before returning error from the
      function smsc95xx_bind.
      
      Fixes: bbd9f9ee ("smsc95xx: add wol support for more frame types")
      Signed-off-by: default avatarAndre Edich <andre.edich@microchip.com>
      Signed-off-by: default avatarParthiban Veerasooran <Parthiban.Veerasooran@microchip.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1f813584
    • Andre Edich's avatar
      smsc95xx: check return value of smsc95xx_reset · dc524e40
      Andre Edich authored
      [ Upstream commit 7c8b1e85 ]
      
      The return value of the function smsc95xx_reset() must be checked
      to avoid returning false success from the function smsc95xx_bind().
      
      Fixes: 2f7ca802 ("net: Add SMSC LAN9500 USB2.0 10/100 ethernet adapter driver")
      Signed-off-by: default avatarAndre Edich <andre.edich@microchip.com>
      Signed-off-by: default avatarParthiban Veerasooran <Parthiban.Veerasooran@microchip.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      dc524e40
    • Li Heng's avatar
      net: cxgb4: fix return error value in t4_prep_fw · 0740535e
      Li Heng authored
      [ Upstream commit 8a259e6b ]
      
      t4_prep_fw goto bye tag with positive return value when something
      bad happened and which can not free resource in adap_init0.
      so fix it to return negative value.
      
      Fixes: 16e47624 ("cxgb4: Add new scheme to update T4/T5 firmware")
      Reported-by: default avatarHulk Robot <hulkci@huawei.com>
      Signed-off-by: default avatarLi Heng <liheng40@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0740535e
    • Tomas Henzl's avatar
      scsi: mptscsih: Fix read sense data size · c94e289e
      Tomas Henzl authored
      [ Upstream commit afe89f11 ]
      
      The sense data buffer in sense_buf_pool is allocated with size of
      MPT_SENSE_BUFFER_ALLOC(64) (multiplied by req_depth) while SNS_LEN(sc)(96)
      is used when reading the data.  That may lead to a read from unallocated
      area, sometimes from another (unallocated) page.  To fix this, limit the
      read size to MPT_SENSE_BUFFER_ALLOC.
      
      Link: https://lore.kernel.org/r/20200616150446.4840-1-thenzl@redhat.comCo-developed-by: default avatarStanislav Saner <ssaner@redhat.com>
      Signed-off-by: default avatarStanislav Saner <ssaner@redhat.com>
      Signed-off-by: default avatarTomas Henzl <thenzl@redhat.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c94e289e
    • yu kuai's avatar
      ARM: imx6: add missing put_device() call in imx6q_suspend_init() · 99cec863
      yu kuai authored
      [ Upstream commit 48454460 ]
      
      if of_find_device_by_node() succeed, imx6q_suspend_init() doesn't have a
      corresponding put_device(). Thus add a jump target to fix the exception
      handling for this function implementation.
      Signed-off-by: default avataryu kuai <yukuai3@huawei.com>
      Signed-off-by: default avatarShawn Guo <shawnguo@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      99cec863
    • Zhang Xiaoxu's avatar
      cifs: update ctime and mtime during truncate · bf9b3fbe
      Zhang Xiaoxu authored
      [ Upstream commit 5618303d ]
      
      As the man description of the truncate, if the size changed,
      then the st_ctime and st_mtime fields should be updated. But
      in cifs, we doesn't do it.
      
      It lead the xfstests generic/313 failed.
      
      So, add the ATTR_MTIME|ATTR_CTIME flags on attrs when change
      the file size
      Reported-by: default avatarHulk Robot <hulkci@huawei.com>
      Signed-off-by: default avatarZhang Xiaoxu <zhangxiaoxu5@huawei.com>
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      bf9b3fbe
    • Vasily Gorbik's avatar
      s390/kasan: fix early pgm check handler execution · 5e68e090
      Vasily Gorbik authored
      [ Upstream commit 998f5bbe ]
      
      Currently if early_pgm_check_handler is called it ends up in pgm check
      loop. The problem is that early_pgm_check_handler is instrumented by
      KASAN but executed without DAT flag enabled which leads to addressing
      exception when KASAN checks try to access shadow memory.
      
      Fix that by executing early handlers with DAT flag on under KASAN as
      expected.
      Reported-and-tested-by: default avatarAlexander Egorenkov <egorenar@linux.ibm.com>
      Reviewed-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
      Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5e68e090
    • Zhenzhong Duan's avatar
      spi: spidev: fix a potential use-after-free in spidev_release() · 94029934
      Zhenzhong Duan authored
      [ Upstream commit 06096cc6 ]
      
      If an spi device is unbounded from the driver before the release
      process, there will be an NULL pointer reference when it's
      referenced in spi_slave_abort().
      
      Fix it by checking it's already freed before reference.
      Signed-off-by: default avatarZhenzhong Duan <zhenzhong.duan@gmail.com>
      Link: https://lore.kernel.org/r/20200618032125.4650-2-zhenzhong.duan@gmail.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      94029934
    • Zhenzhong Duan's avatar
      spi: spidev: fix a race between spidev_release and spidev_remove · 652b11ac
      Zhenzhong Duan authored
      [ Upstream commit abd42781 ]
      
      Imagine below scene, spidev is referenced after it's freed.
      
      spidev_release()                spidev_remove()
      ...
                                      spin_lock_irq(&spidev->spi_lock);
                                          spidev->spi = NULL;
                                      spin_unlock_irq(&spidev->spi_lock);
      mutex_lock(&device_list_lock);
      dofree = (spidev->spi == NULL);
      if (dofree)
          kfree(spidev);
      mutex_unlock(&device_list_lock);
                                      mutex_lock(&device_list_lock);
                                      list_del(&spidev->device_entry);
                                      device_destroy(spidev_class, spidev->devt);
                                      clear_bit(MINOR(spidev->devt), minors);
                                      if (spidev->users == 0)
                                          kfree(spidev);
                                      mutex_unlock(&device_list_lock);
      
      Fix it by resetting spidev->spi in device_list_lock's protection.
      Signed-off-by: default avatarZhenzhong Duan <zhenzhong.duan@gmail.com>
      Link: https://lore.kernel.org/r/20200618032125.4650-1-zhenzhong.duan@gmail.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      652b11ac
    • Thierry Reding's avatar
      gpu: host1x: Detach driver on unregister · ec1cc298
      Thierry Reding authored
      [ Upstream commit d9a0a05b ]
      
      Currently when a host1x device driver is unregistered, it is not
      detached from the host1x controller, which means that the device
      will stay around and when the driver is registered again, it may
      bind to the old, stale device rather than the new one that was
      created from scratch upon driver registration. This in turn can
      cause various weird crashes within the driver core because it is
      confronted with a device that was already deleted.
      
      Fix this by detaching the driver from the host1x controller when
      it is unregistered. This ensures that the deleted device also is
      no longer present in the device list that drivers will bind to.
      Reported-by: default avatarSowjanya Komatineni <skomatineni@nvidia.com>
      Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
      Tested-by: default avatarSowjanya Komatineni <skomatineni@nvidia.com>
      Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ec1cc298
    • Christian Borntraeger's avatar
      KVM: s390: reduce number of IO pins to 1 · 982e1dcb
      Christian Borntraeger authored
      [ Upstream commit 77491129 ]
      
      The current number of KVM_IRQCHIP_NUM_PINS results in an order 3
      allocation (32kb) for each guest start/restart. This can result in OOM
      killer activity even with free swap when the memory is fragmented
      enough:
      
      kernel: qemu-system-s39 invoked oom-killer: gfp_mask=0x440dc0(GFP_KERNEL_ACCOUNT|__GFP_COMP|__GFP_ZERO), order=3, oom_score_adj=0
      kernel: CPU: 1 PID: 357274 Comm: qemu-system-s39 Kdump: loaded Not tainted 5.4.0-29-generic #33-Ubuntu
      kernel: Hardware name: IBM 8562 T02 Z06 (LPAR)
      kernel: Call Trace:
      kernel: ([<00000001f848fe2a>] show_stack+0x7a/0xc0)
      kernel:  [<00000001f8d3437a>] dump_stack+0x8a/0xc0
      kernel:  [<00000001f8687032>] dump_header+0x62/0x258
      kernel:  [<00000001f8686122>] oom_kill_process+0x172/0x180
      kernel:  [<00000001f8686abe>] out_of_memory+0xee/0x580
      kernel:  [<00000001f86e66b8>] __alloc_pages_slowpath+0xd18/0xe90
      kernel:  [<00000001f86e6ad4>] __alloc_pages_nodemask+0x2a4/0x320
      kernel:  [<00000001f86b1ab4>] kmalloc_order+0x34/0xb0
      kernel:  [<00000001f86b1b62>] kmalloc_order_trace+0x32/0xe0
      kernel:  [<00000001f84bb806>] kvm_set_irq_routing+0xa6/0x2e0
      kernel:  [<00000001f84c99a4>] kvm_arch_vm_ioctl+0x544/0x9e0
      kernel:  [<00000001f84b8936>] kvm_vm_ioctl+0x396/0x760
      kernel:  [<00000001f875df66>] do_vfs_ioctl+0x376/0x690
      kernel:  [<00000001f875e304>] ksys_ioctl+0x84/0xb0
      kernel:  [<00000001f875e39a>] __s390x_sys_ioctl+0x2a/0x40
      kernel:  [<00000001f8d55424>] system_call+0xd8/0x2c8
      
      As far as I can tell s390x does not use the iopins as we bail our for
      anything other than KVM_IRQ_ROUTING_S390_ADAPTER and the chip/pin is
      only used for KVM_IRQ_ROUTING_IRQCHIP. So let us use a small number to
      reduce the memory footprint.
      Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
      Reviewed-by: default avatarCornelia Huck <cohuck@redhat.com>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Link: https://lore.kernel.org/r/20200617083620.5409-1-borntraeger@de.ibm.comSigned-off-by: default avatarSasha Levin <sashal@kernel.org>
      982e1dcb
  2. 09 Jul, 2020 16 commits