Skip to content
  1. Jul 22, 2020
    • Sabrina Dubroca's avatar
      ipv4: fill fl4_icmp_{type,code} in ping_v4_sendmsg · 82f75d0a
      Sabrina Dubroca authored
      [ Upstream commit 5eff0690 ]
      
      IPv4 ping sockets don't set fl4.fl4_icmp_{type,code}, which leads to
      incomplete IPsec ACQUIRE messages being sent to userspace. Currently,
      both raw sockets and IPv6 ping sockets set those fields.
      
      Expected output of "ip xfrm monitor":
          acquire proto esp
            sel src 10.0.2.15/32 dst 8.8.8.8/32 proto icmp type 8 code 0 dev ens4
            policy src 10.0.2.15/32 dst 8.8.8.8/32
              <snip>
      
      Currently with ping sockets:
          acquire proto esp
            sel src 10.0.2.15/32 dst 8.8.8.8/32 proto icmp type 0 code 0 dev ens4
            policy src 10.0.2.15/32 dst 8.8.8.8/32
              <snip>
      
      The Libreswan test suite found this problem after Fedora changed the
      value for the sysctl net.ipv4.ping_group_range.
      
      Fixes: c319b4d7
      
       ("net: ipv4: add IPPROTO_ICMP socket kind")
      Reported-by: default avatarPaul Wouters <pwouters@redhat.com>
      Tested-by: default avatarPaul Wouters <pwouters@redhat.com>
      Signed-off-by: default avatarSabrina Dubroca <sd@queasysnail.net>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      82f75d0a
    • Davide Caratti's avatar
      bnxt_en: fix NULL dereference in case SR-IOV configuration fails · 5709cb27
      Davide Caratti authored
      commit c8b1d743 upstream.
      
      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 avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5709cb27
    • Vineet Gupta's avatar
      ARC: elf: use right ELF_ARCH · 42de40ac
      Vineet Gupta authored
      commit b7faf971
      
       upstream.
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      42de40ac
    • Vineet Gupta's avatar
      ARC: entry: fix potential EFA clobber when TIF_SYSCALL_TRACE · 58022159
      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>
      58022159
    • Tom Rix's avatar
      drm/radeon: fix double free · 11a65b03
      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>
      11a65b03
    • Boris Burkov's avatar
      btrfs: fix fatal extent_buffer readahead vs releasepage race · d707433a
      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>
      d707433a
    • Greg Kroah-Hartman's avatar
      Revert "ath9k: Fix general protection fault in ath9k_hif_usb_rx_cb" · e27a1e3d
      Greg Kroah-Hartman authored
      This reverts commit 90ecba9f 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>
      e27a1e3d
    • Paolo Bonzini's avatar
      KVM: x86: bit 8 of non-leaf PDPEs is not reserved · 22ae5be6
      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>
      22ae5be6
    • Hector Martin's avatar
      ALSA: usb-audio: add quirk for MacroSilicon MS2109 · 9272ce27
      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.st
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9272ce27
    • Hui Wang's avatar
      ALSA: hda - let hs_mic be picked ahead of hp_mic · 4b377ba6
      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.com
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4b377ba6
    • xidongwang's avatar
      ALSA: opl3: fix infoleak in opl3 · 231cfc1c
      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.com
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      231cfc1c
    • Wei Li's avatar
      arm64: kgdb: Fix single-step exception handling oops · ad013eb1
      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.com
      
      
      Signed-off-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ad013eb1
    • Vinod Koul's avatar
      ALSA: compress: fix partial_drain completion state · d3a30993
      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.org
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d3a30993
    • Andre Edich's avatar
      smsc95xx: avoid memory leak in smsc95xx_bind · e41001c7
      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>
      e41001c7
    • Andre Edich's avatar
      smsc95xx: check return value of smsc95xx_reset · 1bced00f
      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>
      1bced00f
    • Li Heng's avatar
      net: cxgb4: fix return error value in t4_prep_fw · 815f9846
      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>
      815f9846
    • Tomas Henzl's avatar
      scsi: mptscsih: Fix read sense data size · a6a396f1
      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.com
      
      
      Co-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>
      a6a396f1
    • Zhenzhong Duan's avatar
      spi: spidev: fix a potential use-after-free in spidev_release() · 35d6f9af
      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.com
      
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      35d6f9af
    • Zhenzhong Duan's avatar
      spi: spidev: fix a race between spidev_release and spidev_remove · d8c47532
      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.com
      
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d8c47532
    • Christian Borntraeger's avatar
      KVM: s390: reduce number of IO pins to 1 · 8977f55e
      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.com
      
      
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8977f55e
  2. Jul 09, 2020
    • Greg Kroah-Hartman's avatar
      Linux 4.4.230 · 665a4578
      Greg Kroah-Hartman authored
      v4.4.230
      665a4578
    • Vasily Averin's avatar
      netfilter: nf_conntrack_h323: lost .data_len definition for Q.931/ipv6 · 555fb309
      Vasily Averin authored
      Could you please push this patch into stable@?
      it fixes memory corruption in kernels  v3.5 .. v4.10
      
      Lost .data_len definition leads to write beyond end of
      struct nf_ct_h323_master. Usually it corrupts following
      struct nf_conn_nat, however if nat is not loaded it corrupts
      following slab object.
      
      In mainline this problem went away in v4.11,
      after commit 9f0f3ebe ("netfilter: helpers: remove data_len usage
      for inkernel helpers") however many stable kernels are still affected.
      
      Fixes: 1afc5679
      
       ("netfilter: nf_ct_helper: implement variable length helper private data") # v3.5
      cc: stable@vger.kernel.org
      Reviewed-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarVasily Averin <vvs@virtuozzo.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      555fb309
    • Hauke Mehrtens's avatar
      MIPS: Add missing EHB in mtc0 -> mfc0 sequence for DSPen · 7d04fcf7
      Hauke Mehrtens authored
      commit fcec538e upstream.
      
      This resolves the hazard between the mtc0 in the change_c0_status() and
      the mfc0 in configure_exception_vector(). Without resolving this hazard
      configure_exception_vector() could read an old value and would restore
      this old value again. This would revert the changes change_c0_status()
      did. I checked this by printing out the read_c0_status() at the end of
      per_cpu_trap_init() and the ST0_MX is not set without this patch.
      
      The hazard is documented in the MIPS Architecture Reference Manual Vol.
      III: MIPS32/microMIPS32 Privileged Resource Architecture (MD00088), rev
      6.03 table 8.1 which includes:
      
         Producer | Consumer | Hazard
        ----------|----------|----------------------------
         mtc0     | mfc0     | any coprocessor 0 register
      
      I saw this hazard on an Atheros AR9344 rev 2 SoC with a MIPS 74Kc CPU.
      There the change_c0_status() function would activate the DSPen by
      setting ST0_MX in the c0_status register. This was reverted and then the
      system got a DSP exception when the DSP registers were saved in
      save_dsp() in the first process switch. The crash looks like this:
      
      [    0.089999] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
      [    0.097796] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
      [    0.107070] Kernel panic - not syncing: Unexpected DSP exception
      [    0.113470] Rebooting in 1 seconds..
      
      We saw this problem in OpenWrt only on the MIPS 74Kc based Atheros SoCs,
      not on the 24Kc based SoCs. We only saw it with kernel 5.4 not with
      kernel 4.19, in addition we had to use GCC 8.4 or 9.X, with GCC 8.3 it
      did not happen.
      
      In the kernel I bisected this problem to commit 9012d011 ("compiler:
      allow all arches to enable CONFIG_OPTIMIZE_INLINING"), but when this was
      reverted it also happened after commit 172dcd93 ("MIPS: Always
      allocate exception vector for MIPSr2+").
      
      Commit 0b24cae4
      
       ("MIPS: Add missing EHB in mtc0 -> mfc0 sequence.")
      does similar changes to a different file. I am not sure if there are
      more places affected by this problem.
      
      Signed-off-by: default avatarHauke Mehrtens <hauke@hauke-m.de>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarThomas Bogendoerfer <tsbogend@alpha.franken.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7d04fcf7
    • Zhang Xiaoxu's avatar
      cifs: Fix the target file was deleted when rename failed. · 3fe62ca7
      Zhang Xiaoxu authored
      commit 9ffad926
      
       upstream.
      
      When xfstest generic/035, we found the target file was deleted
      if the rename return -EACESS.
      
      In cifs_rename2, we unlink the positive target dentry if rename
      failed with EACESS or EEXIST, even if the target dentry is positived
      before rename. Then the existing file was deleted.
      
      We should just delete the target file which created during the
      rename.
      
      Reported-by: default avatarHulk Robot <hulkci@huawei.com>
      Signed-off-by: default avatarZhang Xiaoxu <zhangxiaoxu5@huawei.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      Reviewed-by: default avatarAurelien Aptel <aaptel@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3fe62ca7
    • Paul Aurich's avatar
      SMB3: Honor persistent/resilient handle flags for multiuser mounts · 45999d78
      Paul Aurich authored
      commit 00dfbc2f
      
       upstream.
      
      Without this:
      
      - persistent handles will only be enabled for per-user tcons if the
        server advertises the 'Continuous Availabity' capability
      - resilient handles would never be enabled for per-user tcons
      
      Signed-off-by: default avatarPaul Aurich <paul@darkrain42.org>
      CC: Stable <stable@vger.kernel.org>
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      Reviewed-by: default avatarAurelien Aptel <aaptel@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      45999d78
    • Paul Aurich's avatar
      SMB3: Honor 'seal' flag for multiuser mounts · b2ae3acc
      Paul Aurich authored
      commit cc15461c
      
       upstream.
      
      Ensure multiuser SMB3 mounts use encryption for all users' tcons if the
      mount options are configured to require encryption. Without this, only
      the primary tcon and IPC tcons are guaranteed to be encrypted. Per-user
      tcons would only be encrypted if the server was configured to require
      encryption.
      
      Signed-off-by: default avatarPaul Aurich <paul@darkrain42.org>
      CC: Stable <stable@vger.kernel.org>
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      Reviewed-by: default avatarAurelien Aptel <aaptel@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b2ae3acc
    • Greg Kroah-Hartman's avatar
      Revert "ALSA: usb-audio: Improve frames size computation" · 480a1490
      Greg Kroah-Hartman authored
      This reverts commit 02c56650 which is
      commit f0bd62b6
      
       upstream.
      
      It causes a number of reported issues and a fix for it has not hit
      Linus's tree yet.  Revert this to resolve those problems.
      
      Cc: Alexander Tsoy <alexander@tsoy.me>
      Cc: Takashi Iwai <tiwai@suse.de>
      Cc: Sasha Levin <sashal@kernel.org>
      Cc: Hans de Goede <jwrdegoede@fedoraproject.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      480a1490
    • Chris Packham's avatar
      i2c: algo-pca: Add 0x78 as SCL stuck low status for PCA9665 · 900a2823
      Chris Packham authored
      [ Upstream commit cd217f23 ]
      
      The PCA9665 datasheet says that I2CSTA = 78h indicates that SCL is stuck
      low, this differs to the PCA9564 which uses 90h for this indication.
      Treat either 0x78 or 0x90 as an indication that the SCL line is stuck.
      
      Based on looking through the PCA9564 and PCA9665 datasheets this should
      be safe for both chips. The PCA9564 should not return 0x78 for any valid
      state and the PCA9665 should not return 0x90.
      
      Fixes: eff9ec95
      
       ("i2c-algo-pca: Add PCA9665 support")
      Signed-off-by: default avatarChris Packham <chris.packham@alliedtelesis.co.nz>
      Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      900a2823
    • Hou Tao's avatar
      virtio-blk: free vblk-vqs in error path of virtblk_probe() · a0988f8f
      Hou Tao authored
      [ Upstream commit e7eea44e ]
      
      Else there will be memory leak if alloc_disk() fails.
      
      Fixes: 6a27b656
      
       ("block: virtio-blk: support multi virt queues per virtio-blk device")
      Signed-off-by: default avatarHou Tao <houtao1@huawei.com>
      Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
      Reviewed-by: default avatarMing Lei <ming.lei@redhat.com>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a0988f8f
    • Misono Tomohiro's avatar
      hwmon: (acpi_power_meter) Fix potential memory leak in acpi_power_meter_add() · c9089545
      Misono Tomohiro authored
      [ Upstream commit 8b97f992 ]
      
      Although it rarely happens, we should call free_capabilities()
      if error happens after read_capabilities() to free allocated strings.
      
      Fixes: de584afa
      
       ("hwmon driver for ACPI 4.0 power meters")
      Signed-off-by: default avatarMisono Tomohiro <misono.tomohiro@jp.fujitsu.com>
      Link: https://lore.kernel.org/r/20200625043242.31175-1-misono.tomohiro@jp.fujitsu.com
      
      
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c9089545
    • Chu Lin's avatar
      hwmon: (max6697) Make sure the OVERT mask is set correctly · ec511068
      Chu Lin authored
      [ Upstream commit 016983d1 ]
      
      Per the datasheet for max6697, OVERT mask and ALERT mask are different.
      For example, the 7th bit of OVERT is the local channel but for alert
      mask, the 6th bit is the local channel. Therefore, we can't apply the
      same mask for both registers. In addition to that, the max6697 driver
      is supposed to be compatibale with different models. I manually went over
      all the listed chips and made sure all chip types have the same layout.
      
      Testing;
          mask value of 0x9 should map to 0x44 for ALERT and 0x84 for OVERT.
          I used iotool to read the reg value back to verify. I only tested this
          change on max6581.
      
      Reference:
      https://datasheets.maximintegrated.com/en/ds/MAX6581.pdf
      https://datasheets.maximintegrated.com/en/ds/MAX6697.pdf
      https://datasheets.maximintegrated.com/en/ds/MAX6699.pdf
      
      
      
      Signed-off-by: default avatarChu Lin <linchuyuan@google.com>
      Fixes: 5372d2d7
      
       ("hwmon: Driver for Maxim MAX6697 and compatibles")
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ec511068
    • Shile Zhang's avatar
      sched/rt: Show the 'sched_rr_timeslice' SCHED_RR timeslice tuning knob in milliseconds · e9bc62b1
      Shile Zhang authored
      [ Upstream commit 975e155e ]
      
      We added the 'sched_rr_timeslice_ms' SCHED_RR tuning knob in this commit:
      
        ce0dbbbb
      
       ("sched/rt: Add a tuning knob to allow changing SCHED_RR timeslice")
      
      ... which name suggests to users that it's in milliseconds, while in reality
      it's being set in milliseconds but the result is shown in jiffies.
      
      This is obviously confusing when HZ is not 1000, it makes it appear like the
      value set failed, such as HZ=100:
      
        root# echo 100 > /proc/sys/kernel/sched_rr_timeslice_ms
        root# cat /proc/sys/kernel/sched_rr_timeslice_ms
        10
      
      Fix this to be milliseconds all around.
      
      Signed-off-by: default avatarShile Zhang <shile.zhang@nokia.com>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/1485612049-20923-1-git-send-email-shile.zhang@nokia.com
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e9bc62b1
    • Herbert Xu's avatar
      crypto: af_alg - fix use-after-free in af_alg_accept() due to bh_lock_sock() · fba0d6b2
      Herbert Xu authored
      commit 34c86f4c upstream.
      
      The locking in af_alg_release_parent is broken as the BH socket
      lock can only be taken if there is a code-path to handle the case
      where the lock is owned by process-context.  Instead of adding
      such handling, we can fix this by changing the ref counts to
      atomic_t.
      
      This patch also modifies the main refcnt to include both normal
      and nokey sockets.  This way we don't have to fudge the nokey
      ref count when a socket changes from nokey to normal.
      
      Credits go to Mauricio Faria de Oliveira who diagnosed this bug
      and sent a patch for it:
      
      https://lore.kernel.org/linux-crypto/20200605161657.535043-1-mfo@canonical.com/
      
      
      
      Reported-by: default avatarBrian Moyles <bmoyles@netflix.com>
      Reported-by: default avatarMauricio Faria de Oliveira <mfo@canonical.com>
      Fixes: 37f96694
      
       ("crypto: af_alg - Use bh_lock_sock in...")
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fba0d6b2
    • Douglas Anderson's avatar
      kgdb: Avoid suspicious RCU usage warning · 2339cc69
      Douglas Anderson authored
      [ Upstream commit 440ab9e1
      
       ]
      
      At times when I'm using kgdb I see a splat on my console about
      suspicious RCU usage.  I managed to come up with a case that could
      reproduce this that looked like this:
      
        WARNING: suspicious RCU usage
        5.7.0-rc4+ #609 Not tainted
        -----------------------------
        kernel/pid.c:395 find_task_by_pid_ns() needs rcu_read_lock() protection!
      
        other info that might help us debug this:
      
          rcu_scheduler_active = 2, debug_locks = 1
        3 locks held by swapper/0/1:
         #0: ffffff81b6b8e988 (&dev->mutex){....}-{3:3}, at: __device_attach+0x40/0x13c
         #1: ffffffd01109e9e8 (dbg_master_lock){....}-{2:2}, at: kgdb_cpu_enter+0x20c/0x7ac
         #2: ffffffd01109ea90 (dbg_slave_lock){....}-{2:2}, at: kgdb_cpu_enter+0x3ec/0x7ac
      
        stack backtrace:
        CPU: 7 PID: 1 Comm: swapper/0 Not tainted 5.7.0-rc4+ #609
        Hardware name: Google Cheza (rev3+) (DT)
        Call trace:
         dump_backtrace+0x0/0x1b8
         show_stack+0x1c/0x24
         dump_stack+0xd4/0x134
         lockdep_rcu_suspicious+0xf0/0x100
         find_task_by_pid_ns+0x5c/0x80
         getthread+0x8c/0xb0
         gdb_serial_stub+0x9d4/0xd04
         kgdb_cpu_enter+0x284/0x7ac
         kgdb_handle_exception+0x174/0x20c
         kgdb_brk_fn+0x24/0x30
         call_break_hook+0x6c/0x7c
         brk_handler+0x20/0x5c
         do_debug_exception+0x1c8/0x22c
         el1_sync_handler+0x3c/0xe4
         el1_sync+0x7c/0x100
         rpmh_rsc_probe+0x38/0x420
         platform_drv_probe+0x94/0xb4
         really_probe+0x134/0x300
         driver_probe_device+0x68/0x100
         __device_attach_driver+0x90/0xa8
         bus_for_each_drv+0x84/0xcc
         __device_attach+0xb4/0x13c
         device_initial_probe+0x18/0x20
         bus_probe_device+0x38/0x98
         device_add+0x38c/0x420
      
      If I understand properly we should just be able to blanket kgdb under
      one big RCU read lock and the problem should go away.  We'll add it to
      the beast-of-a-function known as kgdb_cpu_enter().
      
      With this I no longer get any splats and things seem to work fine.
      
      Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
      Link: https://lore.kernel.org/r/20200602154729.v2.1.I70e0d4fd46d5ed2aaf0c98a355e8e1b7a5bb7e4e@changeid
      
      
      Signed-off-by: default avatarDaniel Thompson <daniel.thompson@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2339cc69
    • Zqiang's avatar
      usb: usbtest: fix missing kfree(dev->buf) in usbtest_disconnect · 831eebad
      Zqiang authored
      [ Upstream commit 28ebeb8d
      
       ]
      
      BUG: memory leak
      unreferenced object 0xffff888055046e00 (size 256):
        comm "kworker/2:9", pid 2570, jiffies 4294942129 (age 1095.500s)
        hex dump (first 32 bytes):
          00 70 04 55 80 88 ff ff 18 bb 5a 81 ff ff ff ff  .p.U......Z.....
          f5 96 78 81 ff ff ff ff 37 de 8e 81 ff ff ff ff  ..x.....7.......
        backtrace:
          [<00000000d121dccf>] kmemleak_alloc_recursive
      include/linux/kmemleak.h:43 [inline]
          [<00000000d121dccf>] slab_post_alloc_hook mm/slab.h:586 [inline]
          [<00000000d121dccf>] slab_alloc_node mm/slub.c:2786 [inline]
          [<00000000d121dccf>] slab_alloc mm/slub.c:2794 [inline]
          [<00000000d121dccf>] kmem_cache_alloc_trace+0x15e/0x2d0 mm/slub.c:2811
          [<000000005c3c3381>] kmalloc include/linux/slab.h:555 [inline]
          [<000000005c3c3381>] usbtest_probe+0x286/0x19d0
      drivers/usb/misc/usbtest.c:2790
          [<000000001cec6910>] usb_probe_interface+0x2bd/0x870
      drivers/usb/core/driver.c:361
          [<000000007806c118>] really_probe+0x48d/0x8f0 drivers/base/dd.c:551
          [<00000000a3308c3e>] driver_probe_device+0xfc/0x2a0 drivers/base/dd.c:724
          [<000000003ef66004>] __device_attach_driver+0x1b6/0x240
      drivers/base/dd.c:831
          [<00000000eee53e97>] bus_for_each_drv+0x14e/0x1e0 drivers/base/bus.c:431
          [<00000000bb0648d0>] __device_attach+0x1f9/0x350 drivers/base/dd.c:897
          [<00000000838b324a>] device_initial_probe+0x1a/0x20 drivers/base/dd.c:944
          [<0000000030d501c1>] bus_probe_device+0x1e1/0x280 drivers/base/bus.c:491
          [<000000005bd7adef>] device_add+0x131d/0x1c40 drivers/base/core.c:2504
          [<00000000a0937814>] usb_set_configuration+0xe84/0x1ab0
      drivers/usb/core/message.c:2030
          [<00000000e3934741>] generic_probe+0x6a/0xe0 drivers/usb/core/generic.c:210
          [<0000000098ade0f1>] usb_probe_device+0x90/0xd0
      drivers/usb/core/driver.c:266
          [<000000007806c118>] really_probe+0x48d/0x8f0 drivers/base/dd.c:551
          [<00000000a3308c3e>] driver_probe_device+0xfc/0x2a0 drivers/base/dd.c:724
      
      Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Reported-by: default avatarKyungtae Kim <kt0755@gmail.com>
      Signed-off-by: default avatarZqiang <qiang.zhang@windriver.com>
      Link: https://lore.kernel.org/r/20200612035210.20494-1-qiang.zhang@windriver.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      831eebad
    • Qian Cai's avatar
      mm/slub: fix stack overruns with SLUB_STATS · 7eddb34d
      Qian Cai authored
      [ Upstream commit a68ee057 ]
      
      There is no need to copy SLUB_STATS items from root memcg cache to new
      memcg cache copies.  Doing so could result in stack overruns because the
      store function only accepts 0 to clear the stat and returns an error for
      everything else while the show method would print out the whole stat.
      
      Then, the mismatch of the lengths returns from show and store methods
      happens in memcg_propagate_slab_attrs():
      
      	else if (root_cache->max_attr_size < ARRAY_SIZE(mbuf))
      		buf = mbuf;
      
      max_attr_size is only 2 from slab_attr_store(), then, it uses mbuf[64]
      in show_stat() later where a bounch of sprintf() would overrun the stack
      variable.  Fix it by always allocating a page of buffer to be used in
      show_stat() if SLUB_STATS=y which should only be used for debug purpose.
      
        # echo 1 > /sys/kernel/slab/fs_cache/shrink
        BUG: KASAN: stack-out-of-bounds in number+0x421/0x6e0
        Write of size 1 at addr ffffc900256cfde0 by task kworker/76:0/53251
      
        Hardware name: HPE ProLiant DL385 Gen10/ProLiant DL385 Gen10, BIOS A40 07/10/2019
        Workqueue: memcg_kmem_cache memcg_kmem_cache_create_func
        Call Trace:
          number+0x421/0x6e0
          vsnprintf+0x451/0x8e0
          sprintf+0x9e/0xd0
          show_stat+0x124/0x1d0
          alloc_slowpath_show+0x13/0x20
          __kmem_cache_create+0x47a/0x6b0
      
        addr ffffc900256cfde0 is located in stack of task kworker/76:0/53251 at offset 0 in frame:
         process_one_work+0x0/0xb90
      
        this frame has 1 object:
         [32, 72) 'lockdep_map'
      
        Memory state around the buggy address:
         ffffc900256cfc80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
         ffffc900256cfd00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        >ffffc900256cfd80: 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1
                                                               ^
         ffffc900256cfe00: 00 00 00 00 00 f2 f2 f2 00 00 00 00 00 00 00 00
         ffffc900256cfe80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        ==================================================================
        Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: __kmem_cache_create+0x6ac/0x6b0
        Workqueue: memcg_kmem_cache memcg_kmem_cache_create_func
        Call Trace:
          __kmem_cache_create+0x6ac/0x6b0
      
      Fixes: 107dab5c
      
       ("slub: slub-specific propagation changes")
      Signed-off-by: default avatarQian Cai <cai@lca.pw>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Glauber Costa <glauber@scylladb.com>
      Cc: Christoph Lameter <cl@linux.com>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
      Link: http://lkml.kernel.org/r/20200429222356.4322-1-cai@lca.pw
      
      
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7eddb34d
    • Borislav Petkov's avatar
      EDAC/amd64: Read back the scrub rate PCI register on F15h · e9db4c6d
      Borislav Petkov authored
      [ Upstream commit ee470bb2 ]
      
      Commit:
      
        da92110d ("EDAC, amd64_edac: Extend scrub rate support to F15hM60h")
      
      added support for F15h, model 0x60 CPUs but in doing so, missed to read
      back SCRCTRL PCI config register on F15h CPUs which are *not* model
      0x60. Add that read so that doing
      
        $ cat /sys/devices/system/edac/mc/mc0/sdram_scrub_rate
      
      can show the previously set DRAM scrub rate.
      
      Fixes: da92110d
      
       ("EDAC, amd64_edac: Extend scrub rate support to F15hM60h")
      Reported-by: default avatarAnders Andersson <pipatron@gmail.com>
      Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
      Cc: <stable@vger.kernel.org> #v4.4..
      Link: https://lkml.kernel.org/r/CAKkunMbNWppx_i6xSdDHLseA2QQmGJqj_crY=NF-GZML5np4Vw@mail.gmail.com
      
      
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e9db4c6d
    • Hugh Dickins's avatar
      mm: fix swap cache node allocation mask · 6c83e22f
      Hugh Dickins authored
      [ Upstream commit 243bce09 ]
      
      Chris Murphy reports that a slightly overcommitted load, testing swap
      and zram along with i915, splats and keeps on splatting, when it had
      better fail less noisily:
      
        gnome-shell: page allocation failure: order:0,
        mode:0x400d0(__GFP_IO|__GFP_FS|__GFP_COMP|__GFP_RECLAIMABLE),
        nodemask=(null),cpuset=/,mems_allowed=0
        CPU: 2 PID: 1155 Comm: gnome-shell Not tainted 5.7.0-1.fc33.x86_64 #1
        Call Trace:
          dump_stack+0x64/0x88
          warn_alloc.cold+0x75/0xd9
          __alloc_pages_slowpath.constprop.0+0xcfa/0xd30
          __alloc_pages_nodemask+0x2df/0x320
          alloc_slab_page+0x195/0x310
          allocate_slab+0x3c5/0x440
          ___slab_alloc+0x40c/0x5f0
          __slab_alloc+0x1c/0x30
          kmem_cache_alloc+0x20e/0x220
          xas_nomem+0x28/0x70
          add_to_swap_cache+0x321/0x400
          __read_swap_cache_async+0x105/0x240
          swap_cluster_readahead+0x22c/0x2e0
          shmem_swapin+0x8e/0xc0
          shmem_swapin_page+0x196/0x740
          shmem_getpage_gfp+0x3a2/0xa60
          shmem_read_mapping_page_gfp+0x32/0x60
          shmem_get_pages+0x155/0x5e0 [i915]
          __i915_gem_object_get_pages+0x68/0xa0 [i915]
          i915_vma_pin+0x3fe/0x6c0 [i915]
          eb_add_vma+0x10b/0x2c0 [i915]
          i915_gem_do_execbuffer+0x704/0x3430 [i915]
          i915_gem_execbuffer2_ioctl+0x1ea/0x3e0 [i915]
          drm_ioctl_kernel+0x86/0xd0 [drm]
          drm_ioctl+0x206/0x390 [drm]
          ksys_ioctl+0x82/0xc0
          __x64_sys_ioctl+0x16/0x20
          do_syscall_64+0x5b/0xf0
          entry_SYSCALL_64_after_hwframe+0x44/0xa9
      
      Reported on 5.7, but it goes back really to 3.1: when
      shmem_read_mapping_page_gfp() was implemented for use by i915, and
      allowed for __GFP_NORETRY and __GFP_NOWARN flags in most places, but
      missed swapin's "& GFP_KERNEL" mask for page tree node allocation in
      __read_swap_cache_async() - that was to mask off HIGHUSER_MOVABLE bits
      from what page cache uses, but GFP_RECLAIM_MASK is now what's needed.
      
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=208085
      Link: http://lkml.kernel.org/r/alpine.LSU.2.11.2006151330070.11064@eggly.anvils
      Fixes: 68da9f05
      
       ("tmpfs: pass gfp to shmem_getpage_gfp")
      Signed-off-by: default avatarHugh Dickins <hughd@google.com>
      Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Reviewed-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Reported-by: default avatarChris Murphy <lists@colorremedies.com>
      Analyzed-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Analyzed-by: default avatarMatthew Wilcox <willy@infradead.org>
      Tested-by: default avatarChris Murphy <lists@colorremedies.com>
      Cc: <stable@vger.kernel.org>	[3.1+]
      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>
      6c83e22f
    • Filipe Manana's avatar
      btrfs: fix data block group relocation failure due to concurrent scrub · a861adc7
      Filipe Manana authored
      [ Upstream commit 432cd2a1
      
       ]
      
      When running relocation of a data block group while scrub is running in
      parallel, it is possible that the relocation will fail and abort the
      current transaction with an -EINVAL error:
      
         [134243.988595] BTRFS info (device sdc): found 14 extents, stage: move data extents
         [134243.999871] ------------[ cut here ]------------
         [134244.000741] BTRFS: Transaction aborted (error -22)
         [134244.001692] WARNING: CPU: 0 PID: 26954 at fs/btrfs/ctree.c:1071 __btrfs_cow_block+0x6a7/0x790 [btrfs]
         [134244.003380] Modules linked in: btrfs blake2b_generic xor raid6_pq (...)
         [134244.012577] CPU: 0 PID: 26954 Comm: btrfs Tainted: G        W         5.6.0-rc7-btrfs-next-58 #5
         [134244.014162] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-59-gc9ba5276e321-prebuilt.qemu.org 04/01/2014
         [134244.016184] RIP: 0010:__btrfs_cow_block+0x6a7/0x790 [btrfs]
         [134244.017151] Code: 48 c7 c7 (...)
         [134244.020549] RSP: 0018:ffffa41607863888 EFLAGS: 00010286
         [134244.021515] RAX: 0000000000000000 RBX: ffff9614bdfe09c8 RCX: 0000000000000000
         [134244.022822] RDX: 0000000000000001 RSI: ffffffffb3d63980 RDI: 0000000000000001
         [134244.024124] RBP: ffff961589e8c000 R08: 0000000000000000 R09: 0000000000000001
         [134244.025424] R10: ffffffffc0ae5955 R11: 0000000000000000 R12: ffff9614bd530d08
         [134244.026725] R13: ffff9614ced41b88 R14: ffff9614bdfe2a48 R15: 0000000000000000
         [134244.028024] FS:  00007f29b63c08c0(0000) GS:ffff9615ba600000(0000) knlGS:0000000000000000
         [134244.029491] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
         [134244.030560] CR2: 00007f4eb339b000 CR3: 0000000130d6e006 CR4: 00000000003606f0
         [134244.031997] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
         [134244.033153] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
         [134244.034484] Call Trace:
         [134244.034984]  btrfs_cow_block+0x12b/0x2b0 [btrfs]
         [134244.035859]  do_relocation+0x30b/0x790 [btrfs]
         [134244.036681]  ? do_raw_spin_unlock+0x49/0xc0
         [134244.037460]  ? _raw_spin_unlock+0x29/0x40
         [134244.038235]  relocate_tree_blocks+0x37b/0x730 [btrfs]
         [134244.039245]  relocate_block_group+0x388/0x770 [btrfs]
         [134244.040228]  btrfs_relocate_block_group+0x161/0x2e0 [btrfs]
         [134244.041323]  btrfs_relocate_chunk+0x36/0x110 [btrfs]
         [134244.041345]  btrfs_balance+0xc06/0x1860 [btrfs]
         [134244.043382]  ? btrfs_ioctl_balance+0x27c/0x310 [btrfs]
         [134244.045586]  btrfs_ioctl_balance+0x1ed/0x310 [btrfs]
         [134244.045611]  btrfs_ioctl+0x1880/0x3760 [btrfs]
         [134244.049043]  ? do_raw_spin_unlock+0x49/0xc0
         [134244.049838]  ? _raw_spin_unlock+0x29/0x40
         [134244.050587]  ? __handle_mm_fault+0x11b3/0x14b0
         [134244.051417]  ? ksys_ioctl+0x92/0xb0
         [134244.052070]  ksys_ioctl+0x92/0xb0
         [134244.052701]  ? trace_hardirqs_off_thunk+0x1a/0x1c
         [134244.053511]  __x64_sys_ioctl+0x16/0x20
         [134244.054206]  do_syscall_64+0x5c/0x280
         [134244.054891]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
         [134244.055819] RIP: 0033:0x7f29b51c9dd7
         [134244.056491] Code: 00 00 00 (...)
         [134244.059767] RSP: 002b:00007ffcccc1dd08 EFLAGS: 00000202 ORIG_RAX: 0000000000000010
         [134244.061168] RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 00007f29b51c9dd7
         [134244.062474] RDX: 00007ffcccc1dda0 RSI: 00000000c4009420 RDI: 0000000000000003
         [134244.063771] RBP: 0000000000000003 R08: 00005565cea4b000 R09: 0000000000000000
         [134244.065032] R10: 0000000000000541 R11: 0000000000000202 R12: 00007ffcccc2060a
         [134244.066327] R13: 00007ffcccc1dda0 R14: 0000000000000002 R15: 00007ffcccc1dec0
         [134244.067626] irq event stamp: 0
         [134244.068202] hardirqs last  enabled at (0): [<0000000000000000>] 0x0
         [134244.069351] hardirqs last disabled at (0): [<ffffffffb2abdedf>] copy_process+0x74f/0x2020
         [134244.070909] softirqs last  enabled at (0): [<ffffffffb2abdedf>] copy_process+0x74f/0x2020
         [134244.072392] softirqs last disabled at (0): [<0000000000000000>] 0x0
         [134244.073432] ---[ end trace bd7c03622e0b0a99 ]---
      
      The -EINVAL error comes from the following chain of function calls:
      
        __btrfs_cow_block() <-- aborts the transaction
          btrfs_reloc_cow_block()
            replace_file_extents()
              get_new_location() <-- returns -EINVAL
      
      When relocating a data block group, for each allocated extent of the block
      group, we preallocate another extent (at prealloc_file_extent_cluster()),
      associated with the data relocation inode, and then dirty all its pages.
      These preallocated extents have, and must have, the same size that extents
      from the data block group being relocated have.
      
      Later before we start the relocation stage that updates pointers (bytenr
      field of file extent items) to point to the the new extents, we trigger
      writeback for the data relocation inode. The expectation is that writeback
      will write the pages to the previously preallocated extents, that it
      follows the NOCOW path. That is generally the case, however, if a scrub
      is running it may have turned the block group that contains those extents
      into RO mode, in which case writeback falls back to the COW path.
      
      However in the COW path instead of allocating exactly one extent with the
      expected size, the allocator may end up allocating several smaller extents
      due to free space fragmentation - because we tell it at cow_file_range()
      that the minimum allocation size can match the filesystem's sector size.
      This later breaks the relocation's expectation that an extent associated
      to a file extent item in the data relocation inode has the same size as
      the respective extent pointed by a file extent item in another tree - in
      this case the extent to which the relocation inode poins to is smaller,
      causing relocation.c:get_new_location() to return -EINVAL.
      
      For example, if we are relocating a data block group X that has a logical
      address of X and the block group has an extent allocated at the logical
      address X + 128KiB with a size of 64KiB:
      
      1) At prealloc_file_extent_cluster() we allocate an extent for the data
         relocation inode with a size of 64KiB and associate it to the file
         offset 128KiB (X + 128KiB - X) of the data relocation inode. This
         preallocated extent was allocated at block group Z;
      
      2) A scrub running in parallel turns block group Z into RO mode and
         starts scrubing its extents;
      
      3) Relocation triggers writeback for the data relocation inode;
      
      4) When running delalloc (btrfs_run_delalloc_range()), we try first the
         NOCOW path because the data relocation inode has BTRFS_INODE_PREALLOC
         set in its flags. However, because block group Z is in RO mode, the
         NOCOW path (run_delalloc_nocow()) falls back into the COW path, by
         calling cow_file_range();
      
      5) At cow_file_range(), in the first iteration of the while loop we call
         btrfs_reserve_extent() to allocate a 64KiB extent and pass it a minimum
         allocation size of 4KiB (fs_info->sectorsize). Due to free space
         fragmentation, btrfs_reserve_extent() ends up allocating two extents
         of 32KiB each, each one on a different iteration of that while loop;
      
      6) Writeback of the data relocation inode completes;
      
      7) Relocation proceeds and ends up at relocation.c:replace_file_extents(),
         with a leaf which has a file extent item that points to the data extent
         from block group X, that has a logical address (bytenr) of X + 128KiB
         and a size of 64KiB. Then it calls get_new_location(), which does a
         lookup in the data relocation tree for a file extent item starting at
         offset 128KiB (X + 128KiB - X) and belonging to the data relocation
         inode. It finds a corresponding file extent item, however that item
         points to an extent that has a size of 32KiB, which doesn't match the
         expected size of 64KiB, resuling in -EINVAL being returned from this
         function and propagated up to __btrfs_cow_block(), which aborts the
         current transaction.
      
      To fix this make sure that at cow_file_range() when we call the allocator
      we pass it a minimum allocation size corresponding the desired extent size
      if the inode belongs to the data relocation tree, otherwise pass it the
      filesystem's sector size as the minimum allocation size.
      
      CC: stable@vger.kernel.org # 4.4+
      Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
      Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a861adc7
    • Anand Jain's avatar
      btrfs: cow_file_range() num_bytes and disk_num_bytes are same · 88ec9fe6
      Anand Jain authored
      [ Upstream commit 3752d22f
      
       ]
      
      This patch deletes local variable disk_num_bytes as its value
      is same as num_bytes in the function cow_file_range().
      
      Signed-off-by: default avatarAnand Jain <anand.jain@oracle.com>
      Reviewed-by: default avatarNikolay Borisov <nborisov@suse.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      88ec9fe6