commit 207ca688162d4d77129981a8b4352114b97a52b5
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Jun 6 08:43:42 2022 +0200

    Linux 5.15.45
    
    Link: https://lore.kernel.org/r/20220603173820.663747061@linuxfoundation.org
    Tested-by: Fox Chen <foxhlchen@gmail.com>
    Tested-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Tested-by: Bagas Sanjaya <bagasdotme@gmail.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 37fad50e16ff9d43f46c12bc297132a0277b3b8e
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue May 31 15:07:49 2022 +0200

    ALSA: usb-audio: Optimize TEAC clock quirk
    
    commit 3753fcc22974affa26160ce1c46a6ebaaaa86758 upstream.
    
    Maris found out that the quirk for TEAC devices to work around the
    clock setup is needed to apply only when the base clock is changed,
    e.g. from 48000-based clocks (48000, 96000, 192000, 384000) to
    44100-based clocks (44100, 88200, 176400, 352800), or vice versa,
    while switching to another clock with the same base clock doesn't need
    the (forcible) interface setup.
    
    This patch implements the optimization for the TEAC clock quirk to
    avoid the unnecessary interface re-setup.
    
    Fixes: 5ce0b06ae5e6 ("ALSA: usb-audio: Workaround for clock setup on TEAC devices")
    Reported-by: Maris Abele <maris7abele@gmail.com>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20220531130749.30357-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6099a6c8a749a5c8d5f8b4c4342022a92072a02b
Author: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Date:   Sat Mar 19 13:38:24 2022 +0530

    bpf: Check PTR_TO_MEM | MEM_RDONLY in check_helper_mem_access
    
    commit 97e6d7dab1ca4648821c790a2b7913d6d5d549db upstream.
    
    The commit being fixed was aiming to disallow users from incorrectly
    obtaining writable pointer to memory that is only meant to be read. This
    is enforced now using a MEM_RDONLY flag.
    
    For instance, in case of global percpu variables, when the BTF type is
    not struct (e.g. bpf_prog_active), the verifier marks register type as
    PTR_TO_MEM | MEM_RDONLY from bpf_this_cpu_ptr or bpf_per_cpu_ptr
    helpers. However, when passing such pointer to kfunc, global funcs, or
    BPF helpers, in check_helper_mem_access, there is no expectation
    MEM_RDONLY flag will be set, hence it is checked as pointer to writable
    memory. Later, verifier sets up argument type of global func as
    PTR_TO_MEM | PTR_MAYBE_NULL, so user can use a global func to get around
    the limitations imposed by this flag.
    
    This check will also cover global non-percpu variables that may be
    introduced in kernel BTF in future.
    
    Also, we update the log message for PTR_TO_BUF case to be similar to
    PTR_TO_MEM case, so that the reason for error is clear to user.
    
    Fixes: 34d3a78c681e ("bpf: Make per_cpu_ptr return rdonly PTR_TO_MEM.")
    Reviewed-by: Hao Luo <haoluo@google.com>
    Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20220319080827.73251-3-memxor@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5d0bba8232bf22ce13747cbfc8f696318ff01a50
Author: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Date:   Sat Mar 19 13:38:25 2022 +0530

    bpf: Reject writes for PTR_TO_MAP_KEY in check_helper_mem_access
    
    commit 7b3552d3f9f6897851fc453b5131a967167e43c2 upstream.
    
    It is not permitted to write to PTR_TO_MAP_KEY, but the current code in
    check_helper_mem_access would allow for it, reject this case as well, as
    helpers taking ARG_PTR_TO_UNINIT_MEM also take PTR_TO_MAP_KEY.
    
    Fixes: 69c087ba6225 ("bpf: Add bpf_for_each_map_elem() helper")
    Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20220319080827.73251-4-memxor@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 51f6657e94439f303c731b57734b9dc255687dff
Author: Yuntao Wang <ytcoode@gmail.com>
Date:   Thu Apr 7 21:04:23 2022 +0800

    bpf: Fix excessive memory allocation in stack_map_alloc()
    
    commit b45043192b3e481304062938a6561da2ceea46a6 upstream.
    
    The 'n_buckets * (value_size + sizeof(struct stack_map_bucket))' part of the
    allocated memory for 'smap' is never used after the memlock accounting was
    removed, thus get rid of it.
    
    [ Note, Daniel:
    
    Commit b936ca643ade ("bpf: rework memlock-based memory accounting for maps")
    moved `cost += n_buckets * (value_size + sizeof(struct stack_map_bucket))`
    up and therefore before the bpf_map_area_alloc() allocation, sigh. In a later
    step commit c85d69135a91 ("bpf: move memory size checks to bpf_map_charge_init()"),
    and the overflow checks of `cost >= U32_MAX - PAGE_SIZE` moved into
    bpf_map_charge_init(). And then 370868107bf6 ("bpf: Eliminate rlimit-based
    memory accounting for stackmap maps") finally removed the bpf_map_charge_init().
    Anyway, the original code did the allocation same way as /after/ this fix. ]
    
    Fixes: b936ca643ade ("bpf: rework memlock-based memory accounting for maps")
    Signed-off-by: Yuntao Wang <ytcoode@gmail.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20220407130423.798386-1-ytcoode@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 77f8c4a5f3d0c6f1adefb44f1f8aa02de73eac2c
Author: Liu Jian <liujian56@huawei.com>
Date:   Sat Apr 16 18:57:59 2022 +0800

    bpf: Enlarge offset check value to INT_MAX in bpf_skb_{load,store}_bytes
    
    commit 45969b4152c1752089351cd6836a42a566d49bcf upstream.
    
    The data length of skb frags + frag_list may be greater than 0xffff, and
    skb_header_pointer can not handle negative offset. So, here INT_MAX is used
    to check the validity of offset. Add the same change to the related function
    skb_store_bytes.
    
    Fixes: 05c74e5e53f6 ("bpf: add bpf_skb_load_bytes helper")
    Signed-off-by: Liu Jian <liujian56@huawei.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Song Liu <songliubraving@fb.com>
    Link: https://lore.kernel.org/bpf/20220416105801.88708-2-liujian56@huawei.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e36452d5da6325df7c10cffc60a9e68d21e2606d
Author: Yuntao Wang <ytcoode@gmail.com>
Date:   Sat Apr 30 21:08:03 2022 +0800

    bpf: Fix potential array overflow in bpf_trampoline_get_progs()
    
    commit a2aa95b71c9bbec793b5c5fa50f0a80d882b3e8d upstream.
    
    The cnt value in the 'cnt >= BPF_MAX_TRAMP_PROGS' check does not
    include BPF_TRAMP_MODIFY_RETURN bpf programs, so the number of
    the attached BPF_TRAMP_MODIFY_RETURN bpf programs in a trampoline
    can exceed BPF_MAX_TRAMP_PROGS.
    
    When this happens, the assignment '*progs++ = aux->prog' in
    bpf_trampoline_get_progs() will cause progs array overflow as the
    progs field in the bpf_tramp_progs struct can only hold at most
    BPF_MAX_TRAMP_PROGS bpf programs.
    
    Fixes: 88fd9e5352fe ("bpf: Refactor trampoline update code")
    Signed-off-by: Yuntao Wang <ytcoode@gmail.com>
    Link: https://lore.kernel.org/r/20220430130803.210624-1-ytcoode@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e2fc17fcc503cfca57b5d1dd3b646ca7eebead97
Author: Chuck Lever <chuck.lever@oracle.com>
Date:   Sat May 21 19:06:13 2022 -0400

    NFSD: Fix possible sleep during nfsd4_release_lockowner()
    
    commit ce3c4ad7f4ce5db7b4f08a1e237d8dd94b39180b upstream.
    
    nfsd4_release_lockowner() holds clp->cl_lock when it calls
    check_for_locks(). However, check_for_locks() calls nfsd_file_get()
    / nfsd_file_put() to access the backing inode's flc_posix list, and
    nfsd_file_put() can sleep if the inode was recently removed.
    
    Let's instead rely on the stateowner's reference count to gate
    whether the release is permitted. This should be a reliable
    indication of locks-in-use since file lock operations and
    ->lm_get_owner take appropriate references, which are released
    appropriately when file locks are removed.
    
    Reported-by: Dai Ngo <dai.ngo@oracle.com>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fa1c51c82c0e72c101e62448df26c57b8fb10cbd
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Sat May 14 10:08:10 2022 -0400

    NFS: Memory allocation failures are not server fatal errors
    
    commit 452284407c18d8a522c3039339b1860afa0025a8 upstream.
    
    We need to filter out ENOMEM in nfs_error_is_fatal_on_server(), because
    running out of memory on our client is not a server error.
    
    Reported-by: Olga Kornievskaia <aglo@umich.edu>
    Fixes: 2dc23afffbca ("NFS: ENOMEM should also be a fatal error.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9bc73bbd559711b294812307fd00383bae1535f4
Author: Akira Yokosawa <akiyks@gmail.com>
Date:   Wed Apr 27 18:28:39 2022 +0900

    docs: submitting-patches: Fix crossref to 'The canonical patch format'
    
    commit 6d5aa418b3bd42cdccc36e94ee199af423ef7c84 upstream.
    
    The reference to `explicit_in_reply_to` is pointless as when the
    reference was added in the form of "#15" [1], Section 15) was "The
    canonical patch format".
    The reference of "#15" had not been properly updated in a couple of
    reorganizations during the plain-text SubmittingPatches era.
    
    Fix it by using `the_canonical_patch_format`.
    
    [1]: 2ae19acaa50a ("Documentation: Add "how to write a good patch summary" to SubmittingPatches")
    
    Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
    Fixes: 5903019b2a5e ("Documentation/SubmittingPatches: convert it to ReST markup")
    Fixes: 9b2c76777acc ("Documentation/SubmittingPatches: enrich the Sphinx output")
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
    Cc: stable@vger.kernel.org # v4.9+
    Link: https://lore.kernel.org/r/64e105a5-50be-23f2-6cae-903a2ea98e18@gmail.com
    Signed-off-by: Jonathan Corbet <corbet@lwn.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 581b2ed60535c432282534a46159d29594108061
Author: Xiu Jianfeng <xiujianfeng@huawei.com>
Date:   Fri Mar 18 14:02:01 2022 +0800

    tpm: ibmvtpm: Correct the return value in tpm_ibmvtpm_probe()
    
    commit d0dc1a7100f19121f6e7450f9cdda11926aa3838 upstream.
    
    Currently it returns zero when CRQ response timed out, it should return
    an error code instead.
    
    Fixes: d8d74ea3c002 ("tpm: ibmvtpm: Wait for buffer to be set before proceeding")
    Signed-off-by: Xiu Jianfeng <xiujianfeng@huawei.com>
    Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
    Acked-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b5745954a993a81b0d593d8ad60a349c45802d4c
Author: Stefan Mahnke-Hartmann <stefan.mahnke-hartmann@infineon.com>
Date:   Fri May 13 15:41:51 2022 +0200

    tpm: Fix buffer access in tpm2_get_tpm_pt()
    
    commit e57b2523bd37e6434f4e64c7a685e3715ad21e9a upstream.
    
    Under certain conditions uninitialized memory will be accessed.
    As described by TCG Trusted Platform Module Library Specification,
    rev. 1.59 (Part 3: Commands), if a TPM2_GetCapability is received,
    requesting a capability, the TPM in field upgrade mode may return a
    zero length list.
    Check the property count in tpm2_get_tpm_pt().
    
    Fixes: 2ab3241161b3 ("tpm: migrate tpm2_get_tpm_pt() to use struct tpm_buf")
    Cc: stable@vger.kernel.org
    Signed-off-by: Stefan Mahnke-Hartmann <stefan.mahnke-hartmann@infineon.com>
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 718ff5fc7e1cbd385faa21ccdf80a2dfc8d388f7
Author: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Date:   Fri Apr 15 13:59:52 2022 +0200

    media: i2c: imx412: Fix power_off ordering
    
    commit 9a199694c6a1519522ec73a4571f68abe9f13d5d upstream.
    
    The enable path does
    - gpio
    - clock
    
    The disable path does
    - gpio
    - clock
    
    Fix the order on the power-off path so that power-off and power-on have the
    same ordering for clock and gpio.
    
    Fixes: 9214e86c0cc1 ("media: i2c: Add imx412 camera sensor driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
    Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
    Reviewed-by: Daniele Alessandrelli <daniele.alessandrelli@intel.com>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d207a2e2080b8054b71855767e0846268a737dd9
Author: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Date:   Fri Apr 15 13:59:51 2022 +0200

    media: i2c: imx412: Fix reset GPIO polarity
    
    commit bb25f071fc92d3d227178a45853347c7b3b45a6b upstream.
    
    The imx412/imx577 sensor has a reset line that is active low not active
    high. Currently the logic for this is inverted.
    
    The right way to define the reset line is to declare it active low in the
    DTS and invert the logic currently contained in the driver.
    
    The DTS should represent the hardware does i.e. reset is active low.
    So:
    +               reset-gpios = <&tlmm 78 GPIO_ACTIVE_LOW>;
    not:
    -               reset-gpios = <&tlmm 78 GPIO_ACTIVE_HIGH>;
    
    I was a bit reticent about changing this logic since I thought it might
    negatively impact @intel.com users. Googling a bit though I believe this
    sensor is used on "Keem Bay" which is clearly a DTS based system and is not
    upstream yet.
    
    Fixes: 9214e86c0cc1 ("media: i2c: Add imx412 camera sensor driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
    Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
    Reviewed-by: Daniele Alessandrelli <daniele.alessandrelli@intel.com>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9ebed8d283e508779c694bcf3208512cf44d4d8b
Author: Reinette Chatre <reinette.chatre@intel.com>
Date:   Thu May 12 14:51:01 2022 -0700

    x86/sgx: Ensure no data in PCMD page after truncate
    
    commit e3a3bbe3e99de73043a1d32d36cf4d211dc58c7e upstream.
    
    A PCMD (Paging Crypto MetaData) page contains the PCMD
    structures of enclave pages that have been encrypted and
    moved to the shmem backing store. When all enclave pages
    sharing a PCMD page are loaded in the enclave, there is no
    need for the PCMD page and it can be truncated from the
    backing store.
    
    A few issues appeared around the truncation of PCMD pages. The
    known issues have been addressed but the PCMD handling code could
    be made more robust by loudly complaining if any new issue appears
    in this area.
    
    Add a check that will complain with a warning if the PCMD page is not
    actually empty after it has been truncated. There should never be data
    in the PCMD page at this point since it is was just checked to be empty
    and truncated with enclave mutex held and is updated with the
    enclave mutex held.
    
    Suggested-by: Dave Hansen <dave.hansen@linux.intel.com>
    Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Tested-by: Haitao Huang <haitao.huang@intel.com>
    Link: https://lkml.kernel.org/r/6495120fed43fafc1496d09dd23df922b9a32709.1652389823.git.reinette.chatre@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cd69479425118c7f54e83b320f2fe5cf41bedfe9
Author: Reinette Chatre <reinette.chatre@intel.com>
Date:   Thu May 12 14:51:00 2022 -0700

    x86/sgx: Fix race between reclaimer and page fault handler
    
    commit af117837ceb9a78e995804ade4726ad2c2c8981f upstream.
    
    Haitao reported encountering a WARN triggered by the ENCLS[ELDU]
    instruction faulting with a #GP.
    
    The WARN is encountered when the reclaimer evicts a range of
    pages from the enclave when the same pages are faulted back right away.
    
    Consider two enclave pages (ENCLAVE_A and ENCLAVE_B)
    sharing a PCMD page (PCMD_AB). ENCLAVE_A is in the
    enclave memory and ENCLAVE_B is in the backing store. PCMD_AB contains
    just one entry, that of ENCLAVE_B.
    
    Scenario proceeds where ENCLAVE_A is being evicted from the enclave
    while ENCLAVE_B is faulted in.
    
    sgx_reclaim_pages() {
    
      ...
    
      /*
       * Reclaim ENCLAVE_A
       */
      mutex_lock(&encl->lock);
      /*
       * Get a reference to ENCLAVE_A's
       * shmem page where enclave page
       * encrypted data will be stored
       * as well as a reference to the
       * enclave page's PCMD data page,
       * PCMD_AB.
       * Release mutex before writing
       * any data to the shmem pages.
       */
      sgx_encl_get_backing(...);
      encl_page->desc |= SGX_ENCL_PAGE_BEING_RECLAIMED;
      mutex_unlock(&encl->lock);
    
                                        /*
                                         * Fault ENCLAVE_B
                                         */
    
                                        sgx_vma_fault() {
    
                                          mutex_lock(&encl->lock);
                                          /*
                                           * Get reference to
                                           * ENCLAVE_B's shmem page
                                           * as well as PCMD_AB.
                                           */
                                          sgx_encl_get_backing(...)
                                         /*
                                          * Load page back into
                                          * enclave via ELDU.
                                          */
                                         /*
                                          * Release reference to
                                          * ENCLAVE_B' shmem page and
                                          * PCMD_AB.
                                          */
                                         sgx_encl_put_backing(...);
                                         /*
                                          * PCMD_AB is found empty so
                                          * it and ENCLAVE_B's shmem page
                                          * are truncated.
                                          */
                                         /* Truncate ENCLAVE_B backing page */
                                         sgx_encl_truncate_backing_page();
                                         /* Truncate PCMD_AB */
                                         sgx_encl_truncate_backing_page();
    
                                         mutex_unlock(&encl->lock);
    
                                         ...
                                         }
      mutex_lock(&encl->lock);
      encl_page->desc &=
           ~SGX_ENCL_PAGE_BEING_RECLAIMED;
      /*
      * Write encrypted contents of
      * ENCLAVE_A to ENCLAVE_A shmem
      * page and its PCMD data to
      * PCMD_AB.
      */
      sgx_encl_put_backing(...)
    
      /*
       * Reference to PCMD_AB is
       * dropped and it is truncated.
       * ENCLAVE_A's PCMD data is lost.
       */
      mutex_unlock(&encl->lock);
    }
    
    What happens next depends on whether it is ENCLAVE_A being faulted
    in or ENCLAVE_B being evicted - but both end up with ENCLS[ELDU] faulting
    with a #GP.
    
    If ENCLAVE_A is faulted then at the time sgx_encl_get_backing() is called
    a new PCMD page is allocated and providing the empty PCMD data for
    ENCLAVE_A would cause ENCLS[ELDU] to #GP
    
    If ENCLAVE_B is evicted first then a new PCMD_AB would be allocated by the
    reclaimer but later when ENCLAVE_A is faulted the ENCLS[ELDU] instruction
    would #GP during its checks of the PCMD value and the WARN would be
    encountered.
    
    Noting that the reclaimer sets SGX_ENCL_PAGE_BEING_RECLAIMED at the time
    it obtains a reference to the backing store pages of an enclave page it
    is in the process of reclaiming, fix the race by only truncating the PCMD
    page after ensuring that no page sharing the PCMD page is in the process
    of being reclaimed.
    
    Cc: stable@vger.kernel.org
    Fixes: 08999b2489b4 ("x86/sgx: Free backing memory after faulting the enclave page")
    Reported-by: Haitao Huang <haitao.huang@intel.com>
    Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Tested-by: Haitao Huang <haitao.huang@intel.com>
    Link: https://lkml.kernel.org/r/ed20a5db516aa813873268e125680041ae11dfcf.1652389823.git.reinette.chatre@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b070e97fbd143bc972b167f8c47796d9d1db9e44
Author: Reinette Chatre <reinette.chatre@intel.com>
Date:   Thu May 12 14:50:59 2022 -0700

    x86/sgx: Obtain backing storage page with enclave mutex held
    
    commit 0e4e729a830c1e7f31d3b3fbf8feb355a402b117 upstream.
    
    Haitao reported encountering a WARN triggered by the ENCLS[ELDU]
    instruction faulting with a #GP.
    
    The WARN is encountered when the reclaimer evicts a range of
    pages from the enclave when the same pages are faulted back
    right away.
    
    The SGX backing storage is accessed on two paths: when there
    are insufficient free pages in the EPC the reclaimer works
    to move enclave pages to the backing storage and as enclaves
    access pages that have been moved to the backing storage
    they are retrieved from there as part of page fault handling.
    
    An oversubscribed SGX system will often run the reclaimer and
    page fault handler concurrently and needs to ensure that the
    backing store is accessed safely between the reclaimer and
    the page fault handler. This is not the case because the
    reclaimer accesses the backing store without the enclave mutex
    while the page fault handler accesses the backing store with
    the enclave mutex.
    
    Consider the scenario where a page is faulted while a page sharing
    a PCMD page with the faulted page is being reclaimed. The
    consequence is a race between the reclaimer and page fault
    handler, the reclaimer attempting to access a PCMD at the
    same time it is truncated by the page fault handler. This
    could result in lost PCMD data. Data may still be
    lost if the reclaimer wins the race, this is addressed in
    the following patch.
    
    The reclaimer accesses pages from the backing storage without
    holding the enclave mutex and runs the risk of concurrently
    accessing the backing storage with the page fault handler that
    does access the backing storage with the enclave mutex held.
    
    In the scenario below a PCMD page is truncated from the backing
    store after all its pages have been loaded in to the enclave
    at the same time the PCMD page is loaded from the backing store
    when one of its pages are reclaimed:
    
    sgx_reclaim_pages() {              sgx_vma_fault() {
                                         ...
                                         mutex_lock(&encl->lock);
                                         ...
                                         __sgx_encl_eldu() {
                                           ...
                                           if (pcmd_page_empty) {
    /*
     * EPC page being reclaimed              /*
     * shares a PCMD page with an             * PCMD page truncated
     * enclave page that is being             * while requested from
     * faulted in.                            * reclaimer.
     */                                       */
    sgx_encl_get_backing()  <---------->      sgx_encl_truncate_backing_page()
                                            }
                                           mutex_unlock(&encl->lock);
    }                                    }
    
    In this scenario there is a race between the reclaimer and the page fault
    handler when the reclaimer attempts to get access to the same PCMD page
    that is being truncated. This could result in the reclaimer writing to
    the PCMD page that is then truncated, causing the PCMD data to be lost,
    or in a new PCMD page being allocated. The lost PCMD data may still occur
    after protecting the backing store access with the mutex - this is fixed
    in the next patch. By ensuring the backing store is accessed with the mutex
    held the enclave page state can be made accurate with the
    SGX_ENCL_PAGE_BEING_RECLAIMED flag accurately reflecting that a page
    is in the process of being reclaimed.
    
    Consistently protect the reclaimer's backing store access with the
    enclave's mutex to ensure that it can safely run concurrently with the
    page fault handler.
    
    Cc: stable@vger.kernel.org
    Fixes: 1728ab54b4be ("x86/sgx: Add a page reclaimer")
    Reported-by: Haitao Huang <haitao.huang@intel.com>
    Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Tested-by: Jarkko Sakkinen <jarkko@kernel.org>
    Tested-by: Haitao Huang <haitao.huang@intel.com>
    Link: https://lkml.kernel.org/r/fa2e04c561a8555bfe1f4e7adc37d60efc77387b.1652389823.git.reinette.chatre@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fd55a1707750a9c180050d363fe7341f9bc07935
Author: Reinette Chatre <reinette.chatre@intel.com>
Date:   Thu May 12 14:50:58 2022 -0700

    x86/sgx: Mark PCMD page as dirty when modifying contents
    
    commit 2154e1c11b7080aa19f47160bd26b6f39bbd7824 upstream.
    
    Recent commit 08999b2489b4 ("x86/sgx: Free backing memory
    after faulting the enclave page") expanded __sgx_encl_eldu()
    to clear an enclave page's PCMD (Paging Crypto MetaData)
    from the PCMD page in the backing store after the enclave
    page is restored to the enclave.
    
    Since the PCMD page in the backing store is modified the page
    should be marked as dirty to ensure the modified data is retained.
    
    Cc: stable@vger.kernel.org
    Fixes: 08999b2489b4 ("x86/sgx: Free backing memory after faulting the enclave page")
    Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Tested-by: Haitao Huang <haitao.huang@intel.com>
    Link: https://lkml.kernel.org/r/00cd2ac480db01058d112e347b32599c1a806bc4.1652389823.git.reinette.chatre@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cdf828c11c127b14344f4b2ac9826f40538528f3
Author: Reinette Chatre <reinette.chatre@intel.com>
Date:   Thu May 12 14:50:57 2022 -0700

    x86/sgx: Disconnect backing page references from dirty status
    
    commit 6bd429643cc265e94a9d19839c771bcc5d008fa8 upstream.
    
    SGX uses shmem backing storage to store encrypted enclave pages
    and their crypto metadata when enclave pages are moved out of
    enclave memory. Two shmem backing storage pages are associated with
    each enclave page - one backing page to contain the encrypted
    enclave page data and one backing page (shared by a few
    enclave pages) to contain the crypto metadata used by the
    processor to verify the enclave page when it is loaded back into
    the enclave.
    
    sgx_encl_put_backing() is used to release references to the
    backing storage and, optionally, mark both backing store pages
    as dirty.
    
    Managing references and dirty status together in this way results
    in both backing store pages marked as dirty, even if only one of
    the backing store pages are changed.
    
    Additionally, waiting until the page reference is dropped to set
    the page dirty risks a race with the page fault handler that
    may load outdated data into the enclave when a page is faulted
    right after it is reclaimed.
    
    Consider what happens if the reclaimer writes a page to the backing
    store and the page is immediately faulted back, before the reclaimer
    is able to set the dirty bit of the page:
    
    sgx_reclaim_pages() {                    sgx_vma_fault() {
      ...
      sgx_encl_get_backing();
      ...                                      ...
      sgx_reclaimer_write() {
        mutex_lock(&encl->lock);
        /* Write data to backing store */
        mutex_unlock(&encl->lock);
      }
                                               mutex_lock(&encl->lock);
                                               __sgx_encl_eldu() {
                                                 ...
                                                 /*
                                                  * Enclave backing store
                                                  * page not released
                                                  * nor marked dirty -
                                                  * contents may not be
                                                  * up to date.
                                                  */
                                                  sgx_encl_get_backing();
                                                  ...
                                                  /*
                                                   * Enclave data restored
                                                   * from backing store
                                                   * and PCMD pages that
                                                   * are not up to date.
                                                   * ENCLS[ELDU] faults
                                                   * because of MAC or PCMD
                                                   * checking failure.
                                                   */
                                                   sgx_encl_put_backing();
                                                }
                                                ...
      /* set page dirty */
      sgx_encl_put_backing();
      ...
                                                mutex_unlock(&encl->lock);
    }                                        }
    
    Remove the option to sgx_encl_put_backing() to set the backing
    pages as dirty and set the needed pages as dirty right after
    receiving important data while enclave mutex is held. This ensures that
    the page fault handler can get up to date data from a page and prepares
    the code for a following change where only one of the backing pages
    need to be marked as dirty.
    
    Cc: stable@vger.kernel.org
    Fixes: 1728ab54b4be ("x86/sgx: Add a page reclaimer")
    Suggested-by: Dave Hansen <dave.hansen@linux.intel.com>
    Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Tested-by: Haitao Huang <haitao.huang@intel.com>
    Link: https://lore.kernel.org/linux-sgx/8922e48f-6646-c7cc-6393-7c78dcf23d23@intel.com/
    Link: https://lkml.kernel.org/r/fa9f98986923f43e72ef4c6702a50b2a0b3c42e3.1652389823.git.reinette.chatre@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 12b635b4e349e6d03a2ec698f946073f62770892
Author: Tao Jin <tao-j@outlook.com>
Date:   Sun Apr 3 12:57:44 2022 -0400

    HID: multitouch: add quirks to enable Lenovo X12 trackpoint
    
    commit 95cd2cdc88c755dcd0a58b951faeb77742c733a4 upstream.
    
    This applies the similar quirks used by previous generation devices
    such as X1 tablet for X12 tablet, so that the trackpoint and buttons
    can work.
    
    This patch was applied and tested working on 5.17.1 .
    
    Cc: stable@vger.kernel.org # 5.8+ given that it relies on 40d5bb87377a
    Signed-off-by: Tao Jin <tao-j@outlook.com>
    Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    Link: https://lore.kernel.org/r/CO6PR03MB6241CB276FCDC7F4CEDC34F6E1E29@CO6PR03MB6241.namprd03.prod.outlook.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 18242f3428381c30f6bd04ce3c4a0a5f53a163a4
Author: Marek Maślanka <mm@semihalf.com>
Date:   Tue Apr 5 17:04:07 2022 +0200

    HID: multitouch: Add support for Google Whiskers Touchpad
    
    commit 1d07cef7fd7599450b3d03e1915efc2a96e1f03f upstream.
    
    The Google Whiskers touchpad does not work properly with the default
    multitouch configuration. Instead, use the same configuration as Google
    Rose.
    
    Signed-off-by: Marek Maslanka <mm@semihalf.com>
    Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 58cf68a1886d14ffdc5c892ce483a82156769e88
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Thu May 12 20:38:37 2022 -0700

    fs/ntfs3: validate BOOT sectors_per_clusters
    
    commit a3b774342fa752a5290c0de36375289dfcf4a260 upstream.
    
    When the NTFS BOOT sectors_per_clusters field is > 0x80, it represents a
    shift value.  Make sure that the shift value is not too large before using
    it (NTFS max cluster size is 2MB).  Return -EVINVAL if it too large.
    
    This prevents negative shift values and shift values that are larger than
    the field size.
    
    Prevents this UBSAN error:
    
     UBSAN: shift-out-of-bounds in ../fs/ntfs3/super.c:673:16
     shift exponent -192 is negative
    
    Link: https://lkml.kernel.org/r/20220502175342.20296-1-rdunlap@infradead.org
    Fixes: 82cae269cfa9 ("fs/ntfs3: Add initialization of super block")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Reported-by: syzbot+1631f09646bc214d2e76@syzkaller.appspotmail.com
    Reviewed-by: Namjae Jeon <linkinjeon@kernel.org>
    Cc: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: Kari Argillander <kari.argillander@stargateuniverse.net>
    Cc: Namjae Jeon <linkinjeon@kernel.org>
    Cc: Matthew Wilcox <willy@infradead.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6e5bc6f7fef0f3e725b801a510b205ebc6f245d8
Author: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
Date:   Tue Mar 22 16:23:39 2022 +0100

    raid5: introduce MD_BROKEN
    
    commit 57668f0a4cc4083a120cc8c517ca0055c4543b59 upstream.
    
    Raid456 module had allowed to achieve failed state. It was fixed by
    fb73b357fb9 ("raid5: block failing device if raid will be failed").
    This fix introduces a bug, now if raid5 fails during IO, it may result
    with a hung task without completion. Faulty flag on the device is
    necessary to process all requests and is checked many times, mainly in
    analyze_stripe().
    Allow to set faulty on drive again and set MD_BROKEN if raid is failed.
    
    As a result, this level is allowed to achieve failed state again, but
    communication with userspace (via -EBUSY status) will be preserved.
    
    This restores possibility to fail array via #mdadm --set-faulty command
    and will be fixed by additional verification on mdadm side.
    
    Reproduction steps:
     mdadm -CR imsm -e imsm -n 3 /dev/nvme[0-2]n1
     mdadm -CR r5 -e imsm -l5 -n3 /dev/nvme[0-2]n1 --assume-clean
     mkfs.xfs /dev/md126 -f
     mount /dev/md126 /mnt/root/
    
     fio --filename=/mnt/root/file --size=5GB --direct=1 --rw=randrw
    --bs=64k --ioengine=libaio --iodepth=64 --runtime=240 --numjobs=4
    --time_based --group_reporting --name=throughput-test-job
    --eta-newline=1 &
    
     echo 1 > /sys/block/nvme2n1/device/device/remove
     echo 1 > /sys/block/nvme1n1/device/device/remove
    
     [ 1475.787779] Call Trace:
     [ 1475.793111] __schedule+0x2a6/0x700
     [ 1475.799460] schedule+0x38/0xa0
     [ 1475.805454] raid5_get_active_stripe+0x469/0x5f0 [raid456]
     [ 1475.813856] ? finish_wait+0x80/0x80
     [ 1475.820332] raid5_make_request+0x180/0xb40 [raid456]
     [ 1475.828281] ? finish_wait+0x80/0x80
     [ 1475.834727] ? finish_wait+0x80/0x80
     [ 1475.841127] ? finish_wait+0x80/0x80
     [ 1475.847480] md_handle_request+0x119/0x190
     [ 1475.854390] md_make_request+0x8a/0x190
     [ 1475.861041] generic_make_request+0xcf/0x310
     [ 1475.868145] submit_bio+0x3c/0x160
     [ 1475.874355] iomap_dio_submit_bio.isra.20+0x51/0x60
     [ 1475.882070] iomap_dio_bio_actor+0x175/0x390
     [ 1475.889149] iomap_apply+0xff/0x310
     [ 1475.895447] ? iomap_dio_bio_actor+0x390/0x390
     [ 1475.902736] ? iomap_dio_bio_actor+0x390/0x390
     [ 1475.909974] iomap_dio_rw+0x2f2/0x490
     [ 1475.916415] ? iomap_dio_bio_actor+0x390/0x390
     [ 1475.923680] ? atime_needs_update+0x77/0xe0
     [ 1475.930674] ? xfs_file_dio_aio_read+0x6b/0xe0 [xfs]
     [ 1475.938455] xfs_file_dio_aio_read+0x6b/0xe0 [xfs]
     [ 1475.946084] xfs_file_read_iter+0xba/0xd0 [xfs]
     [ 1475.953403] aio_read+0xd5/0x180
     [ 1475.959395] ? _cond_resched+0x15/0x30
     [ 1475.965907] io_submit_one+0x20b/0x3c0
     [ 1475.972398] __x64_sys_io_submit+0xa2/0x180
     [ 1475.979335] ? do_io_getevents+0x7c/0xc0
     [ 1475.986009] do_syscall_64+0x5b/0x1a0
     [ 1475.992419] entry_SYSCALL_64_after_hwframe+0x65/0xca
     [ 1476.000255] RIP: 0033:0x7f11fc27978d
     [ 1476.006631] Code: Bad RIP value.
     [ 1476.073251] INFO: task fio:3877 blocked for more than 120 seconds.
    
    Cc: stable@vger.kernel.org
    Fixes: fb73b357fb9 ("raid5: block failing device if raid will be failed")
    Reviewd-by: Xiao Ni <xni@redhat.com>
    Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 69712b170237ec5979f168149cd31e851a465853
Author: Sarthak Kukreti <sarthakkukreti@google.com>
Date:   Tue May 31 15:56:40 2022 -0400

    dm verity: set DM_TARGET_IMMUTABLE feature flag
    
    commit 4caae58406f8ceb741603eee460d79bacca9b1b5 upstream.
    
    The device-mapper framework provides a mechanism to mark targets as
    immutable (and hence fail table reloads that try to change the target
    type). Add the DM_TARGET_IMMUTABLE flag to the dm-verity target's
    feature flags to prevent switching the verity target with a different
    target type.
    
    Fixes: a4ffc152198e ("dm: add verity target")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sarthak Kukreti <sarthakkukreti@google.com>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 40aaeb41dde09939ff41ccb2e569c3d8e46c6b3a
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Sun Apr 24 16:43:00 2022 -0400

    dm stats: add cond_resched when looping over entries
    
    commit bfe2b0146c4d0230b68f5c71a64380ff8d361f8b upstream.
    
    dm-stats can be used with a very large number of entries (it is only
    limited by 1/4 of total system memory), so add rescheduling points to
    the loops that iterate over the entries.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fd77cb62207431d6dff0f17315ad169b3df4d9ef
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Mon Apr 25 08:53:29 2022 -0400

    dm crypt: make printing of the key constant-time
    
    commit 567dd8f34560fa221a6343729474536aa7ede4fd upstream.
    
    The device mapper dm-crypt target is using scnprintf("%02x", cc->key[i]) to
    report the current key to userspace. However, this is not a constant-time
    operation and it may leak information about the key via timing, via cache
    access patterns or via the branch predictor.
    
    Change dm-crypt's key printing to use "%c" instead of "%02x". Also
    introduce hex2asc() that carefully avoids any branching or memory
    accesses when converting a number in the range 0 ... 15 to an ascii
    character.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Tested-by: Milan Broz <gmazyland@gmail.com>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ed0712361a917f57b6dbd4311d4b5d7223900b81
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Mon Apr 25 14:56:48 2022 +0300

    dm integrity: fix error code in dm_integrity_ctr()
    
    commit d3f2a14b8906df913cb04a706367b012db94a6e8 upstream.
    
    The "r" variable shadows an earlier "r" that has function scope.  It
    means that we accidentally return success instead of an error code.
    Smatch has a warning for this:
    
            drivers/md/dm-integrity.c:4503 dm_integrity_ctr()
            warn: missing error code 'r'
    
    Fixes: 7eada909bfd7 ("dm: add integrity target")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Reviewed-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a485b32de799e0ff1ebc7f7a2b78fb7a7df4d1d3
Author: Jonathan Bakker <xc-racer2@live.ca>
Date:   Sun Mar 27 11:08:51 2022 -0700

    ARM: dts: s5pv210: Correct interrupt name for bluetooth in Aries
    
    commit 3f5e3d3a8b895c8a11da8b0063ba2022dd9e2045 upstream.
    
    Correct the name of the bluetooth interrupt from host-wake to
    host-wakeup.
    
    Fixes: 1c65b6184441b ("ARM: dts: s5pv210: Correct BCM4329 bluetooth node")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Jonathan Bakker <xc-racer2@live.ca>
    Link: https://lore.kernel.org/r/CY4PR04MB0567495CFCBDC8D408D44199CB1C9@CY4PR04MB0567.namprd04.prod.outlook.com
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit db03727b4bbbbb36e6ef4cb655c670eefb6448e9
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Tue Apr 5 10:02:00 2022 -0400

    Bluetooth: hci_qca: Use del_timer_sync() before freeing
    
    commit 72ef98445aca568a81c2da050532500a8345ad3a upstream.
    
    While looking at a crash report on a timer list being corrupted, which
    usually happens when a timer is freed while still active. This is
    commonly triggered by code calling del_timer() instead of
    del_timer_sync() just before freeing.
    
    One possible culprit is the hci_qca driver, which does exactly that.
    
    Eric mentioned that wake_retrans_timer could be rearmed via the work
    queue, so also move the destruction of the work queue before
    del_timer_sync().
    
    Cc: Eric Dumazet <eric.dumazet@gmail.com>
    Cc: stable@vger.kernel.org
    Fixes: 0ff252c1976da ("Bluetooth: hciuart: Add support QCA chipset for UART")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f18aa2fc00bf1794fb2a92169b7fc6575c4cf289
Author: Craig McLure <craig@mclure.net>
Date:   Tue May 24 08:21:15 2022 +0200

    ALSA: usb-audio: Configure sync endpoints before data
    
    commit 0e85a22d01dfe9ad9a9d9e87cd4a88acce1aad65 upstream.
    
    Devices such as the TC-Helicon GoXLR require the sync endpoint to be
    configured in advance of the data endpoint in order for sound output
    to work.
    
    This patch simply changes the ordering of EP configuration to resolve
    this.
    
    Fixes: bf6313a0ff76 ("ALSA: usb-audio: Refactor endpoint management")
    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=215079
    Signed-off-by: Craig McLure <craig@mclure.net>
    Reviewed-by: Jaroslav Kysela <perex@perex.cz>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20220524062115.25968-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8d1f71573089a85db744e14b9daccb1333e19fdc
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sat May 21 08:53:25 2022 +0200

    ALSA: usb-audio: Add missing ep_idx in fixed EP quirks
    
    commit 7b0efea4baf02f5e2f89e5f9b75ef891571b45f1 upstream.
    
    The quirk entry for Focusrite Saffire 6 had no proper ep_idx for the
    capture endpoint, and this confused the driver, resulting in the
    broken sound.  This patch adds the missing ep_idx in the entry.
    
    While we are at it, a couple of other entries (for Digidesign MBox and
    MOTU MicroBook II) seem to have the same problem, and those are
    covered as well.
    
    Fixes: bf6313a0ff76 ("ALSA: usb-audio: Refactor endpoint management")
    Reported-by: André Kapelrud <a.kapelrud@gmail.com>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20220521065325.426-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8c9a54eed73880c56e5d5697b419399522495910
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sat May 21 08:46:27 2022 +0200

    ALSA: usb-audio: Workaround for clock setup on TEAC devices
    
    commit 5ce0b06ae5e69e23142e73c5c3c0260e9f2ccb4b upstream.
    
    Maris reported that TEAC UD-501 (0644:8043) doesn't work with the
    typical "clock source 41 is not valid, cannot use" errors on the
    recent kernels.  The currently known workaround so far is to restore
    (partially) what we've done unconditionally at the clock setup;
    namely, re-setup the USB interface immediately after the clock is
    changed.  This patch re-introduces the behavior conditionally for TEAC
    devices.
    
    Further notes:
    - The USB interface shall be set later in
      snd_usb_endpoint_configure(), but this seems to be too late.
    - Even calling  usb_set_interface() right after
      sne_usb_init_sample_rate() doesn't help; so this must be related
      with the clock validation, too.
    - The device may still spew the "clock source 41 is not valid" error
      at the first clock setup.  This seems happening at the very first
      try of clock setup, but it disappears at later attempts.
      The error is likely harmless because the driver retries the clock
      setup (such an error is more or less expected on some devices).
    
    Fixes: bf6313a0ff76 ("ALSA: usb-audio: Refactor endpoint management")
    Reported-and-tested-by: Maris Abele <maris7abele@gmail.com>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20220521064627.29292-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3ec459c8810e658401be428d3168eacfc380bdd0
Author: Sultan Alsawaf <sultan@kerneltoast.com>
Date:   Fri May 13 15:11:26 2022 -0700

    zsmalloc: fix races between asynchronous zspage free and page migration
    
    commit 2505a981114dcb715f8977b8433f7540854851d8 upstream.
    
    The asynchronous zspage free worker tries to lock a zspage's entire page
    list without defending against page migration.  Since pages which haven't
    yet been locked can concurrently migrate off the zspage page list while
    lock_zspage() churns away, lock_zspage() can suffer from a few different
    lethal races.
    
    It can lock a page which no longer belongs to the zspage and unsafely
    dereference page_private(), it can unsafely dereference a torn pointer to
    the next page (since there's a data race), and it can observe a spurious
    NULL pointer to the next page and thus not lock all of the zspage's pages
    (since a single page migration will reconstruct the entire page list, and
    create_page_chain() unconditionally zeroes out each list pointer in the
    process).
    
    Fix the races by using migrate_read_lock() in lock_zspage() to synchronize
    with page migration.
    
    Link: https://lkml.kernel.org/r/20220509024703.243847-1-sultan@kerneltoast.com
    Fixes: 77ff465799c602 ("zsmalloc: zs_page_migrate: skip unnecessary loops but not return -EBUSY if zspage is not inuse")
    Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
    Acked-by: Minchan Kim <minchan@kernel.org>
    Cc: Nitin Gupta <ngupta@vflare.org>
    Cc: Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5763176f695432bcfde726f0e9bfda1fdb7d4b04
Author: Vitaly Chikunov <vt@altlinux.org>
Date:   Thu Apr 21 20:25:10 2022 +0300

    crypto: ecrdsa - Fix incorrect use of vli_cmp
    
    commit 7cc7ab73f83ee6d50dc9536bc3355495d8600fad upstream.
    
    Correctly compare values that shall be greater-or-equal and not just
    greater.
    
    Fixes: 0d7a78643f69 ("crypto: ecrdsa - add EC-RDSA (GOST 34.10) algorithm")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Vitaly Chikunov <vt@altlinux.org>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit dd36037d4ae7d66a58ce0ee5ed414d185f9d8652
Author: Fabio Estevam <festevam@denx.de>
Date:   Wed Apr 20 09:06:01 2022 -0300

    crypto: caam - fix i.MX6SX entropy delay value
    
    commit 4ee4cdad368a26de3967f2975806a9ee2fa245df upstream.
    
    Since commit 358ba762d9f1 ("crypto: caam - enable prediction resistance
    in HRWNG") the following CAAM errors can be seen on i.MX6SX:
    
    caam_jr 2101000.jr: 20003c5b: CCB: desc idx 60: RNG: Hardware error
    hwrng: no data available
    
    This error is due to an incorrect entropy delay for i.MX6SX.
    
    Fix it by increasing the minimum entropy delay for i.MX6SX
    as done in U-Boot:
    https://patchwork.ozlabs.org/project/uboot/patch/20220415111049.2565744-1-gaurav.jain@nxp.com/
    
    As explained in the U-Boot patch:
    
    "RNG self tests are run to determine the correct entropy delay.
    Such tests are executed with different voltages and temperatures to identify
    the worst case value for the entropy delay. For i.MX6SX, it was determined
    that after adding a margin value of 1000 the minimum entropy delay should be
    at least 12000."
    
    Cc: <stable@vger.kernel.org>
    Fixes: 358ba762d9f1 ("crypto: caam - enable prediction resistance in HRWNG")
    Signed-off-by: Fabio Estevam <festevam@denx.de>
    Reviewed-by: Horia Geantă <horia.geanta@nxp.com>
    Reviewed-by: Vabhav Sharma <vabhav.sharma@nxp.com>
    Reviewed-by: Gaurav Jain <gaurav.jain@nxp.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d8fdb4b24097472ff6b3c0559448200d420b1418
Author: Ashish Kalra <ashish.kalra@amd.com>
Date:   Mon May 16 15:43:10 2022 +0000

    KVM: SVM: Use kzalloc for sev ioctl interfaces to prevent kernel data leak
    
    commit d22d2474e3953996f03528b84b7f52cc26a39403 upstream.
    
    For some sev ioctl interfaces, the length parameter that is passed maybe
    less than or equal to SEV_FW_BLOB_MAX_SIZE, but larger than the data
    that PSP firmware returns. In this case, kmalloc will allocate memory
    that is the size of the input rather than the size of the data.
    Since PSP firmware doesn't fully overwrite the allocated buffer, these
    sev ioctl interface may return uninitialized kernel slab memory.
    
    Reported-by: Andy Nguyen <theflow@google.com>
    Suggested-by: David Rientjes <rientjes@google.com>
    Suggested-by: Peter Gonda <pgonda@google.com>
    Cc: kvm@vger.kernel.org
    Cc: stable@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Fixes: eaf78265a4ab3 ("KVM: SVM: Move SEV code to separate file")
    Fixes: 2c07ded06427d ("KVM: SVM: add support for SEV attestation command")
    Fixes: 4cfdd47d6d95a ("KVM: SVM: Add KVM_SEV SEND_START command")
    Fixes: d3d1af85e2c75 ("KVM: SVM: Add KVM_SEND_UPDATE_DATA command")
    Fixes: eba04b20e4861 ("KVM: x86: Account a variety of miscellaneous allocations")
    Signed-off-by: Ashish Kalra <ashish.kalra@amd.com>
    Reviewed-by: Peter Gonda <pgonda@google.com>
    Message-Id: <20220516154310.3685678-1-Ashish.Kalra@amd.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8d3a2aa0976f57320ba89baf9d57fb158dd0cd0d
Author: Sean Christopherson <seanjc@google.com>
Date:   Thu Apr 7 00:23:13 2022 +0000

    KVM: x86: Drop WARNs that assert a triple fault never "escapes" from L2
    
    commit 45846661d10422ce9e22da21f8277540b29eca22 upstream.
    
    Remove WARNs that sanity check that KVM never lets a triple fault for L2
    escape and incorrectly end up in L1.  In normal operation, the sanity
    check is perfectly valid, but it incorrectly assumes that it's impossible
    for userspace to induce KVM_REQ_TRIPLE_FAULT without bouncing through
    KVM_RUN (which guarantees kvm_check_nested_state() will see and handle
    the triple fault).
    
    The WARN can currently be triggered if userspace injects a machine check
    while L2 is active and CR4.MCE=0.  And a future fix to allow save/restore
    of KVM_REQ_TRIPLE_FAULT, e.g. so that a synthesized triple fault isn't
    lost on migration, will make it trivially easy for userspace to trigger
    the WARN.
    
    Clearing KVM_REQ_TRIPLE_FAULT when forcibly leaving guest mode is
    tempting, but wrong, especially if/when the request is saved/restored,
    e.g. if userspace restores events (including a triple fault) and then
    restores nested state (which may forcibly leave guest mode).  Ignoring
    the fact that KVM doesn't currently provide the necessary APIs, it's
    userspace's responsibility to manage pending events during save/restore.
    
      ------------[ cut here ]------------
      WARNING: CPU: 7 PID: 1399 at arch/x86/kvm/vmx/nested.c:4522 nested_vmx_vmexit+0x7fe/0xd90 [kvm_intel]
      Modules linked in: kvm_intel kvm irqbypass
      CPU: 7 PID: 1399 Comm: state_test Not tainted 5.17.0-rc3+ #808
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
      RIP: 0010:nested_vmx_vmexit+0x7fe/0xd90 [kvm_intel]
      Call Trace:
       <TASK>
       vmx_leave_nested+0x30/0x40 [kvm_intel]
       vmx_set_nested_state+0xca/0x3e0 [kvm_intel]
       kvm_arch_vcpu_ioctl+0xf49/0x13e0 [kvm]
       kvm_vcpu_ioctl+0x4b9/0x660 [kvm]
       __x64_sys_ioctl+0x83/0xb0
       do_syscall_64+0x3b/0xc0
       entry_SYSCALL_64_after_hwframe+0x44/0xae
       </TASK>
      ---[ end trace 0000000000000000 ]---
    
    Fixes: cb6a32c2b877 ("KVM: x86: Handle triple fault in L2 without killing L1")
    Cc: stable@vger.kernel.org
    Cc: Chenyi Qiang <chenyi.qiang@intel.com>
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Message-Id: <20220407002315.78092-2-seanjc@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 531d1070d864c78283b7597449e60ddc53319d88
Author: Sean Christopherson <seanjc@google.com>
Date:   Fri Mar 11 03:27:41 2022 +0000

    KVM: x86: avoid calling x86 emulator without a decoded instruction
    
    commit fee060cd52d69c114b62d1a2948ea9648b5131f9 upstream.
    
    Whenever x86_decode_emulated_instruction() detects a breakpoint, it
    returns the value that kvm_vcpu_check_breakpoint() writes into its
    pass-by-reference second argument.  Unfortunately this is completely
    bogus because the expected outcome of x86_decode_emulated_instruction
    is an EMULATION_* value.
    
    Then, if kvm_vcpu_check_breakpoint() does "*r = 0" (corresponding to
    a KVM_EXIT_DEBUG userspace exit), it is misunderstood as EMULATION_OK
    and x86_emulate_instruction() is called without having decoded the
    instruction.  This causes various havoc from running with a stale
    emulation context.
    
    The fix is to move the call to kvm_vcpu_check_breakpoint() where it was
    before commit 4aa2691dcbd3 ("KVM: x86: Factor out x86 instruction
    emulation with decoding") introduced x86_decode_emulated_instruction().
    The other caller of the function does not need breakpoint checks,
    because it is invoked as part of a vmexit and the processor has already
    checked those before executing the instruction that #GP'd.
    
    This fixes CVE-2022-1852.
    
    Reported-by: Qiuhao Li <qiuhao@sysec.org>
    Reported-by: Gaoning Pan <pgn@zju.edu.cn>
    Reported-by: Yongkang Jia <kangel@zju.edu.cn>
    Fixes: 4aa2691dcbd3 ("KVM: x86: Factor out x86 instruction emulation with decoding")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Message-Id: <20220311032801.3467418-2-seanjc@google.com>
    [Rewrote commit message according to Qiuhao's report, since a patch
     already existed to fix the bug. - Paolo]
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit eea9755a04e042bfd15566d7524aadcb741c4a2b
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Tue May 24 09:43:31 2022 -0400

    x86, kvm: use correct GFP flags for preemption disabled
    
    commit baec4f5a018fe2d708fc1022330dba04b38b5fe3 upstream.
    
    Commit ddd7ed842627 ("x86/kvm: Alloc dummy async #PF token outside of
    raw spinlock") leads to the following Smatch static checker warning:
    
            arch/x86/kernel/kvm.c:212 kvm_async_pf_task_wake()
            warn: sleeping in atomic context
    
    arch/x86/kernel/kvm.c
        202         raw_spin_lock(&b->lock);
        203         n = _find_apf_task(b, token);
        204         if (!n) {
        205                 /*
        206                  * Async #PF not yet handled, add a dummy entry for the token.
        207                  * Allocating the token must be down outside of the raw lock
        208                  * as the allocator is preemptible on PREEMPT_RT kernels.
        209                  */
        210                 if (!dummy) {
        211                         raw_spin_unlock(&b->lock);
    --> 212                         dummy = kzalloc(sizeof(*dummy), GFP_KERNEL);
                                                                    ^^^^^^^^^^
    Smatch thinks the caller has preempt disabled.  The `smdb.py preempt
    kvm_async_pf_task_wake` output call tree is:
    
    sysvec_kvm_asyncpf_interrupt() <- disables preempt
    -> __sysvec_kvm_asyncpf_interrupt()
       -> kvm_async_pf_task_wake()
    
    The caller is this:
    
    arch/x86/kernel/kvm.c
       290        DEFINE_IDTENTRY_SYSVEC(sysvec_kvm_asyncpf_interrupt)
       291        {
       292                struct pt_regs *old_regs = set_irq_regs(regs);
       293                u32 token;
       294
       295                ack_APIC_irq();
       296
       297                inc_irq_stat(irq_hv_callback_count);
       298
       299                if (__this_cpu_read(apf_reason.enabled)) {
       300                        token = __this_cpu_read(apf_reason.token);
       301                        kvm_async_pf_task_wake(token);
       302                        __this_cpu_write(apf_reason.token, 0);
       303                        wrmsrl(MSR_KVM_ASYNC_PF_ACK, 1);
       304                }
       305
       306                set_irq_regs(old_regs);
       307        }
    
    The DEFINE_IDTENTRY_SYSVEC() is a wrapper that calls this function
    from the call_on_irqstack_cond().  It's inside the call_on_irqstack_cond()
    where preempt is disabled (unless it's already disabled).  The
    irq_enter/exit_rcu() functions disable/enable preempt.
    
    Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7b54eb6319342eccd2c95a3e479e10282a5946c8
Author: Sean Christopherson <seanjc@google.com>
Date:   Thu May 19 07:57:11 2022 -0700

    x86/kvm: Alloc dummy async #PF token outside of raw spinlock
    
    commit 0547758a6de3cc71a0cfdd031a3621a30db6a68b upstream.
    
    Drop the raw spinlock in kvm_async_pf_task_wake() before allocating the
    the dummy async #PF token, the allocator is preemptible on PREEMPT_RT
    kernels and must not be called from truly atomic contexts.
    
    Opportunistically document why it's ok to loop on allocation failure,
    i.e. why the function won't get stuck in an infinite loop.
    
    Reported-by: Yajun Deng <yajun.deng@linux.dev>
    Cc: stable@vger.kernel.org
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1b6bcda5df8cae10228c4332f92f4d2e310310da
Author: Xiaomeng Tong <xiam0nd.tong@gmail.com>
Date:   Thu Apr 14 14:21:03 2022 +0800

    KVM: PPC: Book3S HV: fix incorrect NULL check on list iterator
    
    commit 300981abddcb13f8f06ad58f52358b53a8096775 upstream.
    
    The bug is here:
            if (!p)
                    return ret;
    
    The list iterator value 'p' will *always* be set and non-NULL by
    list_for_each_entry(), so it is incorrect to assume that the iterator
    value will be NULL if the list is empty or no element is found.
    
    To fix the bug, Use a new value 'iter' as the list iterator, while use
    the old value 'p' as a dedicated variable to point to the found element.
    
    Fixes: dfaa973ae960 ("KVM: PPC: Book3S HV: In H_SVM_INIT_DONE, migrate remaining normal-GFNs to secure-GFNs")
    Cc: stable@vger.kernel.org # v5.9+
    Signed-off-by: Xiaomeng Tong <xiam0nd.tong@gmail.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20220414062103.8153-1-xiam0nd.tong@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 01989d7eebb61c99bd4b88ebc8e261bd2f02caed
Author: Florian Westphal <fw@strlen.de>
Date:   Fri May 20 00:02:04 2022 +0200

    netfilter: conntrack: re-fetch conntrack after insertion
    
    commit 56b14ecec97f39118bf85c9ac2438c5a949509ed upstream.
    
    In case the conntrack is clashing, insertion can free skb->_nfct and
    set skb->_nfct to the already-confirmed entry.
    
    This wasn't found before because the conntrack entry and the extension
    space used to free'd after an rcu grace period, plus the race needs
    events enabled to trigger.
    
    Reported-by: <syzbot+793a590957d9c1b96620@syzkaller.appspotmail.com>
    Fixes: 71d8c47fc653 ("netfilter: conntrack: introduce clash resolution on insertion race")
    Fixes: 2ad9d7747c10 ("netfilter: conntrack: free extension area immediately")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9c413a8c8bb49cc16796371805ecb260e885bb2b
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Mon May 30 18:24:06 2022 +0200

    netfilter: nf_tables: double hook unregistration in netns path
    
    commit f9a43007d3f7ba76d5e7f9421094f00f2ef202f8 upstream.
    
    __nft_release_hooks() is called from pre_netns exit path which
    unregisters the hooks, then the NETDEV_UNREGISTER event is triggered
    which unregisters the hooks again.
    
    [  565.221461] WARNING: CPU: 18 PID: 193 at net/netfilter/core.c:495 __nf_unregister_net_hook+0x247/0x270
    [...]
    [  565.246890] CPU: 18 PID: 193 Comm: kworker/u64:1 Tainted: G            E     5.18.0-rc7+ #27
    [  565.253682] Workqueue: netns cleanup_net
    [  565.257059] RIP: 0010:__nf_unregister_net_hook+0x247/0x270
    [...]
    [  565.297120] Call Trace:
    [  565.300900]  <TASK>
    [  565.304683]  nf_tables_flowtable_event+0x16a/0x220 [nf_tables]
    [  565.308518]  raw_notifier_call_chain+0x63/0x80
    [  565.312386]  unregister_netdevice_many+0x54f/0xb50
    
    Unregister and destroy netdev hook from netns pre_exit via kfree_rcu
    so the NETDEV_UNREGISTER path see unregistered hooks.
    
    Fixes: 767d1216bff8 ("netfilter: nftables: fix possible UAF over chains from packet path in netns")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9ea55b9f43533d30168aae0dfdc5c230b561ef69
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Mon May 30 18:24:05 2022 +0200

    netfilter: nf_tables: hold mutex on netns pre_exit path
    
    commit 3923b1e4406680d57da7e873da77b1683035d83f upstream.
    
    clean_net() runs in workqueue while walking over the lists, grab mutex.
    
    Fixes: 767d1216bff8 ("netfilter: nftables: fix possible UAF over chains from packet path in netns")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 89ef50fe03a55feccf5681c237673a2f98161161
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Fri May 27 09:56:18 2022 +0200

    netfilter: nf_tables: sanitize nft_set_desc_concat_parse()
    
    commit fecf31ee395b0295f2d7260aa29946b7605f7c85 upstream.
    
    Add several sanity checks for nft_set_desc_concat_parse():
    
    - validate desc->field_count not larger than desc->field_len array.
    - field length cannot be larger than desc->field_len (ie. U8_MAX)
    - total length of the concatenation cannot be larger than register array.
    
    Joint work with Florian Westphal.
    
    Fixes: f3a2181e16f1 ("netfilter: nf_tables: Support for sets with multiple ranged fields")
    Reported-by: <zhangziming.zzm@antgroup.com>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e61717947af57fd6751e1e79d4179f561dfc6149
Author: Nicolai Stange <nstange@suse.de>
Date:   Thu Jun 2 22:23:27 2022 +0200

    crypto: drbg - make reseeding from get_random_bytes() synchronous
    
    commit 074bcd4000e0d812bc253f86fedc40f81ed59ccc upstream.
    
    get_random_bytes() usually hasn't full entropy available by the time DRBG
    instances are first getting seeded from it during boot. Thus, the DRBG
    implementation registers random_ready_callbacks which would in turn
    schedule some work for reseeding the DRBGs once get_random_bytes() has
    sufficient entropy available.
    
    For reference, the relevant history around handling DRBG (re)seeding in
    the context of a not yet fully seeded get_random_bytes() is:
    
      commit 16b369a91d0d ("random: Blocking API for accessing
                            nonblocking_pool")
      commit 4c7879907edd ("crypto: drbg - add async seeding operation")
    
      commit 205a525c3342 ("random: Add callback API for random pool
                            readiness")
      commit 57225e679788 ("crypto: drbg - Use callback API for random
                            readiness")
      commit c2719503f5e1 ("random: Remove kernel blocking API")
    
    However, some time later, the initialization state of get_random_bytes()
    has been made queryable via rng_is_initialized() introduced with commit
    9a47249d444d ("random: Make crng state queryable"). This primitive now
    allows for streamlining the DRBG reseeding from get_random_bytes() by
    replacing that aforementioned asynchronous work scheduling from
    random_ready_callbacks with some simpler, synchronous code in
    drbg_generate() next to the related logic already present therein. Apart
    from improving overall code readability, this change will also enable DRBG
    users to rely on wait_for_random_bytes() for ensuring that the initial
    seeding has completed, if desired.
    
    The previous patches already laid the grounds by making drbg_seed() to
    record at each DRBG instance whether it was being seeded at a time when
    rng_is_initialized() still had been false as indicated by
    ->seeded == DRBG_SEED_STATE_PARTIAL.
    
    All that remains to be done now is to make drbg_generate() check for this
    condition, determine whether rng_is_initialized() has flipped to true in
    the meanwhile and invoke a reseed from get_random_bytes() if so.
    
    Make this move:
    - rename the former drbg_async_seed() work handler, i.e. the one in charge
      of reseeding a DRBG instance from get_random_bytes(), to
      "drbg_seed_from_random()",
    - change its signature as appropriate, i.e. make it take a struct
      drbg_state rather than a work_struct and change its return type from
      "void" to "int" in order to allow for passing error information from
      e.g. its __drbg_seed() invocation onwards to callers,
    - make drbg_generate() invoke this drbg_seed_from_random() once it
      encounters a DRBG instance with ->seeded == DRBG_SEED_STATE_PARTIAL by
      the time rng_is_initialized() has flipped to true and
    - prune everything related to the former, random_ready_callback based
      mechanism.
    
    As drbg_seed_from_random() is now getting invoked from drbg_generate() with
    the ->drbg_mutex being held, it must not attempt to recursively grab it
    once again. Remove the corresponding mutex operations from what is now
    drbg_seed_from_random(). Furthermore, as drbg_seed_from_random() can now
    report errors directly to its caller, there's no need for it to temporarily
    switch the DRBG's ->seeded state to DRBG_SEED_STATE_UNSEEDED so that a
    failure of the subsequently invoked __drbg_seed() will get signaled to
    drbg_generate(). Don't do it then.
    
    Signed-off-by: Nicolai Stange <nstange@suse.de>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    [Jason: for stable, undid the modifications for the backport of 5acd3548.]
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit da208708f4c549995118c20add7e19c25b2215c5
Author: Nicolai Stange <nstange@suse.de>
Date:   Thu Jun 2 22:23:26 2022 +0200

    crypto: drbg - move dynamic ->reseed_threshold adjustments to __drbg_seed()
    
    commit 262d83a4290c331cd4f617a457408bdb82fbb738 upstream.
    
    Since commit 42ea507fae1a ("crypto: drbg - reseed often if seedsource is
    degraded"), the maximum seed lifetime represented by ->reseed_threshold
    gets temporarily lowered if the get_random_bytes() source cannot provide
    sufficient entropy yet, as is common during boot, and restored back to
    the original value again once that has changed.
    
    More specifically, if the add_random_ready_callback() invoked from
    drbg_prepare_hrng() in the course of DRBG instantiation does not return
    -EALREADY, that is, if get_random_bytes() has not been fully initialized
    at this point yet, drbg_prepare_hrng() will lower ->reseed_threshold
    to a value of 50. The drbg_async_seed() scheduled from said
    random_ready_callback will eventually restore the original value.
    
    A future patch will replace the random_ready_callback based notification
    mechanism and thus, there will be no add_random_ready_callback() return
    value anymore which could get compared to -EALREADY.
    
    However, there's __drbg_seed() which gets invoked in the course of both,
    the DRBG instantiation as well as the eventual reseeding from
    get_random_bytes() in aforementioned drbg_async_seed(), if any. Moreover,
    it knows about the get_random_bytes() initialization state by the time the
    seed data had been obtained from it: the new_seed_state argument introduced
    with the previous patch would get set to DRBG_SEED_STATE_PARTIAL in case
    get_random_bytes() had not been fully initialized yet and to
    DRBG_SEED_STATE_FULL otherwise. Thus, __drbg_seed() provides a convenient
    alternative for managing that ->reseed_threshold lowering and restoring at
    a central place.
    
    Move all ->reseed_threshold adjustment code from drbg_prepare_hrng() and
    drbg_async_seed() respectively to __drbg_seed(). Make __drbg_seed()
    lower the ->reseed_threshold to 50 in case its new_seed_state argument
    equals DRBG_SEED_STATE_PARTIAL and let it restore the original value
    otherwise.
    
    There is no change in behaviour.
    
    Signed-off-by: Nicolai Stange <nstange@suse.de>
    Reviewed-by: Stephan Müller <smueller@chronox.de>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 585f6b76d354185493dbb391a5575d8001873054
Author: Nicolai Stange <nstange@suse.de>
Date:   Thu Jun 2 22:23:25 2022 +0200

    crypto: drbg - track whether DRBG was seeded with !rng_is_initialized()
    
    commit 2bcd25443868aa8863779a6ebc6c9319633025d2 upstream.
    
    Currently, the DRBG implementation schedules asynchronous works from
    random_ready_callbacks for reseeding the DRBG instances with output from
    get_random_bytes() once the latter has sufficient entropy available.
    
    However, as the get_random_bytes() initialization state can get queried by
    means of rng_is_initialized() now, there is no real need for this
    asynchronous reseeding logic anymore and it's better to keep things simple
    by doing it synchronously when needed instead, i.e. from drbg_generate()
    once rng_is_initialized() has flipped to true.
    
    Of course, for this to work, drbg_generate() would need some means by which
    it can tell whether or not rng_is_initialized() has flipped to true since
    the last seeding from get_random_bytes(). Or equivalently, whether or not
    the last seed from get_random_bytes() has happened when
    rng_is_initialized() was still evaluating to false.
    
    As it currently stands, enum drbg_seed_state allows for the representation
    of two different DRBG seeding states: DRBG_SEED_STATE_UNSEEDED and
    DRBG_SEED_STATE_FULL. The former makes drbg_generate() to invoke a full
    reseeding operation involving both, the rather expensive jitterentropy as
    well as the get_random_bytes() randomness sources. The DRBG_SEED_STATE_FULL
    state on the other hand implies that no reseeding at all is required for a
    !->pr DRBG variant.
    
    Introduce the new DRBG_SEED_STATE_PARTIAL state to enum drbg_seed_state for
    representing the condition that a DRBG was being seeded when
    rng_is_initialized() had still been false. In particular, this new state
    implies that
    - the given DRBG instance has been fully seeded from the jitterentropy
      source (if enabled)
    - and drbg_generate() is supposed to reseed from get_random_bytes()
      *only* once rng_is_initialized() turns to true.
    
    Up to now, the __drbg_seed() helper used to set the given DRBG instance's
    ->seeded state to constant DRBG_SEED_STATE_FULL. Introduce a new argument
    allowing for the specification of the to be written ->seeded value instead.
    Make the first of its two callers, drbg_seed(), determine the appropriate
    value based on rng_is_initialized(). The remaining caller,
    drbg_async_seed(), is known to get invoked only once rng_is_initialized()
    is true, hence let it pass constant DRBG_SEED_STATE_FULL for the new
    argument to __drbg_seed().
    
    There is no change in behaviour, except for that the pr_devel() in
    drbg_generate() would now report "unseeded" for ->pr DRBG instances which
    had last been seeded when rng_is_initialized() was still evaluating to
    false.
    
    Signed-off-by: Nicolai Stange <nstange@suse.de>
    Reviewed-by: Stephan Müller <smueller@chronox.de>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fa996803b9d6be9d7cf694e7a61d5133df982d27
Author: Nicolai Stange <nstange@suse.de>
Date:   Thu Jun 2 22:23:24 2022 +0200

    crypto: drbg - prepare for more fine-grained tracking of seeding state
    
    commit ce8ce31b2c5c8b18667784b8c515650c65d57b4e upstream.
    
    There are two different randomness sources the DRBGs are getting seeded
    from, namely the jitterentropy source (if enabled) and get_random_bytes().
    At initial DRBG seeding time during boot, the latter might not have
    collected sufficient entropy for seeding itself yet and thus, the DRBG
    implementation schedules a reseed work from a random_ready_callback once
    that has happened. This is particularly important for the !->pr DRBG
    instances, for which (almost) no further reseeds are getting triggered
    during their lifetime.
    
    Because collecting data from the jitterentropy source is a rather expensive
    operation, the aforementioned asynchronously scheduled reseed work
    restricts itself to get_random_bytes() only. That is, it in some sense
    amends the initial DRBG seed derived from jitterentropy output at full
    (estimated) entropy with fresh randomness obtained from get_random_bytes()
    once that has been seeded with sufficient entropy itself.
    
    With the advent of rng_is_initialized(), there is no real need for doing
    the reseed operation from an asynchronously scheduled work anymore and a
    subsequent patch will make it synchronous by moving it next to related
    logic already present in drbg_generate().
    
    However, for tracking whether a full reseed including the jitterentropy
    source is required or a "partial" reseed involving only get_random_bytes()
    would be sufficient already, the boolean struct drbg_state's ->seeded
    member must become a tristate value.
    
    Prepare for this by introducing the new enum drbg_seed_state and change
    struct drbg_state's ->seeded member's type from bool to that type.
    
    For facilitating review, enum drbg_seed_state is made to only contain
    two members corresponding to the former ->seeded values of false and true
    resp. at this point: DRBG_SEED_STATE_UNSEEDED and DRBG_SEED_STATE_FULL. A
    third one for tracking the intermediate state of "seeded from jitterentropy
    only" will be introduced with a subsequent patch.
    
    There is no change in behaviour at this point.
    
    Signed-off-by: Nicolai Stange <nstange@suse.de>
    Reviewed-by: Stephan Müller <smueller@chronox.de>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e16cc79b0f916069de223bdb567fa0bc2ccd18a5
Author: Justin M. Forbes <jforbes@fedoraproject.org>
Date:   Thu Jun 2 22:23:23 2022 +0200

    lib/crypto: add prompts back to crypto libraries
    
    commit e56e18985596617ae426ed5997fb2e737cffb58b upstream.
    
    Commit 6048fdcc5f269 ("lib/crypto: blake2s: include as built-in") took
    away a number of prompt texts from other crypto libraries. This makes
    values flip from built-in to module when oldconfig runs, and causes
    problems when these crypto libs need to be built in for thingslike
    BIG_KEYS.
    
    Fixes: 6048fdcc5f269 ("lib/crypto: blake2s: include as built-in")
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: linux-crypto@vger.kernel.org
    Signed-off-by: Justin M. Forbes <jforbes@fedoraproject.org>
    [Jason: - moved menu into submenu of lib/ instead of root menu
            - fixed chacha sub-dependencies for CONFIG_CRYPTO]
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c504167adc3248095a905fa0700a9693897cb5ed
Author: Tadeusz Struk <tadeusz.struk@linaro.org>
Date:   Tue May 17 08:13:08 2022 +0900

    exfat: check if cluster num is valid
    
    commit 64ba4b15e5c045f8b746c6da5fc9be9a6b00b61d upstream.
    
    Syzbot reported slab-out-of-bounds read in exfat_clear_bitmap.
    This was triggered by reproducer calling truncute with size 0,
    which causes the following trace:
    
    BUG: KASAN: slab-out-of-bounds in exfat_clear_bitmap+0x147/0x490 fs/exfat/balloc.c:174
    Read of size 8 at addr ffff888115aa9508 by task syz-executor251/365
    
    Call Trace:
     __dump_stack lib/dump_stack.c:77 [inline]
     dump_stack_lvl+0x1e2/0x24b lib/dump_stack.c:118
     print_address_description+0x81/0x3c0 mm/kasan/report.c:233
     __kasan_report mm/kasan/report.c:419 [inline]
     kasan_report+0x1a4/0x1f0 mm/kasan/report.c:436
     __asan_report_load8_noabort+0x14/0x20 mm/kasan/report_generic.c:309
     exfat_clear_bitmap+0x147/0x490 fs/exfat/balloc.c:174
     exfat_free_cluster+0x25a/0x4a0 fs/exfat/fatent.c:181
     __exfat_truncate+0x99e/0xe00 fs/exfat/file.c:217
     exfat_truncate+0x11b/0x4f0 fs/exfat/file.c:243
     exfat_setattr+0xa03/0xd40 fs/exfat/file.c:339
     notify_change+0xb76/0xe10 fs/attr.c:336
     do_truncate+0x1ea/0x2d0 fs/open.c:65
    
    Move the is_valid_cluster() helper from fatent.c to a common
    header to make it reusable in other *.c files. And add is_valid_cluster()
    to validate if cluster number is within valid range in exfat_clear_bitmap()
    and exfat_set_bitmap().
    
    Link: https://syzkaller.appspot.com/bug?id=50381fc73821ecae743b8cf24b4c9a04776f767c
    Reported-by: syzbot+a4087e40b9c13aad7892@syzkaller.appspotmail.com
    Fixes: 1e49a94cf707 ("exfat: add bitmap operations")
    Cc: stable@vger.kernel.org # v5.7+
    Signed-off-by: Tadeusz Struk <tadeusz.struk@linaro.org>
    Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 195fffbf8291a84580762ac6e3101489954d0216
Author: Gustavo A. R. Silva <gustavoars@kernel.org>
Date:   Wed Apr 27 17:47:14 2022 -0500

    drm/i915: Fix -Wstringop-overflow warning in call to intel_read_wm_latency()
    
    commit 336feb502a715909a8136eb6a62a83d7268a353b upstream.
    
    Fix the following -Wstringop-overflow warnings when building with GCC-11:
    
    drivers/gpu/drm/i915/intel_pm.c:3106:9: warning: ‘intel_read_wm_latency’ accessing 16 bytes in a region of size 10 [-Wstringop-overflow=]
     3106 |         intel_read_wm_latency(dev_priv, dev_priv->wm.pri_latency);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/gpu/drm/i915/intel_pm.c:3106:9: note: referencing argument 2 of type ‘u16 *’ {aka ‘short unsigned int *’}
    drivers/gpu/drm/i915/intel_pm.c:2861:13: note: in a call to function ‘intel_read_wm_latency’
     2861 | static void intel_read_wm_latency(struct drm_i915_private *dev_priv,
          |             ^~~~~~~~~~~~~~~~~~~~~
    
    by removing the over-specified array size from the argument declarations.
    
    It seems that this code is actually safe because the size of the
    array depends on the hardware generation, and the function checks
    for that.
    
    Notice that wm can be an array of 5 elements:
    drivers/gpu/drm/i915/intel_pm.c:3109:   intel_read_wm_latency(dev_priv, dev_priv->wm.pri_latency);
    
    or an array of 8 elements:
    drivers/gpu/drm/i915/intel_pm.c:3131:   intel_read_wm_latency(dev_priv, dev_priv->wm.skl_latency);
    
    and the compiler legitimately complains about that.
    
    This helps with the ongoing efforts to globally enable
    -Wstringop-overflow.
    
    Link: https://github.com/KSPP/linux/issues/181
    Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 23cb9eff90b154716693d2a406919decf8a8bd8a
Author: Alex Elder <elder@linaro.org>
Date:   Thu Apr 21 13:53:33 2022 -0500

    net: ipa: compute proper aggregation limit
    
    commit c5794097b269f15961ed78f7f27b50e51766dec9 upstream.
    
    The aggregation byte limit for an endpoint is currently computed
    based on the endpoint's receive buffer size.
    
    However, some bytes at the front of each receive buffer are reserved
    on the assumption that--as with SKBs--it might be useful to insert
    data (such as headers) before what lands in the buffer.
    
    The aggregation byte limit currently doesn't take into account that
    reserved space, and as a result, aggregation could require space
    past that which is available in the buffer.
    
    Fix this by reducing the size used to compute the aggregation byte
    limit by the NET_SKB_PAD offset reserved for each receive buffer.
    
    Signed-off-by: Alex Elder <elder@linaro.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cf2fbc56c478a34a68ff1fa6ad08460054dfd499
Author: David Howells <dhowells@redhat.com>
Date:   Thu May 26 07:34:52 2022 +0100

    pipe: Fix missing lock in pipe_resize_ring()
    
    commit 189b0ddc245139af81198d1a3637cac74f96e13a upstream.
    
    pipe_resize_ring() needs to take the pipe->rd_wait.lock spinlock to
    prevent post_one_notification() from trying to insert into the ring
    whilst the ring is being replaced.
    
    The occupancy check must be done after the lock is taken, and the lock
    must be taken after the new ring is allocated.
    
    The bug can lead to an oops looking something like:
    
     BUG: KASAN: use-after-free in post_one_notification.isra.0+0x62e/0x840
     Read of size 4 at addr ffff88801cc72a70 by task poc/27196
     ...
     Call Trace:
      post_one_notification.isra.0+0x62e/0x840
      __post_watch_notification+0x3b7/0x650
      key_create_or_update+0xb8b/0xd20
      __do_sys_add_key+0x175/0x340
      __x64_sys_add_key+0xbe/0x140
      do_syscall_64+0x5c/0xc0
      entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    Reported by Selim Enes Karaduman @Enesdex working with Trend Micro Zero
    Day Initiative.
    
    Fixes: c73be61cede5 ("pipe: Add general notification queue support")
    Reported-by: zdi-disclosures@trendmicro.com # ZDI-CAN-17291
    Signed-off-by: David Howells <dhowells@redhat.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e6acf868ff0e09efd0a4bee109989640ac792ccf
Author: Kuniyuki Iwashima <kuniyu@amazon.co.jp>
Date:   Fri Apr 29 14:38:01 2022 -0700

    pipe: make poll_usage boolean and annotate its access
    
    commit f485922d8fe4e44f6d52a5bb95a603b7c65554bb upstream.
    
    Patch series "Fix data-races around epoll reported by KCSAN."
    
    This series suppresses a false positive KCSAN's message and fixes a real
    data-race.
    
    
    This patch (of 2):
    
    pipe_poll() runs locklessly and assigns 1 to poll_usage.  Once poll_usage
    is set to 1, it never changes in other places.  However, concurrent writes
    of a value trigger KCSAN, so let's make KCSAN happy.
    
    BUG: KCSAN: data-race in pipe_poll / pipe_poll
    
    write to 0xffff8880042f6678 of 4 bytes by task 174 on cpu 3:
     pipe_poll (fs/pipe.c:656)
     ep_item_poll.isra.0 (./include/linux/poll.h:88 fs/eventpoll.c:853)
     do_epoll_wait (fs/eventpoll.c:1692 fs/eventpoll.c:1806 fs/eventpoll.c:2234)
     __x64_sys_epoll_wait (fs/eventpoll.c:2246 fs/eventpoll.c:2241 fs/eventpoll.c:2241)
     do_syscall_64 (arch/x86/entry/common.c:50 arch/x86/entry/common.c:80)
     entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:113)
    
    write to 0xffff8880042f6678 of 4 bytes by task 177 on cpu 1:
     pipe_poll (fs/pipe.c:656)
     ep_item_poll.isra.0 (./include/linux/poll.h:88 fs/eventpoll.c:853)
     do_epoll_wait (fs/eventpoll.c:1692 fs/eventpoll.c:1806 fs/eventpoll.c:2234)
     __x64_sys_epoll_wait (fs/eventpoll.c:2246 fs/eventpoll.c:2241 fs/eventpoll.c:2241)
     do_syscall_64 (arch/x86/entry/common.c:50 arch/x86/entry/common.c:80)
     entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:113)
    
    Reported by Kernel Concurrency Sanitizer on:
    CPU: 1 PID: 177 Comm: epoll_race Not tainted 5.17.0-58927-gf443e374ae13 #6
    Hardware name: Red Hat KVM, BIOS 1.11.0-2.amzn2 04/01/2014
    
    Link: https://lkml.kernel.org/r/20220322002653.33865-1-kuniyu@amazon.co.jp
    Link: https://lkml.kernel.org/r/20220322002653.33865-2-kuniyu@amazon.co.jp
    Fixes: 3b844826b6c6 ("pipe: avoid unnecessary EPOLLET wakeups under normal loads")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.co.jp>
    Cc: Alexander Duyck <alexander.h.duyck@intel.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: Kuniyuki Iwashima <kuni1840@gmail.com>
    Cc: "Soheil Hassas Yeganeh" <soheil@google.com>
    Cc: "Sridhar Samudrala" <sridhar.samudrala@intel.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8a3db00ab0e20346ebcae58968a270350b164df1
Author: Stephen Brennan <stephen.s.brennan@oracle.com>
Date:   Thu May 19 09:50:30 2022 +0100

    assoc_array: Fix BUG_ON during garbage collect
    
    commit d1dc87763f406d4e67caf16dbe438a5647692395 upstream.
    
    A rare BUG_ON triggered in assoc_array_gc:
    
        [3430308.818153] kernel BUG at lib/assoc_array.c:1609!
    
    Which corresponded to the statement currently at line 1593 upstream:
    
        BUG_ON(assoc_array_ptr_is_meta(p));
    
    Using the data from the core dump, I was able to generate a userspace
    reproducer[1] and determine the cause of the bug.
    
    [1]: https://github.com/brenns10/kernel_stuff/tree/master/assoc_array_gc
    
    After running the iterator on the entire branch, an internal tree node
    looked like the following:
    
        NODE (nr_leaves_on_branch: 3)
          SLOT [0] NODE (2 leaves)
          SLOT [1] NODE (1 leaf)
          SLOT [2..f] NODE (empty)
    
    In the userspace reproducer, the pr_devel output when compressing this
    node was:
    
        -- compress node 0x5607cc089380 --
        free=0, leaves=0
        [0] retain node 2/1 [nx 0]
        [1] fold node 1/1 [nx 0]
        [2] fold node 0/1 [nx 2]
        [3] fold node 0/2 [nx 2]
        [4] fold node 0/3 [nx 2]
        [5] fold node 0/4 [nx 2]
        [6] fold node 0/5 [nx 2]
        [7] fold node 0/6 [nx 2]
        [8] fold node 0/7 [nx 2]
        [9] fold node 0/8 [nx 2]
        [10] fold node 0/9 [nx 2]
        [11] fold node 0/10 [nx 2]
        [12] fold node 0/11 [nx 2]
        [13] fold node 0/12 [nx 2]
        [14] fold node 0/13 [nx 2]
        [15] fold node 0/14 [nx 2]
        after: 3
    
    At slot 0, an internal node with 2 leaves could not be folded into the
    node, because there was only one available slot (slot 0). Thus, the
    internal node was retained. At slot 1, the node had one leaf, and was
    able to be folded in successfully. The remaining nodes had no leaves,
    and so were removed. By the end of the compression stage, there were 14
    free slots, and only 3 leaf nodes. The tree was ascended and then its
    parent node was compressed. When this node was seen, it could not be
    folded, due to the internal node it contained.
    
    The invariant for compression in this function is: whenever
    nr_leaves_on_branch < ASSOC_ARRAY_FAN_OUT, the node should contain all
    leaf nodes. The compression step currently cannot guarantee this, given
    the corner case shown above.
    
    To fix this issue, retry compression whenever we have retained a node,
    and yet nr_leaves_on_branch < ASSOC_ARRAY_FAN_OUT. This second
    compression will then allow the node in slot 1 to be folded in,
    satisfying the invariant. Below is the output of the reproducer once the
    fix is applied:
    
        -- compress node 0x560e9c562380 --
        free=0, leaves=0
        [0] retain node 2/1 [nx 0]
        [1] fold node 1/1 [nx 0]
        [2] fold node 0/1 [nx 2]
        [3] fold node 0/2 [nx 2]
        [4] fold node 0/3 [nx 2]
        [5] fold node 0/4 [nx 2]
        [6] fold node 0/5 [nx 2]
        [7] fold node 0/6 [nx 2]
        [8] fold node 0/7 [nx 2]
        [9] fold node 0/8 [nx 2]
        [10] fold node 0/9 [nx 2]
        [11] fold node 0/10 [nx 2]
        [12] fold node 0/11 [nx 2]
        [13] fold node 0/12 [nx 2]
        [14] fold node 0/13 [nx 2]
        [15] fold node 0/14 [nx 2]
        internal nodes remain despite enough space, retrying
        -- compress node 0x560e9c562380 --
        free=14, leaves=1
        [0] fold node 2/15 [nx 0]
        after: 3
    
    Changes
    =======
    DH:
     - Use false instead of 0.
     - Reorder the inserted lines in a couple of places to put retained before
       next_slot.
    
    ver #2)
     - Fix typo in pr_devel, correct comparison to "<="
    
    Fixes: 3cb989501c26 ("Add a generic associative array implementation.")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Stephen Brennan <stephen.s.brennan@oracle.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Andrew Morton <akpm@linux-foundation.org>
    cc: keyrings@vger.kernel.org
    Link: https://lore.kernel.org/r/20220511225517.407935-1-stephen.s.brennan@oracle.com/ # v1
    Link: https://lore.kernel.org/r/20220512215045.489140-1-stephen.s.brennan@oracle.com/ # v2
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 24c6fc6e7453f64cf6cbb4218c62aafdecc16ee1
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Thu Jun 2 14:02:18 2022 +0300

    i2c: ismt: prevent memory corruption in ismt_access()
    
    commit 690b2549b19563ec5ad53e5c82f6a944d910086e upstream.
    
    The "data->block[0]" variable comes from the user and is a number
    between 0-255.  It needs to be capped to prevent writing beyond the end
    of dma_buffer[].
    
    Fixes: 5e9a97b1f449 ("i2c: ismt: Adding support for I2C_SMBUS_BLOCK_PROC_CALL")
    Reported-and-tested-by: Zheyu Ma <zheyuma97@gmail.com>
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f692bcffd1f2ce5488d24fbcb8eab5f351abf79d
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed May 25 10:36:38 2022 +0200

    netfilter: nf_tables: disallow non-stateful expression in sets earlier
    
    commit 520778042ccca019f3ffa136dd0ca565c486cedd upstream.
    
    Since 3e135cd499bf ("netfilter: nft_dynset: dynamic stateful expression
    instantiation"), it is possible to attach stateful expressions to set
    elements.
    
    cd5125d8f518 ("netfilter: nf_tables: split set destruction in deactivate
    and destroy phase") introduces conditional destruction on the object to
    accomodate transaction semantics.
    
    nft_expr_init() calls expr->ops->init() first, then check for
    NFT_STATEFUL_EXPR, this stills allows to initialize a non-stateful
    lookup expressions which points to a set, which might lead to UAF since
    the set is not properly detached from the set->binding for this case.
    Anyway, this combination is non-sense from nf_tables perspective.
    
    This patch fixes this problem by checking for NFT_STATEFUL_EXPR before
    expr->ops->init() is called.
    
    The reporter provides a KASAN splat and a poc reproducer (similar to
    those autogenerated by syzbot to report use-after-free errors). It is
    unknown to me if they are using syzbot or if they use similar automated
    tool to locate the bug that they are reporting.
    
    For the record, this is the KASAN splat.
    
    [   85.431824] ==================================================================
    [   85.432901] BUG: KASAN: use-after-free in nf_tables_bind_set+0x81b/0xa20
    [   85.433825] Write of size 8 at addr ffff8880286f0e98 by task poc/776
    [   85.434756]
    [   85.434999] CPU: 1 PID: 776 Comm: poc Tainted: G        W         5.18.0+ #2
    [   85.436023] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-2 04/01/2014
    
    Fixes: 0b2d8a7b638b ("netfilter: nf_tables: add helper functions for expression handling")
    Reported-and-tested-by: Aaron Adams <edg-e@nccgroup.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f55c75cf73c0854c8b24bbc97a45d78e786cd8dc
Author: Piyush Malgujar <pmalgujar@marvell.com>
Date:   Wed May 11 06:36:59 2022 -0700

    drivers: i2c: thunderx: Allow driver to work with ACPI defined TWSI controllers
    
    [ Upstream commit 03a35bc856ddc09f2cc1f4701adecfbf3b464cb3 ]
    
    Due to i2c->adap.dev.fwnode not being set, ACPI_COMPANION() wasn't properly
    found for TWSI controllers.
    
    Signed-off-by: Szymon Balcerak <sbalcerak@marvell.com>
    Signed-off-by: Piyush Malgujar <pmalgujar@marvell.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 71475936e647c192d6c5321f1dc582c0f9573413
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Wed Apr 27 13:19:10 2022 +0300

    i2c: ismt: Provide a DMA buffer for Interrupt Cause Logging
    
    [ Upstream commit 17a0f3acdc6ec8b89ad40f6e22165a4beee25663 ]
    
    Before sending a MSI the hardware writes information pertinent to the
    interrupt cause to a memory location pointed by SMTICL register. This
    memory holds three double words where the least significant bit tells
    whether the interrupt cause of master/target/error is valid. The driver
    does not use this but we need to set it up because otherwise it will
    perform DMA write to the default address (0) and this will cause an
    IOMMU fault such as below:
    
      DMAR: DRHD: handling fault status reg 2
      DMAR: [DMA Write] Request device [00:12.0] PASID ffffffff fault addr 0
            [fault reason 05] PTE Write access is not set
    
    To prevent this from happening, provide a proper DMA buffer for this
    that then gets mapped by the IOMMU accordingly.
    
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Reviewed-by: From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 731561de2aeb2957ef55bb17d3d9cb39b9ded2ba
Author: Joel Stanley <joel@jms.id.au>
Date:   Tue May 17 18:52:17 2022 +0930

    net: ftgmac100: Disable hardware checksum on AST2600
    
    [ Upstream commit 6fd45e79e8b93b8d22fb8fe22c32fbad7e9190bd ]
    
    The AST2600 when using the i210 NIC over NC-SI has been observed to
    produce incorrect checksum results with specific MTU values. This was
    first observed when sending data across a long distance set of networks.
    
    On a local network, the following test was performed using a 1MB file of
    random data.
    
    On the receiver run this script:
    
     #!/bin/bash
     while [ 1 ]; do
            # Zero the stats
            nstat -r  > /dev/null
            nc -l 9899 > test-file
            # Check for checksum errors
            TcpInCsumErrors=$(nstat | grep TcpInCsumErrors)
            if [ -z "$TcpInCsumErrors" ]; then
                    echo No TcpInCsumErrors
            else
                    echo TcpInCsumErrors = $TcpInCsumErrors
            fi
     done
    
    On an AST2600 system:
    
     # nc <IP of  receiver host> 9899 < test-file
    
    The test was repeated with various MTU values:
    
     # ip link set mtu 1410 dev eth0
    
    The observed results:
    
     1500 - good
     1434 - bad
     1400 - good
     1410 - bad
     1420 - good
    
    The test was repeated after disabling tx checksumming:
    
     # ethtool -K eth0 tx-checksumming off
    
    And all MTU values tested resulted in transfers without error.
    
    An issue with the driver cannot be ruled out, however there has been no
    bug discovered so far.
    
    David has done the work to take the original bug report of slow data
    transfer between long distance connections and triaged it down to this
    test case.
    
    The vendor suspects this this is a hardware issue when using NC-SI. The
    fixes line refers to the patch that introduced AST2600 support.
    
    Reported-by: David Wilder <wilder@us.ibm.com>
    Reviewed-by: Dylan Hung <dylan_hung@aspeedtech.com>
    Signed-off-by: Joel Stanley <joel@jms.id.au>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 49651497b637bdba252c7b8143f32fc87fd6e976
Author: Lin Ma <linma@zju.edu.cn>
Date:   Wed May 18 18:53:21 2022 +0800

    nfc: pn533: Fix buggy cleanup order
    
    [ Upstream commit b8cedb7093b2d1394cae9b86494cba4b62d3a30a ]
    
    When removing the pn533 device (i2c or USB), there is a logic error. The
    original code first cancels the worker (flush_delayed_work) and then
    destroys the workqueue (destroy_workqueue), leaving the timer the last
    one to be deleted (del_timer). This result in a possible race condition
    in a multi-core preempt-able kernel. That is, if the cleanup
    (pn53x_common_clean) is concurrently run with the timer handler
    (pn533_listen_mode_timer), the timer can queue the poll_work to the
    already destroyed workqueue, causing use-after-free.
    
    This patch reorder the cleanup: it uses the del_timer_sync to make sure
    the handler is finished before the routine will destroy the workqueue.
    Note that the timer cannot be activated by the worker again.
    
    static void pn533_wq_poll(struct work_struct *work)
    ...
     rc = pn533_send_poll_frame(dev);
     if (rc)
       return;
    
     if (cur_mod->len == 0 && dev->poll_mod_count > 1)
       mod_timer(&dev->listen_timer, ...);
    
    That is, the mod_timer can be called only when pn533_send_poll_frame()
    returns no error, which is impossible because the device is detaching
    and the lower driver should return ENODEV code.
    
    Signed-off-by: Lin Ma <linma@zju.edu.cn>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 7e18fd12489b621fc7aad14e6da86f6c6daa5e92
Author: Thomas Bartschies <thomas.bartschies@cvk.de>
Date:   Wed May 18 08:32:18 2022 +0200

    net: af_key: check encryption module availability consistency
    
    [ Upstream commit 015c44d7bff3f44d569716117becd570c179ca32 ]
    
    Since the recent introduction supporting the SM3 and SM4 hash algos for IPsec, the kernel
    produces invalid pfkey acquire messages, when these encryption modules are disabled. This
    happens because the availability of the algos wasn't checked in all necessary functions.
    This patch adds these checks.
    
    Signed-off-by: Thomas Bartschies <thomas.bartschies@cvk.de>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 20b413c38b7c36b4251f55ec656644d10af59e2f
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Wed May 18 02:13:40 2022 -0400

    percpu_ref_init(): clean ->percpu_count_ref on failure
    
    [ Upstream commit a91714312eb16f9ecd1f7f8b3efe1380075f28d4 ]
    
    That way percpu_ref_exit() is safe after failing percpu_ref_init().
    At least one user (cgroup_create()) had a double-free that way;
    there might be other similar bugs.  Easier to fix in percpu_ref_init(),
    rather than playing whack-a-mole in sloppy users...
    
    Usual symptoms look like a messed refcounting in one of subsystems
    that use percpu allocations (might be percpu-refcount, might be
    something else).  Having refcounts for two different objects share
    memory is Not Nice(tm)...
    
    Reported-by: syzbot+5b1e53987f858500ec00@syzkaller.appspotmail.com
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 8243f5768dea24fe286a6323dc200225e7cff891
Author: Quentin Perret <qperret@google.com>
Date:   Fri May 13 09:26:07 2022 +0000

    KVM: arm64: Don't hypercall before EL2 init
    
    [ Upstream commit 2e40316753ee552fb598e8da8ca0d20a04e67453 ]
    
    Will reported the following splat when running with Protected KVM
    enabled:
    
    [    2.427181] ------------[ cut here ]------------
    [    2.427668] WARNING: CPU: 3 PID: 1 at arch/arm64/kvm/mmu.c:489 __create_hyp_private_mapping+0x118/0x1ac
    [    2.428424] Modules linked in:
    [    2.429040] CPU: 3 PID: 1 Comm: swapper/0 Not tainted 5.18.0-rc2-00084-g8635adc4efc7 #1
    [    2.429589] Hardware name: QEMU QEMU Virtual Machine, BIOS 0.0.0 02/06/2015
    [    2.430286] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [    2.430734] pc : __create_hyp_private_mapping+0x118/0x1ac
    [    2.431091] lr : create_hyp_exec_mappings+0x40/0x80
    [    2.431377] sp : ffff80000803baf0
    [    2.431597] x29: ffff80000803bb00 x28: 0000000000000000 x27: 0000000000000000
    [    2.432156] x26: 0000000000000000 x25: 0000000000000000 x24: 0000000000000000
    [    2.432561] x23: ffffcd96c343b000 x22: 0000000000000000 x21: ffff80000803bb40
    [    2.433004] x20: 0000000000000004 x19: 0000000000001800 x18: 0000000000000000
    [    2.433343] x17: 0003e68cf7efdd70 x16: 0000000000000004 x15: fffffc81f602a2c8
    [    2.434053] x14: ffffdf8380000000 x13: ffffcd9573200000 x12: ffffcd96c343b000
    [    2.434401] x11: 0000000000000004 x10: ffffcd96c1738000 x9 : 0000000000000004
    [    2.434812] x8 : ffff80000803bb40 x7 : 7f7f7f7f7f7f7f7f x6 : 544f422effff306b
    [    2.435136] x5 : 000000008020001e x4 : ffff207d80a88c00 x3 : 0000000000000005
    [    2.435480] x2 : 0000000000001800 x1 : 000000014f4ab800 x0 : 000000000badca11
    [    2.436149] Call trace:
    [    2.436600]  __create_hyp_private_mapping+0x118/0x1ac
    [    2.437576]  create_hyp_exec_mappings+0x40/0x80
    [    2.438180]  kvm_init_vector_slots+0x180/0x194
    [    2.458941]  kvm_arch_init+0x80/0x274
    [    2.459220]  kvm_init+0x48/0x354
    [    2.459416]  arm_init+0x20/0x2c
    [    2.459601]  do_one_initcall+0xbc/0x238
    [    2.459809]  do_initcall_level+0x94/0xb4
    [    2.460043]  do_initcalls+0x54/0x94
    [    2.460228]  do_basic_setup+0x1c/0x28
    [    2.460407]  kernel_init_freeable+0x110/0x178
    [    2.460610]  kernel_init+0x20/0x1a0
    [    2.460817]  ret_from_fork+0x10/0x20
    [    2.461274] ---[ end trace 0000000000000000 ]---
    
    Indeed, the Protected KVM mode promotes __create_hyp_private_mapping()
    to a hypercall as EL1 no longer has access to the hypervisor's stage-1
    page-table. However, the call from kvm_init_vector_slots() happens after
    pKVM has been initialized on the primary CPU, but before it has been
    initialized on secondaries. As such, if the KVM initcall procedure is
    migrated from one CPU to another in this window, the hypercall may end up
    running on a CPU for which EL2 has not been initialized.
    
    Fortunately, the pKVM hypervisor doesn't rely on the host to re-map the
    vectors in the private range, so the hypercall in question is in fact
    superfluous. Skip it when pKVM is enabled.
    
    Reported-by: Will Deacon <will@kernel.org>
    Signed-off-by: Quentin Perret <qperret@google.com>
    [maz: simplified the checks slightly]
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20220513092607.35233-1-qperret@google.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 8ff411998a333aa4ea07fe23d3ff4bba07445e2b
Author: IotaHydrae <writeforever@foxmail.com>
Date:   Wed May 4 19:59:04 2022 +0800

    pinctrl: sunxi: fix f1c100s uart2 function
    
    [ Upstream commit fa8785e5931367e2b43f2c507f26bcf3e281c0ca ]
    
    Change suniv f1c100s pinctrl,PD14 multiplexing function lvds1 to uart2
    
    When the pin PD13 and PD14 is setting up to uart2 function in dts,
    there's an error occurred:
    1c20800.pinctrl: unsupported function uart2 on pin PD14
    
    Because 'uart2' is not any one multiplexing option of PD14,
    and pinctrl don't know how to configure it.
    
    So change the pin PD14 lvds1 function to uart2.
    
    Signed-off-by: IotaHydrae <writeforever@foxmail.com>
    Reviewed-by: Andre Przywara <andre.przywara@arm.com>
    Link: https://lore.kernel.org/r/tencent_70C1308DDA794C81CAEF389049055BACEC09@qq.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 09901136e79de0774d77e64147c86092fd511824
Author: Forest Crossman <cyrozap@gmail.com>
Date:   Tue May 3 19:24:44 2022 -0500

    ALSA: usb-audio: Don't get sample rate for MCT Trigger 5 USB-to-HDMI
    
    [ Upstream commit d7be213849232a2accb219d537edf056d29186b4 ]
    
    This device doesn't support reading the sample rate, so we need to apply
    this quirk to avoid a 15-second delay waiting for three timeouts.
    
    Signed-off-by: Forest Crossman <cyrozap@gmail.com>
    Link: https://lore.kernel.org/r/20220504002444.114011-2-cyrozap@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>