Linux 5.10.115

 
ALSA: fireworks: fix wrong return count shorter than expected by 4 bytes [+ + +]
Author: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Date:   Sun Apr 24 19:24:28 2022 +0900

    ALSA: fireworks: fix wrong return count shorter than expected by 4 bytes
    
    commit eb9d84b0ffe39893cb23b0b6712bbe3637fa25fa upstream.
    
    ALSA fireworks driver has a bug in its initial state to return count
    shorter than expected by 4 bytes to userspace applications when handling
    response frame for Echo Audio Fireworks transaction. It's due to missing
    addition of the size for the type of event in ALSA firewire stack.
    
    Fixes: 555e8a8f7f14 ("ALSA: fireworks: Add command/response functionality into hwdep interface")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Link: https://lore.kernel.org/r/20220424102428.21109-1-o-takashi@sakamocchi.jp
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/realtek: Add quirk for Yoga Duet 7 13ITL6 speakers [+ + +]
Author: Zihao Wang <wzhd@ustc.edu>
Date:   Sun Apr 24 16:41:20 2022 +0800

    ALSA: hda/realtek: Add quirk for Yoga Duet 7 13ITL6 speakers
    
    commit 3b79954fd00d540677c97a560622b73f3a1f4e28 upstream.
    
    Lenovo Yoga Duet 7 13ITL6 has Realtek ALC287 and built-in
    speakers do not work out of the box. The fix developed for
    Yoga 7i 14ITL5 also enables speaker output for this model.
    
    Signed-off-by: Zihao Wang <wzhd@ustc.edu>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20220424084120.74125-1-wzhd@ustc.edu
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: da7219: Fix change notifications for tone generator frequency [+ + +]
Author: Mark Brown <broonie@kernel.org>
Date:   Wed Apr 20 14:34:37 2022 +0100

    ASoC: da7219: Fix change notifications for tone generator frequency
    
    commit 08ef48404965cfef99343d6bbbcf75b88c74aa0e upstream.
    
    The tone generator frequency control just returns 0 on successful write,
    not a boolean value indicating if there was a change or not.  Compare
    what was written with the value that was there previously so that
    notifications are generated appropriately when the value changes.
    
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Reviewed-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20220420133437.569229-1-broonie@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: dmaengine: Restore NULL prepare_slave_config() callback [+ + +]
Author: Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
Date:   Thu Apr 21 15:54:02 2022 +0300

    ASoC: dmaengine: Restore NULL prepare_slave_config() callback
    
    commit 660564fc9a92a893a14f255be434f7ea0b967901 upstream.
    
    As pointed out by Sascha Hauer, this patch changes:
    if (pmc->config && !pcm->config->prepare_slave_config)
            <do nothing>
    to:
    if (pmc->config && !pcm->config->prepare_slave_config)
            snd_dmaengine_pcm_prepare_slave_config()
    
    This breaks the drivers that do not need a call to
    dmaengine_slave_config(). Drivers that still need to call
    snd_dmaengine_pcm_prepare_slave_config(), but have a NULL
    pcm->config->prepare_slave_config should use
    snd_dmaengine_pcm_prepare_slave_config() as their prepare_slave_config
    callback.
    
    Fixes: 9a1e13440a4f ("ASoC: dmaengine: do not use a NULL prepare_slave_config() callback")
    Reported-by: Sascha Hauer <sha@pengutronix.de>
    Signed-off-by: Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
    Link: https://lore.kernel.org/r/20220421125403.2180824-1-codrin.ciubotariu@microchip.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: meson: Fix event generation for AUI ACODEC mux [+ + +]
Author: Mark Brown <broonie@kernel.org>
Date:   Thu Apr 21 13:38:01 2022 +0100

    ASoC: meson: Fix event generation for AUI ACODEC mux
    
    commit 2e3a0d1bfa95b54333f7add3e50e288769373873 upstream.
    
    The AIU ACODEC has a custom put() operation which returns 0 when the value
    of the mux changes, meaning that events are not generated for userspace.
    Change to return 1 in this case, the function returns early in the case
    where there is no change.
    
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Reviewed-by: Jerome Brunet <jbrunet@baylibre.com>
    Link: https://lore.kernel.org/r/20220421123803.292063-2-broonie@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: meson: Fix event generation for AUI CODEC mux [+ + +]
Author: Mark Brown <broonie@kernel.org>
Date:   Thu Apr 21 13:38:02 2022 +0100

    ASoC: meson: Fix event generation for AUI CODEC mux
    
    commit fce49921a22262736cdc3cc74fa67915b75e9363 upstream.
    
    The AIU CODEC has a custom put() operation which returns 0 when the value
    of the mux changes, meaning that events are not generated for userspace.
    Change to return 1 in this case, the function returns early in the case
    where there is no change.
    
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Reviewed-by: Jerome Brunet <jbrunet@baylibre.com>
    Link: https://lore.kernel.org/r/20220421123803.292063-3-broonie@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: meson: Fix event generation for G12A tohdmi mux [+ + +]
Author: Mark Brown <broonie@kernel.org>
Date:   Thu Apr 21 13:38:03 2022 +0100

    ASoC: meson: Fix event generation for G12A tohdmi mux
    
    commit 12131008fc13ff7f7690d170b7a8f72d24fd7d1e upstream.
    
    The G12A tohdmi has a custom put() operation which returns 0 when the value
    of the mux changes, meaning that events are not generated for userspace.
    Change to return 1 in this case, the function returns early in the case
    where there is no change.
    
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Reviewed-by: Jerome Brunet <jbrunet@baylibre.com>
    Link: https://lore.kernel.org/r/20220421123803.292063-4-broonie@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: wm8958: Fix change notifications for DSP controls [+ + +]
Author: Mark Brown <broonie@kernel.org>
Date:   Sat Apr 16 13:54:08 2022 +0100

    ASoC: wm8958: Fix change notifications for DSP controls
    
    commit b4f5c6b2e52b27462c0599e64e96e53b58438de1 upstream.
    
    The WM8958 DSP controls all return 0 on successful write, not a boolean
    value indicating if the write changed the value of the control. Fix this
    by returning 1 after a change, there is already a check at the start of
    each put() that skips the function in the case that there is no change.
    
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Link: https://lore.kernel.org/r/20220416125408.197440-1-broonie@kernel.org
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
block-map: add __GFP_ZERO flag for alloc_page in function bio_copy_kern [+ + +]
Author: Haimin Zhang <tcs.kernel@gmail.com>
Date:   Wed Feb 16 16:40:38 2022 +0800

    block-map: add __GFP_ZERO flag for alloc_page in function bio_copy_kern
    
    commit cc8f7fe1f5eab010191aa4570f27641876fa1267 upstream.
    
    Add __GFP_ZERO flag for alloc_page in function bio_copy_kern to initialize
    the buffer of a bio.
    
    Signed-off-by: Haimin Zhang <tcs.kernel@gmail.com>
    Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Link: https://lore.kernel.org/r/20220216084038.15635-1-tcs.kernel@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    [nobelbarakat: Backported to 5.10: Manually added flag]
    Signed-off-by: Nobel Barakat <nobelbarakat@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bnxt_en: Fix possible bnxt_open() failure caused by wrong RFS flag [+ + +]
Author: Somnath Kotur <somnath.kotur@broadcom.com>
Date:   Mon May 2 21:13:10 2022 -0400

    bnxt_en: Fix possible bnxt_open() failure caused by wrong RFS flag
    
    commit 13ba794397e45e52893cfc21d7a69cb5f341b407 upstream.
    
    bnxt_open() can fail in this code path, especially on a VF when
    it fails to reserve default rings:
    
    bnxt_open()
      __bnxt_open_nic()
        bnxt_clear_int_mode()
        bnxt_init_dflt_ring_mode()
    
    RX rings would be set to 0 when we hit this error path.
    
    It is possible for a subsequent bnxt_open() call to potentially succeed
    with a code path like this:
    
    bnxt_open()
      bnxt_hwrm_if_change()
        bnxt_fw_init_one()
          bnxt_fw_init_one_p3()
            bnxt_set_dflt_rfs()
              bnxt_rfs_capable()
                bnxt_hwrm_reserve_rings()
    
    On older chips, RFS is capable if we can reserve the number of vnics that
    is equal to RX rings + 1.  But since RX rings is still set to 0 in this
    code path, we may mistakenly think that RFS is supported for 0 RX rings.
    
    Later, when the default RX rings are reserved and we try to enable
    RFS, it would fail and cause bnxt_open() to fail unnecessarily.
    
    We fix this in 2 places.  bnxt_rfs_capable() will always return false if
    RX rings is not yet set.  bnxt_init_dflt_ring_mode() will call
    bnxt_set_dflt_rfs() which will always clear the RFS flags if RFS is not
    supported.
    
    Fixes: 20d7d1c5c9b1 ("bnxt_en: reliably allocate IRQ table on reset to avoid crash")
    Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

bnxt_en: Fix unnecessary dropping of RX packets [+ + +]
Author: Michael Chan <michael.chan@broadcom.com>
Date:   Mon May 2 21:13:12 2022 -0400

    bnxt_en: Fix unnecessary dropping of RX packets
    
    commit 195af57914d15229186658ed26dab24b9ada4122 upstream.
    
    In bnxt_poll_p5(), we first check cpr->has_more_work.  If it is true,
    we are in NAPI polling mode and we will call __bnxt_poll_cqs() to
    continue polling.  It is possible to exhanust the budget again when
    __bnxt_poll_cqs() returns.
    
    We then enter the main while loop to check for new entries in the NQ.
    If we had previously exhausted the NAPI budget, we may call
    __bnxt_poll_work() to process an RX entry with zero budget.  This will
    cause packets to be dropped unnecessarily, thinking that we are in the
    netpoll path.  Fix it by breaking out of the while loop if we need
    to process an RX NQ entry with no budget left.  We will then exit
    NAPI and stay in polling mode.
    
    Fixes: 389a877a3b20 ("bnxt_en: Process the NQ under NAPI continuous polling.")
    Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
btrfs: always log symlinks in full mode [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Thu Apr 21 10:56:39 2022 +0100

    btrfs: always log symlinks in full mode
    
    commit d0e64a981fd841cb0f28fcd6afcac55e6f1e6994 upstream.
    
    On Linux, empty symlinks are invalid, and attempting to create one with
    the system call symlink(2) results in an -ENOENT error and this is
    explicitly documented in the man page.
    
    If we rename a symlink that was created in the current transaction and its
    parent directory was logged before, we actually end up logging the symlink
    without logging its content, which is stored in an inline extent. That
    means that after a power failure we can end up with an empty symlink,
    having no content and an i_size of 0 bytes.
    
    It can be easily reproduced like this:
    
      $ mkfs.btrfs -f /dev/sdc
      $ mount /dev/sdc /mnt
    
      $ mkdir /mnt/testdir
      $ sync
    
      # Create a file inside the directory and fsync the directory.
      $ touch /mnt/testdir/foo
      $ xfs_io -c "fsync" /mnt/testdir
    
      # Create a symlink inside the directory and then rename the symlink.
      $ ln -s /mnt/testdir/foo /mnt/testdir/bar
      $ mv /mnt/testdir/bar /mnt/testdir/baz
    
      # Now fsync again the directory, this persist the log tree.
      $ xfs_io -c "fsync" /mnt/testdir
    
      <power failure>
    
      $ mount /dev/sdc /mnt
      $ stat -c %s /mnt/testdir/baz
      0
      $ readlink /mnt/testdir/baz
      $
    
    Fix this by always logging symlinks in full mode (LOG_INODE_ALL), so that
    their content is also logged.
    
    A test case for fstests will follow.
    
    CC: stable@vger.kernel.org # 4.9+
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
can: grcan: grcan_close(): fix deadlock [+ + +]
Author: Duoming Zhou <duoming@zju.edu.cn>
Date:   Mon Apr 25 12:24:00 2022 +0800

    can: grcan: grcan_close(): fix deadlock
    
    commit 47f070a63e735bcc8d481de31be1b5a1aa62b31c upstream.
    
    There are deadlocks caused by del_timer_sync(&priv->hang_timer) and
    del_timer_sync(&priv->rr_timer) in grcan_close(), one of the deadlocks
    are shown below:
    
       (Thread 1)              |      (Thread 2)
                               | grcan_reset_timer()
    grcan_close()              |  mod_timer()
     spin_lock_irqsave() //(1) |  (wait a time)
     ...                       | grcan_initiate_running_reset()
     del_timer_sync()          |  spin_lock_irqsave() //(2)
     (wait timer to stop)      |  ...
    
    We hold priv->lock in position (1) of thread 1 and use
    del_timer_sync() to wait timer to stop, but timer handler also need
    priv->lock in position (2) of thread 2. As a result, grcan_close()
    will block forever.
    
    This patch extracts del_timer_sync() from the protection of
    spin_lock_irqsave(), which could let timer handler to obtain the
    needed lock.
    
    Link: https://lore.kernel.org/all/20220425042400.66517-1-duoming@zju.edu.cn
    Fixes: 6cec9b07fe6a ("can: grcan: Add device driver for GRCAN and GRHCAN cores")
    Cc: stable@vger.kernel.org
    Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
    Reviewed-by: Andreas Larsson <andreas@gaisler.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: grcan: grcan_probe(): fix broken system id check for errata workaround needs [+ + +]
Author: Andreas Larsson <andreas@gaisler.com>
Date:   Fri Apr 29 10:46:55 2022 +0200

    can: grcan: grcan_probe(): fix broken system id check for errata workaround needs
    
    commit 1e93ed26acf03fe6c97c6d573a10178596aadd43 upstream.
    
    The systemid property was checked for in the wrong place of the device
    tree and compared to the wrong value.
    
    Fixes: 6cec9b07fe6a ("can: grcan: Add device driver for GRCAN and GRHCAN cores")
    Link: https://lore.kernel.org/all/20220429084656.29788-3-andreas@gaisler.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Andreas Larsson <andreas@gaisler.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: grcan: only use the NAPI poll budget for RX [+ + +]
Author: Andreas Larsson <andreas@gaisler.com>
Date:   Fri Apr 29 10:46:56 2022 +0200

    can: grcan: only use the NAPI poll budget for RX
    
    commit 2873d4d52f7c52d60b316ba6c47bd7122b5a9861 upstream.
    
    The previous split budget between TX and RX made it return not using
    the entire budget but at the same time not having calling called
    napi_complete. This sometimes led to the poll to not be called, and at
    the same time having TX and RX interrupts disabled resulting in the
    driver getting stuck.
    
    Fixes: 6cec9b07fe6a ("can: grcan: Add device driver for GRCAN and GRHCAN cores")
    Link: https://lore.kernel.org/all/20220429084656.29788-4-andreas@gaisler.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Andreas Larsson <andreas@gaisler.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: grcan: use ofdev->dev when allocating DMA memory [+ + +]
Author: Daniel Hellstrom <daniel@gaisler.com>
Date:   Fri Apr 29 10:46:54 2022 +0200

    can: grcan: use ofdev->dev when allocating DMA memory
    
    commit 101da4268626b00d16356a6bf284d66e44c46ff9 upstream.
    
    Use the device of the device tree node should be rather than the
    device of the struct net_device when allocating DMA buffers.
    
    The driver got away with it on sparc32 until commit 53b7670e5735
    ("sparc: factor the dma coherent mapping into helper") after which the
    driver oopses.
    
    Fixes: 6cec9b07fe6a ("can: grcan: Add device driver for GRCAN and GRHCAN cores")
    Link: https://lore.kernel.org/all/20220429084656.29788-2-andreas@gaisler.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Daniel Hellstrom <daniel@gaisler.com>
    Signed-off-by: Andreas Larsson <andreas@gaisler.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: isotp: remove re-binding of bound socket [+ + +]
Author: Oliver Hartkopp <socketcan@hartkopp.net>
Date:   Fri Apr 22 10:23:37 2022 +0200

    can: isotp: remove re-binding of bound socket
    
    commit 72ed3ee9fa0b461ad086403a8b5336154bd82234 upstream.
    
    As a carry over from the CAN_RAW socket (which allows to change the CAN
    interface while mantaining the filter setup) the re-binding of the
    CAN_ISOTP socket needs to take care about CAN ID address information and
    subscriptions. It turned out that this feature is so limited (e.g. the
    sockopts remain fix) that it finally has never been needed/used.
    
    In opposite to the stateless CAN_RAW socket the switching of the CAN ID
    subscriptions might additionally lead to an interrupted ongoing PDU
    reception. So better remove this unneeded complexity.
    
    Fixes: e057dd3fc20f ("can: add ISO 15765-2:2016 transport protocol")
    Link: https://lore.kernel.org/all/20220422082337.1676-1-socketcan@hartkopp.net
    Cc: stable@vger.kernel.org
    Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm: interlock pending dm_io and dm_wait_for_bios_completion [+ + +]
Author: Mike Snitzer <snitzer@redhat.com>
Date:   Thu Feb 17 23:40:02 2022 -0500

    dm: interlock pending dm_io and dm_wait_for_bios_completion
    
    commit 9f6dc633761006f974701d4c88da71ab68670749 upstream.
    
    Commit d208b89401e0 ("dm: fix mempool NULL pointer race when
    completing IO") didn't go far enough.
    
    When bio_end_io_acct ends the count of in-flight I/Os may reach zero
    and the DM device may be suspended. There is a possibility that the
    suspend races with dm_stats_account_io.
    
    Fix this by adding percpu "pending_io" counters to track outstanding
    dm_io. Move kicking of suspend queue to dm_io_dec_pending(). Also,
    rename md_in_flight_bios() to dm_in_flight_bios() and update it to
    iterate all pending_io counters.
    
    Fixes: d208b89401e0 ("dm: fix mempool NULL pointer race when completing IO")
    Cc: stable@vger.kernel.org
    Co-developed-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd/display: Avoid reading audio pattern past AUDIO_CHANNELS_COUNT [+ + +]
Author: Harry Wentland <harry.wentland@amd.com>
Date:   Tue Apr 19 13:03:12 2022 -0400

    drm/amd/display: Avoid reading audio pattern past AUDIO_CHANNELS_COUNT
    
    commit 3dfe85fa87b2a26bdbd292b66653bba065cf9941 upstream.
    
    A faulty receiver might report an erroneous channel count. We
    should guard against reading beyond AUDIO_CHANNELS_COUNT as
    that would overflow the dpcd_pattern_period array.
    
    Signed-off-by: Harry Wentland <harry.wentland@amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
firewire: core: extend card->lock in fw_core_handle_bus_reset [+ + +]
Author: Niels Dossche <dossche.niels@gmail.com>
Date:   Sat Apr 9 13:12:43 2022 +0900

    firewire: core: extend card->lock in fw_core_handle_bus_reset
    
    commit a7ecbe92b9243edbe94772f6f2c854e4142a3345 upstream.
    
    card->local_node and card->bm_retries are both always accessed under
    card->lock.
    fw_core_handle_bus_reset has a check whose condition depends on
    card->local_node and whose body writes to card->bm_retries.
    Both of these accesses are not under card->lock. Move the lock acquiring
    of card->lock to before this check such that these accesses do happen
    when card->lock is held.
    fw_destroy_nodes is called inside the check.
    Since fw_destroy_nodes already acquires card->lock inside its function
    body, move this out to the callsites of fw_destroy_nodes.
    Also add a comment to indicate which locking is necessary when calling
    fw_destroy_nodes.
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Niels Dossche <dossche.niels@gmail.com>
    Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Link: https://lore.kernel.org/r/20220409041243.603210-4-o-takashi@sakamocchi.jp
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

firewire: fix potential uaf in outbound_phy_packet_callback() [+ + +]
Author: Chengfeng Ye <cyeaa@connect.ust.hk>
Date:   Sat Apr 9 13:12:41 2022 +0900

    firewire: fix potential uaf in outbound_phy_packet_callback()
    
    commit b7c81f80246fac44077166f3e07103affe6db8ff upstream.
    
    &e->event and e point to the same address, and &e->event could
    be freed in queue_event. So there is a potential uaf issue if
    we dereference e after calling queue_event(). Fix this by adding
    a temporary variable to maintain e->client in advance, this can
    avoid the potential uaf issue.
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Chengfeng Ye <cyeaa@connect.ust.hk>
    Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Link: https://lore.kernel.org/r/20220409041243.603210-2-o-takashi@sakamocchi.jp
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

firewire: remove check of list iterator against head past the loop body [+ + +]
Author: Jakob Koschel <jakobkoschel@gmail.com>
Date:   Sat Apr 9 13:12:42 2022 +0900

    firewire: remove check of list iterator against head past the loop body
    
    commit 9423973869bd4632ffe669f950510c49296656e0 upstream.
    
    When list_for_each_entry() completes the iteration over the whole list
    without breaking the loop, the iterator value will be a bogus pointer
    computed based on the head element.
    
    While it is safe to use the pointer to determine if it was computed
    based on the head element, either with list_entry_is_head() or
    &pos->member == head, using the iterator variable after the loop should
    be avoided.
    
    In preparation to limit the scope of a list iterator to the list
    traversal loop, use a dedicated pointer to point to the found element [1].
    
    Link: https://lore.kernel.org/all/CAHk-=wgRr_D8CB-D9Kg-c=EHreAsk5SqXPwr9Y7k9sA6cWXJ6w@mail.gmail.com/ [1]
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Jakob Koschel <jakobkoschel@gmail.com>
    Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Link: https://lore.kernel.org/r/20220409041243.603210-3-o-takashi@sakamocchi.jp
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
genirq: Synchronize interrupt thread startup [+ + +]
Author: Thomas Pfaff <tpfaff@pcs.com>
Date:   Mon May 2 13:28:29 2022 +0200

    genirq: Synchronize interrupt thread startup
    
    commit 8707898e22fd665bc1d7b18b809be4b56ce25bdd upstream.
    
    A kernel hang can be observed when running setserial in a loop on a kernel
    with force threaded interrupts. The sequence of events is:
    
       setserial
         open("/dev/ttyXXX")
           request_irq()
         do_stuff()
          -> serial interrupt
             -> wake(irq_thread)
                  desc->threads_active++;
         close()
           free_irq()
             kthread_stop(irq_thread)
         synchronize_irq() <- hangs because desc->threads_active != 0
    
    The thread is created in request_irq() and woken up, but does not get on a
    CPU to reach the actual thread function, which would handle the pending
    wake-up. kthread_stop() sets the should stop condition which makes the
    thread immediately exit, which in turn leaves the stale threads_active
    count around.
    
    This problem was introduced with commit 519cc8652b3a, which addressed a
    interrupt sharing issue in the PCIe code.
    
    Before that commit free_irq() invoked synchronize_irq(), which waits for
    the hard interrupt handler and also for associated threads to complete.
    
    To address the PCIe issue synchronize_irq() was replaced with
    __synchronize_hardirq(), which only waits for the hard interrupt handler to
    complete, but not for threaded handlers.
    
    This was done under the assumption, that the interrupt thread already
    reached the thread function and waits for a wake-up, which is guaranteed to
    be handled before acting on the stop condition. The problematic case, that
    the thread would not reach the thread function, was obviously overlooked.
    
    Make sure that the interrupt thread is really started and reaches
    thread_fn() before returning from __setup_irq().
    
    This utilizes the existing wait queue in the interrupt descriptor. The
    wait queue is unused for non-shared interrupts. For shared interrupts the
    usage might cause a spurious wake-up of a waiter in synchronize_irq() or the
    completion of a threaded handler might cause a spurious wake-up of the
    waiter for the ready flag. Both are harmless and have no functional impact.
    
    [ tglx: Amended changelog ]
    
    Fixes: 519cc8652b3a ("genirq: Synchronize only with single thread on free_irq()")
    Signed-off-by: Thomas Pfaff <tpfaff@pcs.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Marc Zyngier <maz@kernel.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/552fe7b4-9224-b183-bb87-a8f36d335690@pcs.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gpio: pca953x: fix irq_stat not updated when irq is disabled (irq_mask not set) [+ + +]
Author: Puyou Lu <puyou.lu@gmail.com>
Date:   Fri May 6 16:06:30 2022 +0800

    gpio: pca953x: fix irq_stat not updated when irq is disabled (irq_mask not set)
    
    commit dba785798526a3282cc4d0f0ea751883715dbbb4 upstream.
    
    When one port's input state get inverted (eg. from low to hight) after
    pca953x_irq_setup but before setting irq_mask (by some other driver such as
    "gpio-keys"), the next inversion of this port (eg. from hight to low) will not
    be triggered any more (because irq_stat is not updated at the first time). Issue
    should be fixed after this commit.
    
    Fixes: 89ea8bbe9c3e ("gpio: pca953x.c: add interrupt handling capability")
    Signed-off-by: Puyou Lu <puyou.lu@gmail.com>
    Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gpiolib: of: fix bounds check for 'gpio-reserved-ranges' [+ + +]
Author: Andrei Lalaev <andrei.lalaev@emlid.com>
Date:   Fri Apr 15 10:07:11 2022 +0300

    gpiolib: of: fix bounds check for 'gpio-reserved-ranges'
    
    commit e75f88efac05bf4e107e4171d8db6d8c3937252d upstream.
    
    Gpiolib interprets the elements of "gpio-reserved-ranges" as "start,size"
    because it clears "size" bits starting from the "start" bit in the according
    bitmap. So it has to use "greater" instead of "greater or equal" when performs
    bounds check to make sure that GPIOs are in the available range.
    Previous implementation skipped ranges that include the last GPIO in
    the range.
    
    I wrote the mail to the maintainers
    (https://lore.kernel.org/linux-gpio/20220412115554.159435-1-andrei.lalaev@emlid.com/T/#u)
    of the questioned DTSes (because I couldn't understand how the maintainers
    interpreted this property), but I haven't received a response.
    Since the questioned DTSes use "gpio-reserved-ranges = <0 4>"
    (i.e., the beginning of the range), this patch doesn't affect these DTSes at all.
    TBH this patch doesn't break any existing DTSes because none of them
    reserve gpios at the end of range.
    
    Fixes: 726cb3ba4969 ("gpiolib: Support 'gpio-reserved-ranges' property")
    Signed-off-by: Andrei Lalaev <andrei.lalaev@emlid.com>
    Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hinic: fix bug of wq out of bound access [+ + +]
Author: Qiao Ma <mqaio@linux.alibaba.com>
Date:   Thu Apr 28 20:30:16 2022 +0800

    hinic: fix bug of wq out of bound access
    
    commit 52b2abef450a78e25d485ac61e32f4ce86a87701 upstream.
    
    If wq has only one page, we need to check wqe rolling over page by
    compare end_idx and curr_idx, and then copy wqe to shadow wqe to
    avoid out of bound access.
    This work has been done in hinic_get_wqe, but missed for hinic_read_wqe.
    This patch fixes it, and removes unnecessary MASKED_WQE_IDX().
    
    Fixes: 7dd29ee12865 ("hinic: add sriov feature support")
    Signed-off-by: Qiao Ma <mqaio@linux.alibaba.com>
    Reviewed-by: Xunlei Pang <xlpang@linux.alibaba.com>
    Link: https://lore.kernel.org/r/282817b0e1ae2e28fdf3ed8271a04e77f57bf42e.1651148587.git.mqaio@linux.alibaba.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hwmon: (adt7470) Fix warning on module removal [+ + +]
Author: Armin Wolf <W_Armin@gmx.de>
Date:   Thu Apr 7 12:13:12 2022 +0200

    hwmon: (adt7470) Fix warning on module removal
    
    commit 7b2666ce445c700b8dcee994da44ddcf050a0842 upstream.
    
    When removing the adt7470 module, a warning might be printed:
    
    do not call blocking ops when !TASK_RUNNING; state=1
    set at [<ffffffffa006052b>] adt7470_update_thread+0x7b/0x130 [adt7470]
    
    This happens because adt7470_update_thread() can leave the kthread in
    TASK_INTERRUPTIBLE state when the kthread is being stopped before
    the call of set_current_state(). Since kthread_exit() might sleep in
    exit_signals(), the warning is printed.
    Fix that by using schedule_timeout_interruptible() and removing
    the call of set_current_state().
    This causes TASK_INTERRUPTIBLE to be set after kthread_should_stop()
    which might cause the kthread to exit.
    
    Reported-by: Zheyu Ma <zheyuma97@gmail.com>
    Fixes: 93cacfd41f82 (hwmon: (adt7470) Allow faster removal)
    Signed-off-by: Armin Wolf <W_Armin@gmx.de>
    Tested-by: Zheyu Ma <zheyuma97@gmail.com>
    Link: https://lore.kernel.org/r/20220407101312.13331-1-W_Armin@gmx.de
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
iommu/vt-d: Calculate mask for non-aligned flushes [+ + +]
Author: David Stevens <stevensd@chromium.org>
Date:   Sun Apr 10 09:35:33 2022 +0800

    iommu/vt-d: Calculate mask for non-aligned flushes
    
    commit 59bf3557cf2f8a469a554aea1e3d2c8e72a579f7 upstream.
    
    Calculate the appropriate mask for non-size-aligned page selective
    invalidation. Since psi uses the mask value to mask out the lower order
    bits of the target address, properly flushing the iotlb requires using a
    mask value such that [pfn, pfn+pages) all lie within the flushed
    size-aligned region.  This is not normally an issue because iova.c
    always allocates iovas that are aligned to their size. However, iovas
    which come from other sources (e.g. userspace via VFIO) may not be
    aligned.
    
    To properly flush the IOTLB, both the start and end pfns need to be
    equal after applying the mask. That means that the most efficient mask
    to use is the index of the lowest bit that is equal where all higher
    bits are also equal. For example, if pfn=0x17f and pages=3, then
    end_pfn=0x181, so the smallest mask we can use is 8. Any differences
    above the highest bit of pages are due to carrying, so by xnor'ing pfn
    and end_pfn and then masking out the lower order bits based on pages, we
    get 0xffffff00, where the first set bit is the mask we want to use.
    
    Fixes: 6fe1010d6d9c ("vfio/type1: DMA unmap chunking")
    Cc: stable@vger.kernel.org
    Signed-off-by: David Stevens <stevensd@chromium.org>
    Reviewed-by: Kevin Tian <kevin.tian@intel.com>
    Link: https://lore.kernel.org/r/20220401022430.1262215-1-stevensd@google.com
    Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
    Link: https://lore.kernel.org/r/20220410013533.3959168-2-baolu.lu@linux.intel.com
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
KVM: LAPIC: Enable timer posted-interrupt only when mwait/hlt is advertised [+ + +]
Author: Wanpeng Li <wanpengli@tencent.com>
Date:   Tue Jan 25 04:08:58 2022 -0800

    KVM: LAPIC: Enable timer posted-interrupt only when mwait/hlt is advertised
    
    [ Upstream commit 1714a4eb6fb0cb79f182873cd011a8ed60ac65e8 ]
    
    As commit 0c5f81dad46 ("KVM: LAPIC: Inject timer interrupt via posted
    interrupt") mentioned that the host admin should well tune the guest
    setup, so that vCPUs are placed on isolated pCPUs, and with several pCPUs
    surplus for *busy* housekeeping.  In this setup, it is preferrable to
    disable mwait/hlt/pause vmexits to keep the vCPUs in non-root mode.
    
    However, if only some guests isolated and others not, they would not
    have any benefit from posted timer interrupts, and at the same time lose
    VMX preemption timer fast paths because kvm_can_post_timer_interrupt()
    returns true and therefore forces kvm_can_use_hv_timer() to false.
    
    By guaranteeing that posted-interrupt timer is only used if MWAIT or
    HLT are done without vmexit, KVM can make a better choice and use the
    VMX preemption timer and the corresponding fast paths.
    
    Reported-by: Aili Yao <yaoaili@kingsoft.com>
    Reviewed-by: Sean Christopherson <seanjc@google.com>
    Cc: Aili Yao <yaoaili@kingsoft.com>
    Cc: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Wanpeng Li <wanpengli@tencent.com>
    Message-Id: <1643112538-36743-1-git-send-email-wanpengli@tencent.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kvm: x86/cpuid: Only provide CPUID leaf 0xA if host has architectural PMU [+ + +]
Author: Sandipan Das <sandipan.das@amd.com>
Date:   Wed Apr 27 17:01:49 2022 +0530

    kvm: x86/cpuid: Only provide CPUID leaf 0xA if host has architectural PMU
    
    [ Upstream commit 5a1bde46f98b893cda6122b00e94c0c40a6ead3c ]
    
    On some x86 processors, CPUID leaf 0xA provides information
    on Architectural Performance Monitoring features. It
    advertises a PMU version which Qemu uses to determine the
    availability of additional MSRs to manage the PMCs.
    
    Upon receiving a KVM_GET_SUPPORTED_CPUID ioctl request for
    the same, the kernel constructs return values based on the
    x86_pmu_capability irrespective of the vendor.
    
    This leaf and the additional MSRs are not supported on AMD
    and Hygon processors. If AMD PerfMonV2 is detected, the PMU
    version is set to 2 and guest startup breaks because of an
    attempt to access a non-existent MSR. Return zeros to avoid
    this.
    
    Fixes: a6c06ed1a60a ("KVM: Expose the architectural performance monitoring CPUID leaf")
    Reported-by: Vasant Hegde <vasant.hegde@amd.com>
    Signed-off-by: Sandipan Das <sandipan.das@amd.com>
    Message-Id: <3fef83d9c2b2f7516e8ff50d60851f29a4bcb716.1651058600.git.sandipan.das@amd.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
KVM: x86/mmu: avoid NULL-pointer dereference on page freeing bugs [+ + +]
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Tue Feb 8 19:08:33 2022 -0500

    KVM: x86/mmu: avoid NULL-pointer dereference on page freeing bugs
    
    [ Upstream commit 9191b8f0745e63edf519e4a54a4aaae1d3d46fbd ]
    
    WARN and bail if KVM attempts to free a root that isn't backed by a shadow
    page.  KVM allocates a bare page for "special" roots, e.g. when using PAE
    paging or shadowing 2/3/4-level page tables with 4/5-level, and so root_hpa
    will be valid but won't be backed by a shadow page.  It's all too easy to
    blindly call mmu_free_root_page() on root_hpa, be nice and WARN instead of
    crashing KVM and possibly the kernel.
    
    Reviewed-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: x86/svm: Account for family 17h event renumberings in amd_pmc_perf_hw_id [+ + +]
Author: Kyle Huey <me@kylehuey.com>
Date:   Mon May 2 22:01:36 2022 -0700

    KVM: x86/svm: Account for family 17h event renumberings in amd_pmc_perf_hw_id
    
    commit 5eb849322d7f7ae9d5c587c7bc3b4f7c6872cd2f upstream.
    
    Zen renumbered some of the performance counters that correspond to the
    well known events in perf_hw_id. This code in KVM was never updated for
    that, so guest that attempt to use counters on Zen that correspond to the
    pre-Zen perf_hw_id values will silently receive the wrong values.
    
    This has been observed in the wild with rr[0] when running in Zen 3
    guests. rr uses the retired conditional branch counter 00d1 which is
    incorrectly recognized by KVM as PERF_COUNT_HW_STALLED_CYCLES_BACKEND.
    
    [0] https://rr-project.org/
    
    Signed-off-by: Kyle Huey <me@kylehuey.com>
    Message-Id: <20220503050136.86298-1-khuey@kylehuey.com>
    Cc: stable@vger.kernel.org
    [Check guest family, not host. - Paolo]
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: Do not change ICR on write to APIC_SELF_IPI [+ + +]
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Thu Feb 24 09:53:36 2022 -0500

    KVM: x86: Do not change ICR on write to APIC_SELF_IPI
    
    [ Upstream commit d22a81b304a27fca6124174a8e842e826c193466 ]
    
    Emulating writes to SELF_IPI with a write to ICR has an unwanted side effect:
    the value of ICR in vAPIC page gets changed.  The lists SELF_IPI as write-only,
    with no associated MMIO offset, so any write should have no visible side
    effect in the vAPIC page.
    
    Reported-by: Chao Gao <chao.gao@intel.com>
    Reviewed-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 5.10.115 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu May 12 12:25:46 2022 +0200

    Linux 5.10.115
    
    Link: https://lore.kernel.org/r/20220510130732.861729621@linuxfoundation.org
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>
    Tested-by: Fox Chen <foxhlchen@gmail.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Tested-by: Hulk Robot <hulkrobot@huawei.com>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
MIPS: Fix CP0 counter erratum detection for R4k CPUs [+ + +]
Author: Maciej W. Rozycki <macro@orcam.me.uk>
Date:   Sun Apr 24 12:46:23 2022 +0100

    MIPS: Fix CP0 counter erratum detection for R4k CPUs
    
    commit f0a6c68f69981214cb7858738dd2bc81475111f7 upstream.
    
    Fix the discrepancy between the two places we check for the CP0 counter
    erratum in along with the incorrect comparison of the R4400 revision
    number against 0x30 which matches none and consistently consider all
    R4000 and R4400 processors affected, as documented in processor errata
    publications[1][2][3], following the mapping between CP0 PRId register
    values and processor models:
    
      PRId   |  Processor Model
    ---------+--------------------
    00000422 | R4000 Revision 2.2
    00000430 | R4000 Revision 3.0
    00000440 | R4400 Revision 1.0
    00000450 | R4400 Revision 2.0
    00000460 | R4400 Revision 3.0
    
    No other revision of either processor has ever been spotted.
    
    Contrary to what has been stated in commit ce202cbb9e0b ("[MIPS] Assume
    R4000/R4400 newer than 3.0 don't have the mfc0 count bug") marking the
    CP0 counter as buggy does not preclude it from being used as either a
    clock event or a clock source device.  It just cannot be used as both at
    a time, because in that case clock event interrupts will be occasionally
    lost, and the use as a clock event device takes precedence.
    
    Compare against 0x4ff in `can_use_mips_counter' so that a single machine
    instruction is produced.
    
    References:
    
    [1] "MIPS R4000PC/SC Errata, Processor Revision 2.2 and 3.0", MIPS
        Technologies Inc., May 10, 1994, Erratum 53, p.13
    
    [2] "MIPS R4400PC/SC Errata, Processor Revision 1.0", MIPS Technologies
        Inc., February 9, 1994, Erratum 21, p.4
    
    [3] "MIPS R4400PC/SC Errata, Processor Revision 2.0 & 3.0", MIPS
        Technologies Inc., January 24, 1995, Erratum 14, p.3
    
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Fixes: ce202cbb9e0b ("[MIPS] Assume R4000/R4400 newer than 3.0 don't have the mfc0 count bug")
    Cc: stable@vger.kernel.org # v2.6.24+
    Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
mmc: core: Set HS clock speed before sending HS CMD13 [+ + +]
Author: Brian Norris <briannorris@chromium.org>
Date:   Fri Apr 22 10:08:53 2022 -0700

    mmc: core: Set HS clock speed before sending HS CMD13
    
    commit 4bc31edebde51fcf8ad0794763b8679a7ecb5ec0 upstream.
    
    Way back in commit 4f25580fb84d ("mmc: core: changes frequency to
    hs_max_dtr when selecting hs400es"), Rockchip engineers noticed that
    some eMMC don't respond to SEND_STATUS commands very reliably if they're
    still running at a low initial frequency. As mentioned in that commit,
    JESD84-B51 P49 suggests a sequence in which the host:
    1. sets HS_TIMING
    2. bumps the clock ("<= 52 MHz")
    3. sends further commands
    
    It doesn't exactly require that we don't use a lower-than-52MHz
    frequency, but in practice, these eMMC don't like it.
    
    The aforementioned commit tried to get that right for HS400ES, although
    it's unclear whether this ever truly worked as committed into mainline,
    as other changes/refactoring adjusted the sequence in conflicting ways:
    
    08573eaf1a70 ("mmc: mmc: do not use CMD13 to get status after speed mode
    switch")
    
    53e60650f74e ("mmc: core: Allow CMD13 polling when switching to HS mode
    for mmc")
    
    In any case, today we do step 3 before step 2. Let's fix that, and also
    apply the same logic to HS200/400, where this eMMC has problems too.
    
    Resolves errors like this seen when booting some RK3399 Gru/Scarlet
    systems:
    
    [    2.058881] mmc1: CQHCI version 5.10
    [    2.097545] mmc1: SDHCI controller on fe330000.mmc [fe330000.mmc] using ADMA
    [    2.209804] mmc1: mmc_select_hs400es failed, error -84
    [    2.215597] mmc1: error -84 whilst initialising MMC card
    [    2.417514] mmc1: mmc_select_hs400es failed, error -110
    [    2.423373] mmc1: error -110 whilst initialising MMC card
    [    2.605052] mmc1: mmc_select_hs400es failed, error -110
    [    2.617944] mmc1: error -110 whilst initialising MMC card
    [    2.835884] mmc1: mmc_select_hs400es failed, error -110
    [    2.841751] mmc1: error -110 whilst initialising MMC card
    
    Ealier versions of this patch bumped to 200MHz/HS200 speeds too early,
    which caused issues on, e.g., qcom-msm8974-fairphone-fp2. (Thanks for
    the report Luca!) After a second look, it appears that aligns with
    JESD84 / page 45 / table 28, so we need to keep to lower (HS / 52 MHz)
    rates first.
    
    Fixes: 08573eaf1a70 ("mmc: mmc: do not use CMD13 to get status after speed mode switch")
    Fixes: 53e60650f74e ("mmc: core: Allow CMD13 polling when switching to HS mode for mmc")
    Fixes: 4f25580fb84d ("mmc: core: changes frequency to hs_max_dtr when selecting hs400es")
    Cc: Shawn Lin <shawn.lin@rock-chips.com>
    Link: https://lore.kernel.org/linux-mmc/11962455.O9o76ZdvQC@g550jk/
    Reported-by: Luca Weiss <luca@z3ntu.xyz>
    Signed-off-by: Brian Norris <briannorris@chromium.org>
    Tested-by: Luca Weiss <luca@z3ntu.xyz>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20220422100824.v4.1.I484f4ee35609f78b932bd50feed639c29e64997e@changeid
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: rtsx: add 74 Clocks in power on flow [+ + +]
Author: Ricky WU <ricky_wu@realtek.com>
Date:   Wed Mar 2 09:43:01 2022 +0000

    mmc: rtsx: add 74 Clocks in power on flow
    
    commit 1f311c94aabdb419c28e3147bcc8ab89269f1a7e upstream.
    
    SD spec definition:
    "Host provides at least 74 Clocks before issuing first command"
    After 1ms for the voltage stable then start issuing the Clock signals
    
    if POWER STATE is
    MMC_POWER_OFF to MMC_POWER_UP to issue Clock signal to card
    MMC_POWER_UP to MMC_POWER_ON to stop issuing signal to card
    
    Signed-off-by: Ricky Wu <ricky_wu@realtek.com>
    Link: https://lore.kernel.org/r/1badf10aba764191a1a752edcbf90389@realtek.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Christian Loehle <cloehle@hyperstone.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci-msm: Reset GCC_SDCC_BCR register for SDHC [+ + +]
Author: Shaik Sajida Bhanu <quic_c_sbhanu@quicinc.com>
Date:   Sun Apr 24 21:32:33 2022 +0530

    mmc: sdhci-msm: Reset GCC_SDCC_BCR register for SDHC
    
    commit 3e5a8e8494a8122fe4eb3f167662f406cab753b9 upstream.
    
    Reset GCC_SDCC_BCR register before every fresh initilazation. This will
    reset whole SDHC-msm controller, clears the previous power control
    states and avoids, software reset timeout issues as below.
    
    [ 5.458061][ T262] mmc1: Reset 0x1 never completed.
    [ 5.462454][ T262] mmc1: sdhci: ============ SDHCI REGISTER DUMP ===========
    [ 5.469065][ T262] mmc1: sdhci: Sys addr: 0x00000000 | Version: 0x00007202
    [ 5.475688][ T262] mmc1: sdhci: Blk size: 0x00000000 | Blk cnt: 0x00000000
    [ 5.482315][ T262] mmc1: sdhci: Argument: 0x00000000 | Trn mode: 0x00000000
    [ 5.488927][ T262] mmc1: sdhci: Present: 0x01f800f0 | Host ctl: 0x00000000
    [ 5.495539][ T262] mmc1: sdhci: Power: 0x00000000 | Blk gap: 0x00000000
    [ 5.502162][ T262] mmc1: sdhci: Wake-up: 0x00000000 | Clock: 0x00000003
    [ 5.508768][ T262] mmc1: sdhci: Timeout: 0x00000000 | Int stat: 0x00000000
    [ 5.515381][ T262] mmc1: sdhci: Int enab: 0x00000000 | Sig enab: 0x00000000
    [ 5.521996][ T262] mmc1: sdhci: ACmd stat: 0x00000000 | Slot int: 0x00000000
    [ 5.528607][ T262] mmc1: sdhci: Caps: 0x362dc8b2 | Caps_1: 0x0000808f
    [ 5.535227][ T262] mmc1: sdhci: Cmd: 0x00000000 | Max curr: 0x00000000
    [ 5.541841][ T262] mmc1: sdhci: Resp[0]: 0x00000000 | Resp[1]: 0x00000000
    [ 5.548454][ T262] mmc1: sdhci: Resp[2]: 0x00000000 | Resp[3]: 0x00000000
    [ 5.555079][ T262] mmc1: sdhci: Host ctl2: 0x00000000
    [ 5.559651][ T262] mmc1: sdhci_msm: ----------- VENDOR REGISTER DUMP-----------
    [ 5.566621][ T262] mmc1: sdhci_msm: DLL sts: 0x00000000 | DLL cfg: 0x6000642c | DLL cfg2: 0x0020a000
    [ 5.575465][ T262] mmc1: sdhci_msm: DLL cfg3: 0x00000000 | DLL usr ctl: 0x00010800 | DDR cfg: 0x80040873
    [ 5.584658][ T262] mmc1: sdhci_msm: Vndr func: 0x00018a9c | Vndr func2 : 0xf88218a8 Vndr func3: 0x02626040
    
    Fixes: 0eb0d9f4de34 ("mmc: sdhci-msm: Initial support for Qualcomm chipsets")
    Signed-off-by: Shaik Sajida Bhanu <quic_c_sbhanu@quicinc.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
    Tested-by: Konrad Dybcio <konrad.dybcio@somainline.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/1650816153-23797-1-git-send-email-quic_c_sbhanu@quicinc.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/mlx5: Avoid double clear or set of sync reset requested [+ + +]
Author: Moshe Shemesh <moshe@nvidia.com>
Date:   Mon Apr 11 20:38:44 2022 +0300

    net/mlx5: Avoid double clear or set of sync reset requested
    
    commit fc3d3db07b35885f238e1fa06b9f04a8fa7a62d0 upstream.
    
    Double clear of reset requested state can lead to NULL pointer as it
    will try to delete the timer twice. This can happen for example on a
    race between abort from FW and pci error or reset. Avoid such case using
    test_and_clear_bit() to verify only one time reset requested state clear
    flow. Similarly use test_and_set_bit() to verify only one time reset
    requested state set flow.
    
    Fixes: 7dd6df329d4c ("net/mlx5: Handle sync reset abort event")
    Signed-off-by: Moshe Shemesh <moshe@nvidia.com>
    Reviewed-by: Maher Sanalla <msanalla@nvidia.com>
    Reviewed-by: Shay Drory <shayd@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net/mlx5: Fix slab-out-of-bounds while reading resource dump menu [+ + +]
Author: Aya Levin <ayal@nvidia.com>
Date:   Thu Mar 3 19:02:03 2022 +0200

    net/mlx5: Fix slab-out-of-bounds while reading resource dump menu
    
    [ Upstream commit 7ba2d9d8de96696c1451fee1b01da11f45bdc2b9 ]
    
    Resource dump menu may span over more than a single page, support it.
    Otherwise, menu read may result in a memory access violation: reading
    outside of the allocated page.
    Note that page format of the first menu page contains menu headers while
    the proceeding menu pages contain only records.
    
    The KASAN logs are as follows:
    BUG: KASAN: slab-out-of-bounds in strcmp+0x9b/0xb0
    Read of size 1 at addr ffff88812b2e1fd0 by task systemd-udevd/496
    
    CPU: 5 PID: 496 Comm: systemd-udevd Tainted: G    B  5.16.0_for_upstream_debug_2022_01_10_23_12 #1
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
    Call Trace:
     <TASK>
     dump_stack_lvl+0x57/0x7d
     print_address_description.constprop.0+0x1f/0x140
     ? strcmp+0x9b/0xb0
     ? strcmp+0x9b/0xb0
     kasan_report.cold+0x83/0xdf
     ? strcmp+0x9b/0xb0
     strcmp+0x9b/0xb0
     mlx5_rsc_dump_init+0x4ab/0x780 [mlx5_core]
     ? mlx5_rsc_dump_destroy+0x80/0x80 [mlx5_core]
     ? lockdep_hardirqs_on_prepare+0x286/0x400
     ? raw_spin_unlock_irqrestore+0x47/0x50
     ? aomic_notifier_chain_register+0x32/0x40
     mlx5_load+0x104/0x2e0 [mlx5_core]
     mlx5_init_one+0x41b/0x610 [mlx5_core]
     ....
    The buggy address belongs to the object at ffff88812b2e0000
     which belongs to the cache kmalloc-4k of size 4096
    The buggy address is located 4048 bytes to the right of
     4096-byte region [ffff88812b2e0000, ffff88812b2e1000)
    The buggy address belongs to the page:
    page:000000009d69807a refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff88812b2e6000 pfn:0x12b2e0
    head:000000009d69807a order:3 compound_mapcount:0 compound_pincount:0
    flags: 0x8000000000010200(slab|head|zone=2)
    raw: 8000000000010200 0000000000000000 dead000000000001 ffff888100043040
    raw: ffff88812b2e6000 0000000080040000 00000001ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff88812b2e1e80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
     ffff88812b2e1f00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    >ffff88812b2e1f80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
                                                     ^
     ffff88812b2e2000: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff88812b2e2080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    ==================================================================
    
    Fixes: 12206b17235a ("net/mlx5: Add support for resource dump")
    Signed-off-by: Aya Levin <ayal@nvidia.com>
    Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5e: CT: Fix queued up restore put() executing after relevant ft release [+ + +]
Author: Paul Blakey <paulb@nvidia.com>
Date:   Tue Mar 29 17:42:46 2022 +0300

    net/mlx5e: CT: Fix queued up restore put() executing after relevant ft release
    
    commit b069e14fff46c8da9fcc79957f8acaa3e2dfdb6b upstream.
    
    __mlx5_tc_ct_entry_put() queues release of tuple related to some ct FT,
    if that is the last reference to that tuple, the actual deletion of
    the tuple can happen after the FT is already destroyed and freed.
    
    Flush the used workqueue before destroying the ct FT.
    
    Fixes: a2173131526d ("net/mlx5e: CT: manage the lifetime of the ct entry object")
    Reviewed-by: Oz Shlomo <ozsh@nvidia.com>
    Signed-off-by: Paul Blakey <paulb@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net/mlx5e: Don't match double-vlan packets if cvlan is not set [+ + +]
Author: Vlad Buslov <vladbu@nvidia.com>
Date:   Mon Mar 28 15:54:52 2022 +0300

    net/mlx5e: Don't match double-vlan packets if cvlan is not set
    
    commit ada09af92e621ab500dd80a16d1d0299a18a1180 upstream.
    
    Currently, match VLAN rule also matches packets that have multiple VLAN
    headers. This behavior is similar to buggy flower classifier behavior that
    has recently been fixed. Fix the issue by matching on
    outer_second_cvlan_tag with value 0 which will cause the HW to verify the
    packet doesn't contain second vlan header.
    
    Fixes: 699e96ddf47f ("net/mlx5e: Support offloading tc double vlan headers match")
    Signed-off-by: Vlad Buslov <vladbu@nvidia.com>
    Reviewed-by: Maor Dickman <maord@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net/mlx5e: Fix the calling of update_buffer_lossy() API [+ + +]
Author: Mark Zhang <markzhang@nvidia.com>
Date:   Wed Apr 6 10:30:21 2022 +0300

    net/mlx5e: Fix the calling of update_buffer_lossy() API
    
    commit c4d963a588a6e7c4ef31160e80697ae8e5a47746 upstream.
    
    The arguments of update_buffer_lossy() is in a wrong order. Fix it.
    
    Fixes: 88b3d5c90e96 ("net/mlx5e: Fix port buffers cell size value")
    Signed-off-by: Mark Zhang <markzhang@nvidia.com>
    Reviewed-by: Maor Gottlieb <maorg@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net/mlx5e: Fix trust state reset in reload [+ + +]
Author: Moshe Tal <moshet@nvidia.com>
Date:   Wed Feb 9 19:23:56 2022 +0200

    net/mlx5e: Fix trust state reset in reload
    
    commit b781bff882d16175277ca129c382886cb4c74a2c upstream.
    
    Setting dscp2prio during the driver reload can cause dcb ieee app list to
    be not empty after the reload finish and as a result to a conflict between
    the priority trust state reported by the app and the state in the device
    register.
    
    Reset the dcb ieee app list on initialization in case this is
    conflicting with the register status.
    
    Fixes: 2a5e7a1344f4 ("net/mlx5e: Add dcbnl dscp to priority support")
    Signed-off-by: Moshe Tal <moshet@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net: cpsw: add missing of_node_put() in cpsw_probe_dt() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Fri Apr 29 09:53:37 2022 +0800

    net: cpsw: add missing of_node_put() in cpsw_probe_dt()
    
    commit 95098d5ac2551769807031444e55a0da5d4f0952 upstream.
    
    'tmp_node' need be put before returning from cpsw_probe_dt(),
    so add missing of_node_put() in error path.
    
    Fixes: ed3525eda4c4 ("net: ethernet: ti: introduce cpsw switchdev based driver part 1 - dual-emac")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: dsa: mt7530: add missing of_node_put() in mt7530_setup() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Thu Apr 28 17:53:17 2022 +0800

    net: dsa: mt7530: add missing of_node_put() in mt7530_setup()
    
    commit a9e9b091a1c14ecd8bd9d3214a62142a1786fe30 upstream.
    
    Add of_node_put() if of_get_phy_mode() fails in mt7530_setup()
    
    Fixes: 0c65b2b90d13 ("net: of_get_phy_mode: Change API to solve int/unit warnings")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Link: https://lore.kernel.org/r/20220428095317.538829-1-yangyingliang@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: emaclite: Add error handling for of_address_to_resource() [+ + +]
Author: Shravya Kumbham <shravya.kumbham@xilinx.com>
Date:   Mon May 2 12:57:50 2022 +0530

    net: emaclite: Add error handling for of_address_to_resource()
    
    commit 7a6bc33ab54923d325d9a1747ec9652c4361ebd1 upstream.
    
    check the return value of of_address_to_resource() and also add
    missing of_node_put() for np and npp nodes.
    
    Fixes: e0a3bc65448c ("net: emaclite: Support multiple phys connected to one MDIO bus")
    Addresses-Coverity: Event check_return value.
    Signed-off-by: Shravya Kumbham <shravya.kumbham@xilinx.com>
    Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: ethernet: mediatek: add missing of_node_put() in mtk_sgmii_init() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Thu Apr 28 14:25:43 2022 +0800

    net: ethernet: mediatek: add missing of_node_put() in mtk_sgmii_init()
    
    commit ff5265d45345d01fefc98fcb9ae891b59633c919 upstream.
    
    The node pointer returned by of_parse_phandle() with refcount incremented,
    so add of_node_put() after using it in mtk_sgmii_init().
    
    Fixes: 9ffee4a8276c ("net: ethernet: mediatek: Extend SGMII related functions")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Link: https://lore.kernel.org/r/20220428062543.64883-1-yangyingliang@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: igmp: respect RCU rules in ip_mc_source() and ip_mc_msfilter() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Apr 29 08:42:57 2022 -0700

    net: igmp: respect RCU rules in ip_mc_source() and ip_mc_msfilter()
    
    commit dba5bdd57bea587ea4f0b79b03c71135f84a7e8b upstream.
    
    syzbot reported an UAF in ip_mc_sf_allow() [1]
    
    Whenever RCU protected list replaces an object,
    the pointer to the new object needs to be updated
    _before_ the call to kfree_rcu() or call_rcu()
    
    Because kfree_rcu(ptr, rcu) got support for NULL ptr
    only recently in commit 12edff045bc6 ("rcu: Make kfree_rcu()
    ignore NULL pointers"), I chose to use the conditional
    to make sure stable backports won't miss this detail.
    
    if (psl)
        kfree_rcu(psl, rcu);
    
    net/ipv6/mcast.c has similar issues, addressed in a separate patch.
    
    [1]
    BUG: KASAN: use-after-free in ip_mc_sf_allow+0x6bb/0x6d0 net/ipv4/igmp.c:2655
    Read of size 4 at addr ffff88807d37b904 by task syz-executor.5/908
    
    CPU: 0 PID: 908 Comm: syz-executor.5 Not tainted 5.18.0-rc4-syzkaller-00064-g8f4dd16603ce #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106
     print_address_description.constprop.0.cold+0xeb/0x467 mm/kasan/report.c:313
     print_report mm/kasan/report.c:429 [inline]
     kasan_report.cold+0xf4/0x1c6 mm/kasan/report.c:491
     ip_mc_sf_allow+0x6bb/0x6d0 net/ipv4/igmp.c:2655
     raw_v4_input net/ipv4/raw.c:190 [inline]
     raw_local_deliver+0x4d1/0xbe0 net/ipv4/raw.c:218
     ip_protocol_deliver_rcu+0xcf/0xb30 net/ipv4/ip_input.c:193
     ip_local_deliver_finish+0x2ee/0x4c0 net/ipv4/ip_input.c:233
     NF_HOOK include/linux/netfilter.h:307 [inline]
     NF_HOOK include/linux/netfilter.h:301 [inline]
     ip_local_deliver+0x1b3/0x200 net/ipv4/ip_input.c:254
     dst_input include/net/dst.h:461 [inline]
     ip_rcv_finish+0x1cb/0x2f0 net/ipv4/ip_input.c:437
     NF_HOOK include/linux/netfilter.h:307 [inline]
     NF_HOOK include/linux/netfilter.h:301 [inline]
     ip_rcv+0xaa/0xd0 net/ipv4/ip_input.c:556
     __netif_receive_skb_one_core+0x114/0x180 net/core/dev.c:5405
     __netif_receive_skb+0x24/0x1b0 net/core/dev.c:5519
     netif_receive_skb_internal net/core/dev.c:5605 [inline]
     netif_receive_skb+0x13e/0x8e0 net/core/dev.c:5664
     tun_rx_batched.isra.0+0x460/0x720 drivers/net/tun.c:1534
     tun_get_user+0x28b7/0x3e30 drivers/net/tun.c:1985
     tun_chr_write_iter+0xdb/0x200 drivers/net/tun.c:2015
     call_write_iter include/linux/fs.h:2050 [inline]
     new_sync_write+0x38a/0x560 fs/read_write.c:504
     vfs_write+0x7c0/0xac0 fs/read_write.c:591
     ksys_write+0x127/0x250 fs/read_write.c:644
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    RIP: 0033:0x7f3f12c3bbff
    Code: 89 54 24 18 48 89 74 24 10 89 7c 24 08 e8 99 fd ff ff 48 8b 54 24 18 48 8b 74 24 10 41 89 c0 8b 7c 24 08 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 31 44 89 c7 48 89 44 24 08 e8 cc fd ff ff 48
    RSP: 002b:00007f3f13ea9130 EFLAGS: 00000293 ORIG_RAX: 0000000000000001
    RAX: ffffffffffffffda RBX: 00007f3f12d9bf60 RCX: 00007f3f12c3bbff
    RDX: 0000000000000036 RSI: 0000000020002ac0 RDI: 00000000000000c8
    RBP: 00007f3f12ce308d R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000036 R11: 0000000000000293 R12: 0000000000000000
    R13: 00007fffb68dd79f R14: 00007f3f13ea9300 R15: 0000000000022000
     </TASK>
    
    Allocated by task 908:
     kasan_save_stack+0x1e/0x40 mm/kasan/common.c:38
     kasan_set_track mm/kasan/common.c:45 [inline]
     set_alloc_info mm/kasan/common.c:436 [inline]
     ____kasan_kmalloc mm/kasan/common.c:515 [inline]
     ____kasan_kmalloc mm/kasan/common.c:474 [inline]
     __kasan_kmalloc+0xa6/0xd0 mm/kasan/common.c:524
     kasan_kmalloc include/linux/kasan.h:234 [inline]
     __do_kmalloc mm/slab.c:3710 [inline]
     __kmalloc+0x209/0x4d0 mm/slab.c:3719
     kmalloc include/linux/slab.h:586 [inline]
     sock_kmalloc net/core/sock.c:2501 [inline]
     sock_kmalloc+0xb5/0x100 net/core/sock.c:2492
     ip_mc_source+0xba2/0x1100 net/ipv4/igmp.c:2392
     do_ip_setsockopt net/ipv4/ip_sockglue.c:1296 [inline]
     ip_setsockopt+0x2312/0x3ab0 net/ipv4/ip_sockglue.c:1432
     raw_setsockopt+0x274/0x2c0 net/ipv4/raw.c:861
     __sys_setsockopt+0x2db/0x6a0 net/socket.c:2180
     __do_sys_setsockopt net/socket.c:2191 [inline]
     __se_sys_setsockopt net/socket.c:2188 [inline]
     __x64_sys_setsockopt+0xba/0x150 net/socket.c:2188
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    Freed by task 753:
     kasan_save_stack+0x1e/0x40 mm/kasan/common.c:38
     kasan_set_track+0x21/0x30 mm/kasan/common.c:45
     kasan_set_free_info+0x20/0x30 mm/kasan/generic.c:370
     ____kasan_slab_free mm/kasan/common.c:366 [inline]
     ____kasan_slab_free+0x13d/0x180 mm/kasan/common.c:328
     kasan_slab_free include/linux/kasan.h:200 [inline]
     __cache_free mm/slab.c:3439 [inline]
     kmem_cache_free_bulk+0x69/0x460 mm/slab.c:3774
     kfree_bulk include/linux/slab.h:437 [inline]
     kfree_rcu_work+0x51c/0xa10 kernel/rcu/tree.c:3318
     process_one_work+0x996/0x1610 kernel/workqueue.c:2289
     worker_thread+0x665/0x1080 kernel/workqueue.c:2436
     kthread+0x2e9/0x3a0 kernel/kthread.c:376
     ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:298
    
    Last potentially related work creation:
     kasan_save_stack+0x1e/0x40 mm/kasan/common.c:38
     __kasan_record_aux_stack+0x7e/0x90 mm/kasan/generic.c:348
     kvfree_call_rcu+0x74/0x990 kernel/rcu/tree.c:3595
     ip_mc_msfilter+0x712/0xb60 net/ipv4/igmp.c:2510
     do_ip_setsockopt net/ipv4/ip_sockglue.c:1257 [inline]
     ip_setsockopt+0x32e1/0x3ab0 net/ipv4/ip_sockglue.c:1432
     raw_setsockopt+0x274/0x2c0 net/ipv4/raw.c:861
     __sys_setsockopt+0x2db/0x6a0 net/socket.c:2180
     __do_sys_setsockopt net/socket.c:2191 [inline]
     __se_sys_setsockopt net/socket.c:2188 [inline]
     __x64_sys_setsockopt+0xba/0x150 net/socket.c:2188
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    Second to last potentially related work creation:
     kasan_save_stack+0x1e/0x40 mm/kasan/common.c:38
     __kasan_record_aux_stack+0x7e/0x90 mm/kasan/generic.c:348
     call_rcu+0x99/0x790 kernel/rcu/tree.c:3074
     mpls_dev_notify+0x552/0x8a0 net/mpls/af_mpls.c:1656
     notifier_call_chain+0xb5/0x200 kernel/notifier.c:84
     call_netdevice_notifiers_info+0xb5/0x130 net/core/dev.c:1938
     call_netdevice_notifiers_extack net/core/dev.c:1976 [inline]
     call_netdevice_notifiers net/core/dev.c:1990 [inline]
     unregister_netdevice_many+0x92e/0x1890 net/core/dev.c:10751
     default_device_exit_batch+0x449/0x590 net/core/dev.c:11245
     ops_exit_list+0x125/0x170 net/core/net_namespace.c:167
     cleanup_net+0x4ea/0xb00 net/core/net_namespace.c:594
     process_one_work+0x996/0x1610 kernel/workqueue.c:2289
     worker_thread+0x665/0x1080 kernel/workqueue.c:2436
     kthread+0x2e9/0x3a0 kernel/kthread.c:376
     ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:298
    
    The buggy address belongs to the object at ffff88807d37b900
     which belongs to the cache kmalloc-64 of size 64
    The buggy address is located 4 bytes inside of
     64-byte region [ffff88807d37b900, ffff88807d37b940)
    
    The buggy address belongs to the physical page:
    page:ffffea0001f4dec0 refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff88807d37b180 pfn:0x7d37b
    flags: 0xfff00000000200(slab|node=0|zone=1|lastcpupid=0x7ff)
    raw: 00fff00000000200 ffff888010c41340 ffffea0001c795c8 ffff888010c40200
    raw: ffff88807d37b180 ffff88807d37b000 000000010000001f 0000000000000000
    page dumped because: kasan: bad access detected
    page_owner tracks the page as allocated
    page last allocated via order 0, migratetype Unmovable, gfp_mask 0x342040(__GFP_IO|__GFP_NOWARN|__GFP_COMP|__GFP_HARDWALL|__GFP_THISNODE), pid 2963, tgid 2963 (udevd), ts 139732238007, free_ts 139730893262
     prep_new_page mm/page_alloc.c:2441 [inline]
     get_page_from_freelist+0xba2/0x3e00 mm/page_alloc.c:4182
     __alloc_pages+0x1b2/0x500 mm/page_alloc.c:5408
     __alloc_pages_node include/linux/gfp.h:587 [inline]
     kmem_getpages mm/slab.c:1378 [inline]
     cache_grow_begin+0x75/0x350 mm/slab.c:2584
     cache_alloc_refill+0x27f/0x380 mm/slab.c:2957
     ____cache_alloc mm/slab.c:3040 [inline]
     ____cache_alloc mm/slab.c:3023 [inline]
     __do_cache_alloc mm/slab.c:3267 [inline]
     slab_alloc mm/slab.c:3309 [inline]
     __do_kmalloc mm/slab.c:3708 [inline]
     __kmalloc+0x3b3/0x4d0 mm/slab.c:3719
     kmalloc include/linux/slab.h:586 [inline]
     kzalloc include/linux/slab.h:714 [inline]
     tomoyo_encode2.part.0+0xe9/0x3a0 security/tomoyo/realpath.c:45
     tomoyo_encode2 security/tomoyo/realpath.c:31 [inline]
     tomoyo_encode+0x28/0x50 security/tomoyo/realpath.c:80
     tomoyo_realpath_from_path+0x186/0x620 security/tomoyo/realpath.c:288
     tomoyo_get_realpath security/tomoyo/file.c:151 [inline]
     tomoyo_path_perm+0x21b/0x400 security/tomoyo/file.c:822
     security_inode_getattr+0xcf/0x140 security/security.c:1350
     vfs_getattr fs/stat.c:157 [inline]
     vfs_statx+0x16a/0x390 fs/stat.c:232
     vfs_fstatat+0x8c/0xb0 fs/stat.c:255
     __do_sys_newfstatat+0x91/0x110 fs/stat.c:425
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    page last free stack trace:
     reset_page_owner include/linux/page_owner.h:24 [inline]
     free_pages_prepare mm/page_alloc.c:1356 [inline]
     free_pcp_prepare+0x549/0xd20 mm/page_alloc.c:1406
     free_unref_page_prepare mm/page_alloc.c:3328 [inline]
     free_unref_page+0x19/0x6a0 mm/page_alloc.c:3423
     __vunmap+0x85d/0xd30 mm/vmalloc.c:2667
     __vfree+0x3c/0xd0 mm/vmalloc.c:2715
     vfree+0x5a/0x90 mm/vmalloc.c:2746
     __do_replace+0x16b/0x890 net/ipv6/netfilter/ip6_tables.c:1117
     do_replace net/ipv6/netfilter/ip6_tables.c:1157 [inline]
     do_ip6t_set_ctl+0x90d/0xb90 net/ipv6/netfilter/ip6_tables.c:1639
     nf_setsockopt+0x83/0xe0 net/netfilter/nf_sockopt.c:101
     ipv6_setsockopt+0x122/0x180 net/ipv6/ipv6_sockglue.c:1026
     tcp_setsockopt+0x136/0x2520 net/ipv4/tcp.c:3696
     __sys_setsockopt+0x2db/0x6a0 net/socket.c:2180
     __do_sys_setsockopt net/socket.c:2191 [inline]
     __se_sys_setsockopt net/socket.c:2188 [inline]
     __x64_sys_setsockopt+0xba/0x150 net/socket.c:2188
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    Memory state around the buggy address:
     ffff88807d37b800: 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc fc
     ffff88807d37b880: 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc fc
    >ffff88807d37b900: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
                       ^
     ffff88807d37b980: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
     ffff88807d37ba00: 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc fc
    
    Fixes: c85bb41e9318 ("igmp: fix ip_mc_sf_allow race [v5]")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Cc: Flavio Leitner <fbl@sysclose.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: stmmac: disable Split Header (SPH) for Intel platforms [+ + +]
Author: Tan Tee Min <tee.min.tan@linux.intel.com>
Date:   Fri Apr 29 19:58:07 2022 +0800

    net: stmmac: disable Split Header (SPH) for Intel platforms
    
    commit 47f753c1108e287edb3e27fad8a7511a9d55578e upstream.
    
    Based on DesignWare Ethernet QoS datasheet, we are seeing the limitation
    of Split Header (SPH) feature is not supported for Ipv4 fragmented packet.
    This SPH limitation will cause ping failure when the packets size exceed
    the MTU size. For example, the issue happens once the basic ping packet
    size is larger than the configured MTU size and the data is lost inside
    the fragmented packet, replaced by zeros/corrupted values, and leads to
    ping fail.
    
    So, disable the Split Header for Intel platforms.
    
    v2: Add fixes tag in commit message.
    
    Fixes: 67afd6d1cfdf("net: stmmac: Add Split Header support and enable it in XGMAC cores")
    Cc: <stable@vger.kernel.org> # 5.10.x
    Suggested-by: Ong, Boon Leong <boon.leong.ong@intel.com>
    Signed-off-by: Mohammad Athari Bin Ismail <mohammad.athari.ismail@intel.com>
    Signed-off-by: Wong Vee Khee <vee.khee.wong@linux.intel.com>
    Signed-off-by: Tan Tee Min <tee.min.tan@linux.intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: stmmac: dwmac-sun8i: add missing of_node_put() in sun8i_dwmac_register_mdio_mux() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Thu Apr 28 17:57:16 2022 +0800

    net: stmmac: dwmac-sun8i: add missing of_node_put() in sun8i_dwmac_register_mdio_mux()
    
    commit 1a15267b7be77e0792cf0c7b36ca65c8eb2df0d8 upstream.
    
    The node pointer returned by of_get_child_by_name() with refcount incremented,
    so add of_node_put() after using it.
    
    Fixes: 634db83b8265 ("net: stmmac: dwmac-sun8i: Handle integrated/external MDIOs")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Link: https://lore.kernel.org/r/20220428095716.540452-1-yangyingliang@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
NFC: netlink: fix sleep in atomic bug when firmware download timeout [+ + +]
Author: Duoming Zhou <duoming@zju.edu.cn>
Date:   Wed May 4 13:58:47 2022 +0800

    NFC: netlink: fix sleep in atomic bug when firmware download timeout
    
    commit 4071bf121d59944d5cd2238de0642f3d7995a997 upstream.
    
    There are sleep in atomic bug that could cause kernel panic during
    firmware download process. The root cause is that nlmsg_new with
    GFP_KERNEL parameter is called in fw_dnld_timeout which is a timer
    handler. The call trace is shown below:
    
    BUG: sleeping function called from invalid context at include/linux/sched/mm.h:265
    Call Trace:
    kmem_cache_alloc_node
    __alloc_skb
    nfc_genl_fw_download_done
    call_timer_fn
    __run_timers.part.0
    run_timer_softirq
    __do_softirq
    ...
    
    The nlmsg_new with GFP_KERNEL parameter may sleep during memory
    allocation process, and the timer handler is run as the result of
    a "software interrupt" that should not call any other function
    that could sleep.
    
    This patch changes allocation mode of netlink message from GFP_KERNEL
    to GFP_ATOMIC in order to prevent sleep in atomic bug. The GFP_ATOMIC
    flag makes memory allocation operation could be used in atomic context.
    
    Fixes: 9674da8759df ("NFC: Add firmware upload netlink command")
    Fixes: 9ea7187c53f6 ("NFC: netlink: Rename CMD_FW_UPLOAD to CMD_FW_DOWNLOAD")
    Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20220504055847.38026-1-duoming@zju.edu.cn
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfc: nfcmrvl: main: reorder destructive operations in nfcmrvl_nci_unregister_dev to avoid bugs [+ + +]
Author: Duoming Zhou <duoming@zju.edu.cn>
Date:   Fri Apr 29 20:45:51 2022 +0800

    nfc: nfcmrvl: main: reorder destructive operations in nfcmrvl_nci_unregister_dev to avoid bugs
    
    commit d270453a0d9ec10bb8a802a142fb1b3601a83098 upstream.
    
    There are destructive operations such as nfcmrvl_fw_dnld_abort and
    gpio_free in nfcmrvl_nci_unregister_dev. The resources such as firmware,
    gpio and so on could be destructed while the upper layer functions such as
    nfcmrvl_fw_dnld_start and nfcmrvl_nci_recv_frame is executing, which leads
    to double-free, use-after-free and null-ptr-deref bugs.
    
    There are three situations that could lead to double-free bugs.
    
    The first situation is shown below:
    
       (Thread 1)                 |      (Thread 2)
    nfcmrvl_fw_dnld_start         |
     ...                          |  nfcmrvl_nci_unregister_dev
     release_firmware()           |   nfcmrvl_fw_dnld_abort
      kfree(fw) //(1)             |    fw_dnld_over
                                  |     release_firmware
      ...                         |      kfree(fw) //(2)
                                  |     ...
    
    The second situation is shown below:
    
       (Thread 1)                 |      (Thread 2)
    nfcmrvl_fw_dnld_start         |
     ...                          |
     mod_timer                    |
     (wait a time)                |
     fw_dnld_timeout              |  nfcmrvl_nci_unregister_dev
       fw_dnld_over               |   nfcmrvl_fw_dnld_abort
        release_firmware          |    fw_dnld_over
         kfree(fw) //(1)          |     release_firmware
         ...                      |      kfree(fw) //(2)
    
    The third situation is shown below:
    
           (Thread 1)               |       (Thread 2)
    nfcmrvl_nci_recv_frame          |
     if(..->fw_download_in_progress)|
      nfcmrvl_fw_dnld_recv_frame    |
       queue_work                   |
                                    |
    fw_dnld_rx_work                 | nfcmrvl_nci_unregister_dev
     fw_dnld_over                   |  nfcmrvl_fw_dnld_abort
      release_firmware              |   fw_dnld_over
       kfree(fw) //(1)              |    release_firmware
                                    |     kfree(fw) //(2)
    
    The firmware struct is deallocated in position (1) and deallocated
    in position (2) again.
    
    The crash trace triggered by POC is like below:
    
    BUG: KASAN: double-free or invalid-free in fw_dnld_over
    Call Trace:
      kfree
      fw_dnld_over
      nfcmrvl_nci_unregister_dev
      nci_uart_tty_close
      tty_ldisc_kill
      tty_ldisc_hangup
      __tty_hangup.part.0
      tty_release
      ...
    
    What's more, there are also use-after-free and null-ptr-deref bugs
    in nfcmrvl_fw_dnld_start. If we deallocate firmware struct, gpio or
    set null to the members of priv->fw_dnld in nfcmrvl_nci_unregister_dev,
    then, we dereference firmware, gpio or the members of priv->fw_dnld in
    nfcmrvl_fw_dnld_start, the UAF or NPD bugs will happen.
    
    This patch reorders destructive operations after nci_unregister_device
    in order to synchronize between cleanup routine and firmware download
    routine.
    
    The nci_unregister_device is well synchronized. If the device is
    detaching, the firmware download routine will goto error. If firmware
    download routine is executing, nci_unregister_device will wait until
    firmware download routine is finished.
    
    Fixes: 3194c6870158 ("NFC: nfcmrvl: add firmware download support")
    Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nfc: replace improper check device_is_registered() in netlink related functions [+ + +]
Author: Duoming Zhou <duoming@zju.edu.cn>
Date:   Fri Apr 29 20:45:50 2022 +0800

    nfc: replace improper check device_is_registered() in netlink related functions
    
    commit da5c0f119203ad9728920456a0f52a6d850c01cd upstream.
    
    The device_is_registered() in nfc core is used to check whether
    nfc device is registered in netlink related functions such as
    nfc_fw_download(), nfc_dev_up() and so on. Although device_is_registered()
    is protected by device_lock, there is still a race condition between
    device_del() and device_is_registered(). The root cause is that
    kobject_del() in device_del() is not protected by device_lock.
    
       (cleanup task)         |     (netlink task)
                              |
    nfc_unregister_device     | nfc_fw_download
     device_del               |  device_lock
      ...                     |   if (!device_is_registered)//(1)
      kobject_del//(2)        |   ...
     ...                      |  device_unlock
    
    The device_is_registered() returns the value of state_in_sysfs and
    the state_in_sysfs is set to zero in kobject_del(). If we pass check in
    position (1), then set zero in position (2). As a result, the check
    in position (1) is useless.
    
    This patch uses bool variable instead of device_is_registered() to judge
    whether the nfc device is registered, which is well synchronized.
    
    Fixes: 3e256b8f8dfa ("NFC: add nfc subsystem core")
    Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
NFSv4: Don't invalidate inode attributes on delegation return [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Mon Apr 25 18:04:27 2022 -0400

    NFSv4: Don't invalidate inode attributes on delegation return
    
    commit 00c94ebec5925593c0377b941289224469e72ac7 upstream.
    
    There is no need to declare attributes such as the ctime, mtime and
    block size invalid when we're just returning a delegation, so it is
    inappropriate to call nfs_post_op_update_inode_force_wcc().
    Instead, just call nfs_refresh_inode() after faking up the change
    attribute. We know that the GETATTR op occurs before the DELEGRETURN, so
    we are safe when doing this.
    
    Fixes: 0bc2c9b4dca9 ("NFSv4: Don't discard the attributes returned by asynchronous DELEGRETURN")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
parisc: Merge model and model name into one line in /proc/cpuinfo [+ + +]
Author: Helge Deller <deller@gmx.de>
Date:   Sun Apr 3 21:57:51 2022 +0200

    parisc: Merge model and model name into one line in /proc/cpuinfo
    
    commit 5b89966bc96a06f6ad65f64ae4b0461918fcc9d3 upstream.
    
    The Linux tool "lscpu" shows the double amount of CPUs if we have
    "model" and "model name" in two different lines in /proc/cpuinfo.
    This change combines the model and the model name into one line.
    
    Signed-off-by: Helge Deller <deller@gmx.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI: aardvark: Clear all MSIs at setup [+ + +]
Author: Pali Rohár <pali@kernel.org>
Date:   Tue Nov 30 18:29:06 2021 +0100

    PCI: aardvark: Clear all MSIs at setup
    
    commit 7d8dc1f7cd007a7ce94c5b4c20d63a8b8d6d7751 upstream.
    
    We already clear all the other interrupts (ISR0, ISR1, HOST_CTRL_INT).
    
    Define a new macro PCIE_MSI_ALL_MASK and do the same clearing for MSIs,
    to ensure that we don't start receiving spurious interrupts.
    
    Use this new mask in advk_pcie_handle_msi();
    
    Link: https://lore.kernel.org/r/20211130172913.9727-5-kabel@kernel.org
    Signed-off-by: Pali Rohár <pali@kernel.org>
    Signed-off-by: Marek Behún <kabel@kernel.org>
    Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: aardvark: Fix reading MSI interrupt number [+ + +]
Author: Pali Rohár <pali@kernel.org>
Date:   Mon Jan 10 02:49:57 2022 +0100

    PCI: aardvark: Fix reading MSI interrupt number
    
    commit 805dfc18dd3d4dd97a987d4406593b5a225b1253 upstream.
    
    In advk_pcie_handle_msi() it is expected that when bit i in the W1C
    register PCIE_MSI_STATUS_REG is cleared, the PCIE_MSI_PAYLOAD_REG is
    updated to contain the MSI number corresponding to index i.
    
    Experiments show that this is not so, and instead PCIE_MSI_PAYLOAD_REG
    always contains the number of the last received MSI, overall.
    
    Do not read PCIE_MSI_PAYLOAD_REG register for determining MSI interrupt
    number. Since Aardvark already forbids more than 32 interrupts and uses
    own allocated hwirq numbers, the msi_idx already corresponds to the
    received MSI number.
    
    Link: https://lore.kernel.org/r/20220110015018.26359-3-kabel@kernel.org
    Fixes: 8c39d710363c ("PCI: aardvark: Add Aardvark PCI host controller driver")
    Signed-off-by: Pali Rohár <pali@kernel.org>
    Signed-off-by: Marek Behún <kabel@kernel.org>
    Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Signed-off-by: Marek Behún <kabel@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rcu: Apply callbacks processing time limit only on softirq [+ + +]
Author: Frederic Weisbecker <frederic@kernel.org>
Date:   Tue Oct 19 02:08:15 2021 +0200

    rcu: Apply callbacks processing time limit only on softirq
    
    commit a554ba288845fd3f6f12311fd76a51694233458a upstream.
    
    Time limit only makes sense when callbacks are serviced in softirq mode
    because:
    
    _ In case we need to get back to the scheduler,
      cond_resched_tasks_rcu_qs() is called after each callback.
    
    _ In case some other softirq vector needs the CPU, the call to
      local_bh_enable() before cond_resched_tasks_rcu_qs() takes care about
      them via a call to do_softirq().
    
    Therefore, make sure the time limit only applies to softirq mode.
    
    Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>
    Tested-by: Valentin Schneider <valentin.schneider@arm.com>
    Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Cc: Valentin Schneider <valentin.schneider@arm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Josh Triplett <josh@joshtriplett.org>
    Cc: Joel Fernandes <joel@joelfernandes.org>
    Cc: Boqun Feng <boqun.feng@gmail.com>
    Cc: Neeraj Upadhyay <neeraju@codeaurora.org>
    Cc: Uladzislau Rezki <urezki@gmail.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    [UR: backport to 5.10-stable]
    Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rcu: Fix callbacks processing time limit retaining cond_resched() [+ + +]
Author: Frederic Weisbecker <frederic@kernel.org>
Date:   Tue Oct 19 02:08:14 2021 +0200

    rcu: Fix callbacks processing time limit retaining cond_resched()
    
    commit 3e61e95e2d095e308616cba4ffb640f95a480e01 upstream.
    
    The callbacks processing time limit makes sure we are not exceeding a
    given amount of time executing the queue.
    
    However its "continue" clause bypasses the cond_resched() call on
    rcuc and NOCB kthreads, delaying it until we reach the limit, which can
    be very long...
    
    Make sure the scheduler has a higher priority than the time limit.
    
    Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>
    Tested-by: Valentin Schneider <valentin.schneider@arm.com>
    Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Cc: Valentin Schneider <valentin.schneider@arm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Josh Triplett <josh@joshtriplett.org>
    Cc: Joel Fernandes <joel@joelfernandes.org>
    Cc: Boqun Feng <boqun.feng@gmail.com>
    Cc: Neeraj Upadhyay <neeraju@codeaurora.org>
    Cc: Uladzislau Rezki <urezki@gmail.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    [UR: backport to 5.10-stable + commit update]
    Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/siw: Fix a condition race issue in MPA request processing [+ + +]
Author: Cheng Xu <chengyou@linux.alibaba.com>
Date:   Sun Apr 24 16:01:03 2022 +0800

    RDMA/siw: Fix a condition race issue in MPA request processing
    
    commit ef91271c65c12d36e4c2b61c61d4849fb6d11aa0 upstream.
    
    The calling of siw_cm_upcall and detaching new_cep with its listen_cep
    should be atomistic semantics. Otherwise siw_reject may be called in a
    temporary state, e,g, siw_cm_upcall is called but the new_cep->listen_cep
    has not being cleared.
    
    This fixes a WARN:
    
      WARNING: CPU: 7 PID: 201 at drivers/infiniband/sw/siw/siw_cm.c:255 siw_cep_put+0x125/0x130 [siw]
      CPU: 2 PID: 201 Comm: kworker/u16:22 Kdump: loaded Tainted: G            E     5.17.0-rc7 #1
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
      Workqueue: iw_cm_wq cm_work_handler [iw_cm]
      RIP: 0010:siw_cep_put+0x125/0x130 [siw]
      Call Trace:
       <TASK>
       siw_reject+0xac/0x180 [siw]
       iw_cm_reject+0x68/0xc0 [iw_cm]
       cm_work_handler+0x59d/0xe20 [iw_cm]
       process_one_work+0x1e2/0x3b0
       worker_thread+0x50/0x3a0
       ? rescuer_thread+0x390/0x390
       kthread+0xe5/0x110
       ? kthread_complete_and_exit+0x20/0x20
       ret_from_fork+0x1f/0x30
       </TASK>
    
    Fixes: 6c52fdc244b5 ("rdma/siw: connection management")
    Link: https://lore.kernel.org/r/d528d83466c44687f3872eadcb8c184528b2e2d4.1650526554.git.chengyou@linux.alibaba.com
    Reported-by: Luis Chamberlain <mcgrof@kernel.org>
    Reviewed-by: Bernard Metzler <bmt@zurich.ibm.com>
    Signed-off-by: Cheng Xu <chengyou@linux.alibaba.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "SUNRPC: attempt AF_LOCAL connect on setup" [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Fri Apr 29 12:27:30 2022 -0400

    Revert "SUNRPC: attempt AF_LOCAL connect on setup"
    
    commit a3d0562d4dc039bca39445e1cddde7951662e17d upstream.
    
    This reverts commit 7073ea8799a8cf73db60270986f14e4aae20fa80.
    
    We must not try to connect the socket while the transport is under
    construction, because the mechanisms to safely tear it down are not in
    place. As the code stands, we end up leaking the sockets on a connection
    error.
    
    Reported-by: wanghai (M) <wanghai38@huawei.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/dasd: fix data corruption for ESE devices [+ + +]
Author: Stefan Haberland <sth@linux.ibm.com>
Date:   Thu May 5 16:17:29 2022 +0200

    s390/dasd: fix data corruption for ESE devices
    
    commit 5b53a405e4658580e1faf7c217db3f55a21ba849 upstream.
    
    For ESE devices we get an error when accessing an unformatted track.
    The handling of this error will return zero data for read requests and
    format the track on demand before writing to it. To do this the code needs
    to distinguish between read and write requests. This is done with data from
    the blocklayer request. A pointer to the blocklayer request is stored in
    the CQR.
    
    If there is an error on the device an ERP request is built to do error
    recovery. While the ERP request is mostly a copy of the original CQR the
    pointer to the blocklayer request is not copied to not accidentally pass
    it back to the blocklayer without cleanup.
    
    This leads to the error that during ESE handling after an ERP request was
    built it is not possible to determine the IO direction. This leads to the
    formatting of a track for read requests which might in turn lead to data
    corruption.
    
    Fixes: 5e2b17e712cf ("s390/dasd: Add dynamic formatting support for ESE volumes")
    Cc: stable@vger.kernel.org # 5.3+
    Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
    Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
    Link: https://lore.kernel.org/r/20220505141733.1989450-2-sth@linux.ibm.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

s390/dasd: Fix read for ESE with blksize < 4k [+ + +]
Author: Jan Höppner <hoeppner@linux.ibm.com>
Date:   Thu May 5 16:17:31 2022 +0200

    s390/dasd: Fix read for ESE with blksize < 4k
    
    commit cd68c48ea15c85f1577a442dc4c285e112ff1b37 upstream.
    
    When reading unformatted tracks on ESE devices, the corresponding memory
    areas are simply set to zero for each segment. This is done incorrectly
    for blocksizes < 4096.
    
    There are two problems. First, the increment of dst is done using the
    counter of the loop (off), which is increased by blksize every
    iteration. This leads to a much bigger increment for dst as actually
    intended. Second, the increment of dst is done before the memory area
    is set to 0, skipping a significant amount of bytes of memory.
    
    This leads to illegal overwriting of memory and ultimately to a kernel
    panic.
    
    This is not a problem with 4k blocksize because
    blk_queue_max_segment_size is set to PAGE_SIZE, always resulting in a
    single iteration for the inner segment loop (bv.bv_len == blksize). The
    incorrectly used 'off' value to increment dst is 0 and the correct
    memory area is used.
    
    In order to fix this for blksize < 4k, increment dst correctly using the
    blksize and only do it at the end of the loop.
    
    Fixes: 5e2b17e712cf ("s390/dasd: Add dynamic formatting support for ESE volumes")
    Cc: stable@vger.kernel.org # v5.3+
    Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
    Reviewed-by: Stefan Haberland <sth@linux.ibm.com>
    Link: https://lore.kernel.org/r/20220505141733.1989450-4-sth@linux.ibm.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

s390/dasd: Fix read inconsistency for ESE DASD devices [+ + +]
Author: Jan Höppner <hoeppner@linux.ibm.com>
Date:   Thu May 5 16:17:32 2022 +0200

    s390/dasd: Fix read inconsistency for ESE DASD devices
    
    commit b9c10f68e23c13f56685559a0d6fdaca9f838324 upstream.
    
    Read requests that return with NRF error are partially completed in
    dasd_eckd_ese_read(). The function keeps track of the amount of
    processed bytes and the driver will eventually return this information
    back to the block layer for further processing via __dasd_cleanup_cqr()
    when the request is in the final stage of processing (from the driver's
    perspective).
    
    For this, blk_update_request() is used which requires the number of
    bytes to complete the request. As per documentation the nr_bytes
    parameter is described as follows:
       "number of bytes to complete for @req".
    
    This was mistakenly interpreted as "number of bytes _left_ for @req"
    leading to new requests with incorrect data length. The consequence are
    inconsistent and completely wrong read requests as data from random
    memory areas are read back.
    
    Fix this by correctly specifying the amount of bytes that should be used
    to complete the request.
    
    Fixes: 5e6bdd37c552 ("s390/dasd: fix data corruption for thin provisioned devices")
    Cc: stable@vger.kernel.org # 5.3+
    Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
    Reviewed-by: Stefan Haberland <sth@linux.ibm.com>
    Link: https://lore.kernel.org/r/20220505141733.1989450-5-sth@linux.ibm.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

s390/dasd: prevent double format of tracks for ESE devices [+ + +]
Author: Stefan Haberland <sth@linux.ibm.com>
Date:   Thu May 5 16:17:30 2022 +0200

    s390/dasd: prevent double format of tracks for ESE devices
    
    commit 71f3871657370dbbaf942a1c758f64e49a36c70f upstream.
    
    For ESE devices we get an error for write operations on an unformatted
    track. Afterwards the track will be formatted and the IO operation
    restarted.
    When using alias devices a track might be accessed by multiple requests
    simultaneously and there is a race window that a track gets formatted
    twice resulting in data loss.
    
    Prevent this by remembering the amount of formatted tracks when starting
    a request and comparing this number before actually formatting a track
    on the fly. If the number has changed there is a chance that the current
    track was finally formatted in between. As a result do not format the
    track and restart the current IO to check.
    
    The number of formatted tracks does not match the overall number of
    formatted tracks on the device and it might wrap around but this is no
    problem. It is only needed to recognize that a track has been formatted at
    all in between.
    
    Fixes: 5e2b17e712cf ("s390/dasd: Add dynamic formatting support for ESE volumes")
    Cc: stable@vger.kernel.org # 5.3+
    Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
    Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
    Link: https://lore.kernel.org/r/20220505141733.1989450-3-sth@linux.ibm.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests/seccomp: Don't call read() on TTY from background pgrp [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Sat Mar 19 02:00:11 2022 +0100

    selftests/seccomp: Don't call read() on TTY from background pgrp
    
    commit 2bfed7d2ffa5d86c462d3e2067f2832eaf8c04c7 upstream.
    
    Since commit 92d25637a3a4 ("kselftest: signal all child processes"), tests
    are executed in background process groups. This means that trying to read
    from stdin now throws SIGTTIN when stdin is a TTY, which breaks some
    seccomp selftests that try to use read(0, NULL, 0) as a dummy syscall.
    
    The simplest way to fix that is probably to just use -1 instead of 0 as
    the dummy read()'s FD.
    
    Fixes: 92d25637a3a4 ("kselftest: signal all child processes")
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20220319010011.1374622-1-jannh@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests: mirror_gre_bridge_1q: Avoid changing PVID while interface is operational [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
Date:   Mon May 2 11:45:07 2022 +0300

    selftests: mirror_gre_bridge_1q: Avoid changing PVID while interface is operational
    
    commit 3122257c02afd9f199a8fc84ae981e1fc4958532 upstream.
    
    In emulated environments, the bridge ports enslaved to br1 get a carrier
    before changing br1's PVID. This means that by the time the PVID is
    changed, br1 is already operational and configured with an IPv6
    link-local address.
    
    When the test is run with netdevs registered by mlxsw, changing the PVID
    is vetoed, as changing the VID associated with an existing L3 interface
    is forbidden. This restriction is similar to the 8021q driver's
    restriction of changing the VID of an existing interface.
    
    Fix this by taking br1 down and bringing it back up when it is fully
    configured.
    
    With this fix, the test reliably passes on top of both the SW and HW
    data paths (emulated or not).
    
    Fixes: 239e754af854 ("selftests: forwarding: Test mirror-to-gretap w/ UL 802.1q")
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Petr Machata <petrm@nvidia.com>
    Link: https://lore.kernel.org/r/20220502084507.364774-1-idosch@nvidia.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests: ocelot: tc_flower_chains: specify conform-exceed action for policer [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Tue May 3 15:14:28 2022 +0300

    selftests: ocelot: tc_flower_chains: specify conform-exceed action for policer
    
    commit 5a7c5f70c743c6cf32b44b05bd6b19d4ad82f49d upstream.
    
    As discussed here with Ido Schimmel:
    https://patchwork.kernel.org/project/netdevbpf/patch/20220224102908.5255-2-jianbol@nvidia.com/
    
    the default conform-exceed action is "reclassify", for a reason we don't
    really understand.
    
    The point is that hardware can't offload that police action, so not
    specifying "conform-exceed" was always wrong, even though the command
    used to work in hardware (but not in software) until the kernel started
    adding validation for it.
    
    Fix the command used by the selftest by making the policer drop on
    exceed, and pass the packet to the next action (goto) on conform.
    
    Fixes: 8cd6b020b644 ("selftests: ocelot: add some example VCAP IS1, IS2 and ES0 tc offloads")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://lore.kernel.org/r/20220503121428.842906-1-vladimir.oltean@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
smsc911x: allow using IRQ0 [+ + +]
Author: Sergey Shtylyov <s.shtylyov@omp.ru>
Date:   Mon May 2 23:14:09 2022 +0300

    smsc911x: allow using IRQ0
    
    commit 5ef9b803a4af0f5e42012176889b40bb2a978b18 upstream.
    
    The AlphaProject AP-SH4A-3A/AP-SH4AD-0A SH boards use IRQ0 for their SMSC
    LAN911x Ethernet chip, so the networking on them must have been broken by
    commit 965b2aa78fbc ("net/smsc911x: fix irq resource allocation failure")
    which filtered out 0 as well as the negative error codes -- it was kinda
    correct at the time, as platform_get_irq() could return 0 on of_irq_get()
    failure and on the actual 0 in an IRQ resource.  This issue was fixed by
    me (back in 2016!), so we should be able to fix this driver to allow IRQ0
    usage again...
    
    When merging this to the stable kernels, make sure you also merge commit
    e330b9a6bb35 ("platform: don't return 0 from platform_get_irq[_byname]()
    on error") -- that's my fix to platform_get_irq() for the DT platforms...
    
    Fixes: 965b2aa78fbc ("net/smsc911x: fix irq resource allocation failure")
    Signed-off-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Link: https://lore.kernel.org/r/656036e4-6387-38df-b8a7-6ba683b16e63@omp.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/kvm: Preserve BSP MSR_KVM_POLL_CONTROL across suspend/resume [+ + +]
Author: Wanpeng Li <wanpengli@tencent.com>
Date:   Mon Apr 18 00:42:32 2022 -0700

    x86/kvm: Preserve BSP MSR_KVM_POLL_CONTROL across suspend/resume
    
    [ Upstream commit 0361bdfddca20c8855ea3bdbbbc9c999912b10ff ]
    
    MSR_KVM_POLL_CONTROL is cleared on reset, thus reverting guests to
    host-side polling after suspend/resume.  Non-bootstrap CPUs are
    restored correctly by the haltpoll driver because they are hot-unplugged
    during suspend and hot-plugged during resume; however, the BSP
    is not hotpluggable and remains in host-sde polling mode after
    the guest resume.  The makes the guest pay for the cost of vmexits
    every time the guest enters idle.
    
    Fix it by recording BSP's haltpoll state and resuming it during guest
    resume.
    
    Cc: Marcelo Tosatti <mtosatti@redhat.com>
    Signed-off-by: Wanpeng Li <wanpengli@tencent.com>
    Message-Id: <1650267752-46796-1-git-send-email-wanpengli@tencent.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>