1. 03 6月, 2021 40 次提交
    • S
      smb3: do not attempt multichannel to server which does not support it · 952d0a63
      Steve French 提交于
      stable inclusion
      from stable-5.10.36
      commit d35c4c959eb48c0f14179dbeb28672bdd400b1c9
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 9c2dc11d upstream.
      
      We were ignoring CAP_MULTI_CHANNEL in the server response - if the
      server doesn't support multichannel we should not be attempting it.
      
      See MS-SMB2 section 3.2.5.2
      Reviewed-by: NShyam Prasad N <sprasad@microsoft.com>
      Reviewed-By: NTom Talpey <tom@talpey.com>
      Cc: <stable@vger.kernel.org> # v5.8+
      Signed-off-by: NSteve French <stfrench@microsoft.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      952d0a63
    • S
      smb3: when mounting with multichannel include it in requested capabilities · 5a9940b0
      Steve French 提交于
      stable inclusion
      from stable-5.10.36
      commit 796b8263752890976b8df9692852ec8fcb36549a
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 679971e7 upstream.
      
      In the SMB3/SMB3.1.1 negotiate protocol request, we are supposed to
      advertise CAP_MULTICHANNEL capability when establishing multiple
      channels has been requested by the user doing the mount. See MS-SMB2
      sections 2.2.3 and 3.2.5.2
      
      Without setting it there is some risk that multichannel could fail
      if the server interpreted the field strictly.
      Reviewed-By: NTom Talpey <tom@talpey.com>
      Reviewed-by: NShyam Prasad N <sprasad@microsoft.com>
      Cc: <stable@vger.kernel.org> # v5.8+
      Signed-off-by: NSteve French <stfrench@microsoft.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      5a9940b0
    • L
      Fix misc new gcc warnings · 82a888e2
      Linus Torvalds 提交于
      stable inclusion
      from stable-5.10.36
      commit 54708651bc1e9ee35aef9828ca27e048fd0c0c36
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit e7c6e405 upstream.
      
      It seems like Fedora 34 ends up enabling a few new gcc warnings, notably
      "-Wstringop-overread" and "-Warray-parameter".
      
      Both of them cause what seem to be valid warnings in the kernel, where
      we have array size mismatches in function arguments (that are no longer
      just silently converted to a pointer to element, but actually checked).
      
      This fixes most of the trivial ones, by making the function declaration
      match the function definition, and in the case of intel_pm.c, removing
      the over-specified array size from the argument declaration.
      
      At least one 'stringop-overread' warning remains in the i915 driver, but
      that one doesn't have the same obvious trivial fix, and may or may not
      actually be indicative of a bug.
      
      [ It was a mistake to upgrade one of my machines to Fedora 34 while
        being busy with the merge window, but if this is the extent of the
        compiler upgrade problems, things are better than usual    - Linus ]
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      Cc: Andrey Zhizhikin <andrey.z@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      82a888e2
    • A
      security: commoncap: fix -Wstringop-overread warning · b9e83b77
      Arnd Bergmann 提交于
      stable inclusion
      from stable-5.10.36
      commit f37b9c142e1c1ba475ab000479ba2f86b0be0f00
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 82e5d8cc upstream.
      
      gcc-11 introdces a harmless warning for cap_inode_getsecurity:
      
      security/commoncap.c: In function ‘cap_inode_getsecurity’:
      security/commoncap.c:440:33: error: ‘memcpy’ reading 16 bytes from a region of size 0 [-Werror=stringop-overread]
        440 |                                 memcpy(&nscap->data, &cap->data, sizeof(__le32) * 2 * VFS_CAP_U32);
            |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      The problem here is that tmpbuf is initialized to NULL, so gcc assumes
      it is not accessible unless it gets set by vfs_getxattr_alloc().  This is
      a legitimate warning as far as I can tell, but the code is correct since
      it correctly handles the error when that function fails.
      
      Add a separate NULL check to tell gcc about it as well.
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Acked-by: NChristian Brauner <christian.brauner@ubuntu.com>
      Signed-off-by: NJames Morris <jamorris@linux.microsoft.com>
      Cc: Andrey Zhizhikin <andrey.z@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      b9e83b77
    • E
      sfc: farch: fix TX queue lookup in TX event handling · 50cb6559
      Edward Cree 提交于
      stable inclusion
      from stable-5.10.36
      commit bf2b941d0a6f2d3b9f5fa3c4c21bdd54f71ce253
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 83b09a18 upstream.
      
      We're starting from a TXQ label, not a TXQ type, so
       efx_channel_get_tx_queue() is inappropriate (and could return NULL,
       leading to panics).
      
      Fixes: 12804793 ("sfc: decouple TXQ type from label")
      Cc: stable@vger.kernel.org
      Signed-off-by: NEdward Cree <ecree.xilinx@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      50cb6559
    • E
      sfc: farch: fix TX queue lookup in TX flush done handling · 0acdd8cb
      Edward Cree 提交于
      stable inclusion
      from stable-5.10.36
      commit fb791572d6747ef385f628450f8d57cd132e6e5a
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 5b1faa92 upstream.
      
      We're starting from a TXQ instance number ('qid'), not a TXQ type, so
       efx_get_tx_queue() is inappropriate (and could return NULL, leading
       to panics).
      
      Fixes: 12804793 ("sfc: decouple TXQ type from label")
      Reported-by: NTrevor Hemsley <themsley@voiceflex.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: NEdward Cree <ecree.xilinx@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      0acdd8cb
    • H
      exfat: fix erroneous discard when clear cluster bit · 06b83bcd
      Hyeongseok Kim 提交于
      stable inclusion
      from stable-5.10.36
      commit 11e3ff7e164a69b8807a9c1066c1b6adbb6033e1
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 77edfc6e upstream.
      
      If mounted with discard option, exFAT issues discard command when clear
      cluster bit to remove file. But the input parameter of cluster-to-sector
      calculation is abnormally added by reserved cluster size which is 2,
      leading to discard unrelated sectors included in target+2 cluster.
      With fixing this, remove the wrong comments in set/clear/find bitmap
      functions.
      
      Fixes: 1e49a94c ("exfat: add bitmap operations")
      Cc: stable@vger.kernel.org # v5.7+
      Signed-off-by: NHyeongseok Kim <hyeongseok@gmail.com>
      Acked-by: NSungjong Seo <sj1557.seo@samsung.com>
      Signed-off-by: NNamjae Jeon <namjae.jeon@samsung.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      06b83bcd
    • V
      fuse: fix write deadlock · 258c2b71
      Vivek Goyal 提交于
      stable inclusion
      from stable-5.10.36
      commit 1c525c265668176301bac4f152dd49a3c51c7ac6
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 4f06dd92 upstream.
      
      There are two modes for write(2) and friends in fuse:
      
      a) write through (update page cache, send sync WRITE request to userspace)
      
      b) buffered write (update page cache, async writeout later)
      
      The write through method kept all the page cache pages locked that were
      used for the request.  Keeping more than one page locked is deadlock prone
      and Qian Cai demonstrated this with trinity fuzzing.
      
      The reason for keeping the pages locked is that concurrent mapped reads
      shouldn't try to pull possibly stale data into the page cache.
      
      For full page writes, the easy way to fix this is to make the cached page
      be the authoritative source by marking the page PG_uptodate immediately.
      After this the page can be safely unlocked, since mapped/cached reads will
      take the written data from the cache.
      
      Concurrent mapped writes will now cause data in the original WRITE request
      to be updated; this however doesn't cause any data inconsistency and this
      scenario should be exceedingly rare anyway.
      
      If the WRITE request returns with an error in the above case, currently the
      page is not marked uptodate; this means that a concurrent read will always
      read consistent data.  After this patch the page is uptodate between
      writing to the cache and receiving the error: there's window where a cached
      read will read the wrong data.  While theoretically this could be a
      regression, it is unlikely to be one in practice, since this is normal for
      buffered writes.
      
      In case of a partial page write to an already uptodate page the locking is
      also unnecessary, with the above caveats.
      
      Partial write of a not uptodate page still needs to be handled.  One way
      would be to read the complete page before doing the write.  This is not
      possible, since it might break filesystems that don't expect any READ
      requests when the file was opened O_WRONLY.
      
      The other solution is to serialize the synchronous write with reads from
      the partial pages.  The easiest way to do this is to keep the partial pages
      locked.  The problem is that a write() may involve two such pages (one head
      and one tail).  This patch fixes it by only locking the partial tail page.
      If there's a partial head page as well, then split that off as a separate
      WRITE request.
      Reported-by: NQian Cai <cai@lca.pw>
      Link: https://lore.kernel.org/linux-fsdevel/4794a3fa3742a5e84fb0f934944204b55730829b.camel@lca.pw/
      Fixes: ea9b9907 ("fuse: implement perform_write")
      Cc: <stable@vger.kernel.org> # v2.6.26
      Signed-off-by: NVivek Goyal <vgoyal@redhat.com>
      Signed-off-by: NMiklos Szeredi <mszeredi@redhat.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      258c2b71
    • H
      dm raid: fix inconclusive reshape layout on fast raid4/5/6 table reload sequences · 3e997379
      Heinz Mauelshagen 提交于
      stable inclusion
      from stable-5.10.36
      commit 0cd2d2577a982863a65d1f7546771bb6547d92c5
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit f99a8e43 upstream.
      
      If fast table reloads occur during an ongoing reshape of raid4/5/6
      devices the target may race reading a superblock vs the the MD resync
      thread; causing an inconclusive reshape state to be read in its
      constructor.
      
      lvm2 test lvconvert-raid-reshape-stripes-load-reload.sh can cause
      BUG_ON() to trigger in md_run(), e.g.:
      "kernel BUG at drivers/md/raid5.c:7567!".
      
      Scenario triggering the bug:
      
      1. the MD sync thread calls end_reshape() from raid5_sync_request()
         when done reshaping. However end_reshape() _only_ updates the
         reshape position to MaxSector keeping the changed layout
         configuration though (i.e. any delta disks, chunk sector or RAID
         algorithm changes). That inconclusive configuration is stored in
         the superblock.
      
      2. dm-raid constructs a mapping, loading named inconsistent superblock
         as of step 1 before step 3 is able to finish resetting the reshape
         state completely, and calls md_run() which leads to mentioned bug
         in raid5.c.
      
      3. the MD RAID personality's finish_reshape() is called; which resets
         the reshape information on chunk sectors, delta disks, etc. This
         explains why the bug is rarely seen on multi-core machines, as MD's
         finish_reshape() superblock update races with the dm-raid
         constructor's superblock load in step 2.
      
      Fix identifies inconclusive superblock content in the dm-raid
      constructor and resets it before calling md_run(), factoring out
      identifying checks into rs_is_layout_change() to share in existing
      rs_reshape_requested() and new rs_reset_inclonclusive_reshape(). Also
      enhance a comment and remove an empty line.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NHeinz Mauelshagen <heinzm@redhat.com>
      Signed-off-by: NMike Snitzer <snitzer@redhat.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      3e997379
    • P
      md/raid1: properly indicate failure when ending a failed write request · aeefa199
      Paul Clements 提交于
      stable inclusion
      from stable-5.10.36
      commit 661061a45e32d8b2cc0e306da9f169ad44011382
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 2417b986 upstream.
      
      This patch addresses a data corruption bug in raid1 arrays using bitmaps.
      Without this fix, the bitmap bits for the failed I/O end up being cleared.
      
      Since we are in the failure leg of raid1_end_write_request, the request
      either needs to be retried (R1BIO_WriteError) or failed (R1BIO_Degraded).
      
      Fixes: eeba6809 ("md/raid1: end bio when the device faulty")
      Cc: stable@vger.kernel.org # v5.2+
      Signed-off-by: NPaul Clements <paul.clements@us.sios.com>
      Signed-off-by: NSong Liu <song@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      aeefa199
    • E
      crypto: rng - fix crypto_rng_reset() refcounting when !CRYPTO_STATS · d3ab025e
      Eric Biggers 提交于
      stable inclusion
      from stable-5.10.36
      commit 015cc7ad58d08131f46a786ecb0e84cc29ec0c4c
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 30d0f6a9 upstream.
      
      crypto_stats_get() is a no-op when the kernel is compiled without
      CONFIG_CRYPTO_STATS, so pairing it with crypto_alg_put() unconditionally
      (as crypto_rng_reset() does) is wrong.
      
      Fix this by moving the call to crypto_stats_get() to just before the
      actual algorithm operation which might need it.  This makes it always
      paired with crypto_stats_rng_seed().
      
      Fixes: eed74b3e ("crypto: rng - Fix a refcounting bug in crypto_rng_reset()")
      Cc: stable@vger.kernel.org
      Signed-off-by: NEric Biggers <ebiggers@google.com>
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      d3ab025e
    • N
      crypto: arm/curve25519 - Move '.fpu' after '.arch' · 51bcf75b
      Nathan Chancellor 提交于
      stable inclusion
      from stable-5.10.36
      commit 0ba942cbf52b7df88e6a2607a457a0040fa90b07
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 44200f2d upstream.
      
      Debian's clang carries a patch that makes the default FPU mode
      'vfp3-d16' instead of 'neon' for 'armv7-a' to avoid generating NEON
      instructions on hardware that does not support them:
      
      https://salsa.debian.org/pkg-llvm-team/llvm-toolchain/-/raw/5a61ca6f21b4ad8c6ac4970e5ea5a7b5b4486d22/debian/patches/clang-arm-default-vfp3-on-armv7a.patch
      https://bugs.debian.org/841474
      https://bugs.debian.org/842142
      https://bugs.debian.org/914268
      
      This results in the following build error when clang's integrated
      assembler is used because the '.arch' directive overrides the '.fpu'
      directive:
      
      arch/arm/crypto/curve25519-core.S:25:2: error: instruction requires: NEON
       vmov.i32 q0, #1
       ^
      arch/arm/crypto/curve25519-core.S:26:2: error: instruction requires: NEON
       vshr.u64 q1, q0, #7
       ^
      arch/arm/crypto/curve25519-core.S:27:2: error: instruction requires: NEON
       vshr.u64 q0, q0, #8
       ^
      arch/arm/crypto/curve25519-core.S:28:2: error: instruction requires: NEON
       vmov.i32 d4, #19
       ^
      
      Shuffle the order of the '.arch' and '.fpu' directives so that the code
      builds regardless of the default FPU mode. This has been tested against
      both clang with and without Debian's patch and GCC.
      
      Cc: stable@vger.kernel.org
      Fixes: d8f1308a ("crypto: arm/curve25519 - wire up NEON implementation")
      Link: https://github.com/ClangBuiltLinux/continuous-integration2/issues/118Reported-by: NArnd Bergmann <arnd@arndb.de>
      Suggested-by: NArnd Bergmann <arnd@arndb.de>
      Suggested-by: NJessica Clarke <jrtc27@jrtc27.com>
      Signed-off-by: NNathan Chancellor <nathan@kernel.org>
      Acked-by: NJason A. Donenfeld <Jason@zx2c4.com>
      Reviewed-by: NNick Desaulniers <ndesaulniers@google.com>
      Tested-by: NNick Desaulniers <ndesaulniers@google.com>
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      51bcf75b
    • S
      tpm: vtpm_proxy: Avoid reading host log when using a virtual device · ff1bcfbf
      Stefan Berger 提交于
      stable inclusion
      from stable-5.10.36
      commit c9adb76c712ca0434cd9ba59348b861b1d3fa354
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 9716ac65 upstream.
      
      Avoid allocating memory and reading the host log when a virtual device
      is used since this log is of no use to that driver. A virtual
      device can be identified through the flag TPM_CHIP_FLAG_VIRTUAL, which
      is only set for the tpm_vtpm_proxy driver.
      
      Cc: stable@vger.kernel.org
      Fixes: 6f99612e ("tpm: Proxy driver for supporting multiple emulated TPMs")
      Signed-off-by: NStefan Berger <stefanb@linux.ibm.com>
      Reviewed-by: NJarkko Sakkinen <jarkko@kernel.org>
      Signed-off-by: NJarkko Sakkinen <jarkko@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      ff1bcfbf
    • S
      tpm: efi: Use local variable for calculating final log size · 5f25dd70
      Stefan Berger 提交于
      stable inclusion
      from stable-5.10.36
      commit 60a01ecc9f68067e4314a0b55148e39e5d58a51b
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 48cff270 upstream.
      
      When tpm_read_log_efi is called multiple times, which happens when
      one loads and unloads a TPM2 driver multiple times, then the global
      variable efi_tpm_final_log_size will at some point become a negative
      number due to the subtraction of final_events_preboot_size occurring
      each time. Use a local variable to avoid this integer underflow.
      
      The following issue is now resolved:
      
      Mar  8 15:35:12 hibinst kernel: Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
      Mar  8 15:35:12 hibinst kernel: Workqueue: tpm-vtpm vtpm_proxy_work [tpm_vtpm_proxy]
      Mar  8 15:35:12 hibinst kernel: RIP: 0010:__memcpy+0x12/0x20
      Mar  8 15:35:12 hibinst kernel: Code: 00 b8 01 00 00 00 85 d2 74 0a c7 05 44 7b ef 00 0f 00 00 00 c3 cc cc cc 66 66 90 66 90 48 89 f8 48 89 d1 48 c1 e9 03 83 e2 07 <f3> 48 a5 89 d1 f3 a4 c3 66 0f 1f 44 00 00 48 89 f8 48 89 d1 f3 a4
      Mar  8 15:35:12 hibinst kernel: RSP: 0018:ffff9ac4c0fcfde0 EFLAGS: 00010206
      Mar  8 15:35:12 hibinst kernel: RAX: ffff88f878cefed5 RBX: ffff88f878ce9000 RCX: 1ffffffffffffe0f
      Mar  8 15:35:12 hibinst kernel: RDX: 0000000000000003 RSI: ffff9ac4c003bff9 RDI: ffff88f878cf0e4d
      Mar  8 15:35:12 hibinst kernel: RBP: ffff9ac4c003b000 R08: 0000000000001000 R09: 000000007e9d6073
      Mar  8 15:35:12 hibinst kernel: R10: ffff9ac4c003b000 R11: ffff88f879ad3500 R12: 0000000000000ed5
      Mar  8 15:35:12 hibinst kernel: R13: ffff88f878ce9760 R14: 0000000000000002 R15: ffff88f77de7f018
      Mar  8 15:35:12 hibinst kernel: FS:  0000000000000000(0000) GS:ffff88f87bd00000(0000) knlGS:0000000000000000
      Mar  8 15:35:12 hibinst kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      Mar  8 15:35:12 hibinst kernel: CR2: ffff9ac4c003c000 CR3: 00000001785a6004 CR4: 0000000000060ee0
      Mar  8 15:35:12 hibinst kernel: Call Trace:
      Mar  8 15:35:12 hibinst kernel: tpm_read_log_efi+0x152/0x1a7
      Mar  8 15:35:12 hibinst kernel: tpm_bios_log_setup+0xc8/0x1c0
      Mar  8 15:35:12 hibinst kernel: tpm_chip_register+0x8f/0x260
      Mar  8 15:35:12 hibinst kernel: vtpm_proxy_work+0x16/0x60 [tpm_vtpm_proxy]
      Mar  8 15:35:12 hibinst kernel: process_one_work+0x1b4/0x370
      Mar  8 15:35:12 hibinst kernel: worker_thread+0x53/0x3e0
      Mar  8 15:35:12 hibinst kernel: ? process_one_work+0x370/0x370
      
      Cc: stable@vger.kernel.org
      Fixes: 166a2809 ("tpm: Don't duplicate events from the final event log in the TCG2 log")
      Signed-off-by: NStefan Berger <stefanb@linux.ibm.com>
      Reviewed-by: NJarkko Sakkinen <jarkko@kernel.org>
      Signed-off-by: NJarkko Sakkinen <jarkko@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      5f25dd70
    • A
      intel_th: pci: Add Alder Lake-M support · 1e80641c
      Alexander Shishkin 提交于
      stable inclusion
      from stable-5.10.36
      commit 4a63b2438a93f56a86a1835b677b79ea0de40196
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 48cb1753 upstream.
      
      This adds support for the Trace Hub in Alder Lake-M PCH.
      Signed-off-by: NAlexander Shishkin <alexander.shishkin@linux.intel.com>
      Reviewed-by: NAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: stable@vger.kernel.org # v4.14+
      Link: https://lore.kernel.org/r/20210414171251.14672-8-alexander.shishkin@linux.intel.comSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      1e80641c
    • T
      powerpc: fix EDEADLOCK redefinition error in uapi/asm/errno.h · 68bd7149
      Tony Ambardar 提交于
      stable inclusion
      from stable-5.10.36
      commit 34ceafa62f49169ba5057343d4258651a53c434e
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 7de21e67 upstream.
      
      A few archs like powerpc have different errno.h values for macros
      EDEADLOCK and EDEADLK. In code including both libc and linux versions of
      errno.h, this can result in multiple definitions of EDEADLOCK in the
      include chain. Definitions to the same value (e.g. seen with mips) do
      not raise warnings, but on powerpc there are redefinitions changing the
      value, which raise warnings and errors (if using "-Werror").
      
      Guard against these redefinitions to avoid build errors like the following,
      first seen cross-compiling libbpf v5.8.9 for powerpc using GCC 8.4.0 with
      musl 1.1.24:
      
        In file included from ../../arch/powerpc/include/uapi/asm/errno.h:5,
                         from ../../include/linux/err.h:8,
                         from libbpf.c:29:
        ../../include/uapi/asm-generic/errno.h:40: error: "EDEADLOCK" redefined [-Werror]
         #define EDEADLOCK EDEADLK
      
        In file included from toolchain-powerpc_8540_gcc-8.4.0_musl/include/errno.h:10,
                         from libbpf.c:26:
        toolchain-powerpc_8540_gcc-8.4.0_musl/include/bits/errno.h:58: note: this is the location of the previous definition
         #define EDEADLOCK       58
      
        cc1: all warnings being treated as errors
      
      Cc: Stable <stable@vger.kernel.org>
      Reported-by: NRosen Penev <rosenp@gmail.com>
      Signed-off-by: NTony Ambardar <Tony.Ambardar@gmail.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200917135437.1238787-1-Tony.Ambardar@gmail.comSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      68bd7149
    • C
      powerpc/32: Fix boot failure with CONFIG_STACKPROTECTOR · 985ff384
      Christophe Leroy 提交于
      stable inclusion
      from stable-5.10.36
      commit 0bdcaebb12257bf15c1ffefd91658c720b98180c
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit f5668260 upstream.
      
      Commit 7c95d889 ("powerpc: Change calling convention for
      create_branch() et. al.") complexified the frame of function
      do_feature_fixups(), leading to GCC setting up a stack
      guard when CONFIG_STACKPROTECTOR is selected.
      
      The problem is that do_feature_fixups() is called very early
      while 'current' in r2 is not set up yet and the code is still
      not at the final address used at link time.
      
      So, like other instrumentation, stack protection needs to be
      deactivated for feature-fixups.c and code-patching.c
      
      Fixes: 7c95d889 ("powerpc: Change calling convention for create_branch() et. al.")
      Cc: stable@vger.kernel.org # v5.8+
      Reported-by: NJonathan Neuschaefer <j.neuschaefer@gmx.net>
      Signed-off-by: NChristophe Leroy <christophe.leroy@csgroup.eu>
      Tested-by: NJonathan Neuschaefer <j.neuschaefer@gmx.net>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/b688fe82927b330349d9e44553363fa451ea4d95.1619715114.git.christophe.leroy@csgroup.euSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      985ff384
    • S
      powerpc/kexec_file: Use current CPU info while setting up FDT · a998f3ad
      Sourabh Jain 提交于
      stable inclusion
      from stable-5.10.36
      commit f2aa64979e11a053faf6c1a5e7e056298a67267b
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 40c75399 upstream.
      
      kexec_file_load() uses initial_boot_params in setting up the device tree
      for the kernel to be loaded. Though initial_boot_params holds info about
      CPUs at the time of boot, it doesn't account for hot added CPUs.
      
      So, kexec'ing with kexec_file_load() syscall leaves the kexec'ed kernel
      with inaccurate CPU info.
      
      If kdump kernel is loaded with kexec_file_load() syscall and the system
      crashes on a hot added CPU, the capture kernel hangs failing to identify
      the boot CPU, with no output.
      
      To avoid this from happening, extract current CPU info from of_root
      device node and use it for setting up the fdt in kexec_file_load case.
      
      Fixes: 6ecd0163 ("powerpc/kexec_file: Add appropriate regions for memory reserve map")
      Cc: stable@vger.kernel.org # v5.9+
      Signed-off-by: NSourabh Jain <sourabhjain@linux.ibm.com>
      Reviewed-by: NHari Bathini <hbathini@linux.ibm.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210429060256.199714-1-sourabhjain@linux.ibm.comSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      a998f3ad
    • M
      powerpc/eeh: Fix EEH handling for hugepages in ioremap space. · e7cee4e2
      Mahesh Salgaonkar 提交于
      stable inclusion
      from stable-5.10.36
      commit 481fee8295abbe7080a2824052319808c2cdf0f6
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 5ae5bc12 upstream.
      
      During the EEH MMIO error checking, the current implementation fails to map
      the (virtual) MMIO address back to the pci device on radix with hugepage
      mappings for I/O. This results into failure to dispatch EEH event with no
      recovery even when EEH capability has been enabled on the device.
      
      eeh_check_failure(token)		# token = virtual MMIO address
        addr = eeh_token_to_phys(token);
        edev = eeh_addr_cache_get_dev(addr);
        if (!edev)
      	return 0;
        eeh_dev_check_failure(edev);	<= Dispatch the EEH event
      
      In case of hugepage mappings, eeh_token_to_phys() has a bug in virt -> phys
      translation that results in wrong physical address, which is then passed to
      eeh_addr_cache_get_dev() to match it against cached pci I/O address ranges
      to get to a PCI device. Hence, it fails to find a match and the EEH event
      never gets dispatched leaving the device in failed state.
      
      The commit 33439620 ("powerpc/eeh: Handle hugepages in ioremap space")
      introduced following logic to translate virt to phys for hugepage mappings:
      
      eeh_token_to_phys():
      +	pa = pte_pfn(*ptep);
      +
      +	/* On radix we can do hugepage mappings for io, so handle that */
      +       if (hugepage_shift) {
      +               pa <<= hugepage_shift;			<= This is wrong
      +               pa |= token & ((1ul << hugepage_shift) - 1);
      +       }
      
      This patch fixes the virt -> phys translation in eeh_token_to_phys()
      function.
      
        $ cat /sys/kernel/debug/powerpc/eeh_address_cache
        mem addr range [0x0000040080000000-0x00000400807fffff]: 0030:01:00.1
        mem addr range [0x0000040080800000-0x0000040080ffffff]: 0030:01:00.1
        mem addr range [0x0000040081000000-0x00000400817fffff]: 0030:01:00.0
        mem addr range [0x0000040081800000-0x0000040081ffffff]: 0030:01:00.0
        mem addr range [0x0000040082000000-0x000004008207ffff]: 0030:01:00.1
        mem addr range [0x0000040082080000-0x00000400820fffff]: 0030:01:00.0
        mem addr range [0x0000040082100000-0x000004008210ffff]: 0030:01:00.1
        mem addr range [0x0000040082110000-0x000004008211ffff]: 0030:01:00.0
      
      Above is the list of cached io address ranges of pci 0030:01:00.<fn>.
      
      Before this patch:
      
      Tracing 'arg1' of function eeh_addr_cache_get_dev() during error injection
      clearly shows that 'addr=' contains wrong physical address:
      
         kworker/u16:0-7       [001] ....   108.883775: eeh_addr_cache_get_dev:
      	   (eeh_addr_cache_get_dev+0xc/0xf0) addr=0x80103000a510
      
      dmesg shows no EEH recovery messages:
      
        [  108.563768] bnx2x: [bnx2x_timer:5801(eth2)]MFW seems hanged: drv_pulse (0x9ae) != mcp_pulse (0x7fff)
        [  108.563788] bnx2x: [bnx2x_hw_stats_update:870(eth2)]NIG timer max (4294967295)
        [  108.883788] bnx2x: [bnx2x_acquire_hw_lock:2013(eth1)]lock_status 0xffffffff  resource_bit 0x1
        [  108.884407] bnx2x 0030:01:00.0 eth1: MDC/MDIO access timeout
        [  108.884976] bnx2x 0030:01:00.0 eth1: MDC/MDIO access timeout
        <..>
      
      After this patch:
      
      eeh_addr_cache_get_dev() trace shows correct physical address:
      
        <idle>-0       [001] ..s.  1043.123828: eeh_addr_cache_get_dev:
      	  (eeh_addr_cache_get_dev+0xc/0xf0) addr=0x40080bc7cd8
      
      dmesg logs shows EEH recovery getting triggerred:
      
        [  964.323980] bnx2x: [bnx2x_timer:5801(eth2)]MFW seems hanged: drv_pulse (0x746f) != mcp_pulse (0x7fff)
        [  964.323991] EEH: Recovering PHB#30-PE#10000
        [  964.324002] EEH: PE location: N/A, PHB location: N/A
        [  964.324006] EEH: Frozen PHB#30-PE#10000 detected
        <..>
      
      Fixes: 33439620 ("powerpc/eeh: Handle hugepages in ioremap space")
      Cc: stable@vger.kernel.org # v5.3+
      Reported-by: NDominic DeMarco <ddemarc@us.ibm.com>
      Signed-off-by: NMahesh Salgaonkar <mahesh@linux.ibm.com>
      Signed-off-by: NAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/161821396263.48361.2796709239866588652.stgit@jupiterSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      e7cee4e2
    • N
      powerpc/powernv: Enable HAIL (HV AIL) for ISA v3.1 processors · 804ab104
      Nicholas Piggin 提交于
      stable inclusion
      from stable-5.10.36
      commit 293c30ce25e08ef1e66934b2124ae5f647c269ef
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 49c1d07f upstream.
      
      Starting with ISA v3.1, LPCR[AIL] no longer controls the interrupt
      mode for HV=1 interrupts. Instead, a new LPCR[HAIL] bit is defined
      which behaves like AIL=3 for HV interrupts when set.
      
      Set HAIL on bare metal to give us mmu-on interrupts and improve
      performance.
      
      This also fixes an scv bug: we don't implement scv real mode (AIL=0)
      vectors because they are at an inconvenient location, so we just
      disable scv support when AIL can not be set. However powernv assumes
      that LPCR[AIL] will enable AIL mode so it enables scv support despite
      HV interrupts being AIL=0, which causes scv interrupts to go off into
      the weeds.
      
      Fixes: 7fa95f9a ("powerpc/64s: system call support for scv/rfscv instructions")
      Cc: stable@vger.kernel.org # v5.9+
      Signed-off-by: NNicholas Piggin <npiggin@gmail.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210402024124.545826-1-npiggin@gmail.comSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      804ab104
    • J
      jffs2: Hook up splice_write callback · afc4b305
      Joel Stanley 提交于
      stable inclusion
      from stable-5.10.36
      commit 643243e318686a5179d80d1511ee883dbddb736f
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 42984af0 upstream.
      
      overlayfs using jffs2 as the upper filesystem would fail in some cases
      since moving to v5.10. The test case used was to run 'touch' on a file
      that exists in the lower fs, causing the modification time to be
      updated. It returns EINVAL when the bug is triggered.
      
      A bisection showed this was introduced in v5.9-rc1, with commit
      36e2c742 ("fs: don't allow splice read/write without explicit ops").
      Reverting that commit restores the expected behaviour.
      
      Some digging showed that this was due to jffs2 lacking an implementation
      of splice_write. (For unknown reasons the warn_unsupported that should
      trigger was not displaying any output).
      
      Adding this patch resolved the issue and the test now passes.
      
      Cc: stable@vger.kernel.org
      Fixes: 36e2c742 ("fs: don't allow splice read/write without explicit ops")
      Signed-off-by: NJoel Stanley <joel@jms.id.au>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Tested-by: NLei YU <yulei.sh@bytedance.com>
      Signed-off-by: NRichard Weinberger <richard@nod.at>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      afc4b305
    • L
      jffs2: Fix kasan slab-out-of-bounds problem · 9b6397e2
      lizhe 提交于
      stable inclusion
      from stable-5.10.36
      commit 72c282b10951b20e83ebf16ed65e55e56f424552
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 960b9a8a upstream.
      
      KASAN report a slab-out-of-bounds problem. The logs are listed below.
      It is because in function jffs2_scan_dirent_node, we alloc "checkedlen+1"
      bytes for fd->name and we check crc with length rd->nsize. If checkedlen
      is less than rd->nsize, it will cause the slab-out-of-bounds problem.
      
      jffs2: Dirent at *** has zeroes in name. Truncating to %d char
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      
      ==================================================================
      BUG: KASAN: slab-out-of-bounds in crc32_le+0x1ce/0x260 at addr ffff8800842cf2d1
      Read of size 1 by task test_JFFS2/915
      =============================================================================
      BUG kmalloc-64 (Tainted: G    B      O   ): kasan: bad access detected
      -----------------------------------------------------------------------------
      INFO: Allocated in jffs2_alloc_full_dirent+0x2a/0x40 age=0 cpu=1 pid=915
      	___slab_alloc+0x580/0x5f0
      	__slab_alloc.isra.24+0x4e/0x64
      	__kmalloc+0x170/0x300
      	jffs2_alloc_full_dirent+0x2a/0x40
      	jffs2_scan_eraseblock+0x1ca4/0x3b64
      	jffs2_scan_medium+0x285/0xfe0
      	jffs2_do_mount_fs+0x5fb/0x1bbc
      	jffs2_do_fill_super+0x245/0x6f0
      	jffs2_fill_super+0x287/0x2e0
      	mount_mtd_aux.isra.0+0x9a/0x144
      	mount_mtd+0x222/0x2f0
      	jffs2_mount+0x41/0x60
      	mount_fs+0x63/0x230
      	vfs_kern_mount.part.6+0x6c/0x1f4
      	do_mount+0xae8/0x1940
      	SyS_mount+0x105/0x1d0
      INFO: Freed in jffs2_free_full_dirent+0x22/0x40 age=27 cpu=1 pid=915
      	__slab_free+0x372/0x4e4
      	kfree+0x1d4/0x20c
      	jffs2_free_full_dirent+0x22/0x40
      	jffs2_build_remove_unlinked_inode+0x17a/0x1e4
      	jffs2_do_mount_fs+0x1646/0x1bbc
      	jffs2_do_fill_super+0x245/0x6f0
      	jffs2_fill_super+0x287/0x2e0
      	mount_mtd_aux.isra.0+0x9a/0x144
      	mount_mtd+0x222/0x2f0
      	jffs2_mount+0x41/0x60
      	mount_fs+0x63/0x230
      	vfs_kern_mount.part.6+0x6c/0x1f4
      	do_mount+0xae8/0x1940
      	SyS_mount+0x105/0x1d0
      	entry_SYSCALL_64_fastpath+0x1e/0x97
      Call Trace:
       [<ffffffff815befef>] dump_stack+0x59/0x7e
       [<ffffffff812d1d65>] print_trailer+0x125/0x1b0
       [<ffffffff812d82c8>] object_err+0x34/0x40
       [<ffffffff812dadef>] kasan_report.part.1+0x21f/0x534
       [<ffffffff81132401>] ? vprintk+0x2d/0x40
       [<ffffffff815f1ee2>] ? crc32_le+0x1ce/0x260
       [<ffffffff812db41a>] kasan_report+0x26/0x30
       [<ffffffff812d9fc1>] __asan_load1+0x3d/0x50
       [<ffffffff815f1ee2>] crc32_le+0x1ce/0x260
       [<ffffffff814764ae>] ? jffs2_alloc_full_dirent+0x2a/0x40
       [<ffffffff81485cec>] jffs2_scan_eraseblock+0x1d0c/0x3b64
       [<ffffffff81488813>] ? jffs2_scan_medium+0xccf/0xfe0
       [<ffffffff81483fe0>] ? jffs2_scan_make_ino_cache+0x14c/0x14c
       [<ffffffff812da3e9>] ? kasan_unpoison_shadow+0x35/0x50
       [<ffffffff812da3e9>] ? kasan_unpoison_shadow+0x35/0x50
       [<ffffffff812da462>] ? kasan_kmalloc+0x5e/0x70
       [<ffffffff812d5d90>] ? kmem_cache_alloc_trace+0x10c/0x2cc
       [<ffffffff818169fb>] ? mtd_point+0xf7/0x130
       [<ffffffff81487dc9>] jffs2_scan_medium+0x285/0xfe0
       [<ffffffff81487b44>] ? jffs2_scan_eraseblock+0x3b64/0x3b64
       [<ffffffff812da3e9>] ? kasan_unpoison_shadow+0x35/0x50
       [<ffffffff812da3e9>] ? kasan_unpoison_shadow+0x35/0x50
       [<ffffffff812da462>] ? kasan_kmalloc+0x5e/0x70
       [<ffffffff812d57df>] ? __kmalloc+0x12b/0x300
       [<ffffffff812da462>] ? kasan_kmalloc+0x5e/0x70
       [<ffffffff814a2753>] ? jffs2_sum_init+0x9f/0x240
       [<ffffffff8148b2ff>] jffs2_do_mount_fs+0x5fb/0x1bbc
       [<ffffffff8148ad04>] ? jffs2_del_noinode_dirent+0x640/0x640
       [<ffffffff812da462>] ? kasan_kmalloc+0x5e/0x70
       [<ffffffff81127c5b>] ? __init_rwsem+0x97/0xac
       [<ffffffff81492349>] jffs2_do_fill_super+0x245/0x6f0
       [<ffffffff81493c5b>] jffs2_fill_super+0x287/0x2e0
       [<ffffffff814939d4>] ? jffs2_parse_options+0x594/0x594
       [<ffffffff81819bea>] mount_mtd_aux.isra.0+0x9a/0x144
       [<ffffffff81819eb6>] mount_mtd+0x222/0x2f0
       [<ffffffff814939d4>] ? jffs2_parse_options+0x594/0x594
       [<ffffffff81819c94>] ? mount_mtd_aux.isra.0+0x144/0x144
       [<ffffffff81258757>] ? free_pages+0x13/0x1c
       [<ffffffff814fa0ac>] ? selinux_sb_copy_data+0x278/0x2e0
       [<ffffffff81492b35>] jffs2_mount+0x41/0x60
       [<ffffffff81302fb7>] mount_fs+0x63/0x230
       [<ffffffff8133755f>] ? alloc_vfsmnt+0x32f/0x3b0
       [<ffffffff81337f2c>] vfs_kern_mount.part.6+0x6c/0x1f4
       [<ffffffff8133ceec>] do_mount+0xae8/0x1940
       [<ffffffff811b94e0>] ? audit_filter_rules.constprop.6+0x1d10/0x1d10
       [<ffffffff8133c404>] ? copy_mount_string+0x40/0x40
       [<ffffffff812cbf78>] ? alloc_pages_current+0xa4/0x1bc
       [<ffffffff81253a89>] ? __get_free_pages+0x25/0x50
       [<ffffffff81338993>] ? copy_mount_options.part.17+0x183/0x264
       [<ffffffff8133e3a9>] SyS_mount+0x105/0x1d0
       [<ffffffff8133e2a4>] ? copy_mnt_ns+0x560/0x560
       [<ffffffff810e8391>] ? msa_space_switch_handler+0x13d/0x190
       [<ffffffff81be184a>] entry_SYSCALL_64_fastpath+0x1e/0x97
       [<ffffffff810e9274>] ? msa_space_switch+0xb0/0xe0
      Memory state around the buggy address:
       ffff8800842cf180: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
       ffff8800842cf200: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      >ffff8800842cf280: fc fc fc fc fc fc 00 00 00 00 01 fc fc fc fc fc
                                                       ^
       ffff8800842cf300: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
       ffff8800842cf380: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      ==================================================================
      
      Cc: stable@vger.kernel.org
      Reported-by: NKunkun Xu <xukunkun1@huawei.com>
      Signed-off-by: Nlizhe <lizhe67@huawei.com>
      Signed-off-by: NRichard Weinberger <richard@nod.at>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      9b6397e2
    • H
      Input: ili210x - add missing negation for touch indication on ili210x · df1aeda6
      Hansem Ro 提交于
      stable inclusion
      from stable-5.10.36
      commit 072f787e879889b314260e31edc2ca05edcf2e85
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit ac05a8a9 upstream.
      
      This adds the negation needed for proper finger detection on Ilitek
      ili2107/ili210x. This fixes polling issues (on Amazon Kindle Fire)
      caused by returning false for the cooresponding finger on the touchscreen.
      Signed-off-by: NHansem Ro <hansemro@outlook.com>
      Fixes: e3559442 ("ili210x - rework the touchscreen sample processing")
      Cc: stable@vger.kernel.org
      Signed-off-by: NDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      df1aeda6
    • T
      NFSv4: Don't discard segments marked for return in _pnfs_return_layout() · 5bfc60d4
      Trond Myklebust 提交于
      stable inclusion
      from stable-5.10.36
      commit 2fafe7d5047f98791afd9a1d90d2afb70debc590
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit de144ff4 upstream.
      
      If the pNFS layout segment is marked with the NFS_LSEG_LAYOUTRETURN
      flag, then the assumption is that it has some reporting requirement
      to perform through a layoutreturn (e.g. flexfiles layout stats or error
      information).
      
      Fixes: 6d597e17 ("pnfs: only tear down lsegs that precede seqid in LAYOUTRETURN args")
      Cc: stable@vger.kernel.org
      Signed-off-by: NTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      5bfc60d4
    • T
      NFS: Don't discard pNFS layout segments that are marked for return · 2b19cf50
      Trond Myklebust 提交于
      stable inclusion
      from stable-5.10.36
      commit 334165d9fb69f357fa8e1e4766f9c6600aa67e5d
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 39fd0186 upstream.
      
      If the pNFS layout segment is marked with the NFS_LSEG_LAYOUTRETURN
      flag, then the assumption is that it has some reporting requirement
      to perform through a layoutreturn (e.g. flexfiles layout stats or error
      information).
      
      Fixes: e0b7d420 ("pNFS: Don't discard layout segments that are marked for return")
      Cc: stable@vger.kernel.org
      Signed-off-by: NTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      2b19cf50
    • R
      NFS: fs_context: validate UDP retrans to prevent shift out-of-bounds · b93f1d48
      Randy Dunlap 提交于
      stable inclusion
      from stable-5.10.36
      commit 96fa26b74cdcf9f5c98996bf36bec9fb5b19ffe2
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit c09f11ef upstream.
      
      Fix shift out-of-bounds in xprt_calc_majortimeo(). This is caused
      by a garbage timeout (retrans) mount option being passed to nfs mount,
      in this case from syzkaller.
      
      If the protocol is XPRT_TRANSPORT_UDP, then 'retrans' is a shift
      value for a 64-bit long integer, so 'retrans' cannot be >= 64.
      If it is >= 64, fail the mount and return an error.
      
      Fixes: 9954bf92 ("NFS: Move mount parameterisation bits into their own file")
      Reported-by: syzbot+ba2e91df8f74809417fa@syzkaller.appspotmail.com
      Reported-by: syzbot+f3a0fa110fd630ab56c8@syzkaller.appspotmail.com
      Signed-off-by: NRandy Dunlap <rdunlap@infradead.org>
      Cc: Trond Myklebust <trond.myklebust@hammerspace.com>
      Cc: Anna Schumaker <anna.schumaker@netapp.com>
      Cc: linux-nfs@vger.kernel.org
      Cc: David Howells <dhowells@redhat.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: stable@vger.kernel.org
      Signed-off-by: NTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      b93f1d48
    • M
      ACPI: GTDT: Don't corrupt interrupt mappings on watchdow probe failure · ca27fc58
      Marc Zyngier 提交于
      stable inclusion
      from stable-5.10.36
      commit e0f2d86481eaa83df33b0793f75212919db7a19d
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 1ecd5b12 upstream.
      
      When failing the driver probe because of invalid firmware properties,
      the GTDT driver unmaps the interrupt that it mapped earlier.
      
      However, it never checks whether the mapping of the interrupt actially
      succeeded. Even more, should the firmware report an illegal interrupt
      number that overlaps with the GIC SGI range, this can result in an
      IPI being unmapped, and subsequent fireworks (as reported by Dann
      Frazier).
      
      Rework the driver to have a slightly saner behaviour and actually
      check whether the interrupt has been mapped before unmapping things.
      Reported-by: Ndann frazier <dann.frazier@canonical.com>
      Fixes: ca9ae5ec ("acpi/arm64: Add SBSA Generic Watchdog support in GTDT driver")
      Signed-off-by: NMarc Zyngier <maz@kernel.org>
      Link: https://lore.kernel.org/r/YH87dtTfwYgavusz@xps13.dannf
      Cc: <stable@vger.kernel.org>
      Cc: Fu Wei <wefu@redhat.com>
      Reviewed-by: NSudeep Holla <sudeep.holla@arm.com>
      Tested-by: Ndann frazier <dann.frazier@canonical.com>
      Tested-by: NHanjun Guo <guohanjun@huawei.com>
      Reviewed-by: NHanjun Guo <guohanjun@huawei.com>
      Reviewed-by: NLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      Link: https://lore.kernel.org/r/20210421164317.1718831-2-maz@kernel.orgSigned-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      ca27fc58
    • D
      openvswitch: fix stack OOB read while fragmenting IPv4 packets · f2822913
      Davide Caratti 提交于
      stable inclusion
      from stable-5.10.36
      commit a1478374b0bda89b4277a8afd39208271faad4be
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 7c0ea593 upstream.
      
      running openvswitch on kernels built with KASAN, it's possible to see the
      following splat while testing fragmentation of IPv4 packets:
      
       BUG: KASAN: stack-out-of-bounds in ip_do_fragment+0x1b03/0x1f60
       Read of size 1 at addr ffff888112fc713c by task handler2/1367
      
       CPU: 0 PID: 1367 Comm: handler2 Not tainted 5.12.0-rc6+ #418
       Hardware name: Red Hat KVM, BIOS 1.11.1-4.module+el8.1.0+4066+0f1aadab 04/01/2014
       Call Trace:
        dump_stack+0x92/0xc1
        print_address_description.constprop.7+0x1a/0x150
        kasan_report.cold.13+0x7f/0x111
        ip_do_fragment+0x1b03/0x1f60
        ovs_fragment+0x5bf/0x840 [openvswitch]
        do_execute_actions+0x1bd5/0x2400 [openvswitch]
        ovs_execute_actions+0xc8/0x3d0 [openvswitch]
        ovs_packet_cmd_execute+0xa39/0x1150 [openvswitch]
        genl_family_rcv_msg_doit.isra.15+0x227/0x2d0
        genl_rcv_msg+0x287/0x490
        netlink_rcv_skb+0x120/0x380
        genl_rcv+0x24/0x40
        netlink_unicast+0x439/0x630
        netlink_sendmsg+0x719/0xbf0
        sock_sendmsg+0xe2/0x110
        ____sys_sendmsg+0x5ba/0x890
        ___sys_sendmsg+0xe9/0x160
        __sys_sendmsg+0xd3/0x170
        do_syscall_64+0x33/0x40
        entry_SYSCALL_64_after_hwframe+0x44/0xae
       RIP: 0033:0x7f957079db07
       Code: c3 66 90 41 54 41 89 d4 55 48 89 f5 53 89 fb 48 83 ec 10 e8 eb ec ff ff 44 89 e2 48 89 ee 89 df 41 89 c0 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 35 44 89 c7 48 89 44 24 08 e8 24 ed ff ff 48
       RSP: 002b:00007f956ce35a50 EFLAGS: 00000293 ORIG_RAX: 000000000000002e
       RAX: ffffffffffffffda RBX: 0000000000000019 RCX: 00007f957079db07
       RDX: 0000000000000000 RSI: 00007f956ce35ae0 RDI: 0000000000000019
       RBP: 00007f956ce35ae0 R08: 0000000000000000 R09: 00007f9558006730
       R10: 0000000000000000 R11: 0000000000000293 R12: 0000000000000000
       R13: 00007f956ce37308 R14: 00007f956ce35f80 R15: 00007f956ce35ae0
      
       The buggy address belongs to the page:
       page:00000000af2a1d93 refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x112fc7
       flags: 0x17ffffc0000000()
       raw: 0017ffffc0000000 0000000000000000 dead000000000122 0000000000000000
       raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000
       page dumped because: kasan: bad access detected
      
       addr ffff888112fc713c is located in stack of task handler2/1367 at offset 180 in frame:
        ovs_fragment+0x0/0x840 [openvswitch]
      
       this frame has 2 objects:
        [32, 144) 'ovs_dst'
        [192, 424) 'ovs_rt'
      
       Memory state around the buggy address:
        ffff888112fc7000: f3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        ffff888112fc7080: 00 f1 f1 f1 f1 00 00 00 00 00 00 00 00 00 00 00
       >ffff888112fc7100: 00 00 00 f2 f2 f2 f2 f2 f2 00 00 00 00 00 00 00
                                               ^
        ffff888112fc7180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        ffff888112fc7200: 00 00 00 00 00 00 f2 f2 f2 00 00 00 00 00 00 00
      
      for IPv4 packets, ovs_fragment() uses a temporary struct dst_entry. Then,
      in the following call graph:
      
        ip_do_fragment()
          ip_skb_dst_mtu()
            ip_dst_mtu_maybe_forward()
              ip_mtu_locked()
      
      the pointer to struct dst_entry is used as pointer to struct rtable: this
      turns the access to struct members like rt_mtu_locked into an OOB read in
      the stack. Fix this changing the temporary variable used for IPv4 packets
      in ovs_fragment(), similarly to what is done for IPv6 few lines below.
      
      Fixes: d52e5a7e ("ipv4: lock mtu in fnhe when received PMTU < net.ipv4.route.min_pmt")
      Cc: <stable@vger.kernel.org>
      Acked-by: NEelco Chaudron <echaudro@redhat.com>
      Signed-off-by: NDavide Caratti <dcaratti@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      f2822913
    • I
      mlxsw: spectrum_mr: Update egress RIF list before route's action · bdffdf8d
      Ido Schimmel 提交于
      stable inclusion
      from stable-5.10.36
      commit 4248f4649bf317611702186960917cd8912bc798
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit cbaf3f6a upstream.
      
      Each multicast route that is forwarding packets (as opposed to trapping
      them) points to a list of egress router interfaces (RIFs) through which
      packets are replicated.
      
      A route's action can transition from trap to forward when a RIF is
      created for one of the route's egress virtual interfaces (eVIF). When
      this happens, the route's action is first updated and only later the
      list of egress RIFs is committed to the device.
      
      This results in the route pointing to an invalid list. In case the list
      pointer is out of range (due to uninitialized memory), the device will
      complain:
      
      mlxsw_spectrum2 0000:06:00.0: EMAD reg access failed (tid=5733bf490000905c,reg_id=300f(pefa),type=write,status=7(bad parameter))
      
      Fix this by first committing the list of egress RIFs to the device and
      only later update the route's action.
      
      Note that a fix is not needed in the reverse function (i.e.,
      mlxsw_sp_mr_route_evif_unresolve()), as there the route's action is
      first updated and only later the RIF is removed from the list.
      
      Cc: stable@vger.kernel.org
      Fixes: c011ec1b ("mlxsw: spectrum: Add the multicast routing offloading logic")
      Signed-off-by: NIdo Schimmel <idosch@nvidia.com>
      Reviewed-by: NPetr Machata <petrm@nvidia.com>
      Link: https://lore.kernel.org/r/20210506072308.3834303-1-idosch@idosch.orgSigned-off-by: NJakub Kicinski <kuba@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      bdffdf8d
    • C
      f2fs: fix to avoid out-of-bounds memory access · 1fcf6d1b
      Chao Yu 提交于
      stable inclusion
      from stable-5.10.36
      commit 9aa4602237d535b83c579eb752e8fc1c3e7e7055
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit b862676e upstream.
      
      butt3rflyh4ck <butterflyhuangxx@gmail.com> reported a bug found by
      syzkaller fuzzer with custom modifications in 5.12.0-rc3+ [1]:
      
       dump_stack+0xfa/0x151 lib/dump_stack.c:120
       print_address_description.constprop.0.cold+0x82/0x32c mm/kasan/report.c:232
       __kasan_report mm/kasan/report.c:399 [inline]
       kasan_report.cold+0x7c/0xd8 mm/kasan/report.c:416
       f2fs_test_bit fs/f2fs/f2fs.h:2572 [inline]
       current_nat_addr fs/f2fs/node.h:213 [inline]
       get_next_nat_page fs/f2fs/node.c:123 [inline]
       __flush_nat_entry_set fs/f2fs/node.c:2888 [inline]
       f2fs_flush_nat_entries+0x258e/0x2960 fs/f2fs/node.c:2991
       f2fs_write_checkpoint+0x1372/0x6a70 fs/f2fs/checkpoint.c:1640
       f2fs_issue_checkpoint+0x149/0x410 fs/f2fs/checkpoint.c:1807
       f2fs_sync_fs+0x20f/0x420 fs/f2fs/super.c:1454
       __sync_filesystem fs/sync.c:39 [inline]
       sync_filesystem fs/sync.c:67 [inline]
       sync_filesystem+0x1b5/0x260 fs/sync.c:48
       generic_shutdown_super+0x70/0x370 fs/super.c:448
       kill_block_super+0x97/0xf0 fs/super.c:1394
      
      The root cause is, if nat entry in checkpoint journal area is corrupted,
      e.g. nid of journalled nat entry exceeds max nid value, during checkpoint,
      once it tries to flush nat journal to NAT area, get_next_nat_page() may
      access out-of-bounds memory on nat_bitmap due to it uses wrong nid value
      as bitmap offset.
      
      [1] https://lore.kernel.org/lkml/CAFcO6XOMWdr8pObek6eN6-fs58KG9doRFadgJj-FnF-1x43s2g@mail.gmail.com/T/#uReported-and-tested-by: Nbutt3rflyh4ck <butterflyhuangxx@gmail.com>
      Signed-off-by: NChao Yu <yuchao0@huawei.com>
      Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      1fcf6d1b
    • E
      f2fs: fix error handling in f2fs_end_enable_verity() · 17030c18
      Eric Biggers 提交于
      stable inclusion
      from stable-5.10.36
      commit 39624749c52dc015d358f8c894bd2236702d07bb
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 3c031542 upstream.
      
      f2fs didn't properly clean up if verity failed to be enabled on a file:
      
      - It left verity metadata (pages past EOF) in the page cache, which
        would be exposed to userspace if the file was later extended.
      
      - It didn't truncate the verity metadata at all (either from cache or
        from disk) if an error occurred while setting the verity bit.
      
      Fix these bugs by adding a call to truncate_inode_pages() and ensuring
      that we truncate the verity metadata (both from cache and from disk) in
      all error paths.  Also rework the code to cleanly separate the success
      path from the error paths, which makes it much easier to understand.
      
      Finally, log a message if f2fs_truncate() fails, since it might
      otherwise fail silently.
      Reported-by: NYunlei He <heyunlei@hihonor.com>
      Fixes: 95ae251f ("f2fs: add fs-verity support")
      Cc: <stable@vger.kernel.org> # v5.4+
      Signed-off-by: NEric Biggers <ebiggers@google.com>
      Reviewed-by: NChao Yu <yuchao0@huawei.com>
      Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      17030c18
    • G
      ubifs: Only check replay with inode type to judge if inode linked · 00a9aad1
      Guochun Mao 提交于
      stable inclusion
      from stable-5.10.36
      commit 50b0c0c3385d80ee23173dc1d9fd82803ed45aac
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 3e903315 upstream.
      
      Conside the following case, it just write a big file into flash,
      when complete writing, delete the file, and then power off promptly.
      Next time power on, we'll get a replay list like:
      ...
      LEB 1105:211344 len 4144 deletion 0 sqnum 428783 key type 1 inode 80
      LEB 15:233544 len 160 deletion 1 sqnum 428785 key type 0 inode 80
      LEB 1105:215488 len 4144 deletion 0 sqnum 428787 key type 1 inode 80
      ...
      In the replay list, data nodes' deletion are 0, and the inode node's
      deletion is 1. In current logic, the file's dentry will be removed,
      but inode and the flash space it occupied will be reserved.
      User will see that much free space been disappeared.
      
      We only need to check the deletion value of the following inode type
      node of the replay entry.
      
      Fixes: e58725d5 ("ubifs: Handle re-linking of inodes correctly while recovery")
      Cc: stable@vger.kernel.org
      Signed-off-by: NGuochun Mao <guochun.mao@mediatek.com>
      Signed-off-by: NRichard Weinberger <richard@nod.at>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      00a9aad1
    • M
      kcsan, debugfs: Move debugfs file creation out of early init · 6d286b31
      Marco Elver 提交于
      stable inclusion
      from stable-5.10.36
      commit 5a876a46d7b7fc112d7cb2bff460612d7f0ed4b5
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit e36299ef upstream.
      
      Commit 56348560 ("debugfs: do not attempt to create a new file
      before the filesystem is initalized") forbids creating new debugfs files
      until debugfs is fully initialized.  This means that KCSAN's debugfs
      file creation, which happened at the end of __init(), no longer works.
      And was apparently never supposed to work!
      
      However, there is no reason to create KCSAN's debugfs file so early.
      This commit therefore moves its creation to a late_initcall() callback.
      
      Cc: "Rafael J. Wysocki" <rafael@kernel.org>
      Cc: stable <stable@vger.kernel.org>
      Fixes: 56348560 ("debugfs: do not attempt to create a new file before the filesystem is initalized")
      Reviewed-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NMarco Elver <elver@google.com>
      Signed-off-by: NPaul E. McKenney <paulmck@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      6d286b31
    • L
      virtiofs: fix memory leak in virtio_fs_probe() · ff3705e5
      Luis Henriques 提交于
      stable inclusion
      from stable-5.10.36
      commit d19555ff225d0896a33246a49279e6d578095f15
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit c79c5e01 upstream.
      
      When accidentally passing twice the same tag to qemu, kmemleak ended up
      reporting a memory leak in virtiofs.  Also, looking at the log I saw the
      following error (that's when I realised the duplicated tag):
      
        virtiofs: probe of virtio5 failed with error -17
      
      Here's the kmemleak log for reference:
      
      unreferenced object 0xffff888103d47800 (size 1024):
        comm "systemd-udevd", pid 118, jiffies 4294893780 (age 18.340s)
        hex dump (first 32 bytes):
          00 00 00 00 ad 4e ad de ff ff ff ff 00 00 00 00  .....N..........
          ff ff ff ff ff ff ff ff 80 90 02 a0 ff ff ff ff  ................
        backtrace:
          [<000000000ebb87c1>] virtio_fs_probe+0x171/0x7ae [virtiofs]
          [<00000000f8aca419>] virtio_dev_probe+0x15f/0x210
          [<000000004d6baf3c>] really_probe+0xea/0x430
          [<00000000a6ceeac8>] device_driver_attach+0xa8/0xb0
          [<00000000196f47a7>] __driver_attach+0x98/0x140
          [<000000000b20601d>] bus_for_each_dev+0x7b/0xc0
          [<00000000399c7b7f>] bus_add_driver+0x11b/0x1f0
          [<0000000032b09ba7>] driver_register+0x8f/0xe0
          [<00000000cdd55998>] 0xffffffffa002c013
          [<000000000ea196a2>] do_one_initcall+0x64/0x2e0
          [<0000000008f727ce>] do_init_module+0x5c/0x260
          [<000000003cdedab6>] __do_sys_finit_module+0xb5/0x120
          [<00000000ad2f48c6>] do_syscall_64+0x33/0x40
          [<00000000809526b5>] entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NLuis Henriques <lhenriques@suse.de>
      Fixes: a62a8ef9 ("virtio-fs: add virtiofs filesystem")
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      Reviewed-by: NVivek Goyal <vgoyal@redhat.com>
      Signed-off-by: NMiklos Szeredi <mszeredi@redhat.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      ff3705e5
    • T
      fs: fix reporting supported extra file attributes for statx() · a029750c
      Theodore Ts'o 提交于
      stable inclusion
      from stable-5.10.36
      commit 1b41d4e5aa75675c915cbed09e2a7813f3fd2e49
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 5afa7e8b upstream.
      
      statx(2) notes that any attribute that is not indicated as supported
      by stx_attributes_mask has no usable value.  Commits 801e5237
      ("fs: move generic stat response attr handling to vfs_getattr_nosec")
      and 712b2698 ("fs/stat: Define DAX statx attribute") sets
      STATX_ATTR_AUTOMOUNT and STATX_ATTR_DAX, respectively, without setting
      stx_attributes_mask, which can cause xfstests generic/532 to fail.
      
      Fix this in the same way as commit 1b9598c8 ("xfs: fix reporting
      supported extra file attributes for statx()")
      
      Fixes: 801e5237 ("fs: move generic stat response attr handling to vfs_getattr_nosec")
      Fixes: 712b2698 ("fs/stat: Define DAX statx attribute")
      Cc: stable@kernel.org
      Signed-off-by: NTheodore Ts'o <tytso@mit.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      a029750c
    • N
      Makefile: Move -Wno-unused-but-set-variable out of GCC only block · 5941bd31
      Nathan Chancellor 提交于
      stable inclusion
      from stable-5.10.36
      commit dc4b67baba3ba257695dc5a52391d3aecf9ec6e5
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 885480b0 upstream.
      
      Currently, -Wunused-but-set-variable is only supported by GCC so it is
      disabled unconditionally in a GCC only block (it is enabled with W=1).
      clang currently has its implementation for this warning in review so
      preemptively move this statement out of the GCC only block and wrap it
      with cc-disable-warning so that both compilers function the same.
      
      Cc: stable@vger.kernel.org
      Link: https://reviews.llvm.org/D100581Signed-off-by: NNathan Chancellor <nathan@kernel.org>
      Reviewed-by: NNick Desaulniers <ndesaulniers@google.com>
      Tested-by: NNick Desaulniers <ndesaulniers@google.com>
      Signed-off-by: NMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      5941bd31
    • B
      arm64/vdso: Discard .note.gnu.property sections in vDSO · d478863b
      Bill Wendling 提交于
      stable inclusion
      from stable-5.10.36
      commit 0f905593666855c6c452132c64645406557f5db8
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      [ Upstream commit 38870802 ]
      
      The arm64 assembler in binutils 2.32 and above generates a program
      property note in a note section, .note.gnu.property, to encode used x86
      ISAs and features. But the kernel linker script only contains a single
      NOTE segment:
      
        PHDRS
        {
          text    PT_LOAD    FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */
          dynamic PT_DYNAMIC FLAGS(4);               /* PF_R */
          note    PT_NOTE    FLAGS(4);               /* PF_R */
        }
      
      The NOTE segment generated by the vDSO linker script is aligned to 4 bytes.
      But the .note.gnu.property section must be aligned to 8 bytes on arm64.
      
        $ readelf -n vdso64.so
      
        Displaying notes found in: .note
          Owner                Data size      Description
          Linux                0x00000004     Unknown note type: (0x00000000)
           description data: 06 00 00 00
        readelf: Warning: note with invalid namesz and/or descsz found at offset 0x20
        readelf: Warning:  type: 0x78, namesize: 0x00000100, descsize: 0x756e694c, alignment: 8
      
      Since the note.gnu.property section in the vDSO is not checked by the
      dynamic linker, discard the .note.gnu.property sections in the vDSO.
      
      Similar to commit 4caffe6a ("x86/vdso: Discard .note.gnu.property
      sections in vDSO"), but for arm64.
      Signed-off-by: NBill Wendling <morbo@google.com>
      Reviewed-by: NKees Cook <keescook@chromium.org>
      Acked-by: NArd Biesheuvel <ardb@kernel.org>
      Link: https://lore.kernel.org/r/20210423205159.830854-1-morbo@google.comSigned-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      d478863b
    • F
      btrfs: fix race when picking most recent mod log operation for an old root · 1226f171
      Filipe Manana 提交于
      stable inclusion
      from stable-5.10.36
      commit 1d852d6bb4d44baac57452be5c2857741139fc59
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      [ Upstream commit f9690f42 ]
      
      Commit dbcc7d57 ("btrfs: fix race when cloning extent buffer during
      rewind of an old root"), fixed a race when we need to rewind the extent
      buffer of an old root. It was caused by picking a new mod log operation
      for the extent buffer while getting a cloned extent buffer with an outdated
      number of items (off by -1), because we cloned the extent buffer without
      locking it first.
      
      However there is still another similar race, but in the opposite direction.
      The cloned extent buffer has a number of items that does not match the
      number of tree mod log operations that are going to be replayed. This is
      because right after we got the last (most recent) tree mod log operation to
      replay and before locking and cloning the extent buffer, another task adds
      a new pointer to the extent buffer, which results in adding a new tree mod
      log operation and incrementing the number of items in the extent buffer.
      So after cloning we have mismatch between the number of items in the extent
      buffer and the number of mod log operations we are going to apply to it.
      This results in hitting a BUG_ON() that produces the following stack trace:
      
         ------------[ cut here ]------------
         kernel BUG at fs/btrfs/tree-mod-log.c:675!
         invalid opcode: 0000 [#1] SMP KASAN PTI
         CPU: 3 PID: 4811 Comm: crawl_1215 Tainted: G        W         5.12.0-7d1efdf501f8-misc-next+ #99
         Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
         RIP: 0010:tree_mod_log_rewind+0x3b1/0x3c0
         Code: 05 48 8d 74 10 (...)
         RSP: 0018:ffffc90001027090 EFLAGS: 00010293
         RAX: 0000000000000000 RBX: ffff8880a8514600 RCX: ffffffffaa9e59b6
         RDX: 0000000000000007 RSI: dffffc0000000000 RDI: ffff8880a851462c
         RBP: ffffc900010270e0 R08: 00000000000000c0 R09: ffffed1004333417
         R10: ffff88802199a0b7 R11: ffffed1004333416 R12: 000000000000000e
         R13: ffff888135af8748 R14: ffff88818766ff00 R15: ffff8880a851462c
         FS:  00007f29acf62700(0000) GS:ffff8881f2200000(0000) knlGS:0000000000000000
         CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
         CR2: 00007f0e6013f718 CR3: 000000010d42e003 CR4: 0000000000170ee0
         Call Trace:
          btrfs_get_old_root+0x16a/0x5c0
          ? lock_downgrade+0x400/0x400
          btrfs_search_old_slot+0x192/0x520
          ? btrfs_search_slot+0x1090/0x1090
          ? free_extent_buffer.part.61+0xd7/0x140
          ? free_extent_buffer+0x13/0x20
          resolve_indirect_refs+0x3e9/0xfc0
          ? lock_downgrade+0x400/0x400
          ? __kasan_check_read+0x11/0x20
          ? add_prelim_ref.part.11+0x150/0x150
          ? lock_downgrade+0x400/0x400
          ? __kasan_check_read+0x11/0x20
          ? lock_acquired+0xbb/0x620
          ? __kasan_check_write+0x14/0x20
          ? do_raw_spin_unlock+0xa8/0x140
          ? rb_insert_color+0x340/0x360
          ? prelim_ref_insert+0x12d/0x430
          find_parent_nodes+0x5c3/0x1830
          ? stack_trace_save+0x87/0xb0
          ? resolve_indirect_refs+0xfc0/0xfc0
          ? fs_reclaim_acquire+0x67/0xf0
          ? __kasan_check_read+0x11/0x20
          ? lockdep_hardirqs_on_prepare+0x210/0x210
          ? fs_reclaim_acquire+0x67/0xf0
          ? __kasan_check_read+0x11/0x20
          ? ___might_sleep+0x10f/0x1e0
          ? __kasan_kmalloc+0x9d/0xd0
          ? trace_hardirqs_on+0x55/0x120
          btrfs_find_all_roots_safe+0x142/0x1e0
          ? find_parent_nodes+0x1830/0x1830
          ? trace_hardirqs_on+0x55/0x120
          ? ulist_free+0x1f/0x30
          ? btrfs_inode_flags_to_xflags+0x50/0x50
          iterate_extent_inodes+0x20e/0x580
          ? tree_backref_for_extent+0x230/0x230
          ? release_extent_buffer+0x225/0x280
          ? read_extent_buffer+0xdd/0x110
          ? lock_downgrade+0x400/0x400
          ? __kasan_check_read+0x11/0x20
          ? lock_acquired+0xbb/0x620
          ? __kasan_check_write+0x14/0x20
          ? do_raw_spin_unlock+0xa8/0x140
          ? _raw_spin_unlock+0x22/0x30
          ? release_extent_buffer+0x225/0x280
          iterate_inodes_from_logical+0x129/0x170
          ? iterate_inodes_from_logical+0x129/0x170
          ? btrfs_inode_flags_to_xflags+0x50/0x50
          ? iterate_extent_inodes+0x580/0x580
          ? __vmalloc_node+0x92/0xb0
          ? init_data_container+0x34/0xb0
          ? init_data_container+0x34/0xb0
          ? kvmalloc_node+0x60/0x80
          btrfs_ioctl_logical_to_ino+0x158/0x230
          btrfs_ioctl+0x2038/0x4360
          ? __kasan_check_write+0x14/0x20
          ? mmput+0x3b/0x220
          ? btrfs_ioctl_get_supported_features+0x30/0x30
          ? __kasan_check_read+0x11/0x20
          ? __kasan_check_read+0x11/0x20
          ? lock_release+0xc8/0x650
          ? __might_fault+0x64/0xd0
          ? __kasan_check_read+0x11/0x20
          ? lock_downgrade+0x400/0x400
          ? lockdep_hardirqs_on_prepare+0x210/0x210
          ? lockdep_hardirqs_on_prepare+0x13/0x210
          ? _raw_spin_unlock_irqrestore+0x51/0x63
          ? __kasan_check_read+0x11/0x20
          ? do_vfs_ioctl+0xfc/0x9d0
          ? ioctl_file_clone+0xe0/0xe0
          ? lock_downgrade+0x400/0x400
          ? lockdep_hardirqs_on_prepare+0x210/0x210
          ? __kasan_check_read+0x11/0x20
          ? lock_release+0xc8/0x650
          ? __task_pid_nr_ns+0xd3/0x250
          ? __kasan_check_read+0x11/0x20
          ? __fget_files+0x160/0x230
          ? __fget_light+0xf2/0x110
          __x64_sys_ioctl+0xc3/0x100
          do_syscall_64+0x37/0x80
          entry_SYSCALL_64_after_hwframe+0x44/0xae
         RIP: 0033:0x7f29ae85b427
         Code: 00 00 90 48 8b (...)
         RSP: 002b:00007f29acf5fcf8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
         RAX: ffffffffffffffda RBX: 00007f29acf5ff40 RCX: 00007f29ae85b427
         RDX: 00007f29acf5ff48 RSI: 00000000c038943b RDI: 0000000000000003
         RBP: 0000000001000000 R08: 0000000000000000 R09: 00007f29acf60120
         R10: 00005640d5fc7b00 R11: 0000000000000246 R12: 0000000000000003
         R13: 00007f29acf5ff48 R14: 00007f29acf5ff40 R15: 00007f29acf5fef8
         Modules linked in:
         ---[ end trace 85e5fce078dfbe04 ]---
      
        (gdb) l *(tree_mod_log_rewind+0x3b1)
        0xffffffff819e5b21 is in tree_mod_log_rewind (fs/btrfs/tree-mod-log.c:675).
        670                      * the modification. As we're going backwards, we do the
        671                      * opposite of each operation here.
        672                      */
        673                     switch (tm->op) {
        674                     case BTRFS_MOD_LOG_KEY_REMOVE_WHILE_FREEING:
        675                             BUG_ON(tm->slot < n);
        676                             fallthrough;
        677                     case BTRFS_MOD_LOG_KEY_REMOVE_WHILE_MOVING:
        678                     case BTRFS_MOD_LOG_KEY_REMOVE:
        679                             btrfs_set_node_key(eb, &tm->key, tm->slot);
        (gdb) quit
      
      The following steps explain in more detail how it happens:
      
      1) We have one tree mod log user (through fiemap or the logical ino ioctl),
         with a sequence number of 1, so we have fs_info->tree_mod_seq == 1.
         This is task A;
      
      2) Another task is at ctree.c:balance_level() and we have eb X currently as
         the root of the tree, and we promote its single child, eb Y, as the new
         root.
      
         Then, at ctree.c:balance_level(), we call:
      
            ret = btrfs_tree_mod_log_insert_root(root->node, child, true);
      
      3) At btrfs_tree_mod_log_insert_root() we create a tree mod log operation
         of type BTRFS_MOD_LOG_KEY_REMOVE_WHILE_FREEING, with a ->logical field
         pointing to ebX->start. We only have one item in eb X, so we create
         only one tree mod log operation, and store in the "tm_list" array;
      
      4) Then, still at btrfs_tree_mod_log_insert_root(), we create a tree mod
         log element of operation type BTRFS_MOD_LOG_ROOT_REPLACE, ->logical set
         to ebY->start, ->old_root.logical set to ebX->start, ->old_root.level
         set to the level of eb X and ->generation set to the generation of eb X;
      
      5) Then btrfs_tree_mod_log_insert_root() calls tree_mod_log_free_eb() with
         "tm_list" as argument. After that, tree_mod_log_free_eb() calls
         tree_mod_log_insert(). This inserts the mod log operation of type
         BTRFS_MOD_LOG_KEY_REMOVE_WHILE_FREEING from step 3 into the rbtree
         with a sequence number of 2 (and fs_info->tree_mod_seq set to 2);
      
      6) Then, after inserting the "tm_list" single element into the tree mod
         log rbtree, the BTRFS_MOD_LOG_ROOT_REPLACE element is inserted, which
         gets the sequence number 3 (and fs_info->tree_mod_seq set to 3);
      
      7) Back to ctree.c:balance_level(), we free eb X by calling
         btrfs_free_tree_block() on it. Because eb X was created in the current
         transaction, has no other references and writeback did not happen for
         it, we add it back to the free space cache/tree;
      
      8) Later some other task B allocates the metadata extent from eb X, since
         it is marked as free space in the space cache/tree, and uses it as a
         node for some other btree;
      
      9) The tree mod log user task calls btrfs_search_old_slot(), which calls
         btrfs_get_old_root(), and finally that calls tree_mod_log_oldest_root()
         with time_seq == 1 and eb_root == eb Y;
      
      10) The first iteration of the while loop finds the tree mod log element
          with sequence number 3, for the logical address of eb Y and of type
          BTRFS_MOD_LOG_ROOT_REPLACE;
      
      11) Because the operation type is BTRFS_MOD_LOG_ROOT_REPLACE, we don't
          break out of the loop, and set root_logical to point to
          tm->old_root.logical, which corresponds to the logical address of
          eb X;
      
      12) On the next iteration of the while loop, the call to
          tree_mod_log_search_oldest() returns the smallest tree mod log element
          for the logical address of eb X, which has a sequence number of 2, an
          operation type of BTRFS_MOD_LOG_KEY_REMOVE_WHILE_FREEING and
          corresponds to the old slot 0 of eb X (eb X had only 1 item in it
          before being freed at step 7);
      
      13) We then break out of the while loop and return the tree mod log
          operation of type BTRFS_MOD_LOG_ROOT_REPLACE (eb Y), and not the one
          for slot 0 of eb X, to btrfs_get_old_root();
      
      14) At btrfs_get_old_root(), we process the BTRFS_MOD_LOG_ROOT_REPLACE
          operation and set "logical" to the logical address of eb X, which was
          the old root. We then call tree_mod_log_search() passing it the logical
          address of eb X and time_seq == 1;
      
      15) But before calling tree_mod_log_search(), task B locks eb X, adds a
          key to eb X, which results in adding a tree mod log operation of type
          BTRFS_MOD_LOG_KEY_ADD, with a sequence number of 4, to the tree mod
          log, and increments the number of items in eb X from 0 to 1.
          Now fs_info->tree_mod_seq has a value of 4;
      
      16) Task A then calls tree_mod_log_search(), which returns the most recent
          tree mod log operation for eb X, which is the one just added by task B
          at the previous step, with a sequence number of 4, a type of
          BTRFS_MOD_LOG_KEY_ADD and for slot 0;
      
      17) Before task A locks and clones eb X, task A adds another key to eb X,
          which results in adding a new BTRFS_MOD_LOG_KEY_ADD mod log operation,
          with a sequence number of 5, for slot 1 of eb X, increments the
          number of items in eb X from 1 to 2, and unlocks eb X.
          Now fs_info->tree_mod_seq has a value of 5;
      
      18) Task A then locks eb X and clones it. The clone has a value of 2 for
          the number of items and the pointer "tm" points to the tree mod log
          operation with sequence number 4, not the most recent one with a
          sequence number of 5, so there is mismatch between the number of
          mod log operations that are going to be applied to the cloned version
          of eb X and the number of items in the clone;
      
      19) Task A then calls tree_mod_log_rewind() with the clone of eb X, the
          tree mod log operation with sequence number 4 and a type of
          BTRFS_MOD_LOG_KEY_ADD, and time_seq == 1;
      
      20) At tree_mod_log_rewind(), we set the local variable "n" with a value
          of 2, which is the number of items in the clone of eb X.
      
          Then in the first iteration of the while loop, we process the mod log
          operation with sequence number 4, which is targeted at slot 0 and has
          a type of BTRFS_MOD_LOG_KEY_ADD. This results in decrementing "n" from
          2 to 1.
      
          Then we pick the next tree mod log operation for eb X, which is the
          tree mod log operation with a sequence number of 2, a type of
          BTRFS_MOD_LOG_KEY_REMOVE_WHILE_FREEING and for slot 0, it is the one
          added in step 5 to the tree mod log tree.
      
          We go back to the top of the loop to process this mod log operation,
          and because its slot is 0 and "n" has a value of 1, we hit the BUG_ON:
      
              (...)
              switch (tm->op) {
              case BTRFS_MOD_LOG_KEY_REMOVE_WHILE_FREEING:
                      BUG_ON(tm->slot < n);
                      fallthrough;
      	(...)
      
      Fix this by checking for a more recent tree mod log operation after locking
      and cloning the extent buffer of the old root node, and use it as the first
      operation to apply to the cloned extent buffer when rewinding it.
      
      Stable backport notes: due to moved code and renames, in =< 5.11 the
      change should be applied to ctree.c:get_old_root.
      Reported-by: NZygo Blaxell <ce3g8jdj@umail.furryterror.org>
      Link: https://lore.kernel.org/linux-btrfs/20210404040732.GZ32440@hungrycats.org/
      Fixes: 834328a8 ("Btrfs: tree mod log's old roots could still be part of the tree")
      CC: stable@vger.kernel.org # 4.4+
      Signed-off-by: NFilipe Manana <fdmanana@suse.com>
      Signed-off-by: NDavid Sterba <dsterba@suse.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      1226f171
    • B
      tools/power/turbostat: Fix turbostat for AMD Zen CPUs · a51cc321
      Bas Nieuwenhuizen 提交于
      stable inclusion
      from stable-5.10.36
      commit b24f0e3810361575759b151d5b16ac8d9be95618
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 301b1d3a upstream.
      
      It was reported that on Zen+ system turbostat started exiting,
      which was tracked down to the MSR_PKG_ENERGY_STAT read failing because
      offset_to_idx wasn't returning a non-negative index.
      
      This patch combined the modification from Bingsong Si and
      Bas Nieuwenhuizen and addd the MSR to the index system as alternative for
      MSR_PKG_ENERGY_STATUS.
      
      Fixes: 9972d5d8 ("tools/power turbostat: Enable accumulate RAPL display")
      Reported-by: Nyouling257 <youling257@gmail.com>
      Tested-by: Nyouling257 <youling257@gmail.com>
      Tested-by: NKurt Garloff <kurt@garloff.de>
      Tested-by: NBingsong Si <owen.si@ucloud.cn>
      Tested-by: NArtem S. Tashkinov <aros@gmx.com>
      Co-developed-by: NBingsong Si <owen.si@ucloud.cn>
      Co-developed-by: NTerry Bowman <terry.bowman@amd.com>
      Signed-off-by: NBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
      Reviewed-by: NChen Yu <yu.c.chen@intel.com>
      Signed-off-by: NLen Brown <len.brown@intel.com>
      Cc: Salvatore Bonaccorso <carnil@debian.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      a51cc321
    • E
      ALSA: hda/realtek: Add quirk for Intel Clevo PCx0Dx · c9cfd066
      Eckhart Mohr 提交于
      stable inclusion
      from stable-5.10.36
      commit d1ca3d2c4fd5061355807abf4d8022e03b94c1b8
      bugzilla: 51867
      CVE: NA
      
      --------------------------------
      
      commit 970e3012 upstream.
      
      This applies a SND_PCI_QUIRK(...) to the Clevo PCx0Dx barebones. This
      fix enables audio output over the headset jack and ensures that a
      microphone connected via the headset combo jack is correctly recognized
      when pluged in.
      
      [ Rearranged the list entries in a sorted order -- tiwai ]
      Signed-off-by: NEckhart Mohr <e.mohr@tuxedocomputers.com>
      Co-developed-by: NWerner Sembach <wse@tuxedocomputers.com>
      Signed-off-by: NWerner Sembach <wse@tuxedocomputers.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20210427153025.451118-1-wse@tuxedocomputers.comSigned-off-by: NTakashi Iwai <tiwai@suse.de>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: NWeilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      c9cfd066