Linux 4.19.291

 
Linux: Add MODULE_FIRMWARE() for FIRMWARE_TG357766. [+ + +]
Author: Tobias Heider <me@tobhe.de>
Date:   Wed Jun 28 02:13:32 2023 +0200

    Add MODULE_FIRMWARE() for FIRMWARE_TG357766.
    
    [ Upstream commit 046f753da6143ee16452966915087ec8b0de3c70 ]
    
    Fixes a bug where on the M1 mac mini initramfs-tools fails to
    include the necessary firmware into the initrd.
    
    Fixes: c4dab50697ff ("tg3: Download 57766 EEE service patch firmware")
    Signed-off-by: Tobias Heider <me@tobhe.de>
    Reviewed-by: Michael Chan <michael.chan@broadcom.com>
    Link: https://lore.kernel.org/r/ZJt7LKzjdz8+dClx@tobhe.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: ac97: Fix possible NULL dereference in snd_ac97_mixer [+ + +]
Author: Su Hui <suhui@nfschina.com>
Date:   Thu Jun 15 10:17:32 2023 +0800

    ALSA: ac97: Fix possible NULL dereference in snd_ac97_mixer
    
    [ Upstream commit 79597c8bf64ca99eab385115743131d260339da5 ]
    
    smatch error:
    sound/pci/ac97/ac97_codec.c:2354 snd_ac97_mixer() error:
    we previously assumed 'rac97' could be null (see line 2072)
    
    remove redundant assignment, return error if rac97 is NULL.
    
    Fixes: da3cec35dd3c ("ALSA: Kill snd_assert() in sound/pci/*")
    Signed-off-by: Su Hui <suhui@nfschina.com>
    Link: https://lore.kernel.org/r/20230615021732.1972194-1-suhui@nfschina.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: jack: Fix mutex call in snd_jack_report() [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Thu Jul 6 17:53:57 2023 +0200

    ALSA: jack: Fix mutex call in snd_jack_report()
    
    [ Upstream commit 89dbb335cb6a627a4067bc42caa09c8bc3326d40 ]
    
    snd_jack_report() is supposed to be callable from an IRQ context, too,
    and it's indeed used in that way from virtsnd driver.  The fix for
    input_dev race in commit 1b6a6fc5280e ("ALSA: jack: Access input_dev
    under mutex"), however, introduced a mutex lock in snd_jack_report(),
    and this resulted in a potential sleep-in-atomic.
    
    For addressing that problem, this patch changes the relevant code to
    use the object get/put and removes the mutex usage.  That is,
    snd_jack_report(), it takes input_get_device() and leaves with
    input_put_device() for assuring the input_dev being assigned.
    
    Although the whole mutex could be reduced, we keep it because it can
    be still a protection for potential races between creation and
    deletion.
    
    Fixes: 1b6a6fc5280e ("ALSA: jack: Access input_dev under mutex")
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Closes: https://lore.kernel.org/r/cf95f7fe-a748-4990-8378-000491b40329@moroto.mountain
    Tested-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20230706155357.3470-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ARC: define ASM_NL and __ALIGN(_STR) outside #ifdef __ASSEMBLY__ guard [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Mon Jun 12 00:50:50 2023 +0900

    ARC: define ASM_NL and __ALIGN(_STR) outside #ifdef __ASSEMBLY__ guard
    
    [ Upstream commit 92e2921eeafdfca9acd9b83f07d2b7ca099bac24 ]
    
    ASM_NL is useful not only in *.S files but also in .c files for using
    inline assembler in C code.
    
    On ARC, however, ASM_NL is evaluated inconsistently. It is expanded to
    a backquote (`) in *.S files, but a semicolon (;) in *.c files because
    arch/arc/include/asm/linkage.h defines it inside #ifdef __ASSEMBLY__,
    so the definition for C code falls back to the default value defined in
    include/linux/linkage.h.
    
    If ASM_NL is used in inline assembler in .c files, it will result in
    wrong assembly code because a semicolon is not an instruction separator,
    but the start of a comment for ARC.
    
    Move ASM_NL (also __ALIGN and __ALIGN_STR) out of the #ifdef.
    
    Fixes: 9df62f054406 ("arch: use ASM_NL instead of ';' for assembler new line character in the macro")
    Fixes: 8d92e992a785 ("ARC: define __ALIGN_STR and __ALIGN symbols for ARC")
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ARCv2: entry: avoid a branch [+ + +]
Author: Vineet Gupta <vgupta@synopsys.com>
Date:   Fri May 10 16:24:15 2019 -0700

    ARCv2: entry: avoid a branch
    
    [ Upstream commit ab854bfcd310b5872fe12eb8d3f2c30fe427f8f7 ]
    
    Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
    Stable-dep-of: 92e2921eeafd ("ARC: define ASM_NL and __ALIGN(_STR) outside #ifdef __ASSEMBLY__ guard")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARCv2: entry: comments about hardware auto-save on taken interrupts [+ + +]
Author: Vineet Gupta <vgupta@synopsys.com>
Date:   Tue Apr 9 16:55:15 2019 -0700

    ARCv2: entry: comments about hardware auto-save on taken interrupts
    
    [ Upstream commit 45869eb0c0afd72bd5ab2437d4b00915697c044a ]
    
    Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
    Stable-dep-of: 92e2921eeafd ("ARC: define ASM_NL and __ALIGN(_STR) outside #ifdef __ASSEMBLY__ guard")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARCv2: entry: push out the Z flag unclobber from common EXCEPTION_PROLOGUE [+ + +]
Author: Vineet Gupta <vgupta@synopsys.com>
Date:   Tue Apr 9 19:16:37 2019 -0700

    ARCv2: entry: push out the Z flag unclobber from common EXCEPTION_PROLOGUE
    
    [ Upstream commit 23c0cbd0c75c3b564850294427fd2be2bc2a015b ]
    
    Upon a taken interrupt/exception from User mode, HS hardware auto sets Z flag.
    This helps shave a few instructions from EXCEPTION_PROLOGUE by eliding
    re-reading ERSTATUS and some bit fiddling.
    
    However TLB Miss Exception handler can clobber the CPU flags and still end
    up in EXCEPTION_PROLOGUE in the slow path handling TLB handling case:
    
       EV_TLBMissD
         do_slow_path_pf
           EV_TLBProtV (aliased to call_do_page_fault)
              EXCEPTION_PROLOGUE
    
    As a result, EXCEPTION_PROLOGUE need to "unclobber" the Z flag which this
    patch changes. It is now pushed out to TLB Miss Exception handler.
    The reasons beings:
    
     - The flag restoration is only needed for slowpath TLB Miss Exception
       handling, but currently being in EXCEPTION_PROLOGUE penalizes all
       exceptions such as ProtV and syscall Trap, where Z flag is already
       as expected.
    
     - Pushing unclobber out to where it was clobbered is much cleaner and
       also serves to document the fact.
    
     - Makes EXCEPTION_PROLGUE similar to INTERRUPT_PROLOGUE so easier to
       refactor the common parts which is what this series aims to do
    
    Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
    Stable-dep-of: 92e2921eeafd ("ARC: define ASM_NL and __ALIGN(_STR) outside #ifdef __ASSEMBLY__ guard")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARCv2: entry: rewrite to enable use of double load/stores LDD/STD [+ + +]
Author: Vineet Gupta <vgupta@synopsys.com>
Date:   Wed May 15 15:36:46 2019 -0700

    ARCv2: entry: rewrite to enable use of double load/stores LDD/STD
    
    [ Upstream commit a4880801a72ecc2dcdfa432f81a754f3e7438567 ]
    
     - the motivation was to be remove blatent copy-paste due to hasty support
       of CONFIG_ARC_IRQ_NO_AUTOSAVE support
    
     - but with refactoring we could use LDD/STD to greatly optimize the code
    
    Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
    Stable-dep-of: 92e2921eeafd ("ARC: define ASM_NL and __ALIGN(_STR) outside #ifdef __ASSEMBLY__ guard")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64: dts: renesas: ulcb-kf: Remove flow control for SCIF1 [+ + +]
Author: Wolfram Sang <wsa+renesas@sang-engineering.com>
Date:   Thu May 25 10:48:22 2023 +0200

    arm64: dts: renesas: ulcb-kf: Remove flow control for SCIF1
    
    [ Upstream commit 1a2c4e5635177939a088d22fa35c6a7032725663 ]
    
    The schematics are misleading, the flow control is for HSCIF1. We need
    SCIF1 for GNSS/GPS which does not use flow control.
    
    Fixes: c6c816e22bc8 ("arm64: dts: ulcb-kf: enable SCIF1")
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://lore.kernel.org/r/20230525084823.4195-2-wsa+renesas@sang-engineering.com
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: stratix10: fix incorrect I2C property for SCL signal [+ + +]
Author: Dinh Nguyen <dinguyen@kernel.org>
Date:   Tue Jul 11 15:44:30 2023 -0500

    arm64: dts: stratix10: fix incorrect I2C property for SCL signal
    
    commit db66795f61354c373ecdadbdae1ed253a96c47cb upstream.
    
    The correct dts property for the SCL falling time is
    "i2c-scl-falling-time-ns".
    
    Fixes: c8da1d15b8a4 ("arm64: dts: stratix10: i2c clock running out of spec")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ARM: 9303/1: kprobes: avoid missing-declaration warnings [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Fri Jun 2 19:28:42 2023 +0100

    ARM: 9303/1: kprobes: avoid missing-declaration warnings
    
    [ Upstream commit 1b9c3ddcec6a55e15d3e38e7405e2d078db02020 ]
    
    checker_stack_use_t32strd() and kprobe_handler() can be made static since
    they are not used from other files, while coverage_start_registers()
    and __kprobes_test_case() are used from assembler code, and just need
    a declaration to avoid a warning with the global definition.
    
    arch/arm/probes/kprobes/checkers-common.c:43:18: error: no previous prototype for 'checker_stack_use_t32strd'
    arch/arm/probes/kprobes/core.c:236:16: error: no previous prototype for 'kprobe_handler'
    arch/arm/probes/kprobes/test-core.c:723:10: error: no previous prototype for 'coverage_start_registers'
    arch/arm/probes/kprobes/test-core.c:918:14: error: no previous prototype for '__kprobes_test_case_start'
    arch/arm/probes/kprobes/test-core.c:952:14: error: no previous prototype for '__kprobes_test_case_end_16'
    arch/arm/probes/kprobes/test-core.c:967:14: error: no previous prototype for '__kprobes_test_case_end_32'
    
    Fixes: 6624cf651f1a ("ARM: kprobes: collects stack consumption for store instructions")
    Fixes: 454f3e132d05 ("ARM/kprobes: Remove jprobe arm implementation")
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: BCM5301X: Drop "clock-names" from the SPI node [+ + +]
Author: Rafał Miłecki <rafal@milecki.pl>
Date:   Wed May 3 14:28:30 2023 +0200

    ARM: dts: BCM5301X: Drop "clock-names" from the SPI node
    
    [ Upstream commit d3c8e2c5757153bbfad70019ec1decbca86f3def ]
    
    There is no such property in the SPI controller binding documentation.
    Also Linux driver doesn't look for it.
    
    This fixes:
    arch/arm/boot/dts/bcm4708-asus-rt-ac56u.dtb: spi@18029200: Unevaluated properties are not allowed ('clock-names' was unexpected)
            From schema: Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.yaml
    
    Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
    Link: https://lore.kernel.org/r/20230503122830.3200-1-zajec5@gmail.com
    Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: imx6sll: fixup of operating points [+ + +]
Author: Andreas Kemnade <andreas@kemnade.info>
Date:   Fri Sep 24 11:14:37 2021 +0200

    ARM: dts: imx6sll: fixup of operating points
    
    [ Upstream commit 1875903019ea6e32e6e544c1631b119e4fd60b20 ]
    
    Make operating point definitions comply with binding
    specifications.
    
    Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Stable-dep-of: ee70b908f77a ("ARM: dts: nxp/imx6sll: fix wrong property name in usbphy node")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: imx6sll: Make ssi node name same as other platforms [+ + +]
Author: Shengjiu Wang <shengjiu.wang@nxp.com>
Date:   Tue Jun 2 18:44:50 2020 +0800

    ARM: dts: imx6sll: Make ssi node name same as other platforms
    
    [ Upstream commit 5da1b522cf7dc51f7fde2cca8d90406b0291c503 ]
    
    In imx6sll.dtsi, the ssi node name is different with other
    platforms (imx6qdl, imx6sl, imx6sx), but the
    sound/soc/fsl/fsl-asoc-card.c machine driver needs to check
    ssi node name for audmux configuration, then different ssi
    node name causes issue on imx6sll platform.
    
    So we change ssi node name to make all platforms have same
    name.
    
    Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Stable-dep-of: ee70b908f77a ("ARM: dts: nxp/imx6sll: fix wrong property name in usbphy node")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: imx: add usb alias [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Sun Nov 1 19:29:53 2020 +0800

    ARM: dts: imx: add usb alias
    
    [ Upstream commit 5c8b3b8a182cbc1ccdfcdeea9b25dd2c12a8148f ]
    
    Add usb alias for bootloader searching the controller in correct order.
    
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Stable-dep-of: ee70b908f77a ("ARM: dts: nxp/imx6sll: fix wrong property name in usbphy node")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: nxp/imx6sll: fix wrong property name in usbphy node [+ + +]
Author: Xu Yang <xu.yang_2@nxp.com>
Date:   Mon Jul 17 10:28:33 2023 +0800

    ARM: dts: nxp/imx6sll: fix wrong property name in usbphy node
    
    [ Upstream commit ee70b908f77a9d8f689dea986f09e6d7dc481934 ]
    
    Property name "phy-3p0-supply" is used instead of "phy-reg_3p0-supply".
    
    Fixes: 9f30b6b1a957 ("ARM: dts: imx: Add basic dtsi file for imx6sll")
    cc: <stable@vger.kernel.org>
    Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: ep93xx: fix missing-prototype warnings [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue May 16 17:30:58 2023 +0200

    ARM: ep93xx: fix missing-prototype warnings
    
    [ Upstream commit 419013740ea1e4343d8ade535d999f59fa28e460 ]
    
    ep93xx_clocksource_read() is only called from the file it is declared in,
    while ep93xx_timer_init() is declared in a header that is not included here.
    
    arch/arm/mach-ep93xx/timer-ep93xx.c:120:13: error: no previous prototype for 'ep93xx_timer_init'
    arch/arm/mach-ep93xx/timer-ep93xx.c:63:5: error: no previous prototype for 'ep93xx_clocksource_read'
    
    Fixes: 000bc17817bf ("ARM: ep93xx: switch to GENERIC_CLOCKEVENTS")
    Acked-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
    Link: https://lore.kernel.org/r/20230516153109.514251-3-arnd@kernel.org
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: orion5x: fix d2net gpio initialization [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue May 16 17:31:05 2023 +0200

    ARM: orion5x: fix d2net gpio initialization
    
    commit f8ef1233939495c405a9faa4bd1ae7d3f581bae4 upstream.
    
    The DT version of this board has a custom file with the gpio
    device. However, it does nothing because the d2net_init()
    has no caller or prototype:
    
    arch/arm/mach-orion5x/board-d2net.c:101:13: error: no previous prototype for 'd2net_init'
    
    Call it from the board-dt file as intended.
    
    Fixes: 94b0bd366e36 ("ARM: orion5x: convert d2net to Device Tree")
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230516153109.514251-10-arnd@kernel.org
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: cs42l51: fix driver to properly autoload with automatic module loading [+ + +]
Author: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Date:   Thu Jul 13 13:21:12 2023 +0200

    ASoC: cs42l51: fix driver to properly autoload with automatic module loading
    
    commit e51df4f81b02bcdd828a04de7c1eb6a92988b61e upstream.
    
    In commit 2cb1e0259f50 ("ASoC: cs42l51: re-hook of_match_table
    pointer"), 9 years ago, some random guy fixed the cs42l51 after it was
    split into a core part and an I2C part to properly match based on a
    Device Tree compatible string.
    
    However, the fix in this commit is wrong: the MODULE_DEVICE_TABLE(of,
    ....) is in the core part of the driver, not the I2C part. Therefore,
    automatic module loading based on module.alias, based on matching with
    the DT compatible string, loads the core part of the driver, but not
    the I2C part. And threfore, the i2c_driver is not registered, and the
    codec is not known to the system, nor matched with a DT node with the
    corresponding compatible string.
    
    In order to fix that, we move the MODULE_DEVICE_TABLE(of, ...) into
    the I2C part of the driver. The cs42l51_of_match[] array is also moved
    as well, as it is not possible to have this definition in one file,
    and the MODULE_DEVICE_TABLE(of, ...) invocation in another file, due
    to how MODULE_DEVICE_TABLE works.
    
    Thanks to this commit, the I2C part of the driver now properly
    autoloads, and thanks to its dependency on the core part, the core
    part gets autoloaded as well, resulting in a functional sound card
    without having to manually load kernel modules.
    
    Fixes: 2cb1e0259f50 ("ASoC: cs42l51: re-hook of_match_table pointer")
    Cc: stable@vger.kernel.org
    Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
    Link: https://lore.kernel.org/r/20230713112112.778576-1-thomas.petazzoni@bootlin.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: es8316: Increment max value for ALC Capture Target Volume control [+ + +]
Author: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Date:   Tue May 30 21:11:38 2023 +0300

    ASoC: es8316: Increment max value for ALC Capture Target Volume control
    
    [ Upstream commit 6f073429037cd79d7311cd8236311c53f5ea8f01 ]
    
    The following error occurs when trying to restore a previously saved
    ALSA mixer state (tested on a Rock 5B board):
    
      $ alsactl --no-ucm -f /tmp/asound.state store hw:Analog
      $ alsactl --no-ucm -I -f /tmp/asound.state restore hw:Analog
      alsactl: set_control:1475: Cannot write control '2:0:0:ALC Capture Target Volume:0' : Invalid argument
    
    According to ES8316 datasheet, the register at address 0x2B, which is
    related to the above mixer control, contains by default the value 0xB0.
    Considering the corresponding ALC target bits (ALCLVL) are 7:4, the
    control is initialized with 11, which is one step above the maximum
    value allowed by the driver:
    
     ALCLVL | dB gain
     -------+--------
      0000  |  -16.5
      0001  |  -15.0
      0010  |  -13.5
      ....  |  .....
      0111  |   -6.0
      1000  |   -4.5
      1001  |   -3.0
      1010  |   -1.5
      ....  |  .....
      1111  |   -1.5
    
    The tests performed using the VU meter feature (--vumeter=TYPE) of
    arecord/aplay confirm the specs are correct and there is no measured
    gain if the 1011-1111 range would have been mapped to 0 dB:
    
     dB gain | VU meter %
     --------+-----------
       -6.0  |  30-31
       -4.5  |  35-36
       -3.0  |  42-43
       -1.5  |  50-51
        0.0  |  50-51
    
    Increment the max value allowed for ALC Capture Target Volume control,
    so that it matches the hardware default.  Additionally, update the
    related TLV to prevent an artificial extension of the dB gain range.
    
    Fixes: b8b88b70875a ("ASoC: add es8316 codec driver")
    Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
    Link: https://lore.kernel.org/r/20230530181140.483936-2-cristian.ciocaltea@collabora.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: fsl_spdif: Silence output on stop [+ + +]
Author: Matus Gajdos <matuszpd@gmail.com>
Date:   Wed Jul 19 18:47:29 2023 +0200

    ASoC: fsl_spdif: Silence output on stop
    
    [ Upstream commit 0e4c2b6b0c4a4b4014d9424c27e5e79d185229c5 ]
    
    Clear TX registers on stop to prevent the SPDIF interface from sending
    last written word over and over again.
    
    Fixes: a2388a498ad2 ("ASoC: fsl: Add S/PDIF CPU DAI driver")
    Signed-off-by: Matus Gajdos <matuszpd@gmail.com>
    Reviewed-by: Fabio Estevam <festevam@gmail.com>
    Link: https://lore.kernel.org/r/20230719164729.19969-1-matuszpd@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: wm8904: Fill the cache for WM8904_ADC_TEST_0 register [+ + +]
Author: Mark Brown <broonie@kernel.org>
Date:   Sun Jul 23 00:27:22 2023 +0100

    ASoC: wm8904: Fill the cache for WM8904_ADC_TEST_0 register
    
    commit f061e2be8689057cb4ec0dbffa9f03e1a23cdcb2 upstream.
    
    The WM8904_ADC_TEST_0 register is modified as part of updating the OSR
    controls but does not have a cache default, leading to errors when we try
    to modify these controls in cache only mode with no prior read:
    
    wm8904 3-001a: ASoC: error at snd_soc_component_update_bits on wm8904.3-001a for register: [0x000000c6] -16
    
    Add a read of the register to probe() to fill the cache and avoid both the
    error messages and the misconfiguration of the chip which will result.
    
    Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230723-asoc-fix-wm8904-adc-test-read-v1-1-2cdf2edd83fd@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ata: pata_ns87415: mark ns87560_tf_read static [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Jul 26 22:33:22 2023 +0200

    ata: pata_ns87415: mark ns87560_tf_read static
    
    [ Upstream commit 3fc2febb0f8ffae354820c1772ec008733237cfa ]
    
    The global function triggers a warning because of the missing prototype
    
    drivers/ata/pata_ns87415.c:263:6: warning: no previous prototype for 'ns87560_tf_read' [-Wmissing-prototypes]
      263 | void ns87560_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
    
    There are no other references to this, so just make it static.
    
    Fixes: c4b5b7b6c4423 ("pata_ns87415: Initial cut at 87415/87560 IDE support")
    Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bcache: Fix __bch_btree_node_alloc to make the failure behavior consistent [+ + +]
Author: Zheng Wang <zyytlz.wz@163.com>
Date:   Thu Jun 15 20:12:22 2023 +0800

    bcache: Fix __bch_btree_node_alloc to make the failure behavior consistent
    
    [ Upstream commit 80fca8a10b604afad6c14213fdfd816c4eda3ee4 ]
    
    In some specific situations, the return value of __bch_btree_node_alloc
    may be NULL. This may lead to a potential NULL pointer dereference in
    caller function like a calling chain :
    btree_split->bch_btree_node_alloc->__bch_btree_node_alloc.
    
    Fix it by initializing the return value in __bch_btree_node_alloc.
    
    Fixes: cafe56359144 ("bcache: A block layer cache")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zheng Wang <zyytlz.wz@163.com>
    Signed-off-by: Coly Li <colyli@suse.de>
    Link: https://lore.kernel.org/r/20230615121223.22502-6-colyli@suse.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bcache: remove 'int n' from parameter list of bch_bucket_alloc_set() [+ + +]
Author: Coly Li <colyli@suse.de>
Date:   Thu Oct 1 14:50:45 2020 +0800

    bcache: remove 'int n' from parameter list of bch_bucket_alloc_set()
    
    [ Upstream commit 17e4aed8309ff28670271546c2c3263eb12f5eb6 ]
    
    The parameter 'int n' from bch_bucket_alloc_set() is not cleared
    defined. From the code comments n is the number of buckets to alloc, but
    from the code itself 'n' is the maximum cache to iterate. Indeed all the
    locations where bch_bucket_alloc_set() is called, 'n' is alwasy 1.
    
    This patch removes the confused and unnecessary 'int n' from parameter
    list of  bch_bucket_alloc_set(), and explicitly allocates only 1 bucket
    for its caller.
    
    Signed-off-by: Coly Li <colyli@suse.de>
    Reviewed-by: Hannes Reinecke <hare@suse.de>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Stable-dep-of: 80fca8a10b60 ("bcache: Fix __bch_btree_node_alloc to make the failure behavior consistent")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bcache: Remove unnecessary NULL point check in node allocations [+ + +]
Author: Zheng Wang <zyytlz.wz@163.com>
Date:   Thu Jun 15 20:12:21 2023 +0800

    bcache: Remove unnecessary NULL point check in node allocations
    
    commit 028ddcac477b691dd9205c92f991cc15259d033e upstream.
    
    Due to the previous fix of __bch_btree_node_alloc, the return value will
    never be a NULL pointer. So IS_ERR is enough to handle the failure
    situation. Fix it by replacing IS_ERR_OR_NULL check by an IS_ERR check.
    
    Fixes: cafe56359144 ("bcache: A block layer cache")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zheng Wang <zyytlz.wz@163.com>
    Signed-off-by: Coly Li <colyli@suse.de>
    Link: https://lore.kernel.org/r/20230615121223.22502-5-colyli@suse.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

bcache: use MAX_CACHES_PER_SET instead of magic number 8 in __bch_bucket_alloc_set [+ + +]
Author: Shenghui Wang <shhuiw@foxmail.com>
Date:   Mon Oct 8 20:41:19 2018 +0800

    bcache: use MAX_CACHES_PER_SET instead of magic number 8 in __bch_bucket_alloc_set
    
    [ Upstream commit 8792099f9ad487cf381f4e8199ff2158ba0f6eb5 ]
    
    Current cache_set has MAX_CACHES_PER_SET caches most, and the macro
    is used for
    "
            struct cache *cache_by_alloc[MAX_CACHES_PER_SET];
    "
    in the define of struct cache_set.
    
    Use MAX_CACHES_PER_SET instead of magic number 8 in
    __bch_bucket_alloc_set.
    
    Signed-off-by: Shenghui Wang <shhuiw@foxmail.com>
    Signed-off-by: Coly Li <colyli@suse.de>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Stable-dep-of: 80fca8a10b60 ("bcache: Fix __bch_btree_node_alloc to make the failure behavior consistent")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
benet: fix return value check in be_lancer_xmit_workarounds() [+ + +]
Author: Yuanjun Gong <ruc_gongyuanjun@163.com>
Date:   Tue Jul 25 11:27:26 2023 +0800

    benet: fix return value check in be_lancer_xmit_workarounds()
    
    [ Upstream commit 5c85f7065718a949902b238a6abd8fc907c5d3e0 ]
    
    in be_lancer_xmit_workarounds(), it should go to label 'tx_drop'
    if an unexpected value is returned by pskb_trim().
    
    Fixes: 93040ae5cc8d ("be2net: Fix to trim skb for padded vlan packets to workaround an ASIC Bug")
    Signed-off-by: Yuanjun Gong <ruc_gongyuanjun@163.com>
    Link: https://lore.kernel.org/r/20230725032726.15002-1-ruc_gongyuanjun@163.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
block: change all __u32 annotations to __be32 in affs_hardblocks.h [+ + +]
Author: Michael Schmitz <schmitzmic@gmail.com>
Date:   Wed Jun 21 08:17:24 2023 +1200

    block: change all __u32 annotations to __be32 in affs_hardblocks.h
    
    commit 95a55437dc49fb3342c82e61f5472a71c63d9ed0 upstream.
    
    The Amiga partition parser module uses signed int for partition sector
    address and count, which will overflow for disks larger than 1 TB.
    
    Use u64 as type for sector address and size to allow using disks up to
    2 TB without LBD support, and disks larger than 2 TB with LBD. The RBD
    format allows to specify disk sizes up to 2^128 bytes (though native
    OS limitations reduce this somewhat, to max 2^68 bytes), so check for
    u64 overflow carefully to protect against overflowing sector_t.
    
    This bug was reported originally in 2012, and the fix was created by
    the RDB author, Joanne Dow <jdow@earthlink.net>. A patch had been
    discussed and reviewed on linux-m68k at that time but never officially
    submitted (now resubmitted as patch 1 of this series).
    
    Patch 3 (this series) adds additional error checking and warning
    messages. One of the error checks now makes use of the previously
    unused rdb_CylBlocks field, which causes a 'sparse' warning
    (cast to restricted __be32).
    
    Annotate all 32 bit fields in affs_hardblocks.h as __be32, as the
    on-disk format of RDB and partition blocks is always big endian.
    
    Reported-by: Martin Steigerwald <Martin@lichtvoll.de>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=43511
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Message-ID: <201206192146.09327.Martin@lichtvoll.de>
    Cc: <stable@vger.kernel.org> # 5.2
    Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Link: https://lore.kernel.org/r/20230620201725.7020-3-schmitzmic@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

block: Fix a source code comment in include/uapi/linux/blkzoned.h [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Thu Jul 6 13:14:12 2023 -0700

    block: Fix a source code comment in include/uapi/linux/blkzoned.h
    
    [ Upstream commit e0933b526fbfd937c4a8f4e35fcdd49f0e22d411 ]
    
    Fix the symbolic names for zone conditions in the blkzoned.h header
    file.
    
    Cc: Hannes Reinecke <hare@suse.de>
    Cc: Damien Le Moal <dlemoal@kernel.org>
    Fixes: 6a0cb1bc106f ("block: Implement support for zoned block devices")
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Link: https://lore.kernel.org/r/20230706201422.3987341-1-bvanassche@acm.org
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Bluetooth: L2CAP: Fix use-after-free in l2cap_sock_ready_cb [+ + +]
Author: Sungwoo Kim <iam@sung-woo.kim>
Date:   Wed May 31 01:39:56 2023 -0400

    Bluetooth: L2CAP: Fix use-after-free in l2cap_sock_ready_cb
    
    commit 1728137b33c00d5a2b5110ed7aafb42e7c32e4a1 upstream.
    
    l2cap_sock_release(sk) frees sk. However, sk's children are still alive
    and point to the already free'd sk's address.
    To fix this, l2cap_sock_release(sk) also cleans sk's children.
    
    ==================================================================
    BUG: KASAN: use-after-free in l2cap_sock_ready_cb+0xb7/0x100 net/bluetooth/l2cap_sock.c:1650
    Read of size 8 at addr ffff888104617aa8 by task kworker/u3:0/276
    
    CPU: 0 PID: 276 Comm: kworker/u3:0 Not tainted 6.2.0-00001-gef397bd4d5fb-dirty #59
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
    Workqueue: hci2 hci_rx_work
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0x72/0x95 lib/dump_stack.c:106
     print_address_description mm/kasan/report.c:306 [inline]
     print_report+0x175/0x478 mm/kasan/report.c:417
     kasan_report+0xb1/0x130 mm/kasan/report.c:517
     l2cap_sock_ready_cb+0xb7/0x100 net/bluetooth/l2cap_sock.c:1650
     l2cap_chan_ready+0x10e/0x1e0 net/bluetooth/l2cap_core.c:1386
     l2cap_config_req+0x753/0x9f0 net/bluetooth/l2cap_core.c:4480
     l2cap_bredr_sig_cmd net/bluetooth/l2cap_core.c:5739 [inline]
     l2cap_sig_channel net/bluetooth/l2cap_core.c:6509 [inline]
     l2cap_recv_frame+0xe2e/0x43c0 net/bluetooth/l2cap_core.c:7788
     l2cap_recv_acldata+0x6ed/0x7e0 net/bluetooth/l2cap_core.c:8506
     hci_acldata_packet net/bluetooth/hci_core.c:3813 [inline]
     hci_rx_work+0x66e/0xbc0 net/bluetooth/hci_core.c:4048
     process_one_work+0x4ea/0x8e0 kernel/workqueue.c:2289
     worker_thread+0x364/0x8e0 kernel/workqueue.c:2436
     kthread+0x1b9/0x200 kernel/kthread.c:376
     ret_from_fork+0x2c/0x50 arch/x86/entry/entry_64.S:308
     </TASK>
    
    Allocated by task 288:
     kasan_save_stack+0x22/0x50 mm/kasan/common.c:45
     kasan_set_track+0x25/0x30 mm/kasan/common.c:52
     ____kasan_kmalloc mm/kasan/common.c:374 [inline]
     __kasan_kmalloc+0x82/0x90 mm/kasan/common.c:383
     kasan_kmalloc include/linux/kasan.h:211 [inline]
     __do_kmalloc_node mm/slab_common.c:968 [inline]
     __kmalloc+0x5a/0x140 mm/slab_common.c:981
     kmalloc include/linux/slab.h:584 [inline]
     sk_prot_alloc+0x113/0x1f0 net/core/sock.c:2040
     sk_alloc+0x36/0x3c0 net/core/sock.c:2093
     l2cap_sock_alloc.constprop.0+0x39/0x1c0 net/bluetooth/l2cap_sock.c:1852
     l2cap_sock_create+0x10d/0x220 net/bluetooth/l2cap_sock.c:1898
     bt_sock_create+0x183/0x290 net/bluetooth/af_bluetooth.c:132
     __sock_create+0x226/0x380 net/socket.c:1518
     sock_create net/socket.c:1569 [inline]
     __sys_socket_create net/socket.c:1606 [inline]
     __sys_socket_create net/socket.c:1591 [inline]
     __sys_socket+0x112/0x200 net/socket.c:1639
     __do_sys_socket net/socket.c:1652 [inline]
     __se_sys_socket net/socket.c:1650 [inline]
     __x64_sys_socket+0x40/0x50 net/socket.c:1650
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x3f/0x90 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    Freed by task 288:
     kasan_save_stack+0x22/0x50 mm/kasan/common.c:45
     kasan_set_track+0x25/0x30 mm/kasan/common.c:52
     kasan_save_free_info+0x2e/0x50 mm/kasan/generic.c:523
     ____kasan_slab_free mm/kasan/common.c:236 [inline]
     ____kasan_slab_free mm/kasan/common.c:200 [inline]
     __kasan_slab_free+0x10a/0x190 mm/kasan/common.c:244
     kasan_slab_free include/linux/kasan.h:177 [inline]
     slab_free_hook mm/slub.c:1781 [inline]
     slab_free_freelist_hook mm/slub.c:1807 [inline]
     slab_free mm/slub.c:3787 [inline]
     __kmem_cache_free+0x88/0x1f0 mm/slub.c:3800
     sk_prot_free net/core/sock.c:2076 [inline]
     __sk_destruct+0x347/0x430 net/core/sock.c:2168
     sk_destruct+0x9c/0xb0 net/core/sock.c:2183
     __sk_free+0x82/0x220 net/core/sock.c:2194
     sk_free+0x7c/0xa0 net/core/sock.c:2205
     sock_put include/net/sock.h:1991 [inline]
     l2cap_sock_kill+0x256/0x2b0 net/bluetooth/l2cap_sock.c:1257
     l2cap_sock_release+0x1a7/0x220 net/bluetooth/l2cap_sock.c:1428
     __sock_release+0x80/0x150 net/socket.c:650
     sock_close+0x19/0x30 net/socket.c:1368
     __fput+0x17a/0x5c0 fs/file_table.c:320
     task_work_run+0x132/0x1c0 kernel/task_work.c:179
     resume_user_mode_work include/linux/resume_user_mode.h:49 [inline]
     exit_to_user_mode_loop kernel/entry/common.c:171 [inline]
     exit_to_user_mode_prepare+0x113/0x120 kernel/entry/common.c:203
     __syscall_exit_to_user_mode_work kernel/entry/common.c:285 [inline]
     syscall_exit_to_user_mode+0x21/0x50 kernel/entry/common.c:296
     do_syscall_64+0x4c/0x90 arch/x86/entry/common.c:86
     entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    The buggy address belongs to the object at ffff888104617800
     which belongs to the cache kmalloc-1k of size 1024
    The buggy address is located 680 bytes inside of
     1024-byte region [ffff888104617800, ffff888104617c00)
    
    The buggy address belongs to the physical page:
    page:00000000dbca6a80 refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff888104614000 pfn:0x104614
    head:00000000dbca6a80 order:2 compound_mapcount:0 subpages_mapcount:0 compound_pincount:0
    flags: 0x200000000010200(slab|head|node=0|zone=2)
    raw: 0200000000010200 ffff888100041dc0 ffffea0004212c10 ffffea0004234b10
    raw: ffff888104614000 0000000000080002 00000001ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff888104617980: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff888104617a00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    >ffff888104617a80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                      ^
     ffff888104617b00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff888104617b80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    ==================================================================
    
    Ack: This bug is found by FuzzBT with a modified Syzkaller. Other
    contributors are Ruoyu Wu and Hui Peng.
    Signed-off-by: Sungwoo Kim <iam@sung-woo.kim>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bonding: reset bond's flags when down link is P2P device [+ + +]
Author: Hangbin Liu <liuhangbin@gmail.com>
Date:   Fri Jul 21 12:03:55 2023 +0800

    bonding: reset bond's flags when down link is P2P device
    
    [ Upstream commit da19a2b967cf1e2c426f50d28550d1915214a81d ]
    
    When adding a point to point downlink to the bond, we neglected to reset
    the bond's flags, which were still using flags like BROADCAST and
    MULTICAST. Consequently, this would initiate ARP/DAD for P2P downlink
    interfaces, such as when adding a GRE device to the bonding.
    
    To address this issue, let's reset the bond's flags for P2P interfaces.
    
    Before fix:
    7: gre0@NONE: <POINTOPOINT,NOARP,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond0 state UNKNOWN group default qlen 1000
        link/gre6 2006:70:10::1 peer 2006:70:10::2 permaddr 167f:18:f188::
    8: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/gre6 2006:70:10::1 brd 2006:70:10::2
        inet6 fe80::200:ff:fe00:0/64 scope link
           valid_lft forever preferred_lft forever
    
    After fix:
    7: gre0@NONE: <POINTOPOINT,NOARP,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond2 state UNKNOWN group default qlen 1000
        link/gre6 2006:70:10::1 peer 2006:70:10::2 permaddr c29e:557a:e9d9::
    8: bond0: <POINTOPOINT,NOARP,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/gre6 2006:70:10::1 peer 2006:70:10::2
        inet6 fe80::1/64 scope link
           valid_lft forever preferred_lft forever
    
    Reported-by: Liang Li <liali@redhat.com>
    Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2221438
    Fixes: 872254dd6b1f ("net/bonding: Enable bonding to enslave non ARPHRD_ETHER")
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: Address KCSAN report on bpf_lru_list [+ + +]
Author: Martin KaFai Lau <martin.lau@kernel.org>
Date:   Wed May 10 21:37:48 2023 -0700

    bpf: Address KCSAN report on bpf_lru_list
    
    [ Upstream commit ee9fd0ac3017c4313be91a220a9ac4c99dde7ad4 ]
    
    KCSAN reported a data-race when accessing node->ref.
    Although node->ref does not have to be accurate,
    take this chance to use a more common READ_ONCE() and WRITE_ONCE()
    pattern instead of data_race().
    
    There is an existing bpf_lru_node_is_ref() and bpf_lru_node_set_ref().
    This patch also adds bpf_lru_node_clear_ref() to do the
    WRITE_ONCE(node->ref, 0) also.
    
    ==================================================================
    BUG: KCSAN: data-race in __bpf_lru_list_rotate / __htab_lru_percpu_map_update_elem
    
    write to 0xffff888137038deb of 1 bytes by task 11240 on cpu 1:
    __bpf_lru_node_move kernel/bpf/bpf_lru_list.c:113 [inline]
    __bpf_lru_list_rotate_active kernel/bpf/bpf_lru_list.c:149 [inline]
    __bpf_lru_list_rotate+0x1bf/0x750 kernel/bpf/bpf_lru_list.c:240
    bpf_lru_list_pop_free_to_local kernel/bpf/bpf_lru_list.c:329 [inline]
    bpf_common_lru_pop_free kernel/bpf/bpf_lru_list.c:447 [inline]
    bpf_lru_pop_free+0x638/0xe20 kernel/bpf/bpf_lru_list.c:499
    prealloc_lru_pop kernel/bpf/hashtab.c:290 [inline]
    __htab_lru_percpu_map_update_elem+0xe7/0x820 kernel/bpf/hashtab.c:1316
    bpf_percpu_hash_update+0x5e/0x90 kernel/bpf/hashtab.c:2313
    bpf_map_update_value+0x2a9/0x370 kernel/bpf/syscall.c:200
    generic_map_update_batch+0x3ae/0x4f0 kernel/bpf/syscall.c:1687
    bpf_map_do_batch+0x2d9/0x3d0 kernel/bpf/syscall.c:4534
    __sys_bpf+0x338/0x810
    __do_sys_bpf kernel/bpf/syscall.c:5096 [inline]
    __se_sys_bpf kernel/bpf/syscall.c:5094 [inline]
    __x64_sys_bpf+0x43/0x50 kernel/bpf/syscall.c:5094
    do_syscall_x64 arch/x86/entry/common.c:50 [inline]
    do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
    entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    read to 0xffff888137038deb of 1 bytes by task 11241 on cpu 0:
    bpf_lru_node_set_ref kernel/bpf/bpf_lru_list.h:70 [inline]
    __htab_lru_percpu_map_update_elem+0x2f1/0x820 kernel/bpf/hashtab.c:1332
    bpf_percpu_hash_update+0x5e/0x90 kernel/bpf/hashtab.c:2313
    bpf_map_update_value+0x2a9/0x370 kernel/bpf/syscall.c:200
    generic_map_update_batch+0x3ae/0x4f0 kernel/bpf/syscall.c:1687
    bpf_map_do_batch+0x2d9/0x3d0 kernel/bpf/syscall.c:4534
    __sys_bpf+0x338/0x810
    __do_sys_bpf kernel/bpf/syscall.c:5096 [inline]
    __se_sys_bpf kernel/bpf/syscall.c:5094 [inline]
    __x64_sys_bpf+0x43/0x50 kernel/bpf/syscall.c:5094
    do_syscall_x64 arch/x86/entry/common.c:50 [inline]
    do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
    entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    value changed: 0x01 -> 0x00
    
    Reported by Kernel Concurrency Sanitizer on:
    CPU: 0 PID: 11241 Comm: syz-executor.3 Not tainted 6.3.0-rc7-syzkaller-00136-g6a66fdd29ea1 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/30/2023
    ==================================================================
    
    Reported-by: syzbot+ebe648a84e8784763f82@syzkaller.appspotmail.com
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Acked-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/r/20230511043748.1384166-1-martin.lau@linux.dev
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: check for commit error at btrfs_attach_transaction_barrier() [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Fri Jul 21 10:49:21 2023 +0100

    btrfs: check for commit error at btrfs_attach_transaction_barrier()
    
    commit b28ff3a7d7e97456fd86b68d24caa32e1cfa7064 upstream.
    
    btrfs_attach_transaction_barrier() is used to get a handle pointing to the
    current running transaction if the transaction has not started its commit
    yet (its state is < TRANS_STATE_COMMIT_START). If the transaction commit
    has started, then we wait for the transaction to commit and finish before
    returning - however we completely ignore if the transaction was aborted
    due to some error during its commit, we simply return ERR_PT(-ENOENT),
    which makes the caller assume everything is fine and no errors happened.
    
    This could make an fsync return success (0) to user space when in fact we
    had a transaction abort and the target inode changes were therefore not
    persisted.
    
    Fix this by checking for the return value from btrfs_wait_for_commit(),
    and if it returned an error, return it back to the caller.
    
    Fixes: d4edf39bd5db ("Btrfs: fix uncompleted transaction")
    CC: stable@vger.kernel.org # 4.19+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix extent buffer leak after tree mod log failure at split_node() [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Thu Jun 8 11:27:38 2023 +0100

    btrfs: fix extent buffer leak after tree mod log failure at split_node()
    
    [ Upstream commit ede600e497b1461d06d22a7d17703d9096868bc3 ]
    
    At split_node(), if we fail to log the tree mod log copy operation, we
    return without unlocking the split extent buffer we just allocated and
    without decrementing the reference we own on it. Fix this by unlocking
    it and decrementing the ref count before returning.
    
    Fixes: 5de865eebb83 ("Btrfs: fix tree mod logging")
    CC: stable@vger.kernel.org # 5.4+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: fix race when deleting quota root from the dirty cow roots list [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Mon Jun 19 17:21:47 2023 +0100

    btrfs: fix race when deleting quota root from the dirty cow roots list
    
    commit b31cb5a6eb7a48b0a7bfdf06832b1fd5088d8c79 upstream.
    
    When disabling quotas we are deleting the quota root from the list
    fs_info->dirty_cowonly_roots without taking the lock that protects it,
    which is struct btrfs_fs_info::trans_lock. This unsynchronized list
    manipulation may cause chaos if there's another concurrent manipulation
    of this list, such as when adding a root to it with
    ctree.c:add_root_to_dirty_list().
    
    This can result in all sorts of weird failures caused by a race, such as
    the following crash:
    
      [337571.278245] general protection fault, probably for non-canonical address 0xdead000000000108: 0000 [#1] PREEMPT SMP PTI
      [337571.278933] CPU: 1 PID: 115447 Comm: btrfs Tainted: G        W          6.4.0-rc6-btrfs-next-134+ #1
      [337571.279153] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
      [337571.279572] RIP: 0010:commit_cowonly_roots+0x11f/0x250 [btrfs]
      [337571.279928] Code: 85 38 06 00 (...)
      [337571.280363] RSP: 0018:ffff9f63446efba0 EFLAGS: 00010206
      [337571.280582] RAX: ffff942d98ec2638 RBX: ffff9430b82b4c30 RCX: 0000000449e1c000
      [337571.280798] RDX: dead000000000100 RSI: ffff9430021e4900 RDI: 0000000000036070
      [337571.281015] RBP: ffff942d98ec2000 R08: ffff942d98ec2000 R09: 000000000000015b
      [337571.281254] R10: 0000000000000009 R11: 0000000000000001 R12: ffff942fe8fbf600
      [337571.281476] R13: ffff942dabe23040 R14: ffff942dabe20800 R15: ffff942d92cf3b48
      [337571.281723] FS:  00007f478adb7340(0000) GS:ffff94349fa40000(0000) knlGS:0000000000000000
      [337571.281950] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [337571.282184] CR2: 00007f478ab9a3d5 CR3: 000000001e02c001 CR4: 0000000000370ee0
      [337571.282416] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [337571.282647] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [337571.282874] Call Trace:
      [337571.283101]  <TASK>
      [337571.283327]  ? __die_body+0x1b/0x60
      [337571.283570]  ? die_addr+0x39/0x60
      [337571.283796]  ? exc_general_protection+0x22e/0x430
      [337571.284022]  ? asm_exc_general_protection+0x22/0x30
      [337571.284251]  ? commit_cowonly_roots+0x11f/0x250 [btrfs]
      [337571.284531]  btrfs_commit_transaction+0x42e/0xf90 [btrfs]
      [337571.284803]  ? _raw_spin_unlock+0x15/0x30
      [337571.285031]  ? release_extent_buffer+0x103/0x130 [btrfs]
      [337571.285305]  reset_balance_state+0x152/0x1b0 [btrfs]
      [337571.285578]  btrfs_balance+0xa50/0x11e0 [btrfs]
      [337571.285864]  ? __kmem_cache_alloc_node+0x14a/0x410
      [337571.286086]  btrfs_ioctl+0x249a/0x3320 [btrfs]
      [337571.286358]  ? mod_objcg_state+0xd2/0x360
      [337571.286577]  ? refill_obj_stock+0xb0/0x160
      [337571.286798]  ? seq_release+0x25/0x30
      [337571.287016]  ? __rseq_handle_notify_resume+0x3ba/0x4b0
      [337571.287235]  ? percpu_counter_add_batch+0x2e/0xa0
      [337571.287455]  ? __x64_sys_ioctl+0x88/0xc0
      [337571.287675]  __x64_sys_ioctl+0x88/0xc0
      [337571.287901]  do_syscall_64+0x38/0x90
      [337571.288126]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
      [337571.288352] RIP: 0033:0x7f478aaffe9b
    
    So fix this by locking struct btrfs_fs_info::trans_lock before deleting
    the quota root from that list.
    
    Fixes: bed92eae26cc ("Btrfs: qgroup implementation and prototypes")
    CC: stable@vger.kernel.org # 4.14+
    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: bcm: Fix UAF in bcm_proc_show() [+ + +]
Author: YueHaibing <yuehaibing@huawei.com>
Date:   Sat Jul 15 17:25:43 2023 +0800

    can: bcm: Fix UAF in bcm_proc_show()
    
    commit 55c3b96074f3f9b0aee19bf93cd71af7516582bb upstream.
    
    BUG: KASAN: slab-use-after-free in bcm_proc_show+0x969/0xa80
    Read of size 8 at addr ffff888155846230 by task cat/7862
    
    CPU: 1 PID: 7862 Comm: cat Not tainted 6.5.0-rc1-00153-gc8746099c197 #230
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
    Call Trace:
     <TASK>
     dump_stack_lvl+0xd5/0x150
     print_report+0xc1/0x5e0
     kasan_report+0xba/0xf0
     bcm_proc_show+0x969/0xa80
     seq_read_iter+0x4f6/0x1260
     seq_read+0x165/0x210
     proc_reg_read+0x227/0x300
     vfs_read+0x1d5/0x8d0
     ksys_read+0x11e/0x240
     do_syscall_64+0x35/0xb0
     entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    Allocated by task 7846:
     kasan_save_stack+0x1e/0x40
     kasan_set_track+0x21/0x30
     __kasan_kmalloc+0x9e/0xa0
     bcm_sendmsg+0x264b/0x44e0
     sock_sendmsg+0xda/0x180
     ____sys_sendmsg+0x735/0x920
     ___sys_sendmsg+0x11d/0x1b0
     __sys_sendmsg+0xfa/0x1d0
     do_syscall_64+0x35/0xb0
     entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    Freed by task 7846:
     kasan_save_stack+0x1e/0x40
     kasan_set_track+0x21/0x30
     kasan_save_free_info+0x27/0x40
     ____kasan_slab_free+0x161/0x1c0
     slab_free_freelist_hook+0x119/0x220
     __kmem_cache_free+0xb4/0x2e0
     rcu_core+0x809/0x1bd0
    
    bcm_op is freed before procfs entry be removed in bcm_release(),
    this lead to bcm_proc_show() may read the freed bcm_op.
    
    Fixes: ffd980f976e7 ("[CAN]: Add broadcast manager (bcm) protocol")
    Signed-off-by: YueHaibing <yuehaibing@huawei.com>
    Reviewed-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Acked-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Link: https://lore.kernel.org/all/20230715092543.15548-1-yuehaibing@huawei.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: gs_usb: gs_can_close(): add missing set of CAN state to CAN_STATE_STOPPED [+ + +]
Author: Marc Kleine-Budde <mkl@pengutronix.de>
Date:   Tue Jul 18 11:43:54 2023 +0200

    can: gs_usb: gs_can_close(): add missing set of CAN state to CAN_STATE_STOPPED
    
    commit f8a2da6ec2417cca169fa85a8ab15817bccbb109 upstream.
    
    After an initial link up the CAN device is in ERROR-ACTIVE mode. Due
    to a missing CAN_STATE_STOPPED in gs_can_close() it doesn't change to
    STOPPED after a link down:
    
    | ip link set dev can0 up
    | ip link set dev can0 down
    | ip --details link show can0
    | 13: can0: <NOARP,ECHO> mtu 16 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 10
    |     link/can  promiscuity 0 allmulti 0 minmtu 0 maxmtu 0
    |     can state ERROR-ACTIVE restart-ms 1000
    
    Add missing assignment of CAN_STATE_STOPPED in gs_can_close().
    
    Cc: stable@vger.kernel.org
    Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices")
    Link: https://lore.kernel.org/all/20230718-gs_usb-fix-can-state-v1-1-f19738ae2c23@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ceph: don't let check_caps skip sending responses for revoke msgs [+ + +]
Author: Xiubo Li <xiubli@redhat.com>
Date:   Wed Jun 28 07:57:09 2023 +0800

    ceph: don't let check_caps skip sending responses for revoke msgs
    
    commit 257e6172ab36ebbe295a6c9ee9a9dd0fe54c1dc2 upstream.
    
    If a client sends out a cap update dropping caps with the prior 'seq'
    just before an incoming cap revoke request, then the client may drop
    the revoke because it believes it's already released the requested
    capabilities.
    
    This causes the MDS to wait indefinitely for the client to respond
    to the revoke. It's therefore always a good idea to ack the cap
    revoke request with the bumped up 'seq'.
    
    Cc: stable@vger.kernel.org
    Link: https://tracker.ceph.com/issues/61782
    Signed-off-by: Xiubo Li <xiubli@redhat.com>
    Reviewed-by: Milind Changire <mchangir@redhat.com>
    Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
clocksource/drivers/cadence-ttc: Fix memory leak in ttc_timer_probe [+ + +]
Author: Feng Mingxi <m202271825@hust.edu.cn>
Date:   Tue Apr 25 06:56:11 2023 +0000

    clocksource/drivers/cadence-ttc: Fix memory leak in ttc_timer_probe
    
    [ Upstream commit 8b5bf64c89c7100c921bd807ba39b2eb003061ab ]
    
    Smatch reports:
    drivers/clocksource/timer-cadence-ttc.c:529 ttc_timer_probe()
    warn: 'timer_baseaddr' from of_iomap() not released on lines: 498,508,516.
    
    timer_baseaddr may have the problem of not being released after use,
    I replaced it with the devm_of_iomap() function and added the clk_put()
    function to cleanup the "clk_ce" and "clk_cs".
    
    Fixes: e932900a3279 ("arm: zynq: Use standard timer binding")
    Fixes: 70504f311d4b ("clocksource/drivers/cadence_ttc: Convert init function to return error")
    Signed-off-by: Feng Mingxi <m202271825@hust.edu.cn>
    Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
    Acked-by: Michal Simek <michal.simek@amd.com>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/20230425065611.702917-1-m202271825@hust.edu.cn
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clocksource/drivers/cadence-ttc: Use ttc driver as platform driver [+ + +]
Author: Rajan Vaja <rajan.vaja@xilinx.com>
Date:   Thu Nov 7 02:36:28 2019 -0800

    clocksource/drivers/cadence-ttc: Use ttc driver as platform driver
    
    [ Upstream commit f5ac896b6a23eb46681cdbef440c1d991b04e519 ]
    
    Currently TTC driver is TIMER_OF_DECLARE type driver. Because of
    that, TTC driver may be initialized before other clock drivers. If
    TTC driver is dependent on that clock driver then initialization of
    TTC driver will failed.
    
    So use TTC driver as platform driver instead of using
    TIMER_OF_DECLARE.
    
    Signed-off-by: Rajan Vaja <rajan.vaja@xilinx.com>
    Tested-by: Michal Simek <michal.simek@xilinx.com>
    Acked-by: Michal Simek <michal.simek@xilinx.com>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/1573122988-18399-1-git-send-email-rajan.vaja@xilinx.com
    Stable-dep-of: 8b5bf64c89c7 ("clocksource/drivers/cadence-ttc: Fix memory leak in ttc_timer_probe")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clocksource/drivers: Unify the names to timer-* format [+ + +]
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
Date:   Mon Sep 24 05:59:23 2018 +0200

    clocksource/drivers: Unify the names to timer-* format
    
    [ Upstream commit 9d8d47ea6ec6048abc75ccc4486aff1a7db1ff4b ]
    
    In order to make some housekeeping in the directory, this patch renames
    drivers to the timer-* format in order to unify their names.
    
    There is no functional changes.
    
    Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Acked-by: Vladimir Zapolskiy <vz@mleia.com>
    Acked-by: Liviu Dudau <liviu.dudau@arm.com>
    
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Stable-dep-of: 8b5bf64c89c7 ("clocksource/drivers/cadence-ttc: Fix memory leak in ttc_timer_probe")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
crypto: nx - fix build warnings when DEBUG_FS is not enabled [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Fri May 19 15:33:34 2023 -0700

    crypto: nx - fix build warnings when DEBUG_FS is not enabled
    
    [ Upstream commit b04b076fb56560b39d695ac3744db457e12278fd ]
    
    Fix build warnings when DEBUG_FS is not enabled by using an empty
    do-while loop instead of a value:
    
    In file included from ../drivers/crypto/nx/nx.c:27:
    ../drivers/crypto/nx/nx.c: In function 'nx_register_algs':
    ../drivers/crypto/nx/nx.h:173:33: warning: statement with no effect [-Wunused-value]
      173 | #define NX_DEBUGFS_INIT(drv)    (0)
    ../drivers/crypto/nx/nx.c:573:9: note: in expansion of macro 'NX_DEBUGFS_INIT'
      573 |         NX_DEBUGFS_INIT(&nx_driver);
    ../drivers/crypto/nx/nx.c: In function 'nx_remove':
    ../drivers/crypto/nx/nx.h:174:33: warning: statement with no effect [-Wunused-value]
      174 | #define NX_DEBUGFS_FINI(drv)    (0)
    ../drivers/crypto/nx/nx.c:793:17: note: in expansion of macro 'NX_DEBUGFS_FINI'
      793 |                 NX_DEBUGFS_FINI(&nx_driver);
    
    Also, there is no need to build nx_debugfs.o when DEBUG_FS is not
    enabled, so change the Makefile to accommodate that.
    
    Fixes: ae0222b7289d ("powerpc/crypto: nx driver code supporting nx encryption")
    Fixes: aef7b31c8833 ("powerpc/crypto: Build files for the nx device driver")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Cc: Breno Leitão <leitao@debian.org>
    Cc: Nayna Jain <nayna@linux.ibm.com>
    Cc: Paulo Flabiano Smorigo <pfsmorigo@gmail.com>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: linux-crypto@vger.kernel.org
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: linuxppc-dev@lists.ozlabs.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
debugobjects: Recheck debug_objects_enabled before reporting [+ + +]
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Wed Jun 7 19:19:02 2023 +0900

    debugobjects: Recheck debug_objects_enabled before reporting
    
    [ Upstream commit 8b64d420fe2450f82848178506d3e3a0bd195539 ]
    
    syzbot is reporting false a positive ODEBUG message immediately after
    ODEBUG was disabled due to OOM.
    
      [ 1062.309646][T22911] ODEBUG: Out of memory. ODEBUG disabled
      [ 1062.886755][ T5171] ------------[ cut here ]------------
      [ 1062.892770][ T5171] ODEBUG: assert_init not available (active state 0) object: ffffc900056afb20 object type: timer_list hint: process_timeout+0x0/0x40
    
      CPU 0 [ T5171]                CPU 1 [T22911]
      --------------                --------------
      debug_object_assert_init() {
        if (!debug_objects_enabled)
          return;
        db = get_bucket(addr);
                                    lookup_object_or_alloc() {
                                      debug_objects_enabled = 0;
                                      return NULL;
                                    }
                                    debug_objects_oom() {
                                      pr_warn("Out of memory. ODEBUG disabled\n");
                                      // all buckets get emptied here, and
                                    }
        lookup_object_or_alloc(addr, db, descr, false, true) {
          // this bucket is already empty.
          return ERR_PTR(-ENOENT);
        }
        // Emits false positive warning.
        debug_print_object(&o, "assert_init");
      }
    
    Recheck debug_object_enabled in debug_print_object() to avoid that.
    
    Reported-by: syzbot <syzbot+7937ba6a50bdd00fffdf@syzkaller.appspotmail.com>
    Suggested-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/r/492fe2ae-5141-d548-ebd5-62f5fe2e57f7@I-love.SAKURA.ne.jp
    Closes: https://syzkaller.appspot.com/bug?extid=7937ba6a50bdd00fffdf
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dlm: cleanup plock_op vs plock_xop [+ + +]
Author: Alexander Aring <aahringo@redhat.com>
Date:   Mon Apr 4 16:06:32 2022 -0400

    dlm: cleanup plock_op vs plock_xop
    
    [ Upstream commit bcbb4ba6c9ba81e6975b642a2cade68044cd8a66 ]
    
    Lately the different casting between plock_op and plock_xop and list
    holders which was involved showed some issues which were hard to see.
    This patch removes the "plock_xop" structure and introduces a
    "struct plock_async_data". This structure will be set in "struct plock_op"
    in case of asynchronous lock handling as the original "plock_xop" was
    made for. There is no need anymore to cast pointers around for
    additional fields in case of asynchronous lock handling.  As disadvantage
    another allocation was introduces but only needed in the asynchronous
    case which is currently only used in combination with nfs lockd.
    
    Signed-off-by: Alexander Aring <aahringo@redhat.com>
    Signed-off-by: David Teigland <teigland@redhat.com>
    Stable-dep-of: 59e45c758ca1 ("fs: dlm: interrupt posix locks only when process is killed")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

dlm: rearrange async condition return [+ + +]
Author: Alexander Aring <aahringo@redhat.com>
Date:   Mon Apr 4 16:06:33 2022 -0400

    dlm: rearrange async condition return
    
    [ Upstream commit a800ba77fd285c6391a82819867ac64e9ab3af46 ]
    
    This patch moves the return of FILE_LOCK_DEFERRED a little bit earlier
    than checking afterwards again if the request was an asynchronous request.
    
    Signed-off-by: Alexander Aring <aahringo@redhat.com>
    Signed-off-by: David Teigland <teigland@redhat.com>
    Stable-dep-of: 59e45c758ca1 ("fs: dlm: interrupt posix locks only when process is killed")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dm cache policy smq: ensure IO doesn't prevent cleaner policy progress [+ + +]
Author: Joe Thornber <ejt@redhat.com>
Date:   Tue Jul 25 11:44:41 2023 -0400

    dm cache policy smq: ensure IO doesn't prevent cleaner policy progress
    
    commit 1e4ab7b4c881cf26c1c72b3f56519e03475486fb upstream.
    
    When using the cleaner policy to decommission the cache, there is
    never any writeback started from the cache as it is constantly delayed
    due to normal I/O keeping the device busy. Meaning @idle=false was
    always being passed to clean_target_met()
    
    Fix this by adding a specific 'cleaner' flag that is set when the
    cleaner policy is configured. This flag serves to always allow the
    cleaner's writeback work to be queued until the cache is
    decommissioned (even if the cache isn't idle).
    
    Reported-by: David Jeffery <djeffery@redhat.com>
    Fixes: b29d4986d0da ("dm cache: significant rework to leverage dm-bio-prison-v2")
    Cc: stable@vger.kernel.org
    Signed-off-by: Joe Thornber <ejt@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm raid: fix missing reconfig_mutex unlock in raid_ctr() error paths [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Sat Jul 8 17:21:51 2023 +0800

    dm raid: fix missing reconfig_mutex unlock in raid_ctr() error paths
    
    [ Upstream commit bae3028799dc4f1109acc4df37c8ff06f2d8f1a0 ]
    
    In the error paths 'bad_stripe_cache' and 'bad_check_reshape',
    'reconfig_mutex' is still held after raid_ctr() returns.
    
    Fixes: 9dbd1aa3a81c ("dm raid: add reshaping support to the target")
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Documentation: security-bugs.rst: clarify CVE handling [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Jun 30 09:14:21 2023 +0200

    Documentation: security-bugs.rst: clarify CVE handling
    
    commit 3c1897ae4b6bc7cc586eda2feaa2cd68325ec29c upstream.
    
    The kernel security team does NOT assign CVEs, so document that properly
    and provide the "if you want one, ask MITRE for it" response that we
    give on a weekly basis in the document, so we don't have to constantly
    say it to everyone who asks.
    
    Link: https://lore.kernel.org/r/2023063022-retouch-kerosene-7e4a@gregkh
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Documentation: security-bugs.rst: update preferences when dealing with the linux-distros group [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Jun 30 09:14:20 2023 +0200

    Documentation: security-bugs.rst: update preferences when dealing with the linux-distros group
    
    commit 4fee0915e649bd0cea56dece6d96f8f4643df33c upstream.
    
    Because the linux-distros group forces reporters to release information
    about reported bugs, and they impose arbitrary deadlines in having those
    bugs fixed despite not actually being kernel developers, the kernel
    security team recommends not interacting with them at all as this just
    causes confusion and the early-release of reported security problems.
    
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/2023063020-throat-pantyhose-f110@gregkh
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drivers core: Use sysfs_emit and sysfs_emit_at for show(device *...) functions [+ + +]
Author: Joe Perches <joe@perches.com>
Date:   Wed Sep 16 13:40:39 2020 -0700

    drivers core: Use sysfs_emit and sysfs_emit_at for show(device *...) functions
    
    commit aa838896d87af561a33ecefea1caa4c15a68bc47 upstream.
    
    Convert the various sprintf fmaily calls in sysfs device show functions
    to sysfs_emit and sysfs_emit_at for PAGE_SIZE buffer safety.
    
    Done with:
    
    $ spatch -sp-file sysfs_emit_dev.cocci --in-place --max-width=80 .
    
    And cocci script:
    
    $ cat sysfs_emit_dev.cocci
    @@
    identifier d_show;
    identifier dev, attr, buf;
    @@
    
    ssize_t d_show(struct device *dev, struct device_attribute *attr, char *buf)
    {
            <...
            return
    -       sprintf(buf,
    +       sysfs_emit(buf,
            ...);
            ...>
    }
    
    @@
    identifier d_show;
    identifier dev, attr, buf;
    @@
    
    ssize_t d_show(struct device *dev, struct device_attribute *attr, char *buf)
    {
            <...
            return
    -       snprintf(buf, PAGE_SIZE,
    +       sysfs_emit(buf,
            ...);
            ...>
    }
    
    @@
    identifier d_show;
    identifier dev, attr, buf;
    @@
    
    ssize_t d_show(struct device *dev, struct device_attribute *attr, char *buf)
    {
            <...
            return
    -       scnprintf(buf, PAGE_SIZE,
    +       sysfs_emit(buf,
            ...);
            ...>
    }
    
    @@
    identifier d_show;
    identifier dev, attr, buf;
    expression chr;
    @@
    
    ssize_t d_show(struct device *dev, struct device_attribute *attr, char *buf)
    {
            <...
            return
    -       strcpy(buf, chr);
    +       sysfs_emit(buf, chr);
            ...>
    }
    
    @@
    identifier d_show;
    identifier dev, attr, buf;
    identifier len;
    @@
    
    ssize_t d_show(struct device *dev, struct device_attribute *attr, char *buf)
    {
            <...
            len =
    -       sprintf(buf,
    +       sysfs_emit(buf,
            ...);
            ...>
            return len;
    }
    
    @@
    identifier d_show;
    identifier dev, attr, buf;
    identifier len;
    @@
    
    ssize_t d_show(struct device *dev, struct device_attribute *attr, char *buf)
    {
            <...
            len =
    -       snprintf(buf, PAGE_SIZE,
    +       sysfs_emit(buf,
            ...);
            ...>
            return len;
    }
    
    @@
    identifier d_show;
    identifier dev, attr, buf;
    identifier len;
    @@
    
    ssize_t d_show(struct device *dev, struct device_attribute *attr, char *buf)
    {
            <...
            len =
    -       scnprintf(buf, PAGE_SIZE,
    +       sysfs_emit(buf,
            ...);
            ...>
            return len;
    }
    
    @@
    identifier d_show;
    identifier dev, attr, buf;
    identifier len;
    @@
    
    ssize_t d_show(struct device *dev, struct device_attribute *attr, char *buf)
    {
            <...
    -       len += scnprintf(buf + len, PAGE_SIZE - len,
    +       len += sysfs_emit_at(buf, len,
            ...);
            ...>
            return len;
    }
    
    @@
    identifier d_show;
    identifier dev, attr, buf;
    expression chr;
    @@
    
    ssize_t d_show(struct device *dev, struct device_attribute *attr, char *buf)
    {
            ...
    -       strcpy(buf, chr);
    -       return strlen(buf);
    +       return sysfs_emit(buf, chr);
    }
    
    Signed-off-by: Joe Perches <joe@perches.com>
    Link: https://lore.kernel.org/r/3d033c33056d88bbe34d4ddb62afd05ee166ab9a.1600285923.git.joe@perches.com
    [ Brennan : Regenerated for 4.19 to fix CVE-2022-20166 ]
    Signed-off-by: Brennan Lamoreaux <blamoreaux@vmware.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu: Validate VM ioctl flags. [+ + +]
Author: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Date:   Sat May 13 14:51:00 2023 +0200

    drm/amdgpu: Validate VM ioctl flags.
    
    commit a2b308044dcaca8d3e580959a4f867a1d5c37fac upstream.
    
    None have been defined yet, so reject anybody setting any. Mesa sets
    it to 0 anyway.
    
    Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/atomic: Fix potential use-after-free in nonblocking commits [+ + +]
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Fri Jul 21 15:58:38 2023 +0200

    drm/atomic: Fix potential use-after-free in nonblocking commits
    
    commit 4e076c73e4f6e90816b30fcd4a0d7ab365087255 upstream.
    
    This requires a bit of background.  Properly done a modeset driver's
    unload/remove sequence should be
    
            drm_dev_unplug();
            drm_atomic_helper_shutdown();
            drm_dev_put();
    
    The trouble is that the drm_dev_unplugged() checks are by design racy,
    they do not synchronize against all outstanding ioctl.  This is because
    those ioctl could block forever (both for modeset and for driver
    specific ioctls), leading to deadlocks in hotunplug.  Instead the code
    sections that touch the hardware need to be annotated with
    drm_dev_enter/exit, to avoid accessing hardware resources after the
    unload/remove has finished.
    
    To avoid use-after-free issues all the involved userspace visible
    objects are supposed to hold a reference on the underlying drm_device,
    like drm_file does.
    
    The issue now is that we missed one, the atomic modeset ioctl can be run
    in a nonblocking fashion, and in that case it cannot rely on the implied
    drm_device reference provided by the ioctl calling context.  This can
    result in a use-after-free if an nonblocking atomic commit is carefully
    raced against a driver unload.
    
    Fix this by unconditionally grabbing a drm_device reference for any
    drm_atomic_state structures.  Strictly speaking this isn't required for
    blocking commits and TEST_ONLY calls, but it's the simpler approach.
    
    Thanks to shanzhulig for the initial idea of grabbing an unconditional
    reference, I just added comments, a condensed commit message and fixed a
    minor potential issue in where exactly we drop the final reference.
    
    Reported-by: shanzhulig <shanzhulig@gmail.com>
    Suggested-by: shanzhulig <shanzhulig@gmail.com>
    Reviewed-by: Maxime Ripard <mripard@kernel.org>
    Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Cc: Thomas Zimmermann <tzimmermann@suse.de>
    Cc: David Airlie <airlied@gmail.com>
    Cc: stable@kernel.org
    Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
    Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/client: Fix memory leak in drm_client_target_cloned [+ + +]
Author: Jocelyn Falempe <jfalempe@redhat.com>
Date:   Tue Jul 11 11:20:43 2023 +0200

    drm/client: Fix memory leak in drm_client_target_cloned
    
    commit c2a88e8bdf5f6239948d75283d0ae7e0c7945b03 upstream.
    
    dmt_mode is allocated and never freed in this function.
    It was found with the ast driver, but most drivers using generic fbdev
    setup are probably affected.
    
    This fixes the following kmemleak report:
      backtrace:
        [<00000000b391296d>] drm_mode_duplicate+0x45/0x220 [drm]
        [<00000000e45bb5b3>] drm_client_target_cloned.constprop.0+0x27b/0x480 [drm]
        [<00000000ed2d3a37>] drm_client_modeset_probe+0x6bd/0xf50 [drm]
        [<0000000010e5cc9d>] __drm_fb_helper_initial_config_and_unlock+0xb4/0x2c0 [drm_kms_helper]
        [<00000000909f82ca>] drm_fbdev_client_hotplug+0x2bc/0x4d0 [drm_kms_helper]
        [<00000000063a69aa>] drm_client_register+0x169/0x240 [drm]
        [<00000000a8c61525>] ast_pci_probe+0x142/0x190 [ast]
        [<00000000987f19bb>] local_pci_probe+0xdc/0x180
        [<000000004fca231b>] work_for_cpu_fn+0x4e/0xa0
        [<0000000000b85301>] process_one_work+0x8b7/0x1540
        [<000000003375b17c>] worker_thread+0x70a/0xed0
        [<00000000b0d43cd9>] kthread+0x29f/0x340
        [<000000008d770833>] ret_from_fork+0x1f/0x30
    unreferenced object 0xff11000333089a00 (size 128):
    
    cc: <stable@vger.kernel.org>
    Fixes: 1d42bbc8f7f9 ("drm/fbdev: fix cloning on fbcon")
    Reported-by: Zhang Yi <yizhan@redhat.com>
    Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
    Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
    Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230711092203.68157-2-jfalempe@redhat.com
    Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/edid: fix objtool warning in drm_cvt_modes() [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Thu Dec 17 09:27:57 2020 -0800

    drm/edid: fix objtool warning in drm_cvt_modes()
    
    commit d652d5f1eeeb06046009f4fcb9b4542249526916 upstream.
    
    Commit 991fcb77f490 ("drm/edid: Fix uninitialized variable in
    drm_cvt_modes()") just replaced one warning with another.
    
    The original warning about a possibly uninitialized variable was due to
    the compiler not being smart enough to see that the case statement
    actually enumerated all possible cases.  And the initial fix was just to
    add a "default" case that had a single "unreachable()", just to tell the
    compiler that that situation cannot happen.
    
    However, that doesn't actually fix the fundamental reason for the
    problem: the compiler still doesn't see that the existing case
    statements enumerate all possibilities, so the compiler will still
    generate code to jump to that unreachable case statement.  It just won't
    complain about an uninitialized variable any more.
    
    So now the compiler generates code to our inline asm marker that we told
    it would not fall through, and end end result is basically random.  We
    have created a bridge to nowhere.
    
    And then, depending on the random details of just exactly what the
    compiler ends up doing, 'objtool' might end up complaining about the
    conditional branches (for conditions that cannot happen, and that thus
    will never be taken - but if the compiler was not smart enough to figure
    that out, we can't expect objtool to do so) going off in the weeds.
    
    So depending on how the compiler has laid out the result, you might see
    something like this:
    
        drivers/gpu/drm/drm_edid.o: warning: objtool: do_cvt_mode() falls through to next function drm_mode_detailed.isra.0()
    
    and now you have a truly inscrutable warning that makes no sense at all
    unless you start looking at whatever random code the compiler happened
    to generate for our bare "unreachable()" statement.
    
    IOW, don't use "unreachable()" unless you have an _active_ operation
    that generates code that actually makes it obvious that something is not
    reachable (ie an UD instruction or similar).
    
    Solve the "compiler isn't smart enough" problem by just marking one of
    the cases as "default", so that even when the compiler doesn't otherwise
    see that we've enumerated all cases, the compiler will feel happy and
    safe about there always being a valid case that initializes the 'width'
    variable.
    
    This also generates better code, since now the compiler doesn't generate
    comparisons for five different possibilities (the four real ones and the
    one that can't happen), but just for the three real ones and "the rest"
    (which is that last one).
    
    A smart enough compiler that sees that we cover all the cases won't care.
    
    Cc: Lyude Paul <lyude@redhat.com>
    Cc: Ilia Mirkin <imirkin@alum.mit.edu>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/edid: Fix uninitialized variable in drm_cvt_modes() [+ + +]
Author: Lyude Paul <lyude@redhat.com>
Date:   Thu Nov 5 18:57:02 2020 -0500

    drm/edid: Fix uninitialized variable in drm_cvt_modes()
    
    commit 991fcb77f490390bcad89fa67d95763c58cdc04c upstream.
    
    Noticed this when trying to compile with -Wall on a kernel fork. We
    potentially don't set width here, which causes the compiler to complain
    about width potentially being uninitialized in drm_cvt_modes(). So, let's
    fix that.
    
    Changes since v1:
    * Don't emit an error as this code isn't reachable, just mark it as such
    Changes since v2:
    * Remove now unused variable
    
    Fixes: 3f649ab728cd ("treewide: Remove uninitialized_var() usage")
    Signed-off-by: Lyude Paul <lyude@redhat.com>
    Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
    Link: https://patchwork.freedesktop.org/patch/msgid/20201105235703.1328115-1-lyude@redhat.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/msm: Fix IS_ERR_OR_NULL() vs NULL check in a5xx_submit_in_rb() [+ + +]
Author: Gaosheng Cui <cuigaosheng1@huawei.com>
Date:   Mon Jul 17 09:47:38 2023 +0800

    drm/msm: Fix IS_ERR_OR_NULL() vs NULL check in a5xx_submit_in_rb()
    
    [ Upstream commit 6e8a996563ecbe68e49c49abd4aaeef69f11f2dc ]
    
    The msm_gem_get_vaddr() returns an ERR_PTR() on failure, and a null
    is catastrophic here, so we should use IS_ERR_OR_NULL() to check
    the return value.
    
    Fixes: 6a8bd08d0465 ("drm/msm: add sudo flag to submit ioctl")
    Signed-off-by: Gaosheng Cui <cuigaosheng1@huawei.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Reviewed-by: Akhil P Oommen <quic_akhilpo@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/547712/
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/panel: simple: fix active size for Ampire AM-480272H3TMQW-T01H [+ + +]
Author: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Date:   Tue May 16 10:50:39 2023 +0200

    drm/panel: simple: fix active size for Ampire AM-480272H3TMQW-T01H
    
    [ Upstream commit f24b49550814fdee4a98b9552e35e243ccafd4a8 ]
    
    The previous setting was related to the overall dimension and not to the
    active display area.
    In the "PHYSICAL SPECIFICATIONS" section, the datasheet shows the
    following parameters:
    
     ----------------------------------------------------------
    |       Item        |         Specifications        | unit |
     ----------------------------------------------------------
    | Display area      | 98.7 (W) x 57.5 (H)           |  mm  |
     ----------------------------------------------------------
    | Overall dimension | 105.5(W) x 67.2(H) x 4.96(D)  |  mm  |
     ----------------------------------------------------------
    
    Fixes: 966fea78adf2 ("drm/panel: simple: Add support for Ampire AM-480272H3TMQW-T01H")
    Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    [narmstrong: fixed Fixes commit id length]
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230516085039.3797303-1-dario.binacchi@amarulasolutions.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/radeon: fix possible division-by-zero errors [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Fri May 19 08:33:27 2023 -0700

    drm/radeon: fix possible division-by-zero errors
    
    [ Upstream commit 1becc57cd1a905e2aa0e1eca60d2a37744525c4a ]
    
    Function rv740_get_decoded_reference_divider() may return 0 due to
    unpredictable reference divider value calculated in
    radeon_atom_get_clock_dividers(). This will lead to
    division-by-zero error once that value is used as a divider
    in calculating 'clk_s'.
    While unlikely, this issue should nonetheless be prevented so add a
    sanity check for such cases by testing 'decoded_ref' value against 0.
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    v2: minor coding style fixes (Alex)
    In practice this should actually happen as the vbios should be
    properly populated.
    
    Fixes: 66229b200598 ("drm/radeon/kms: add dpm support for rv7xx (v4)")
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ethernet: atheros: fix return value check in atl1e_tso_csum() [+ + +]
Author: Yuanjun Gong <ruc_gongyuanjun@163.com>
Date:   Thu Jul 20 22:42:19 2023 +0800

    ethernet: atheros: fix return value check in atl1e_tso_csum()
    
    [ Upstream commit 69a184f7a372aac588babfb0bd681aaed9779f5b ]
    
    in atl1e_tso_csum, it should check the return value of pskb_trim(),
    and return an error code if an unexpected value is returned
    by pskb_trim().
    
    Fixes: a6a5325239c2 ("atl1e: Atheros L1E Gigabit Ethernet driver")
    Signed-off-by: Yuanjun Gong <ruc_gongyuanjun@163.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Link: https://lore.kernel.org/r/20230720144219.39285-1-ruc_gongyuanjun@163.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
evm: Complete description of evm_inode_setattr() [+ + +]
Author: Roberto Sassu <roberto.sassu@huawei.com>
Date:   Mon Mar 6 11:40:36 2023 +0100

    evm: Complete description of evm_inode_setattr()
    
    [ Upstream commit b1de86d4248b273cb12c4cd7d20c08d459519f7d ]
    
    Add the description for missing parameters of evm_inode_setattr() to
    avoid the warning arising with W=n compile option.
    
    Fixes: 817b54aa45db ("evm: add evm_inode_setattr to prevent updating an invalid security.evm") # v3.2+
    Fixes: c1632a0f1120 ("fs: port ->setattr() to pass mnt_idmap") # v6.3+
    Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
    Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
    Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ext2: Drop fragment support [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Tue Jun 13 12:25:52 2023 +0200

    ext2: Drop fragment support
    
    commit 404615d7f1dcd4cca200e9a7a9df3a1dcae1dd62 upstream.
    
    Ext2 has fields in superblock reserved for subblock allocation support.
    However that never landed. Drop the many years dead code.
    
    Reported-by: syzbot+af5e10f73dbff48f70af@syzkaller.appspotmail.com
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ext4: correct inline offset when handling xattrs in inode body [+ + +]
Author: Eric Whitney <enwlinux@gmail.com>
Date:   Mon May 22 14:15:20 2023 -0400

    ext4: correct inline offset when handling xattrs in inode body
    
    commit 6909cf5c4101214f4305a62d582a5b93c7e1eb9a upstream.
    
    When run on a file system where the inline_data feature has been
    enabled, xfstests generic/269, generic/270, and generic/476 cause ext4
    to emit error messages indicating that inline directory entries are
    corrupted.  This occurs because the inline offset used to locate
    inline directory entries in the inode body is not updated when an
    xattr in that shared region is deleted and the region is shifted in
    memory to recover the space it occupied.  If the deleted xattr precedes
    the system.data attribute, which points to the inline directory entries,
    that attribute will be moved further up in the region.  The inline
    offset continues to point to whatever is located in system.data's former
    location, with unfortunate effects when used to access directory entries
    or (presumably) inline data in the inode body.
    
    Cc: stable@kernel.org
    Signed-off-by: Eric Whitney <enwlinux@gmail.com>
    Link: https://lore.kernel.org/r/20230522181520.1570360-1-enwlinux@gmail.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: Fix reusing stale buffer heads from last failed mounting [+ + +]
Author: Zhihao Cheng <chengzhihao1@huawei.com>
Date:   Wed Mar 15 09:31:23 2023 +0800

    ext4: Fix reusing stale buffer heads from last failed mounting
    
    [ Upstream commit 26fb5290240dc31cae99b8b4dd2af7f46dfcba6b ]
    
    Following process makes ext4 load stale buffer heads from last failed
    mounting in a new mounting operation:
    mount_bdev
     ext4_fill_super
     | ext4_load_and_init_journal
     |  ext4_load_journal
     |   jbd2_journal_load
     |    load_superblock
     |     journal_get_superblock
     |      set_buffer_verified(bh) // buffer head is verified
     |   jbd2_journal_recover // failed caused by EIO
     | goto failed_mount3a // skip 'sb->s_root' initialization
     deactivate_locked_super
      kill_block_super
       generic_shutdown_super
        if (sb->s_root)
        // false, skip ext4_put_super->invalidate_bdev->
        // invalidate_mapping_pages->mapping_evict_folio->
        // filemap_release_folio->try_to_free_buffers, which
        // cannot drop buffer head.
       blkdev_put
        blkdev_put_whole
         if (atomic_dec_and_test(&bdev->bd_openers))
         // false, systemd-udev happens to open the device. Then
         // blkdev_flush_mapping->kill_bdev->truncate_inode_pages->
         // truncate_inode_folio->truncate_cleanup_folio->
         // folio_invalidate->block_invalidate_folio->
         // filemap_release_folio->try_to_free_buffers will be skipped,
         // dropping buffer head is missed again.
    
    Second mount:
    ext4_fill_super
     ext4_load_and_init_journal
      ext4_load_journal
       ext4_get_journal
        jbd2_journal_init_inode
         journal_init_common
          bh = getblk_unmovable
           bh = __find_get_block // Found stale bh in last failed mounting
          journal->j_sb_buffer = bh
       jbd2_journal_load
        load_superblock
         journal_get_superblock
          if (buffer_verified(bh))
          // true, skip journal->j_format_version = 2, value is 0
        jbd2_journal_recover
         do_one_pass
          next_log_block += count_tags(journal, bh)
          // According to journal_tag_bytes(), 'tag_bytes' calculating is
          // affected by jbd2_has_feature_csum3(), jbd2_has_feature_csum3()
          // returns false because 'j->j_format_version >= 2' is not true,
          // then we get wrong next_log_block. The do_one_pass may exit
          // early whenoccuring non JBD2_MAGIC_NUMBER in 'next_log_block'.
    
    The filesystem is corrupted here, journal is partially replayed, and
    new journal sequence number actually is already used by last mounting.
    
    The invalidate_bdev() can drop all buffer heads even racing with bare
    reading block device(eg. systemd-udev), so we can fix it by invalidating
    bdev in error handling path in __ext4_fill_super().
    
    Fetch a reproducer in [Link].
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=217171
    Fixes: 25ed6e8a54df ("jbd2: enable journal clients to enable v2 checksumming")
    Cc: stable@vger.kernel.org # v3.5
    Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20230315013128.3911115-2-chengzhihao1@huawei.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: fix to check return value of freeze_bdev() in ext4_shutdown() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Tue Jun 6 15:32:03 2023 +0800

    ext4: fix to check return value of freeze_bdev() in ext4_shutdown()
    
    [ Upstream commit c4d13222afd8a64bf11bc7ec68645496ee8b54b9 ]
    
    freeze_bdev() can fail due to a lot of reasons, it needs to check its
    reason before later process.
    
    Fixes: 783d94854499 ("ext4: add EXT4_IOC_GOINGDOWN ioctl")
    Cc: stable@kernel.org
    Signed-off-by: Chao Yu <chao@kernel.org>
    Link: https://lore.kernel.org/r/20230606073203.1310389-1-chao@kernel.org
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: fix wrong unit use in ext4_mb_clear_bb [+ + +]
Author: Kemeng Shi <shikemeng@huaweicloud.com>
Date:   Sat Jun 3 23:03:18 2023 +0800

    ext4: fix wrong unit use in ext4_mb_clear_bb
    
    commit 247c3d214c23dfeeeb892e91a82ac1188bdaec9f upstream.
    
    Function ext4_issue_discard need count in cluster. Pass count_clusters
    instead of count to fix the mismatch.
    
    Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
    Cc: stable@kernel.org
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://lore.kernel.org/r/20230603150327.3596033-11-shikemeng@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: only update i_reserved_data_blocks on successful block allocation [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Mon Apr 24 11:38:35 2023 +0800

    ext4: only update i_reserved_data_blocks on successful block allocation
    
    commit de25d6e9610a8b30cce9bbb19b50615d02ebca02 upstream.
    
    In our fault injection test, we create an ext4 file, migrate it to
    non-extent based file, then punch a hole and finally trigger a WARN_ON
    in the ext4_da_update_reserve_space():
    
    EXT4-fs warning (device sda): ext4_da_update_reserve_space:369:
    ino 14, used 11 with only 10 reserved data blocks
    
    When writing back a non-extent based file, if we enable delalloc, the
    number of reserved blocks will be subtracted from the number of blocks
    mapped by ext4_ind_map_blocks(), and the extent status tree will be
    updated. We update the extent status tree by first removing the old
    extent_status and then inserting the new extent_status. If the block range
    we remove happens to be in an extent, then we need to allocate another
    extent_status with ext4_es_alloc_extent().
    
           use old    to remove   to add new
        |----------|------------|------------|
                  old extent_status
    
    The problem is that the allocation of a new extent_status failed due to a
    fault injection, and __es_shrink() did not get free memory, resulting in
    a return of -ENOMEM. Then do_writepages() retries after receiving -ENOMEM,
    we map to the same extent again, and the number of reserved blocks is again
    subtracted from the number of blocks in that extent. Since the blocks in
    the same extent are subtracted twice, we end up triggering WARN_ON at
    ext4_da_update_reserve_space() because used > ei->i_reserved_data_blocks.
    
    For non-extent based file, we update the number of reserved blocks after
    ext4_ind_map_blocks() is executed, which causes a problem that when we call
    ext4_ind_map_blocks() to create a block, it doesn't always create a block,
    but we always reduce the number of reserved blocks. So we move the logic
    for updating reserved blocks to ext4_ind_map_blocks() to ensure that the
    number of reserved blocks is updated only after we do succeed in allocating
    some new blocks.
    
    Fixes: 5f634d064c70 ("ext4: Fix quota accounting error with fallocate")
    Cc: stable@kernel.org
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20230424033846.4732-2-libaokun1@huawei.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: rename journal_dev to s_journal_dev inside ext4_sb_info [+ + +]
Author: Chunguang Xu <brookxu@tencent.com>
Date:   Thu Sep 24 11:03:42 2020 +0800

    ext4: rename journal_dev to s_journal_dev inside ext4_sb_info
    
    [ Upstream commit ee7ed3aa0f08621dbf897d2a98dc6f2c7e7d0335 ]
    
    Rename journal_dev to s_journal_dev inside ext4_sb_info, keep
    the naming rules consistent with other variables, which is
    convenient for code reading and writing.
    
    Signed-off-by: Chunguang Xu <brookxu@tencent.com>
    Reviewed-by: Andreas Dilger <adilger@dilger.ca>
    Reviewed-by: Ritesh Harjani <riteshh@linux.ibm.com>
    Link: https://lore.kernel.org/r/1600916623-544-1-git-send-email-brookxu@tencent.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: 26fb5290240d ("ext4: Fix reusing stale buffer heads from last failed mounting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
extcon: Fix kernel doc of property capability fields to avoid warnings [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Wed Mar 22 16:39:53 2023 +0200

    extcon: Fix kernel doc of property capability fields to avoid warnings
    
    [ Upstream commit 73346b9965ebda2feb7fef8629e9b28baee820e3 ]
    
    Kernel documentation has to be synchronized with a code, otherwise
    the validator is not happy:
    
         Function parameter or member 'usb_bits' not described in 'extcon_cable'
         Function parameter or member 'chg_bits' not described in 'extcon_cable'
         Function parameter or member 'jack_bits' not described in 'extcon_cable'
         Function parameter or member 'disp_bits' not described in 'extcon_cable'
    
    Describe the fields added in the past.
    
    Fixes: ceaa98f442cf ("extcon: Add the support for the capability of each property")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

extcon: Fix kernel doc of property fields to avoid warnings [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Wed Mar 22 16:39:52 2023 +0200

    extcon: Fix kernel doc of property fields to avoid warnings
    
    [ Upstream commit 7e77e0b7a9f4cdf91cb0950749b40c840ea63efc ]
    
    Kernel documentation has to be synchronized with a code, otherwise
    the validator is not happy:
    
         Function parameter or member 'usb_propval' not described in 'extcon_cable'
         Function parameter or member 'chg_propval' not described in 'extcon_cable'
         Function parameter or member 'jack_propval' not described in 'extcon_cable'
         Function parameter or member 'disp_propval' not described in 'extcon_cable'
    
    Describe the fields added in the past.
    
    Fixes: 067c1652e7a7 ("extcon: Add the support for extcon property according to extcon type")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
f2fs: fix error path handling in truncate_dnode() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Thu Jun 29 09:41:02 2023 +0800

    f2fs: fix error path handling in truncate_dnode()
    
    [ Upstream commit 0135c482fa97e2fd8245cb462784112a00ed1211 ]
    
    If truncate_node() fails in truncate_dnode(), it missed to call
    f2fs_put_page(), fix it.
    
    Fixes: 7735730d39d7 ("f2fs: fix to propagate error from __get_meta_page()")
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fbdev: au1200fb: Fix missing IRQ check in au1200fb_drv_probe [+ + +]
Author: Zhang Shurong <zhang_shurong@foxmail.com>
Date:   Sat Jul 15 16:16:56 2023 +0800

    fbdev: au1200fb: Fix missing IRQ check in au1200fb_drv_probe
    
    [ Upstream commit 4e88761f5f8c7869f15a2046b1a1116f4fab4ac8 ]
    
    This func misses checking for platform_get_irq()'s call and may passes the
    negative error codes to request_irq(), which takes unsigned IRQ #,
    causing it to fail with -EINVAL, overriding an original error code.
    
    Fix this by stop calling request_irq() with invalid IRQ #s.
    
    Fixes: 1630d85a8312 ("au1200fb: fix hardcoded IRQ")
    Signed-off-by: Zhang Shurong <zhang_shurong@foxmail.com>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbdev: imsttfb: Fix use after free bug in imsttfb_probe [+ + +]
Author: Zheng Wang <zyytlz.wz@163.com>
Date:   Thu Apr 27 11:08:41 2023 +0800

    fbdev: imsttfb: Fix use after free bug in imsttfb_probe
    
    commit c75f5a55061091030a13fef71b9995b89bc86213 upstream.
    
    A use-after-free bug may occur if init_imstt invokes framebuffer_release
    and free the info ptr. The caller, imsttfb_probe didn't notice that and
    still keep the ptr as private data in pdev.
    
    If we remove the driver which will call imsttfb_remove to make cleanup,
    UAF happens.
    
    Fix it by return error code if bad case happens in init_imstt.
    
    Signed-off-by: Zheng Wang <zyytlz.wz@163.com>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fbdev: imxfb: warn about invalid left/right margin [+ + +]
Author: Martin Kaiser <martin@kaiser.cx>
Date:   Wed Jun 28 15:24:37 2023 +0200

    fbdev: imxfb: warn about invalid left/right margin
    
    [ Upstream commit 4e47382fbca916d7db95cbf9e2d7ca2e9d1ca3fe ]
    
    Warn about invalid var->left_margin or var->right_margin. Their values
    are read from the device tree.
    
    We store var->left_margin-3 and var->right_margin-1 in register
    fields. These fields should be >= 0.
    
    Fixes: 7e8549bcee00 ("imxfb: Fix margin settings")
    Signed-off-by: Martin Kaiser <martin@kaiser.cx>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbdev: omapfb: lcd_mipid: Fix an error handling path in mipid_spi_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sun Jun 4 17:42:28 2023 +0200

    fbdev: omapfb: lcd_mipid: Fix an error handling path in mipid_spi_probe()
    
    [ Upstream commit 79a3908d1ea6c35157a6d907b1a9d8ec06015e7a ]
    
    If 'mipid_detect()' fails, we must free 'md' to avoid a memory leak.
    
    Fixes: 66d2f99d0bb5 ("omapfb: add support for MIPI-DCS compatible LCDs")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs/sysv: Null check to prevent null-ptr-deref bug [+ + +]
Author: Prince Kumar Maurya <princekumarmaurya06@gmail.com>
Date:   Tue May 30 18:31:41 2023 -0700

    fs/sysv: Null check to prevent null-ptr-deref bug
    
    commit ea2b62f305893992156a798f665847e0663c9f41 upstream.
    
    sb_getblk(inode->i_sb, parent) return a null ptr and taking lock on
    that leads to the null-ptr-deref bug.
    
    Reported-by: syzbot+aad58150cbc64ba41bdc@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=aad58150cbc64ba41bdc
    Signed-off-by: Prince Kumar Maurya <princekumarmaurya06@gmail.com>
    Message-Id: <20230531013141.19487-1-princekumarmaurya06@gmail.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fs: dlm: interrupt posix locks only when process is killed [+ + +]
Author: Alexander Aring <aahringo@redhat.com>
Date:   Fri May 19 11:21:26 2023 -0400

    fs: dlm: interrupt posix locks only when process is killed
    
    [ Upstream commit 59e45c758ca1b9893ac923dd63536da946ac333b ]
    
    If a posix lock request is waiting for a result from user space
    (dlm_controld), do not let it be interrupted unless the process
    is killed. This reverts commit a6b1533e9a57 ("dlm: make posix locks
    interruptible"). The problem with the interruptible change is
    that all locks were cleared on any signal interrupt. If a signal
    was received that did not terminate the process, the process
    could continue running after all its dlm posix locks had been
    cleared. A future patch will add cancelation to allow proper
    interruption.
    
    Cc: stable@vger.kernel.org
    Fixes: a6b1533e9a57 ("dlm: make posix locks interruptible")
    Signed-off-by: Alexander Aring <aahringo@redhat.com>
    Signed-off-by: David Teigland <teigland@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fs: dlm: return positive pid value for F_GETLK [+ + +]
Author: Alexander Aring <aahringo@redhat.com>
Date:   Fri May 19 11:21:24 2023 -0400

    fs: dlm: return positive pid value for F_GETLK
    
    commit 92655fbda5c05950a411eaabc19e025e86e2a291 upstream.
    
    The GETLK pid values have all been negated since commit 9d5b86ac13c5
    ("fs/locks: Remove fl_nspid and use fs-specific l_pid for remote locks").
    Revert this for local pids, and leave in place negative pids for remote
    owners.
    
    Cc: stable@vger.kernel.org
    Fixes: 9d5b86ac13c5 ("fs/locks: Remove fl_nspid and use fs-specific l_pid for remote locks")
    Signed-off-by: Alexander Aring <aahringo@redhat.com>
    Signed-off-by: David Teigland <teigland@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ftrace: Add information on number of page groups allocated [+ + +]
Author: Steven Rostedt (VMware) <rostedt@goodmis.org>
Date:   Tue Oct 1 14:38:07 2019 -0400

    ftrace: Add information on number of page groups allocated
    
    [ Upstream commit da537f0aef1372c5204356a7df06be8769467b7b ]
    
    Looking for ways to shrink the size of the dyn_ftrace structure, knowing the
    information about how many pages and the number of groups of those pages, is
    useful in working out the best ways to save on memory.
    
    This adds one info print on how many groups of pages were used to allocate
    the ftrace dyn_ftrace structures, and also shows the number of pages and
    groups in the dyn_ftrace_total_info (which is used for debugging).
    
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Stable-dep-of: 26efd79c4624 ("ftrace: Fix possible warning on checking all pages used in ftrace_process_locs()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ftrace: Check if pages were allocated before calling free_pages() [+ + +]
Author: Steven Rostedt (VMware) <rostedt@goodmis.org>
Date:   Tue Mar 30 09:58:38 2021 -0400

    ftrace: Check if pages were allocated before calling free_pages()
    
    [ Upstream commit 59300b36f85f254260c81d9dd09195fa49eb0f98 ]
    
    It is possible that on error pg->size can be zero when getting its order,
    which would return a -1 value. It is dangerous to pass in an order of -1
    to free_pages(). Check if order is greater than or equal to zero before
    calling free_pages().
    
    Link: https://lore.kernel.org/lkml/20210330093916.432697c7@gandalf.local.home/
    
    Reported-by: Abaci Robot <abaci@linux.alibaba.com>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Stable-dep-of: 26efd79c4624 ("ftrace: Fix possible warning on checking all pages used in ftrace_process_locs()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ftrace: Fix possible warning on checking all pages used in ftrace_process_locs() [+ + +]
Author: Zheng Yejian <zhengyejian1@huawei.com>
Date:   Wed Jul 12 14:04:52 2023 +0800

    ftrace: Fix possible warning on checking all pages used in ftrace_process_locs()
    
    [ Upstream commit 26efd79c4624294e553aeaa3439c646729bad084 ]
    
    As comments in ftrace_process_locs(), there may be NULL pointers in
    mcount_loc section:
     > Some architecture linkers will pad between
     > the different mcount_loc sections of different
     > object files to satisfy alignments.
     > Skip any NULL pointers.
    
    After commit 20e5227e9f55 ("ftrace: allow NULL pointers in mcount_loc"),
    NULL pointers will be accounted when allocating ftrace pages but skipped
    before adding into ftrace pages, this may result in some pages not being
    used. Then after commit 706c81f87f84 ("ftrace: Remove extra helper
    functions"), warning may occur at:
      WARN_ON(pg->next);
    
    To fix it, only warn for case that no pointers skipped but pages not used
    up, then free those unused pages after releasing ftrace_lock.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20230712060452.3175675-1-zhengyejian1@huawei.com
    
    Cc: stable@vger.kernel.org
    Fixes: 706c81f87f84 ("ftrace: Remove extra helper functions")
    Suggested-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Zheng Yejian <zhengyejian1@huawei.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ftrace: Store the order of pages allocated in ftrace_page [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Thu Apr 1 16:14:17 2021 -0400

    ftrace: Store the order of pages allocated in ftrace_page
    
    [ Upstream commit db42523b4f3e83ff86b53cdda219a9767c8b047f ]
    
    Instead of saving the size of the records field of the ftrace_page, store
    the order it uses to allocate the pages, as that is what is needed to know
    in order to free the pages. This simplifies the code.
    
    Link: https://lore.kernel.org/lkml/CAHk-=whyMxheOqXAORt9a7JK9gc9eHTgCJ55Pgs4p=X3RrQubQ@mail.gmail.com/
    
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    [ change log written by Steven Rostedt ]
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Stable-dep-of: 26efd79c4624 ("ftrace: Fix possible warning on checking all pages used in ftrace_process_locs()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fuse: revalidate: don't invalidate if interrupted [+ + +]
Author: Miklos Szeredi <mszeredi@redhat.com>
Date:   Wed Jun 7 17:49:20 2023 +0200

    fuse: revalidate: don't invalidate if interrupted
    
    commit a9d1c4c6df0e568207907c04aed9e7beb1294c42 upstream.
    
    If the LOOKUP request triggered from fuse_dentry_revalidate() is
    interrupted, then the dentry will be invalidated, possibly resulting in
    submounts being unmounted.
    
    Reported-by: Xu Rongbo <xurongbo@baidu.com>
    Closes: https://lore.kernel.org/all/CAJfpegswN_CJJ6C3RZiaK6rpFmNyWmXfaEpnQUJ42KCwNF5tWw@mail.gmail.com/
    Fixes: 9e6268db496a ("[PATCH] FUSE - read-write operations")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gfs2: Don't deref jdesc in evict [+ + +]
Author: Bob Peterson <rpeterso@redhat.com>
Date:   Fri Apr 28 12:07:46 2023 -0400

    gfs2: Don't deref jdesc in evict
    
    commit 504a10d9e46bc37b23d0a1ae2f28973c8516e636 upstream.
    
    On corrupt gfs2 file systems the evict code can try to reference the
    journal descriptor structure, jdesc, after it has been freed and set to
    NULL. The sequence of events is:
    
    init_journal()
    ...
    fail_jindex:
       gfs2_jindex_free(sdp); <------frees journals, sets jdesc = NULL
          if (gfs2_holder_initialized(&ji_gh))
             gfs2_glock_dq_uninit(&ji_gh);
    fail:
       iput(sdp->sd_jindex); <--references jdesc in evict_linked_inode
          evict()
             gfs2_evict_inode()
                evict_linked_inode()
                   ret = gfs2_trans_begin(sdp, 0, sdp->sd_jdesc->jd_blocks);
    <------references the now freed/zeroed sd_jdesc pointer.
    
    The call to gfs2_trans_begin is done because the truncate_inode_pages
    call can cause gfs2 events that require a transaction, such as removing
    journaled data (jdata) blocks from the journal.
    
    This patch fixes the problem by adding a check for sdp->sd_jdesc to
    function gfs2_evict_inode. In theory, this should only happen to corrupt
    gfs2 file systems, when gfs2 detects the problem, reports it, then tries
    to evict all the system inodes it has read in up to that point.
    
    Reported-by: Yang Lan <lanyang0908@gmail.com>
    Signed-off-by: Bob Peterson <rpeterso@redhat.com>
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    [DP: adjusted context]
    Signed-off-by: Dragos-Marian Panait <dragos.panait@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
gpio: tps68470: Make tps68470_gpio_output() always set the initial value [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Mon Jul 10 14:34:25 2023 +0200

    gpio: tps68470: Make tps68470_gpio_output() always set the initial value
    
    [ Upstream commit 5a7adc6c1069ce31ef4f606ae9c05592c80a6ab5 ]
    
    Make tps68470_gpio_output() call tps68470_gpio_set() for output-only pins
    too, so that the initial value passed to gpiod_direction_output() is
    honored for these pins too.
    
    Fixes: 275b13a65547 ("gpio: Add support for TPS68470 GPIOs")
    Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
    Tested-by: Daniel Scally <dan.scally@ideasonboard.com>
    Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gtp: Fix use-after-free in __gtp_encap_destroy(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Thu Jun 22 14:32:31 2023 -0700

    gtp: Fix use-after-free in __gtp_encap_destroy().
    
    [ Upstream commit ce3aee7114c575fab32a5e9e939d4bbb3dcca79f ]
    
    syzkaller reported use-after-free in __gtp_encap_destroy(). [0]
    
    It shows the same process freed sk and touched it illegally.
    
    Commit e198987e7dd7 ("gtp: fix suspicious RCU usage") added lock_sock()
    and release_sock() in __gtp_encap_destroy() to protect sk->sk_user_data,
    but release_sock() is called after sock_put() releases the last refcnt.
    
    [0]:
    BUG: KASAN: slab-use-after-free in instrument_atomic_read_write include/linux/instrumented.h:96 [inline]
    BUG: KASAN: slab-use-after-free in atomic_try_cmpxchg_acquire include/linux/atomic/atomic-instrumented.h:541 [inline]
    BUG: KASAN: slab-use-after-free in queued_spin_lock include/asm-generic/qspinlock.h:111 [inline]
    BUG: KASAN: slab-use-after-free in do_raw_spin_lock include/linux/spinlock.h:186 [inline]
    BUG: KASAN: slab-use-after-free in __raw_spin_lock_bh include/linux/spinlock_api_smp.h:127 [inline]
    BUG: KASAN: slab-use-after-free in _raw_spin_lock_bh+0x75/0xe0 kernel/locking/spinlock.c:178
    Write of size 4 at addr ffff88800dbef398 by task syz-executor.2/2401
    
    CPU: 1 PID: 2401 Comm: syz-executor.2 Not tainted 6.4.0-rc5-01219-gfa0e21fa4443 #2
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0x72/0xa0 lib/dump_stack.c:106
     print_address_description mm/kasan/report.c:351 [inline]
     print_report+0xcc/0x620 mm/kasan/report.c:462
     kasan_report+0xb2/0xe0 mm/kasan/report.c:572
     check_region_inline mm/kasan/generic.c:181 [inline]
     kasan_check_range+0x39/0x1c0 mm/kasan/generic.c:187
     instrument_atomic_read_write include/linux/instrumented.h:96 [inline]
     atomic_try_cmpxchg_acquire include/linux/atomic/atomic-instrumented.h:541 [inline]
     queued_spin_lock include/asm-generic/qspinlock.h:111 [inline]
     do_raw_spin_lock include/linux/spinlock.h:186 [inline]
     __raw_spin_lock_bh include/linux/spinlock_api_smp.h:127 [inline]
     _raw_spin_lock_bh+0x75/0xe0 kernel/locking/spinlock.c:178
     spin_lock_bh include/linux/spinlock.h:355 [inline]
     release_sock+0x1f/0x1a0 net/core/sock.c:3526
     gtp_encap_disable_sock drivers/net/gtp.c:651 [inline]
     gtp_encap_disable+0xb9/0x220 drivers/net/gtp.c:664
     gtp_dev_uninit+0x19/0x50 drivers/net/gtp.c:728
     unregister_netdevice_many_notify+0x97e/0x1520 net/core/dev.c:10841
     rtnl_delete_link net/core/rtnetlink.c:3216 [inline]
     rtnl_dellink+0x3c0/0xb30 net/core/rtnetlink.c:3268
     rtnetlink_rcv_msg+0x450/0xb10 net/core/rtnetlink.c:6423
     netlink_rcv_skb+0x15d/0x450 net/netlink/af_netlink.c:2548
     netlink_unicast_kernel net/netlink/af_netlink.c:1339 [inline]
     netlink_unicast+0x700/0x930 net/netlink/af_netlink.c:1365
     netlink_sendmsg+0x91c/0xe30 net/netlink/af_netlink.c:1913
     sock_sendmsg_nosec net/socket.c:724 [inline]
     sock_sendmsg+0x1b7/0x200 net/socket.c:747
     ____sys_sendmsg+0x75a/0x990 net/socket.c:2493
     ___sys_sendmsg+0x11d/0x1c0 net/socket.c:2547
     __sys_sendmsg+0xfe/0x1d0 net/socket.c:2576
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x3f/0x90 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x72/0xdc
    RIP: 0033:0x7f1168b1fe5d
    Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 73 9f 1b 00 f7 d8 64 89 01 48
    RSP: 002b:00007f1167edccc8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    RAX: ffffffffffffffda RBX: 00000000004bbf80 RCX: 00007f1168b1fe5d
    RDX: 0000000000000000 RSI: 00000000200002c0 RDI: 0000000000000003
    RBP: 00000000004bbf80 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 000000000000000b R14: 00007f1168b80530 R15: 0000000000000000
     </TASK>
    
    Allocated by task 1483:
     kasan_save_stack+0x22/0x50 mm/kasan/common.c:45
     kasan_set_track+0x25/0x30 mm/kasan/common.c:52
     __kasan_slab_alloc+0x59/0x70 mm/kasan/common.c:328
     kasan_slab_alloc include/linux/kasan.h:186 [inline]
     slab_post_alloc_hook mm/slab.h:711 [inline]
     slab_alloc_node mm/slub.c:3451 [inline]
     slab_alloc mm/slub.c:3459 [inline]
     __kmem_cache_alloc_lru mm/slub.c:3466 [inline]
     kmem_cache_alloc+0x16d/0x340 mm/slub.c:3475
     sk_prot_alloc+0x5f/0x280 net/core/sock.c:2073
     sk_alloc+0x34/0x6c0 net/core/sock.c:2132
     inet6_create net/ipv6/af_inet6.c:192 [inline]
     inet6_create+0x2c7/0xf20 net/ipv6/af_inet6.c:119
     __sock_create+0x2a1/0x530 net/socket.c:1535
     sock_create net/socket.c:1586 [inline]
     __sys_socket_create net/socket.c:1623 [inline]
     __sys_socket_create net/socket.c:1608 [inline]
     __sys_socket+0x137/0x250 net/socket.c:1651
     __do_sys_socket net/socket.c:1664 [inline]
     __se_sys_socket net/socket.c:1662 [inline]
     __x64_sys_socket+0x72/0xb0 net/socket.c:1662
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x3f/0x90 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    Freed by task 2401:
     kasan_save_stack+0x22/0x50 mm/kasan/common.c:45
     kasan_set_track+0x25/0x30 mm/kasan/common.c:52
     kasan_save_free_info+0x2e/0x50 mm/kasan/generic.c:521
     ____kasan_slab_free mm/kasan/common.c:236 [inline]
     ____kasan_slab_free mm/kasan/common.c:200 [inline]
     __kasan_slab_free+0x10c/0x1b0 mm/kasan/common.c:244
     kasan_slab_free include/linux/kasan.h:162 [inline]
     slab_free_hook mm/slub.c:1781 [inline]
     slab_free_freelist_hook mm/slub.c:1807 [inline]
     slab_free mm/slub.c:3786 [inline]
     kmem_cache_free+0xb4/0x490 mm/slub.c:3808
     sk_prot_free net/core/sock.c:2113 [inline]
     __sk_destruct+0x500/0x720 net/core/sock.c:2207
     sk_destruct+0xc1/0xe0 net/core/sock.c:2222
     __sk_free+0xed/0x3d0 net/core/sock.c:2233
     sk_free+0x7c/0xa0 net/core/sock.c:2244
     sock_put include/net/sock.h:1981 [inline]
     __gtp_encap_destroy+0x165/0x1b0 drivers/net/gtp.c:634
     gtp_encap_disable_sock drivers/net/gtp.c:651 [inline]
     gtp_encap_disable+0xb9/0x220 drivers/net/gtp.c:664
     gtp_dev_uninit+0x19/0x50 drivers/net/gtp.c:728
     unregister_netdevice_many_notify+0x97e/0x1520 net/core/dev.c:10841
     rtnl_delete_link net/core/rtnetlink.c:3216 [inline]
     rtnl_dellink+0x3c0/0xb30 net/core/rtnetlink.c:3268
     rtnetlink_rcv_msg+0x450/0xb10 net/core/rtnetlink.c:6423
     netlink_rcv_skb+0x15d/0x450 net/netlink/af_netlink.c:2548
     netlink_unicast_kernel net/netlink/af_netlink.c:1339 [inline]
     netlink_unicast+0x700/0x930 net/netlink/af_netlink.c:1365
     netlink_sendmsg+0x91c/0xe30 net/netlink/af_netlink.c:1913
     sock_sendmsg_nosec net/socket.c:724 [inline]
     sock_sendmsg+0x1b7/0x200 net/socket.c:747
     ____sys_sendmsg+0x75a/0x990 net/socket.c:2493
     ___sys_sendmsg+0x11d/0x1c0 net/socket.c:2547
     __sys_sendmsg+0xfe/0x1d0 net/socket.c:2576
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x3f/0x90 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    The buggy address belongs to the object at ffff88800dbef300
     which belongs to the cache UDPv6 of size 1344
    The buggy address is located 152 bytes inside of
     freed 1344-byte region [ffff88800dbef300, ffff88800dbef840)
    
    The buggy address belongs to the physical page:
    page:00000000d31bfed5 refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff88800dbeed40 pfn:0xdbe8
    head:00000000d31bfed5 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    memcg:ffff888008ee0801
    flags: 0x100000000010200(slab|head|node=0|zone=1)
    page_type: 0xffffffff()
    raw: 0100000000010200 ffff88800c7a3000 dead000000000122 0000000000000000
    raw: ffff88800dbeed40 0000000080160015 00000001ffffffff ffff888008ee0801
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff88800dbef280: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
     ffff88800dbef300: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    >ffff88800dbef380: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                ^
     ffff88800dbef400: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff88800dbef480: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    
    Fixes: e198987e7dd7 ("gtp: fix suspicious RCU usage")
    Reported-by: syzkaller <syzkaller@googlegroups.com>
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Link: https://lore.kernel.org/r/20230622213231.24651-1-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hwmon: (nct7802) Fix for temp6 (PECI1) processed even if PECI1 disabled [+ + +]
Author: Gilles Buloz <Gilles.Buloz@kontron.com>
Date:   Mon Jul 24 08:04:44 2023 +0000

    hwmon: (nct7802) Fix for temp6 (PECI1) processed even if PECI1 disabled
    
    commit 54685abe660a59402344d5045ce08c43c6a5ac42 upstream.
    
    Because of hex value 0x46 used instead of decimal 46, the temp6
    (PECI1) temperature is always declared visible and then displayed
    even if disabled in the chip
    
    Signed-off-by: Gilles Buloz <gilles.buloz@kontron.com>
    Link: https://lore.kernel.org/r/DU0PR10MB62526435ADBC6A85243B90E08002A@DU0PR10MB6252.EURPRD10.PROD.OUTLOOK.COM
    Fixes: fcdc5739dce03 ("hwmon: (nct7802) add temperature sensor type attribute")
    Cc: stable@vger.kernel.org
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hwrng: imx-rngc - fix the timeout for init and self check [+ + +]
Author: Martin Kaiser <martin@kaiser.cx>
Date:   Thu Jun 15 15:49:59 2023 +0100

    hwrng: imx-rngc - fix the timeout for init and self check
    
    commit d744ae7477190967a3ddc289e2cd4ae59e8b1237 upstream.
    
    Fix the timeout that is used for the initialisation and for the self
    test. wait_for_completion_timeout expects a timeout in jiffies, but
    RNGC_TIMEOUT is in milliseconds. Call msecs_to_jiffies to do the
    conversion.
    
    Cc: stable@vger.kernel.org
    Fixes: 1d5449445bd0 ("hwrng: mx-rngc - add a driver for Freescale RNGC")
    Signed-off-by: Martin Kaiser <martin@kaiser.cx>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

hwrng: virtio - add an internal buffer [+ + +]
Author: Laurent Vivier <lvivier@redhat.com>
Date:   Thu Oct 28 12:11:08 2021 +0200

    hwrng: virtio - add an internal buffer
    
    [ Upstream commit bf3175bc50a3754dc427e2f5046e17a9fafc8be7 ]
    
    hwrng core uses two buffers that can be mixed in the
    virtio-rng queue.
    
    If the buffer is provided with wait=0 it is enqueued in the
    virtio-rng queue but unused by the caller.
    On the next call, core provides another buffer but the
    first one is filled instead and the new one queued.
    And the caller reads the data from the new one that is not
    updated, and the data in the first one are lost.
    
    To avoid this mix, virtio-rng needs to use its own unique
    internal buffer at a cost of a data copy to the caller buffer.
    
    Signed-off-by: Laurent Vivier <lvivier@redhat.com>
    Link: https://lore.kernel.org/r/20211028101111.128049-2-lvivier@redhat.com
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Stable-dep-of: ac52578d6e8d ("hwrng: virtio - Fix race on data_avail and actual data")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwrng: virtio - always add a pending request [+ + +]
Author: Laurent Vivier <lvivier@redhat.com>
Date:   Thu Oct 28 12:11:11 2021 +0200

    hwrng: virtio - always add a pending request
    
    [ Upstream commit 9a4b612d675b03f7fc9fa1957ca399c8223f3954 ]
    
    If we ensure we have already some data available by enqueuing
    again the buffer once data are exhausted, we can return what we
    have without waiting for the device answer.
    
    Signed-off-by: Laurent Vivier <lvivier@redhat.com>
    Link: https://lore.kernel.org/r/20211028101111.128049-5-lvivier@redhat.com
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Stable-dep-of: ac52578d6e8d ("hwrng: virtio - Fix race on data_avail and actual data")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwrng: virtio - don't wait on cleanup [+ + +]
Author: Laurent Vivier <lvivier@redhat.com>
Date:   Thu Oct 28 12:11:09 2021 +0200

    hwrng: virtio - don't wait on cleanup
    
    [ Upstream commit 2bb31abdbe55742c89f4dc0cc26fcbc8467364f6 ]
    
    When virtio-rng device was dropped by the hwrng core we were forced
    to wait the buffer to come back from the device to not have
    remaining ongoing operation that could spoil the buffer.
    
    But now, as the buffer is internal to the virtio-rng we can release
    the waiting loop immediately, the buffer will be retrieve and use
    when the virtio-rng driver will be selected again.
    
    This avoids to hang on an rng_current write command if the virtio-rng
    device is blocked by a lack of entropy. This allows to select
    another entropy source if the current one is empty.
    
    Signed-off-by: Laurent Vivier <lvivier@redhat.com>
    Link: https://lore.kernel.org/r/20211028101111.128049-3-lvivier@redhat.com
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Stable-dep-of: ac52578d6e8d ("hwrng: virtio - Fix race on data_avail and actual data")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwrng: virtio - don't waste entropy [+ + +]
Author: Laurent Vivier <lvivier@redhat.com>
Date:   Thu Oct 28 12:11:10 2021 +0200

    hwrng: virtio - don't waste entropy
    
    [ Upstream commit 5c8e933050044d6dd2a000f9a5756ae73cbe7c44 ]
    
    if we don't use all the entropy available in the buffer, keep it
    and use it later.
    
    Signed-off-by: Laurent Vivier <lvivier@redhat.com>
    Link: https://lore.kernel.org/r/20211028101111.128049-4-lvivier@redhat.com
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Stable-dep-of: ac52578d6e8d ("hwrng: virtio - Fix race on data_avail and actual data")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwrng: virtio - Fix race on data_avail and actual data [+ + +]
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu May 4 11:59:32 2023 +0800

    hwrng: virtio - Fix race on data_avail and actual data
    
    [ Upstream commit ac52578d6e8d300dd50f790f29a24169b1edd26c ]
    
    The virtio rng device kicks off a new entropy request whenever the
    data available reaches zero.  When a new request occurs at the end
    of a read operation, that is, when the result of that request is
    only needed by the next reader, then there is a race between the
    writing of the new data and the next reader.
    
    This is because there is no synchronisation whatsoever between the
    writer and the reader.
    
    Fix this by writing data_avail with smp_store_release and reading
    it with smp_load_acquire when we first enter read.  The subsequent
    reads are safe because they're either protected by the first load
    acquire, or by the completion mechanism.
    
    Also remove the redundant zeroing of data_idx in random_recv_done
    (data_idx must already be zero at this point) and data_avail in
    request_entropy (ditto).
    
    Reported-by: syzbot+726dc8c62c3536431ceb@syzkaller.appspotmail.com
    Fixes: f7f510ec1957 ("virtio: An entropy device, as suggested by hpa.")
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i2c: xiic: Defer xiic_wakeup() and __xiic_start_xfer() in xiic_process() [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Mon Aug 23 23:41:42 2021 +0200

    i2c: xiic: Defer xiic_wakeup() and __xiic_start_xfer() in xiic_process()
    
    [ Upstream commit 743e227a895923c37a333eb2ebf3e391f00c406d ]
    
    The __xiic_start_xfer() manipulates the interrupt flags, xiic_wakeup()
    may result in return from xiic_xfer() early. Defer both to the end of
    the xiic_process() interrupt thread, so that they are executed after
    all the other interrupt bits handling completed and once it completely
    safe to perform changes to the interrupt bits in the hardware.
    
    Signed-off-by: Marek Vasut <marex@denx.de>
    Acked-by: Michal Simek <michal.simek@xilinx.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Stable-dep-of: cb6e45c9a0ad ("i2c: xiic: Don't try to handle more interrupt events after error")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: xiic: Don't try to handle more interrupt events after error [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Tue Jun 6 12:25:58 2023 -0600

    i2c: xiic: Don't try to handle more interrupt events after error
    
    [ Upstream commit cb6e45c9a0ad9e0f8664fd06db0227d185dc76ab ]
    
    In xiic_process, it is possible that error events such as arbitration
    lost or TX error can be raised in conjunction with other interrupt flags
    such as TX FIFO empty or bus not busy. Error events result in the
    controller being reset and the error returned to the calling request,
    but the function could potentially try to keep handling the other
    events, such as by writing more messages into the TX FIFO. Since the
    transaction has already failed, this is not helpful and will just cause
    issues.
    
    This problem has been present ever since:
    
    commit 7f9906bd7f72 ("i2c: xiic: Service all interrupts in isr")
    
    which allowed non-error events to be handled after errors, but became
    more obvious after:
    
    commit 743e227a8959 ("i2c: xiic: Defer xiic_wakeup() and
    __xiic_start_xfer() in xiic_process()")
    
    which reworked the code to add a WARN_ON which triggers if both the
    xfer_more and wakeup_req flags were set, since this combination is
    not supposed to happen, but was occurring in this scenario.
    
    Skip further interrupt handling after error flags are detected to avoid
    this problem.
    
    Fixes: 7f9906bd7f72 ("i2c: xiic: Service all interrupts in isr")
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Acked-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i40e: Fix an NULL vs IS_ERR() bug for debugfs_create_dir() [+ + +]
Author: Wang Ming <machel@vivo.com>
Date:   Thu Jul 13 09:42:39 2023 +0800

    i40e: Fix an NULL vs IS_ERR() bug for debugfs_create_dir()
    
    [ Upstream commit 043b1f185fb0f3939b7427f634787706f45411c4 ]
    
    The debugfs_create_dir() function returns error pointers.
    It never returns NULL. Most incorrect error checks were fixed,
    but the one in i40e_dbg_init() was forgotten.
    
    Fix the remaining error check.
    
    Fixes: 02e9c290814c ("i40e: debugfs interface")
    Signed-off-by: Wang Ming <machel@vivo.com>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
IB/hfi1: Fix sdma.h tx->num_descs off-by-one errors [+ + +]
Author: Patrick Kelsey <pat.kelsey@cornelisnetworks.com>
Date:   Thu Feb 16 11:56:28 2023 -0500

    IB/hfi1: Fix sdma.h tx->num_descs off-by-one errors
    
    [ Upstream commit fd8958efe8779d3db19c9124fce593ce681ac709 ]
    
    Fix three sources of error involving struct sdma_txreq.num_descs.
    
    When _extend_sdma_tx_descs() extends the descriptor array, it uses the
    value of tx->num_descs to determine how many existing entries from the
    tx's original, internal descriptor array to copy to the newly allocated
    one.  As this value was incremented before the call, the copy loop will
    access one entry past the internal descriptor array, copying its contents
    into the corresponding slot in the new array.
    
    If the call to _extend_sdma_tx_descs() fails, _pad_smda_tx_descs() then
    invokes __sdma_tx_clean() which uses the value of tx->num_desc to drive a
    loop that unmaps all descriptor entries in use.  As this value was
    incremented before the call, the unmap loop will invoke sdma_unmap_desc()
    on a descriptor entry whose contents consist of whatever random data was
    copied into it during (1), leading to cascading further calls into the
    kernel and driver using arbitrary data.
    
    _sdma_close_tx() was using tx->num_descs instead of tx->num_descs - 1.
    
    Fix all of the above by:
    - Only increment .num_descs after .descp is extended.
    - Use .num_descs - 1 instead of .num_descs for last .descp entry.
    
    Fixes: f4d26d81ad7f ("staging/rdma/hfi1: Add coalescing support for SDMA TX descriptors")
    Link: https://lore.kernel.org/r/167656658879.2223096.10026561343022570690.stgit@awfm-02.cornelisnetworks.com
    Signed-off-by: Brendan Cunningham <bcunningham@cornelisnetworks.com>
    Signed-off-by: Patrick Kelsey <pat.kelsey@cornelisnetworks.com>
    Signed-off-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
icmp6: Fix null-ptr-deref of ip6_null_entry->rt6i_idev in icmp6_dev(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Fri Jul 7 18:43:27 2023 -0700

    icmp6: Fix null-ptr-deref of ip6_null_entry->rt6i_idev in icmp6_dev().
    
    [ Upstream commit 2aaa8a15de73874847d62eb595c6683bface80fd ]
    
    With some IPv6 Ext Hdr (RPL, SRv6, etc.), we can send a packet that
    has the link-local address as src and dst IP and will be forwarded to
    an external IP in the IPv6 Ext Hdr.
    
    For example, the script below generates a packet whose src IP is the
    link-local address and dst is updated to 11::.
    
      # for f in $(find /proc/sys/net/ -name *seg6_enabled*); do echo 1 > $f; done
      # python3
      >>> from socket import *
      >>> from scapy.all import *
      >>>
      >>> SRC_ADDR = DST_ADDR = "fe80::5054:ff:fe12:3456"
      >>>
      >>> pkt = IPv6(src=SRC_ADDR, dst=DST_ADDR)
      >>> pkt /= IPv6ExtHdrSegmentRouting(type=4, addresses=["11::", "22::"], segleft=1)
      >>>
      >>> sk = socket(AF_INET6, SOCK_RAW, IPPROTO_RAW)
      >>> sk.sendto(bytes(pkt), (DST_ADDR, 0))
    
    For such a packet, we call ip6_route_input() to look up a route for the
    next destination in these three functions depending on the header type.
    
      * ipv6_rthdr_rcv()
      * ipv6_rpl_srh_rcv()
      * ipv6_srh_rcv()
    
    If no route is found, ip6_null_entry is set to skb, and the following
    dst_input(skb) calls ip6_pkt_drop().
    
    Finally, in icmp6_dev(), we dereference skb_rt6_info(skb)->rt6i_idev->dev
    as the input device is the loopback interface.  Then, we have to check if
    skb_rt6_info(skb)->rt6i_idev is NULL or not to avoid NULL pointer deref
    for ip6_null_entry.
    
    BUG: kernel NULL pointer dereference, address: 0000000000000000
     PF: supervisor read access in kernel mode
     PF: error_code(0x0000) - not-present page
    PGD 0 P4D 0
    Oops: 0000 [#1] PREEMPT SMP PTI
    CPU: 0 PID: 157 Comm: python3 Not tainted 6.4.0-11996-gb121d614371c #35
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
    RIP: 0010:icmp6_send (net/ipv6/icmp.c:436 net/ipv6/icmp.c:503)
    Code: fe ff ff 48 c7 40 30 c0 86 5d 83 e8 c6 44 1c 00 e9 c8 fc ff ff 49 8b 46 58 48 83 e0 fe 0f 84 4a fb ff ff 48 8b 80 d0 00 00 00 <48> 8b 00 44 8b 88 e0 00 00 00 e9 34 fb ff ff 4d 85 ed 0f 85 69 01
    RSP: 0018:ffffc90000003c70 EFLAGS: 00000286
    RAX: 0000000000000000 RBX: 0000000000000001 RCX: 00000000000000e0
    RDX: 0000000000000021 RSI: 0000000000000000 RDI: ffff888006d72a18
    RBP: ffffc90000003d80 R08: 0000000000000000 R09: 0000000000000001
    R10: ffffc90000003d98 R11: 0000000000000040 R12: ffff888006d72a10
    R13: 0000000000000000 R14: ffff8880057fb800 R15: ffffffff835d86c0
    FS:  00007f9dc72ee740(0000) GS:ffff88807dc00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000000 CR3: 00000000057b2000 CR4: 00000000007506f0
    PKRU: 55555554
    Call Trace:
     <IRQ>
     ip6_pkt_drop (net/ipv6/route.c:4513)
     ipv6_rthdr_rcv (net/ipv6/exthdrs.c:640 net/ipv6/exthdrs.c:686)
     ip6_protocol_deliver_rcu (net/ipv6/ip6_input.c:437 (discriminator 5))
     ip6_input_finish (./include/linux/rcupdate.h:781 net/ipv6/ip6_input.c:483)
     __netif_receive_skb_one_core (net/core/dev.c:5455)
     process_backlog (./include/linux/rcupdate.h:781 net/core/dev.c:5895)
     __napi_poll (net/core/dev.c:6460)
     net_rx_action (net/core/dev.c:6529 net/core/dev.c:6660)
     __do_softirq (./arch/x86/include/asm/jump_label.h:27 ./include/linux/jump_label.h:207 ./include/trace/events/irq.h:142 kernel/softirq.c:554)
     do_softirq (kernel/softirq.c:454 kernel/softirq.c:441)
     </IRQ>
     <TASK>
     __local_bh_enable_ip (kernel/softirq.c:381)
     __dev_queue_xmit (net/core/dev.c:4231)
     ip6_finish_output2 (./include/net/neighbour.h:544 net/ipv6/ip6_output.c:135)
     rawv6_sendmsg (./include/net/dst.h:458 ./include/linux/netfilter.h:303 net/ipv6/raw.c:656 net/ipv6/raw.c:914)
     sock_sendmsg (net/socket.c:725 net/socket.c:748)
     __sys_sendto (net/socket.c:2134)
     __x64_sys_sendto (net/socket.c:2146 net/socket.c:2142 net/socket.c:2142)
     do_syscall_64 (arch/x86/entry/common.c:50 arch/x86/entry/common.c:80)
     entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:120)
    RIP: 0033:0x7f9dc751baea
    Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 7e c3 0f 1f 44 00 00 41 54 48 83 ec 30 44 89
    RSP: 002b:00007ffe98712c38 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
    RAX: ffffffffffffffda RBX: 00007ffe98712cf8 RCX: 00007f9dc751baea
    RDX: 0000000000000060 RSI: 00007f9dc6460b90 RDI: 0000000000000003
    RBP: 00007f9dc56e8be0 R08: 00007ffe98712d70 R09: 000000000000001c
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: ffffffffc4653600 R14: 0000000000000001 R15: 00007f9dc6af5d1b
     </TASK>
    Modules linked in:
    CR2: 0000000000000000
     ---[ end trace 0000000000000000 ]---
    RIP: 0010:icmp6_send (net/ipv6/icmp.c:436 net/ipv6/icmp.c:503)
    Code: fe ff ff 48 c7 40 30 c0 86 5d 83 e8 c6 44 1c 00 e9 c8 fc ff ff 49 8b 46 58 48 83 e0 fe 0f 84 4a fb ff ff 48 8b 80 d0 00 00 00 <48> 8b 00 44 8b 88 e0 00 00 00 e9 34 fb ff ff 4d 85 ed 0f 85 69 01
    RSP: 0018:ffffc90000003c70 EFLAGS: 00000286
    RAX: 0000000000000000 RBX: 0000000000000001 RCX: 00000000000000e0
    RDX: 0000000000000021 RSI: 0000000000000000 RDI: ffff888006d72a18
    RBP: ffffc90000003d80 R08: 0000000000000000 R09: 0000000000000001
    R10: ffffc90000003d98 R11: 0000000000000040 R12: ffff888006d72a10
    R13: 0000000000000000 R14: ffff8880057fb800 R15: ffffffff835d86c0
    FS:  00007f9dc72ee740(0000) GS:ffff88807dc00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000000 CR3: 00000000057b2000 CR4: 00000000007506f0
    PKRU: 55555554
    Kernel panic - not syncing: Fatal exception in interrupt
    Kernel Offset: disabled
    
    Fixes: 4832c30d5458 ("net: ipv6: put host and anycast routes on device with address")
    Reported-by: Wang Yufen <wangyufen@huawei.com>
    Closes: https://lore.kernel.org/netdev/c41403a9-c2f6-3b7e-0c96-e1901e605cd0@huawei.com/
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
igb: Fix igb_down hung on surprise removal [+ + +]
Author: Ying Hsu <yinghsu@chromium.org>
Date:   Tue Jun 20 10:47:32 2023 -0700

    igb: Fix igb_down hung on surprise removal
    
    [ Upstream commit 004d25060c78fc31f66da0fa439c544dda1ac9d5 ]
    
    In a setup where a Thunderbolt hub connects to Ethernet and a display
    through USB Type-C, users may experience a hung task timeout when they
    remove the cable between the PC and the Thunderbolt hub.
    This is because the igb_down function is called multiple times when
    the Thunderbolt hub is unplugged. For example, the igb_io_error_detected
    triggers the first call, and the igb_remove triggers the second call.
    The second call to igb_down will block at napi_synchronize.
    Here's the call trace:
        __schedule+0x3b0/0xddb
        ? __mod_timer+0x164/0x5d3
        schedule+0x44/0xa8
        schedule_timeout+0xb2/0x2a4
        ? run_local_timers+0x4e/0x4e
        msleep+0x31/0x38
        igb_down+0x12c/0x22a [igb 6615058754948bfde0bf01429257eb59f13030d4]
        __igb_close+0x6f/0x9c [igb 6615058754948bfde0bf01429257eb59f13030d4]
        igb_close+0x23/0x2b [igb 6615058754948bfde0bf01429257eb59f13030d4]
        __dev_close_many+0x95/0xec
        dev_close_many+0x6e/0x103
        unregister_netdevice_many+0x105/0x5b1
        unregister_netdevice_queue+0xc2/0x10d
        unregister_netdev+0x1c/0x23
        igb_remove+0xa7/0x11c [igb 6615058754948bfde0bf01429257eb59f13030d4]
        pci_device_remove+0x3f/0x9c
        device_release_driver_internal+0xfe/0x1b4
        pci_stop_bus_device+0x5b/0x7f
        pci_stop_bus_device+0x30/0x7f
        pci_stop_bus_device+0x30/0x7f
        pci_stop_and_remove_bus_device+0x12/0x19
        pciehp_unconfigure_device+0x76/0xe9
        pciehp_disable_slot+0x6e/0x131
        pciehp_handle_presence_or_link_change+0x7a/0x3f7
        pciehp_ist+0xbe/0x194
        irq_thread_fn+0x22/0x4d
        ? irq_thread+0x1fd/0x1fd
        irq_thread+0x17b/0x1fd
        ? irq_forced_thread_fn+0x5f/0x5f
        kthread+0x142/0x153
        ? __irq_get_irqchip_state+0x46/0x46
        ? kthread_associate_blkcg+0x71/0x71
        ret_from_fork+0x1f/0x30
    
    In this case, igb_io_error_detected detaches the network interface
    and requests a PCIE slot reset, however, the PCIE reset callback is
    not being invoked and thus the Ethernet connection breaks down.
    As the PCIE error in this case is a non-fatal one, requesting a
    slot reset can be avoided.
    This patch fixes the task hung issue and preserves Ethernet
    connection by ignoring non-fatal PCIE errors.
    
    Signed-off-by: Ying Hsu <yinghsu@chromium.org>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Link: https://lore.kernel.org/r/20230620174732.4145155-1-anthony.l.nguyen@intel.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Input: adxl34x - do not hardcode interrupt trigger type [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Wed May 10 17:27:55 2023 -0700

    Input: adxl34x - do not hardcode interrupt trigger type
    
    [ Upstream commit e96220bce5176ed2309f77f061dcc0430b82b25e ]
    
    Instead of hardcoding IRQ trigger type to IRQF_TRIGGER_HIGH, let's
    respect the settings specified in the firmware description.
    
    Fixes: e27c729219ad ("Input: add driver for ADXL345/346 Digital Accelerometers")
    Signed-off-by: Marek Vasut <marex@denx.de>
    Acked-by: Michael Hennerich <michael.hennerich@analog.com>
    Link: https://lore.kernel.org/r/20230509203555.549158-1-marex@denx.de
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Input: drv260x - sleep between polling GO bit [+ + +]
Author: Luca Weiss <luca@z3ntu.xyz>
Date:   Mon May 1 17:01:45 2023 -0700

    Input: drv260x - sleep between polling GO bit
    
    [ Upstream commit efef661dfa6bf8cbafe4cd6a97433fcef0118967 ]
    
    When doing the initial startup there's no need to poll without any
    delay and spam the I2C bus.
    
    Let's sleep 15ms between each attempt, which is the same time as used
    in the vendor driver.
    
    Fixes: 7132fe4f5687 ("Input: drv260x - add TI drv260x haptics driver")
    Signed-off-by: Luca Weiss <luca@z3ntu.xyz>
    Link: https://lore.kernel.org/r/20230430-drv260x-improvements-v1-2-1fb28b4cc698@z3ntu.xyz
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
integrity: Fix possible multiple allocation in integrity_inode_get() [+ + +]
Author: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
Date:   Thu Jun 1 14:42:44 2023 +0800

    integrity: Fix possible multiple allocation in integrity_inode_get()
    
    commit 9df6a4870dc371136e90330cfbbc51464ee66993 upstream.
    
    When integrity_inode_get() is querying and inserting the cache, there
    is a conditional race in the concurrent environment.
    
    The race condition is the result of not properly implementing
    "double-checked locking". In this case, it first checks to see if the
    iint cache record exists before taking the lock, but doesn't check
    again after taking the integrity_iint_lock.
    
    Fixes: bf2276d10ce5 ("ima: allocating iint improvements")
    Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
    Cc: Dmitry Kasatkin <dmitry.kasatkin@gmail.com>
    Cc: <stable@vger.kernel.org> # v3.10+
    Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ip6mr: Fix skb_under_panic in ip6mr_cache_report() [+ + +]
Author: Yue Haibing <yuehaibing@huawei.com>
Date:   Tue Aug 1 14:43:18 2023 +0800

    ip6mr: Fix skb_under_panic in ip6mr_cache_report()
    
    [ Upstream commit 30e0191b16e8a58e4620fa3e2839ddc7b9d4281c ]
    
    skbuff: skb_under_panic: text:ffffffff88771f69 len:56 put:-4
     head:ffff88805f86a800 data:ffff887f5f86a850 tail:0x88 end:0x2c0 dev:pim6reg
     ------------[ cut here ]------------
     kernel BUG at net/core/skbuff.c:192!
     invalid opcode: 0000 [#1] PREEMPT SMP KASAN
     CPU: 2 PID: 22968 Comm: kworker/2:11 Not tainted 6.5.0-rc3-00044-g0a8db05b571a #236
     Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
     Workqueue: ipv6_addrconf addrconf_dad_work
     RIP: 0010:skb_panic+0x152/0x1d0
     Call Trace:
      <TASK>
      skb_push+0xc4/0xe0
      ip6mr_cache_report+0xd69/0x19b0
      reg_vif_xmit+0x406/0x690
      dev_hard_start_xmit+0x17e/0x6e0
      __dev_queue_xmit+0x2d6a/0x3d20
      vlan_dev_hard_start_xmit+0x3ab/0x5c0
      dev_hard_start_xmit+0x17e/0x6e0
      __dev_queue_xmit+0x2d6a/0x3d20
      neigh_connected_output+0x3ed/0x570
      ip6_finish_output2+0x5b5/0x1950
      ip6_finish_output+0x693/0x11c0
      ip6_output+0x24b/0x880
      NF_HOOK.constprop.0+0xfd/0x530
      ndisc_send_skb+0x9db/0x1400
      ndisc_send_rs+0x12a/0x6c0
      addrconf_dad_completed+0x3c9/0xea0
      addrconf_dad_work+0x849/0x1420
      process_one_work+0xa22/0x16e0
      worker_thread+0x679/0x10c0
      ret_from_fork+0x28/0x60
      ret_from_fork_asm+0x11/0x20
    
    When setup a vlan device on dev pim6reg, DAD ns packet may sent on reg_vif_xmit().
    reg_vif_xmit()
        ip6mr_cache_report()
            skb_push(skb, -skb_network_offset(pkt));//skb_network_offset(pkt) is 4
    And skb_push declared as:
            void *skb_push(struct sk_buff *skb, unsigned int len);
                    skb->data -= len;
                    //0xffff88805f86a84c - 0xfffffffc = 0xffff887f5f86a850
    skb->data is set to 0xffff887f5f86a850, which is invalid mem addr, lead to skb_push() fails.
    
    Fixes: 14fb64e1f449 ("[IPV6] MROUTE: Support PIM-SM (SSM).")
    Signed-off-by: Yue Haibing <yuehaibing@huawei.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv6 addrconf: fix bug where deleting a mngtmpaddr can create a new temporary address [+ + +]
Author: Maciej Żenczykowski <maze@google.com>
Date:   Thu Jul 20 09:00:22 2023 -0700

    ipv6 addrconf: fix bug where deleting a mngtmpaddr can create a new temporary address
    
    [ Upstream commit 69172f0bcb6a09110c5d2a6d792627f5095a9018 ]
    
    currently on 6.4 net/main:
    
      # ip link add dummy1 type dummy
      # echo 1 > /proc/sys/net/ipv6/conf/dummy1/use_tempaddr
      # ip link set dummy1 up
      # ip -6 addr add 2000::1/64 mngtmpaddr dev dummy1
      # ip -6 addr show dev dummy1
    
      11: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
          inet6 2000::44f3:581c:8ca:3983/64 scope global temporary dynamic
             valid_lft 604800sec preferred_lft 86172sec
          inet6 2000::1/64 scope global mngtmpaddr
             valid_lft forever preferred_lft forever
          inet6 fe80::e8a8:a6ff:fed5:56d4/64 scope link
             valid_lft forever preferred_lft forever
    
      # ip -6 addr del 2000::44f3:581c:8ca:3983/64 dev dummy1
    
      (can wait a few seconds if you want to, the above delete isn't [directly] the problem)
    
      # ip -6 addr show dev dummy1
    
      11: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
          inet6 2000::1/64 scope global mngtmpaddr
             valid_lft forever preferred_lft forever
          inet6 fe80::e8a8:a6ff:fed5:56d4/64 scope link
             valid_lft forever preferred_lft forever
    
      # ip -6 addr del 2000::1/64 mngtmpaddr dev dummy1
      # ip -6 addr show dev dummy1
    
      11: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
          inet6 2000::81c9:56b7:f51a:b98f/64 scope global temporary dynamic
             valid_lft 604797sec preferred_lft 86169sec
          inet6 fe80::e8a8:a6ff:fed5:56d4/64 scope link
             valid_lft forever preferred_lft forever
    
    This patch prevents this new 'global temporary dynamic' address from being
    created by the deletion of the related (same subnet prefix) 'mngtmpaddr'
    (which is triggered by there already being no temporary addresses).
    
    Cc: Jiri Pirko <jiri@resnulli.us>
    Fixes: 53bd67491537 ("ipv6 addrconf: introduce IFA_F_MANAGETEMPADDR to tell kernel to manage temporary addresses")
    Reported-by: Xiao Ma <xiaom@google.com>
    Signed-off-by: Maciej Żenczykowski <maze@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20230720160022.1887942-1-maze@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv6/addrconf: fix a potential refcount underflow for idev [+ + +]
Author: Ziyang Xuan <william.xuanziyang@huawei.com>
Date:   Sat Jul 8 14:59:10 2023 +0800

    ipv6/addrconf: fix a potential refcount underflow for idev
    
    [ Upstream commit 06a0716949c22e2aefb648526580671197151acc ]
    
    Now in addrconf_mod_rs_timer(), reference idev depends on whether
    rs_timer is not pending. Then modify rs_timer timeout.
    
    There is a time gap in [1], during which if the pending rs_timer
    becomes not pending. It will miss to hold idev, but the rs_timer
    is activated. Thus rs_timer callback function addrconf_rs_timer()
    will be executed and put idev later without holding idev. A refcount
    underflow issue for idev can be caused by this.
    
            if (!timer_pending(&idev->rs_timer))
                    in6_dev_hold(idev);
                      <--------------[1]
            mod_timer(&idev->rs_timer, jiffies + when);
    
    To fix the issue, hold idev if mod_timer() return 0.
    
    Fixes: b7b1bfce0bb6 ("ipv6: split duplicate address detection and router solicitation timer")
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Ziyang Xuan <william.xuanziyang@huawei.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipvlan: Fix return value of ipvlan_queue_xmit() [+ + +]
Author: Cambda Zhu <cambda@linux.alibaba.com>
Date:   Mon Jun 26 17:33:47 2023 +0800

    ipvlan: Fix return value of ipvlan_queue_xmit()
    
    [ Upstream commit 8a9922e7be6d042fa00f894c376473b17a162b66 ]
    
    ipvlan_queue_xmit() should return NET_XMIT_XXX, but
    ipvlan_xmit_mode_l2/l3() returns rx_handler_result_t or NET_RX_XXX
    in some cases. ipvlan_rcv_frame() will only return RX_HANDLER_CONSUMED
    in ipvlan_xmit_mode_l2/l3() because 'local' is true. It's equal to
    NET_XMIT_SUCCESS. But dev_forward_skb() can return NET_RX_SUCCESS or
    NET_RX_DROP, and returning NET_RX_DROP(NET_XMIT_DROP) will increase
    both ipvlan and ipvlan->phy_dev drops counter.
    
    The skb to forward can be treated as xmitted successfully. This patch
    makes ipvlan_queue_xmit() return NET_XMIT_SUCCESS for forward skb.
    
    Fixes: 2ad7bf363841 ("ipvlan: Initial check-in of the IPVLAN driver.")
    Signed-off-by: Cambda Zhu <cambda@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20230626093347.7492-1-cambda@linux.alibaba.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irq-bcm6345-l1: Do not assume a fixed block to cpu mapping [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Thu Jun 29 09:26:20 2023 +0200

    irq-bcm6345-l1: Do not assume a fixed block to cpu mapping
    
    [ Upstream commit 55ad24857341c36616ecc1d9580af5626c226cf1 ]
    
    The irq to block mapping is fixed, and interrupts from the first block
    will always be routed to the first parent IRQ. But the parent interrupts
    themselves can be routed to any available CPU.
    
    This is used by the bootloader to map the first parent interrupt to the
    boot CPU, regardless wether the boot CPU is the first one or the second
    one.
    
    When booting from the second CPU, the assumption that the first block's
    IRQ is mapped to the first CPU breaks, and the system hangs because
    interrupts do not get routed correctly.
    
    Fix this by passing the appropriate bcm6434_l1_cpu to the interrupt
    handler instead of the chip itself, so the handler always has the right
    block.
    
    Fixes: c7c42ec2baa1 ("irqchips/bmips: Add bcm6345-l1 interrupt controller")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20230629072620.62527-1-jonas.gorski@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irqchip/jcore-aic: Fix missing allocation of IRQ descriptors [+ + +]
Author: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Date:   Wed May 10 18:33:42 2023 +0200

    irqchip/jcore-aic: Fix missing allocation of IRQ descriptors
    
    [ Upstream commit 4848229494a323eeaab62eee5574ef9f7de80374 ]
    
    The initialization function for the J-Core AIC aic_irq_of_init() is
    currently missing the call to irq_alloc_descs() which allocates and
    initializes all the IRQ descriptors. Add missing function call and
    return the error code from irq_alloc_descs() in case the allocation
    fails.
    
    Fixes: 981b58f66cfc ("irqchip/jcore-aic: Add J-Core AIC driver")
    Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Tested-by: Rob Landley <rob@landley.net>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20230510163343.43090-1-glaubitz@physik.fu-berlin.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

irqchip/jcore-aic: Kill use of irq_create_strict_mappings() [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Tue Apr 6 10:35:51 2021 +0100

    irqchip/jcore-aic: Kill use of irq_create_strict_mappings()
    
    [ Upstream commit 5f8b938bd790cff6542c7fe3c1495c71f89fef1b ]
    
    irq_create_strict_mappings() is a poor way to allow the use of
    a linear IRQ domain as a legacy one. Let's be upfront about it.
    
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20210406093557.1073423-4-maz@kernel.org
    Stable-dep-of: 4848229494a3 ("irqchip/jcore-aic: Fix missing allocation of IRQ descriptors")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
jffs2: reduce stack usage in jffs2_build_xattr_subsystem() [+ + +]
Author: Fabian Frederick <fabf@skynet.be>
Date:   Sat May 6 06:56:12 2023 +0200

    jffs2: reduce stack usage in jffs2_build_xattr_subsystem()
    
    commit 1168f095417643f663caa341211e117db552989f upstream.
    
    Use kcalloc() for allocation/flush of 128 pointers table to
    reduce stack usage.
    
    Function now returns -ENOMEM or 0 on success.
    
    stackusage
    Before:
    ./fs/jffs2/xattr.c:775  jffs2_build_xattr_subsystem     1208
    dynamic,bounded
    
    After:
    ./fs/jffs2/xattr.c:775  jffs2_build_xattr_subsystem     192
    dynamic,bounded
    
    Also update definition when CONFIG_JFFS2_FS_XATTR is not enabled
    
    Tested with an MTD mount point and some user set/getfattr.
    
    Many current target on OpenWRT also suffer from a compilation warning
    (that become an error with CONFIG_WERROR) with the following output:
    
    fs/jffs2/xattr.c: In function 'jffs2_build_xattr_subsystem':
    fs/jffs2/xattr.c:887:1: error: the frame size of 1088 bytes is larger than 1024 bytes [-Werror=frame-larger-than=]
      887 | }
          | ^
    
    Using dynamic allocation fix this compilation warning.
    
    Fixes: c9f700f840bd ("[JFFS2][XATTR] using 'delete marker' for xdatum/xref deletion")
    Reported-by: Tim Gardner <tim.gardner@canonical.com>
    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Ron Economos <re@w6rz.net>
    Reported-by: Nathan Chancellor <nathan@kernel.org>
    Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: Fabian Frederick <fabf@skynet.be>
    Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
    Cc: stable@vger.kernel.org
    Message-Id: <20230506045612.16616-1-ansuelsmth@gmail.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
jfs: jfs_dmap: Validate db_l2nbperpage while mounting [+ + +]
Author: Siddh Raman Pant <code@siddh.me>
Date:   Tue Jun 20 22:17:00 2023 +0530

    jfs: jfs_dmap: Validate db_l2nbperpage while mounting
    
    commit 11509910c599cbd04585ec35a6d5e1a0053d84c1 upstream.
    
    In jfs_dmap.c at line 381, BLKTODMAP is used to get a logical block
    number inside dbFree(). db_l2nbperpage, which is the log2 number of
    blocks per page, is passed as an argument to BLKTODMAP which uses it
    for shifting.
    
    Syzbot reported a shift out-of-bounds crash because db_l2nbperpage is
    too big. This happens because the large value is set without any
    validation in dbMount() at line 181.
    
    Thus, make sure that db_l2nbperpage is correct while mounting.
    
    Max number of blocks per page = Page size / Min block size
    => log2(Max num_block per page) = log2(Page size / Min block size)
                                    = log2(Page size) - log2(Min block size)
    
    => Max db_l2nbperpage = L2PSIZE - L2MINBLOCKSIZE
    
    Reported-and-tested-by: syzbot+d2cd27dcf8e04b232eb2@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?id=2a70a453331db32ed491f5cbb07e81bf2d225715
    Cc: stable@vger.kernel.org
    Suggested-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Siddh Raman Pant <code@siddh.me>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kexec: fix a memory leak in crash_shrink_memory() [+ + +]
Author: Zhen Lei <thunder.leizhen@huawei.com>
Date:   Sat May 27 20:34:34 2023 +0800

    kexec: fix a memory leak in crash_shrink_memory()
    
    [ Upstream commit 1cba6c4309f03de570202c46f03df3f73a0d4c82 ]
    
    Patch series "kexec: enable kexec_crash_size to support two crash kernel
    regions".
    
    When crashkernel=X fails to reserve region under 4G, it will fall back to
    reserve region above 4G and a region of the default size will also be
    reserved under 4G.  Unfortunately, /sys/kernel/kexec_crash_size only
    supports one crash kernel region now, the user cannot sense the low memory
    reserved by reading /sys/kernel/kexec_crash_size.  Also, low memory cannot
    be freed by writing this file.
    
    For example:
    resource_size(crashk_res) = 512M
    resource_size(crashk_low_res) = 256M
    
    The result of 'cat /sys/kernel/kexec_crash_size' is 512M, but it should be
    768M.  When we execute 'echo 0 > /sys/kernel/kexec_crash_size', the size
    of crashk_res becomes 0 and resource_size(crashk_low_res) is still 256 MB,
    which is incorrect.
    
    Since crashk_res manages the memory with high address and crashk_low_res
    manages the memory with low address, crashk_low_res is shrunken only when
    all crashk_res is shrunken.  And because when there is only one crash
    kernel region, crashk_res is always used.  Therefore, if all crashk_res is
    shrunken and crashk_low_res still exists, swap them.
    
    This patch (of 6):
    
    If the value of parameter 'new_size' is in the semi-open and semi-closed
    interval (crashk_res.end - KEXEC_CRASH_MEM_ALIGN + 1, crashk_res.end], the
    calculation result of ram_res is:
    
            ram_res->start = crashk_res.end + 1
            ram_res->end   = crashk_res.end
    
    The operation of insert_resource() fails, and ram_res is not added to
    iomem_resource.  As a result, the memory of the control block ram_res is
    leaked.
    
    In fact, on all architectures, the start address and size of crashk_res
    are already aligned by KEXEC_CRASH_MEM_ALIGN.  Therefore, we do not need
    to round up crashk_res.start again.  Instead, we should round up
    'new_size' in advance.
    
    Link: https://lkml.kernel.org/r/20230527123439.772-1-thunder.leizhen@huawei.com
    Link: https://lkml.kernel.org/r/20230527123439.772-2-thunder.leizhen@huawei.com
    Fixes: 6480e5a09237 ("kdump: add missing RAM resource in crash_shrink_memory()")
    Fixes: 06a7f711246b ("kexec: premit reduction of the reserved memory size")
    Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
    Acked-by: Baoquan He <bhe@redhat.com>
    Cc: Cong Wang <amwang@redhat.com>
    Cc: Eric W. Biederman <ebiederm@xmission.com>
    Cc: Michael Holzheu <holzheu@linux.vnet.ibm.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
KVM: s390: fix KVM_S390_GET_CMMA_BITS for GFNs in memslot holes [+ + +]
Author: Nico Boehr <nrb@linux.ibm.com>
Date:   Fri Mar 24 15:54:23 2023 +0100

    KVM: s390: fix KVM_S390_GET_CMMA_BITS for GFNs in memslot holes
    
    [ Upstream commit 285cff4c0454340a4dc53f46e67f2cb1c293bd74 ]
    
    The KVM_S390_GET_CMMA_BITS ioctl may return incorrect values when userspace
    specifies a start_gfn outside of memslots.
    
    This can occur when a VM has multiple memslots with a hole in between:
    
    +-----+----------+--------+--------+
    | ... | Slot N-1 | <hole> | Slot N |
    +-----+----------+--------+--------+
          ^          ^        ^        ^
          |          |        |        |
    GFN   A          A+B      |        |
                              A+B+C    |
                                       A+B+C+D
    
    When userspace specifies a GFN in [A+B, A+B+C), it would expect to get the
    CMMA values of the first dirty page in Slot N. However, userspace may get a
    start_gfn of A+B+C+D with a count of 0, hence completely skipping over any
    dirty pages in slot N.
    
    The error is in kvm_s390_next_dirty_cmma(), which assumes
    gfn_to_memslot_approx() will return the memslot _below_ the specified GFN
    when the specified GFN lies outside a memslot. In reality it may return
    either the memslot below or above the specified GFN.
    
    When a memslot above the specified GFN is returned this happens:
    
    - ofs is calculated, but since the memslot's base_gfn is larger than the
      specified cur_gfn, ofs will underflow to a huge number.
    - ofs is passed to find_next_bit(). Since ofs will exceed the memslot's
      number of pages, the number of pages in the memslot is returned,
      completely skipping over all bits in the memslot userspace would be
      interested in.
    
    Fix this by resetting ofs to zero when a memslot _above_ cur_gfn is
    returned (cur_gfn < ms->base_gfn).
    
    Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
    Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
    Fixes: afdad61615cc ("KVM: s390: Fix storage attributes migration with memory slots")
    Message-Id: <20230324145424.293889-2-nrb@linux.ibm.com>
    Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
    Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: s390: fix sthyi error handling [+ + +]
Author: Heiko Carstens <hca@linux.ibm.com>
Date:   Thu Jul 27 20:29:39 2023 +0200

    KVM: s390: fix sthyi error handling
    
    [ Upstream commit 0c02cc576eac161601927b41634f80bfd55bfa9e ]
    
    Commit 9fb6c9b3fea1 ("s390/sthyi: add cache to store hypervisor info")
    added cache handling for store hypervisor info. This also changed the
    possible return code for sthyi_fill().
    
    Instead of only returning a condition code like the sthyi instruction would
    do, it can now also return a negative error value (-ENOMEM). handle_styhi()
    was not changed accordingly. In case of an error, the negative error value
    would incorrectly injected into the guest PSW.
    
    Add proper error handling to prevent this, and update the comment which
    describes the possible return values of sthyi_fill().
    
    Fixes: 9fb6c9b3fea1 ("s390/sthyi: add cache to store hypervisor info")
    Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com>
    Link: https://lore.kernel.org/r/20230727182939.2050744-1-hca@linux.ibm.com
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
lib/ts_bm: reset initial match offset for every block of text [+ + +]
Author: Jeremy Sowden <jeremy@azazel.net>
Date:   Mon Jun 19 20:06:57 2023 +0100

    lib/ts_bm: reset initial match offset for every block of text
    
    [ Upstream commit 6f67fbf8192da80c4db01a1800c7fceaca9cf1f9 ]
    
    The `shift` variable which indicates the offset in the string at which
    to start matching the pattern is initialized to `bm->patlen - 1`, but it
    is not reset when a new block is retrieved.  This means the implemen-
    tation may start looking at later and later positions in each successive
    block and miss occurrences of the pattern at the beginning.  E.g.,
    consider a HTTP packet held in a non-linear skb, where the HTTP request
    line occurs in the second block:
    
      [... 52 bytes of packet headers ...]
      GET /bmtest HTTP/1.1\r\nHost: www.example.com\r\n\r\n
    
    and the pattern is "GET /bmtest".
    
    Once the first block comprising the packet headers has been examined,
    `shift` will be pointing to somewhere near the end of the block, and so
    when the second block is examined the request line at the beginning will
    be missed.
    
    Reinitialize the variable for each new block.
    
    Fixes: 8082e4ed0a61 ("[LIB]: Boyer-Moore extension for textsearch infrastructure strike #2")
    Link: https://bugzilla.netfilter.org/show_bug.cgi?id=1390
    Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
libceph: fix potential hang in ceph_osdc_notify() [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
Date:   Tue Aug 1 19:14:24 2023 +0200

    libceph: fix potential hang in ceph_osdc_notify()
    
    commit e6e2843230799230fc5deb8279728a7218b0d63c upstream.
    
    If the cluster becomes unavailable, ceph_osdc_notify() may hang even
    with osd_request_timeout option set because linger_notify_finish_wait()
    waits for MWatchNotify NOTIFY_COMPLETE message with no associated OSD
    request in flight -- it's completely asynchronous.
    
    Introduce an additional timeout, derived from the specified notify
    timeout.  While at it, switch both waits to killable which is more
    correct.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: Dongsheng Yang <dongsheng.yang@easystack.cn>
    Reviewed-by: Xiubo Li <xiubli@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 4.19.291 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Aug 11 11:45:41 2023 +0200

    Linux 4.19.291
    
    Link: https://lore.kernel.org/r/20230809103658.104386911@linuxfoundation.org
    Tested-by: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
llc: Don't drop packet from non-root netns. [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Tue Jul 18 10:41:51 2023 -0700

    llc: Don't drop packet from non-root netns.
    
    [ Upstream commit 6631463b6e6673916d2481f692938f393148aa82 ]
    
    Now these upper layer protocol handlers can be called from llc_rcv()
    as sap->rcv_func(), which is registered by llc_sap_open().
    
      * function which is passed to register_8022_client()
        -> no in-kernel user calls register_8022_client().
    
      * snap_rcv()
        `- proto->rcvfunc() : registered by register_snap_client()
           -> aarp_rcv() and atalk_rcv() drop packets from non-root netns
    
      * stp_pdu_rcv()
        `- garp_protos[]->rcv() : registered by stp_proto_register()
           -> garp_pdu_rcv() and br_stp_rcv() are netns-aware
    
    So, we can safely remove the netns restriction in llc_rcv().
    
    Fixes: e730c15519d0 ("[NET]: Make packet reception network namespace safe")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
loop: Select I/O scheduler 'none' from inside add_disk() [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Thu Aug 5 10:42:00 2021 -0700

    loop: Select I/O scheduler 'none' from inside add_disk()
    
    commit 2112f5c1330a671fa852051d85cb9eadc05d7eb7 upstream.
    
    We noticed that the user interface of Android devices becomes very slow
    under memory pressure. This is because Android uses the zram driver on top
    of the loop driver for swapping, because under memory pressure the swap
    code alternates reads and writes quickly, because mq-deadline is the
    default scheduler for loop devices and because mq-deadline delays writes by
    five seconds for such a workload with default settings. Fix this by making
    the kernel select I/O scheduler 'none' from inside add_disk() for loop
    devices. This default can be overridden at any time from user space,
    e.g. via a udev rule. This approach has an advantage compared to changing
    the I/O scheduler from userspace from 'mq-deadline' into 'none', namely
    that synchronize_rcu() does not get called.
    
    This patch changes the default I/O scheduler for loop devices from
    'mq-deadline' into 'none'.
    
    Additionally, this patch reduces the Android boot time on my test setup
    with 0.5 seconds compared to configuring the loop I/O scheduler from user
    space.
    
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Ming Lei <ming.lei@redhat.com>
    Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Cc: Martijn Coenen <maco@android.com>
    Cc: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://lore.kernel.org/r/20210805174200.3250718-3-bvanassche@acm.org
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mailbox: ti-msgmgr: Fill non-message tx data fields with 0x0 [+ + +]
Author: Nishanth Menon <nm@ti.com>
Date:   Tue Jun 20 20:00:22 2023 -0500

    mailbox: ti-msgmgr: Fill non-message tx data fields with 0x0
    
    [ Upstream commit 1b712f18c461bd75f018033a15cf381e712806b5 ]
    
    Sec proxy/message manager data buffer is 60 bytes with the last of the
    registers indicating transmission completion. This however poses a bit
    of a challenge.
    
    The backing memory for sec_proxy / message manager is regular memory,
    and all sec proxy does is to trigger a burst of all 60 bytes of data
    over to the target thread backing ring accelerator. It doesn't do a
    memory scrub when it moves data out in the burst. When we transmit
    multiple messages, remnants of previous message is also transmitted
    which results in some random data being set in TISCI fields of
    messages that have been expanded forward.
    
    The entire concept of backward compatibility hinges on the fact that
    the unused message fields remain 0x0 allowing for 0x0 value to be
    specially considered when backward compatibility of message extension
    is done.
    
    So, instead of just writing the completion register, we continue
    to fill the message buffer up with 0x0 (note: for partial message
    involving completion, we already do this).
    
    This allows us to scale and introduce ABI changes back also work with
    other boot stages that may have left data in the internal memory.
    
    While at this, be consistent and explicit with the data_reg pointer
    increment.
    
    Fixes: aace66b170ce ("mailbox: Introduce TI message manager driver")
    Signed-off-by: Nishanth Menon <nm@ti.com>
    Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
md/raid0: add discard support for the 'original' layout [+ + +]
Author: Jason Baron <jbaron@akamai.com>
Date:   Fri Jun 23 14:05:23 2023 -0400

    md/raid0: add discard support for the 'original' layout
    
    commit e836007089ba8fdf24e636ef2b007651fb4582e6 upstream.
    
    We've found that using raid0 with the 'original' layout and discard
    enabled with different disk sizes (such that at least two zones are
    created) can result in data corruption. This is due to the fact that
    the discard handling in 'raid0_handle_discard()' assumes the 'alternate'
    layout. We've seen this corruption using ext4 but other filesystems are
    likely susceptible as well.
    
    More specifically, while multiple zones are necessary to create the
    corruption, the corruption may not occur with multiple zones if they
    layout in such a way the layout matches what the 'alternate' layout
    would have produced. Thus, not all raid0 devices with the 'original'
    layout, different size disks and discard enabled will encounter this
    corruption.
    
    The 3.14 kernel inadvertently changed the raid0 disk layout for different
    size disks. Thus, running a pre-3.14 kernel and post-3.14 kernel on the
    same raid0 array could corrupt data. This lead to the creation of the
    'original' layout (to match the pre-3.14 layout) and the 'alternate' layout
    (to match the post 3.14 layout) in the 5.4 kernel time frame and an option
    to tell the kernel which layout to use (since it couldn't be autodetected).
    However, when the 'original' layout was added back to 5.4 discard support
    for the 'original' layout was not added leading this issue.
    
    I've been able to reliably reproduce the corruption with the following
    test case:
    
    1. create raid0 array with different size disks using original layout
    2. mkfs
    3. mount -o discard
    4. create lots of files
    5. remove 1/2 the files
    6. fstrim -a (or just the mount point for the raid0 array)
    7. umount
    8. fsck -fn /dev/md0 (spews all sorts of corruptions)
    
    Let's fix this by adding proper discard support to the 'original' layout.
    The fix 'maps' the 'original' layout disks to the order in which they are
    read/written such that we can compare the disks in the same way that the
    current 'alternate' layout does. A 'disk_shift' field is added to
    'struct strip_zone'. This could be computed on the fly in
    raid0_handle_discard() but by adding this field, we save some computation
    in the discard path.
    
    Note we could also potentially fix this by re-ordering the disks in the
    zones that follow the first one, and then always read/writing them using
    the 'alternate' layout. However, that is seen as a more substantial change,
    and we are attempting the least invasive fix at this time to remedy the
    corruption.
    
    I've verified the change using the reproducer mentioned above. Typically,
    the corruption is seen after less than 3 iterations, while the patch has
    run 500+ iterations.
    
    Cc: NeilBrown <neilb@suse.de>
    Cc: Song Liu <song@kernel.org>
    Fixes: c84a1372df92 ("md/raid0: avoid RAID0 data corruption due to layout confusion.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jason Baron <jbaron@akamai.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230623180523.1901230-1-jbaron@akamai.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
md/raid10: check slab-out-of-bounds in md_bitmap_get_counter [+ + +]
Author: Li Nan <linan122@huawei.com>
Date:   Mon May 15 21:48:05 2023 +0800

    md/raid10: check slab-out-of-bounds in md_bitmap_get_counter
    
    [ Upstream commit 301867b1c16805aebbc306aafa6ecdc68b73c7e5 ]
    
    If we write a large number to md/bitmap_set_bits, md_bitmap_checkpage()
    will return -EINVAL because 'page >= bitmap->pages', but the return value
    was not checked immediately in md_bitmap_get_counter() in order to set
    *blocks value and slab-out-of-bounds occurs.
    
    Move check of 'page >= bitmap->pages' to md_bitmap_get_counter() and
    return directly if true.
    
    Fixes: ef4256733506 ("md/bitmap: optimise scanning of empty bitmaps.")
    Signed-off-by: Li Nan <linan122@huawei.com>
    Reviewed-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230515134808.3936750-2-linan666@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

md/raid10: fix io loss while replacement replace rdev [+ + +]
Author: Li Nan <linan122@huawei.com>
Date:   Fri Jun 2 17:18:39 2023 +0800

    md/raid10: fix io loss while replacement replace rdev
    
    [ Upstream commit 2ae6aaf76912bae53c74b191569d2ab484f24bf3 ]
    
    When removing a disk with replacement, the replacement will be used to
    replace rdev. During this process, there is a brief window in which both
    rdev and replacement are read as NULL in raid10_write_request(). This
    will result in io not being submitted but it should be.
    
      //remove                              //write
      raid10_remove_disk                    raid10_write_request
       mirror->rdev = NULL
                                             read rdev -> NULL
       mirror->rdev = mirror->replacement
       mirror->replacement = NULL
                                             read replacement -> NULL
    
    Fix it by reading replacement first and rdev later, meanwhile, use smp_mb()
    to prevent memory reordering.
    
    Fixes: 475b0321a4df ("md/raid10: writes should get directed to replacement as well as original.")
    Signed-off-by: Li Nan <linan122@huawei.com>
    Reviewed-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230602091839.743798-3-linan666@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

md/raid10: fix overflow of md/safe_mode_delay [+ + +]
Author: Li Nan <linan122@huawei.com>
Date:   Mon May 22 15:25:33 2023 +0800

    md/raid10: fix overflow of md/safe_mode_delay
    
    [ Upstream commit 6beb489b2eed25978523f379a605073f99240c50 ]
    
    There is no input check when echo md/safe_mode_delay in safe_delay_store().
    And msec might also overflow when HZ < 1000 in safe_delay_show(), Fix it by
    checking overflow in safe_delay_store() and use unsigned long conversion in
    safe_delay_show().
    
    Fixes: 72e02075a33f ("md: factor out parsing of fixed-point numbers")
    Signed-off-by: Li Nan <linan122@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230522072535.1523740-2-linan666@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

md/raid10: fix wrong setting of max_corr_read_errors [+ + +]
Author: Li Nan <linan122@huawei.com>
Date:   Mon May 22 15:25:34 2023 +0800

    md/raid10: fix wrong setting of max_corr_read_errors
    
    [ Upstream commit f8b20a405428803bd9881881d8242c9d72c6b2b2 ]
    
    There is no input check when echo md/max_read_errors and overflow might
    occur. Add check of input number.
    
    Fixes: 1e50915fe0bb ("raid: improve MD/raid10 handling of correctable read errors.")
    Signed-off-by: Li Nan <linan122@huawei.com>
    Reviewed-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230522072535.1523740-3-linan666@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

md/raid10: prevent soft lockup while flush writes [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Mon May 29 21:11:00 2023 +0800

    md/raid10: prevent soft lockup while flush writes
    
    [ Upstream commit 010444623e7f4da6b4a4dd603a7da7469981e293 ]
    
    Currently, there is no limit for raid1/raid10 plugged bio. While flushing
    writes, raid1 has cond_resched() while raid10 doesn't, and too many
    writes can cause soft lockup.
    
    Follow up soft lockup can be triggered easily with writeback test for
    raid10 with ramdisks:
    
    watchdog: BUG: soft lockup - CPU#10 stuck for 27s! [md0_raid10:1293]
    Call Trace:
     <TASK>
     call_rcu+0x16/0x20
     put_object+0x41/0x80
     __delete_object+0x50/0x90
     delete_object_full+0x2b/0x40
     kmemleak_free+0x46/0xa0
     slab_free_freelist_hook.constprop.0+0xed/0x1a0
     kmem_cache_free+0xfd/0x300
     mempool_free_slab+0x1f/0x30
     mempool_free+0x3a/0x100
     bio_free+0x59/0x80
     bio_put+0xcf/0x2c0
     free_r10bio+0xbf/0xf0
     raid_end_bio_io+0x78/0xb0
     one_write_done+0x8a/0xa0
     raid10_end_write_request+0x1b4/0x430
     bio_endio+0x175/0x320
     brd_submit_bio+0x3b9/0x9b7 [brd]
     __submit_bio+0x69/0xe0
     submit_bio_noacct_nocheck+0x1e6/0x5a0
     submit_bio_noacct+0x38c/0x7e0
     flush_pending_writes+0xf0/0x240
     raid10d+0xac/0x1ed0
    
    Fix the problem by adding cond_resched() to raid10 like what raid1 did.
    
    Note that unlimited plugged bio still need to be optimized, for example,
    in the case of lots of dirty pages writeback, this will take lots of
    memory and io will spend a long time in plug, hence io latency is bad.
    
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230529131106.2123367-2-yukuai1@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
md: fix data corruption for raid456 when reshape restart while grow up [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Fri May 12 09:56:07 2023 +0800

    md: fix data corruption for raid456 when reshape restart while grow up
    
    [ Upstream commit 873f50ece41aad5c4f788a340960c53774b5526e ]
    
    Currently, if reshape is interrupted, echo "reshape" to sync_action will
    restart reshape from scratch, for example:
    
    echo frozen > sync_action
    echo reshape > sync_action
    
    This will corrupt data before reshape_position if the array is growing,
    fix the problem by continue reshape from reshape_position.
    
    Reported-by: Peter Neuwirth <reddunur@online.de>
    Link: https://lore.kernel.org/linux-raid/e2f96772-bfbc-f43b-6da1-f520e5164536@online.de/
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230512015610.821290-3-yukuai1@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
media: usb: Check az6007_read() return value [+ + +]
Author: Daniil Dulov <d.dulov@aladdin.ru>
Date:   Tue Mar 14 10:04:49 2023 -0700

    media: usb: Check az6007_read() return value
    
    [ Upstream commit fdaca63186f59fc664b346c45b76576624b48e57 ]
    
    If az6007_read() returns error, there is no sence to continue.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 3af2f4f15a61 ("[media] az6007: Change the az6007 read/write routine parameter")
    Signed-off-by: Daniil Dulov <d.dulov@aladdin.ru>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: usb: siano: Fix warning due to null work_func_t function pointer [+ + +]
Author: Duoming Zhou <duoming@zju.edu.cn>
Date:   Tue May 23 07:59:32 2023 +0800

    media: usb: siano: Fix warning due to null work_func_t function pointer
    
    [ Upstream commit 6f489a966fbeb0da63d45c2c66a8957eab604bf6 ]
    
    The previous commit ebad8e731c1c ("media: usb: siano: Fix use after
    free bugs caused by do_submit_urb") adds cancel_work_sync() in
    smsusb_stop_streaming(). But smsusb_stop_streaming() may be called,
    even if the work_struct surb->wq has not been initialized. As a result,
    the warning will occur. One of the processes that could lead to warning
    is shown below:
    
    smsusb_probe()
      smsusb_init_device()
        if (!dev->in_ep || !dev->out_ep || align < 0) {
             smsusb_term_device(intf);
               smsusb_stop_streaming()
                 cancel_work_sync(&dev->surbs[i].wq);
                   __cancel_work_timer()
                     __flush_work()
                       if (WARN_ON(!work->func)) // work->func is null
    
    The log reported by syzbot is shown below:
    
    WARNING: CPU: 0 PID: 897 at kernel/workqueue.c:3066 __flush_work+0x798/0xa80 kernel/workqueue.c:3063
    Modules linked in:
    CPU: 0 PID: 897 Comm: kworker/0:2 Not tainted 6.2.0-rc1-syzkaller #0
    RIP: 0010:__flush_work+0x798/0xa80 kernel/workqueue.c:3066
    ...
    RSP: 0018:ffffc9000464ebf8 EFLAGS: 00010246
    RAX: 1ffff11002dbb420 RBX: 0000000000000021 RCX: 1ffffffff204fa4e
    RDX: dffffc0000000000 RSI: 0000000000000001 RDI: ffff888016dda0e8
    RBP: ffffc9000464ed98 R08: 0000000000000001 R09: ffffffff90253b2f
    R10: 0000000000000001 R11: 0000000000000000 R12: ffff888016dda0e8
    R13: ffff888016dda0e8 R14: ffff888016dda100 R15: 0000000000000001
    FS:  0000000000000000(0000) GS:ffff8880b9a00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007ffd4331efe8 CR3: 000000000b48e000 CR4: 00000000003506f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     __cancel_work_timer+0x315/0x460 kernel/workqueue.c:3160
     smsusb_stop_streaming drivers/media/usb/siano/smsusb.c:182 [inline]
     smsusb_term_device+0xda/0x2d0 drivers/media/usb/siano/smsusb.c:344
     smsusb_init_device+0x400/0x9ce drivers/media/usb/siano/smsusb.c:419
     smsusb_probe+0xbbd/0xc55 drivers/media/usb/siano/smsusb.c:567
    ...
    
    This patch adds check before cancel_work_sync(). If surb->wq has not
    been initialized, the cancel_work_sync() will not be executed.
    
    Reported-by: syzbot+27b0b464864741b18b99@syzkaller.appspotmail.com
    Fixes: ebad8e731c1c ("media: usb: siano: Fix use after free bugs caused by do_submit_urb")
    Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: videodev2.h: Fix struct v4l2_input tuner index comment [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Thu May 18 15:36:49 2023 +0200

    media: videodev2.h: Fix struct v4l2_input tuner index comment
    
    [ Upstream commit 26ae58f65e64fa7ba61d64bae752e59e08380c6a ]
    
    VIDIOC_ENUMINPUT documentation describes the tuner field of
    struct v4l2_input as index:
    
    Documentation/userspace-api/media/v4l/vidioc-enuminput.rst
    "
    * - __u32
      - ``tuner``
      - Capture devices can have zero or more tuners (RF demodulators).
        When the ``type`` is set to ``V4L2_INPUT_TYPE_TUNER`` this is an
        RF connector and this field identifies the tuner. It corresponds
        to struct :c:type:`v4l2_tuner` field ``index``. For
        details on tuners see :ref:`tuner`.
    "
    
    Drivers I could find also use the 'tuner' field as an index, e.g.:
    drivers/media/pci/bt8xx/bttv-driver.c bttv_enum_input()
    drivers/media/usb/go7007/go7007-v4l2.c vidioc_enum_input()
    
    However, the UAPI comment claims this field is 'enum v4l2_tuner_type':
    include/uapi/linux/videodev2.h
    
    This field being 'enum v4l2_tuner_type' is unlikely as it seems to be
    never used that way in drivers, and documentation confirms it. It seem
    this comment got in accidentally in the commit which this patch fixes.
    Fix the UAPI comment to stop confusion.
    
    This was pointed out by Dmitry while reviewing VIDIOC_ENUMINPUT
    support for strace.
    
    Fixes: 6016af82eafc ("[media] v4l2: use __u32 rather than enums in ioctl() structs")
    Signed-off-by: Marek Vasut <marex@denx.de>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
memstick r592: make memstick_debug_get_tpc_name() static [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue May 16 22:27:04 2023 +0200

    memstick r592: make memstick_debug_get_tpc_name() static
    
    [ Upstream commit 434587df9f7fd68575f99a889cc5f2efc2eaee5e ]
    
    There are no other files referencing this function, apparently
    it was left global to avoid an 'unused function' warning when
    the only caller is left out. With a 'W=1' build, it causes
    a 'missing prototype' warning though:
    
    drivers/memstick/host/r592.c:47:13: error: no previous prototype for 'memstick_debug_get_tpc_name' [-Werror=missing-prototypes]
    
    Annotate the function as 'static __maybe_unused' to avoid both
    problems.
    
    Fixes: 926341250102 ("memstick: add driver for Ricoh R5C592 card reader")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20230516202714.560929-1-arnd@kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
meson saradc: fix clock divider mask length [+ + +]
Author: George Stark <gnstark@sberdevices.ru>
Date:   Tue Jun 6 19:53:57 2023 +0300

    meson saradc: fix clock divider mask length
    
    commit c57fa0037024c92c2ca34243e79e857da5d2c0a9 upstream.
    
    According to the datasheets of supported meson SoCs length of ADC_CLK_DIV
    field is 6-bit. Although all supported SoCs have the register
    with that field documented later SoCs use external clock rather than
    ADC internal clock so this patch affects only meson8 family (S8* SoCs).
    
    Fixes: 3adbf3427330 ("iio: adc: add a driver for the SAR ADC found in Amlogic Meson SoCs")
    Signed-off-by: George Stark <GNStark@sberdevices.ru>
    Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
    Link: https://lore.kernel.org/r/20230606165357.42417-1-gnstark@sberdevices.ru
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mfd: intel-lpss: Add missing check for platform_get_resource [+ + +]
Author: Jiasheng Jiang <jiasheng@iscas.ac.cn>
Date:   Fri Jun 9 09:48:18 2023 +0800

    mfd: intel-lpss: Add missing check for platform_get_resource
    
    [ Upstream commit d918e0d5824495a75d00b879118b098fcab36fdb ]
    
    Add the missing check for platform_get_resource and return error
    if it fails.
    
    Fixes: 4b45efe85263 ("mfd: Add support for Intel Sunrisepoint LPSS devices")
    Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
    Signed-off-by: Lee Jones <lee@kernel.org>
    Link: https://lore.kernel.org/r/20230609014818.28475-1-jiasheng@iscas.ac.cn
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mfd: rt5033: Drop rt5033-battery sub-device [+ + +]
Author: Stephan Gerhold <stephan@gerhold.net>
Date:   Mon May 15 22:57:10 2023 +0200

    mfd: rt5033: Drop rt5033-battery sub-device
    
    [ Upstream commit 43db1344e0f8c1eb687a1d6cd5b0de3009ab66cb ]
    
    The fuel gauge in the RT5033 PMIC (rt5033-battery) has its own I2C bus
    and interrupt lines. Therefore, it is not part of the MFD device
    and needs to be specified separately in the device tree.
    
    Fixes: 0b271258544b ("mfd: rt5033: Add Richtek RT5033 driver core.")
    Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
    Signed-off-by: Jakob Hauser <jahau@rocketmail.com>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Lee Jones <lee@kernel.org>
    Link: https://lore.kernel.org/r/6a8a19bc67b5be3732882e8131ad2ffcb546ac03.1684182964.git.jahau@rocketmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mfd: stmpe: Only disable the regulators if they are enabled [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat Jun 17 12:43:16 2023 +0200

    mfd: stmpe: Only disable the regulators if they are enabled
    
    [ Upstream commit 104d32bd81f620bb9f67fbf7d1159c414e89f05f ]
    
    In stmpe_probe(), if some regulator_enable() calls fail, probing continues
    and there is only a dev_warn().
    
    So, if stmpe_probe() is called the regulator may not be enabled. It is
    cleaner to test it before calling regulator_disable() in the remove
    function.
    
    Fixes: 9c9e321455fb ("mfd: stmpe: add optional regulators")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Link: https://lore.kernel.org/r/8de3aaf297931d655b9ad6aed548f4de8b85425a.1686998575.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
misc: pci_endpoint_test: Free IRQs before removing the device [+ + +]
Author: Damien Le Moal <dlemoal@kernel.org>
Date:   Sat Apr 15 11:35:39 2023 +0900

    misc: pci_endpoint_test: Free IRQs before removing the device
    
    commit f61b7634a3249d12b9daa36ffbdb9965b6f24c6c upstream.
    
    In pci_endpoint_test_remove(), freeing the IRQs after removing the device
    creates a small race window for IRQs to be received with the test device
    memory already released, causing the IRQ handler to access invalid memory,
    resulting in an oops.
    
    Free the device IRQs before removing the device to avoid this issue.
    
    Link: https://lore.kernel.org/r/20230415023542.77601-15-dlemoal@kernel.org
    Fixes: e03327122e2c ("pci_endpoint_test: Add 2 ioctl commands")
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

misc: pci_endpoint_test: Re-init completion for every test [+ + +]
Author: Damien Le Moal <dlemoal@kernel.org>
Date:   Sat Apr 15 11:35:40 2023 +0900

    misc: pci_endpoint_test: Re-init completion for every test
    
    commit fb620ae73b70c2f57b9d3e911fc24c024ba2324f upstream.
    
    The irq_raised completion used to detect the end of a test case is
    initialized when the test device is probed, but never reinitialized again
    before a test case. As a result, the irq_raised completion synchronization
    is effective only for the first ioctl test case executed. Any subsequent
    call to wait_for_completion() by another ioctl() call will immediately
    return, potentially too early, leading to false positive failures.
    
    Fix this by reinitializing the irq_raised completion before starting a new
    ioctl() test command.
    
    Link: https://lore.kernel.org/r/20230415023542.77601-16-dlemoal@kernel.org
    Fixes: 2c156ac71c6b ("misc: Add host side PCI driver for PCI test function device")
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mmc: core: disable TRIM on Kingston EMMC04G-M627 [+ + +]
Author: Robert Marko <robimarko@gmail.com>
Date:   Mon Jun 19 21:35:58 2023 +0200

    mmc: core: disable TRIM on Kingston EMMC04G-M627
    
    commit f1738a1f816233e6dfc2407f24a31d596643fd90 upstream.
    
    It seems that Kingston EMMC04G-M627 despite advertising TRIM support does
    not work when the core is trying to use REQ_OP_WRITE_ZEROES.
    
    We are seeing I/O errors in OpenWrt under 6.1 on Zyxel NBG7815 that we did
    not previously have and tracked it down to REQ_OP_WRITE_ZEROES.
    
    Trying to use fstrim seems to also throw errors like:
    [93010.835112] I/O error, dev loop0, sector 16902 op 0x3:(DISCARD) flags 0x800 phys_seg 1 prio class 2
    
    Disabling TRIM makes the error go away, so lets add a quirk for this eMMC
    to disable TRIM.
    
    Signed-off-by: Robert Marko <robimarko@gmail.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230619193621.437358-1-robimarko@gmail.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: core: disable TRIM on Micron MTFC4GACAJCN-1M [+ + +]
Author: Robert Marko <robimarko@gmail.com>
Date:   Tue May 30 23:32:59 2023 +0200

    mmc: core: disable TRIM on Micron MTFC4GACAJCN-1M
    
    commit dbfbddcddcebc9ce8a08757708d4e4a99d238e44 upstream.
    
    It seems that Micron MTFC4GACAJCN-1M despite advertising TRIM support does
    not work when the core is trying to use REQ_OP_WRITE_ZEROES.
    
    We are seeing the following errors in OpenWrt under 6.1 on Qnap Qhora 301W
    that we did not previously have and tracked it down to REQ_OP_WRITE_ZEROES:
    [   18.085950] I/O error, dev loop0, sector 596 op 0x9:(WRITE_ZEROES) flags 0x800 phys_seg 0 prio class 2
    
    Disabling TRIM makes the error go away, so lets add a quirk for this eMMC
    to disable TRIM.
    
    Signed-off-by: Robert Marko <robimarko@gmail.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230530213259.1776512-1-robimarko@gmail.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
modpost: fix section mismatch message for R_ARM_ABS32 [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Thu Jun 1 21:09:55 2023 +0900

    modpost: fix section mismatch message for R_ARM_ABS32
    
    [ Upstream commit b7c63520f6703a25eebb4f8138fed764fcae1c6f ]
    
    addend_arm_rel() processes R_ARM_ABS32 in a wrong way.
    
    Here, test code.
    
      [test code 1]
    
        #include <linux/init.h>
    
        int __initdata foo;
        int get_foo(void) { return foo; }
    
    If you compile it with ARM versatile_defconfig, modpost will show the
    symbol name, (unknown).
    
      WARNING: modpost: vmlinux.o: section mismatch in reference: get_foo (section: .text) -> (unknown) (section: .init.data)
    
    (You need to use GNU linker instead of LLD to reproduce it.)
    
    If you compile it for other architectures, modpost will show the correct
    symbol name.
    
      WARNING: modpost: vmlinux.o: section mismatch in reference: get_foo (section: .text) -> foo (section: .init.data)
    
    For R_ARM_ABS32, addend_arm_rel() sets r->r_addend to a wrong value.
    
    I just mimicked the code in arch/arm/kernel/module.c.
    
    However, there is more difficulty for ARM.
    
    Here, test code.
    
      [test code 2]
    
        #include <linux/init.h>
    
        int __initdata foo;
        int get_foo(void) { return foo; }
    
        int __initdata bar;
        int get_bar(void) { return bar; }
    
    With this commit applied, modpost will show the following messages
    for ARM versatile_defconfig:
    
      WARNING: modpost: vmlinux.o: section mismatch in reference: get_foo (section: .text) -> foo (section: .init.data)
      WARNING: modpost: vmlinux.o: section mismatch in reference: get_bar (section: .text) -> foo (section: .init.data)
    
    The reference from 'get_bar' to 'foo' seems wrong.
    
    I have no solution for this because it is true in assembly level.
    
    In the following output, relocation at 0x1c is no longer associated
    with 'bar'. The two relocation entries point to the same symbol, and
    the offset to 'bar' is encoded in the instruction 'r0, [r3, #4]'.
    
      Disassembly of section .text:
    
      00000000 <get_foo>:
         0: e59f3004          ldr     r3, [pc, #4]   @ c <get_foo+0xc>
         4: e5930000          ldr     r0, [r3]
         8: e12fff1e          bx      lr
         c: 00000000          .word   0x00000000
    
      00000010 <get_bar>:
        10: e59f3004          ldr     r3, [pc, #4]   @ 1c <get_bar+0xc>
        14: e5930004          ldr     r0, [r3, #4]
        18: e12fff1e          bx      lr
        1c: 00000000          .word   0x00000000
    
      Relocation section '.rel.text' at offset 0x244 contains 2 entries:
       Offset     Info    Type            Sym.Value  Sym. Name
      0000000c  00000c02 R_ARM_ABS32       00000000   .init.data
      0000001c  00000c02 R_ARM_ABS32       00000000   .init.data
    
    When find_elf_symbol() gets into a situation where relsym->st_name is
    zero, there is no guarantee to get the symbol name as written in C.
    
    I am keeping the current logic because it is useful in many architectures,
    but the symbol name is not always correct depending on the optimization.
    I left some comments in find_tosym().
    
    Fixes: 56a974fa2d59 ("kbuild: make better section mismatch reports on arm")
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

modpost: fix section mismatch message for R_ARM_{PC24,CALL,JUMP24} [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Thu Jun 1 21:09:56 2023 +0900

    modpost: fix section mismatch message for R_ARM_{PC24,CALL,JUMP24}
    
    [ Upstream commit 56a24b8ce6a7f9c4a21b2276a8644f6f3d8fc14d ]
    
    addend_arm_rel() processes R_ARM_PC24, R_ARM_CALL, R_ARM_JUMP24 in a
    wrong way.
    
    Here, test code.
    
    [test code for R_ARM_JUMP24]
    
      .section .init.text,"ax"
      bar:
              bx      lr
    
      .section .text,"ax"
      .globl foo
      foo:
              b       bar
    
    [test code for R_ARM_CALL]
    
      .section .init.text,"ax"
      bar:
              bx      lr
    
      .section .text,"ax"
      .globl foo
      foo:
              push    {lr}
              bl      bar
              pop     {pc}
    
    If you compile it with ARM multi_v7_defconfig, modpost will show the
    symbol name, (unknown).
    
      WARNING: modpost: vmlinux.o: section mismatch in reference: foo (section: .text) -> (unknown) (section: .init.text)
    
    (You need to use GNU linker instead of LLD to reproduce it.)
    
    Fix the code to make modpost show the correct symbol name.
    
    I imported (with adjustment) sign_extend32() from include/linux/bitops.h.
    
    The '+8' is the compensation for pc-relative instruction. It is
    documented in "ELF for the Arm Architecture" [1].
    
      "If the relocation is pc-relative then compensation for the PC bias
      (the PC value is 8 bytes ahead of the executing instruction in Arm
      state and 4 bytes in Thumb state) must be encoded in the relocation
      by the object producer."
    
    [1]: https://github.com/ARM-software/abi-aa/blob/main/aaelf32/aaelf32.rst
    
    Fixes: 56a974fa2d59 ("kbuild: make better section mismatch reports on arm")
    Fixes: 6e2e340b59d2 ("ARM: 7324/1: modpost: Fix section warnings for ARM for many compilers")
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mtd: rawnand: omap_elm: Fix incorrect type in assignment [+ + +]
Author: Roger Quadros <rogerq@kernel.org>
Date:   Sun Jun 25 00:10:21 2023 +0530

    mtd: rawnand: omap_elm: Fix incorrect type in assignment
    
    [ Upstream commit d8403b9eeee66d5dd81ecb9445800b108c267ce3 ]
    
    Once the ECC word endianness is converted to BE32, we force cast it
    to u32 so we can use elm_write_reg() which in turn uses writel().
    
    Fixes below sparse warnings:
    
       drivers/mtd/nand/raw/omap_elm.c:180:37: sparse:     expected unsigned int [usertype] val
       drivers/mtd/nand/raw/omap_elm.c:180:37: sparse:     got restricted __be32 [usertype]
       drivers/mtd/nand/raw/omap_elm.c:185:37: sparse:     expected unsigned int [usertype] val
       drivers/mtd/nand/raw/omap_elm.c:185:37: sparse:     got restricted __be32 [usertype]
       drivers/mtd/nand/raw/omap_elm.c:190:37: sparse:     expected unsigned int [usertype] val
       drivers/mtd/nand/raw/omap_elm.c:190:37: sparse:     got restricted __be32 [usertype]
    >> drivers/mtd/nand/raw/omap_elm.c:200:40: sparse: sparse: restricted __be32 degrades to integer
       drivers/mtd/nand/raw/omap_elm.c:206:39: sparse: sparse: restricted __be32 degrades to integer
       drivers/mtd/nand/raw/omap_elm.c:210:37: sparse:     expected unsigned int [assigned] [usertype] val
       drivers/mtd/nand/raw/omap_elm.c:210:37: sparse:     got restricted __be32 [usertype]
       drivers/mtd/nand/raw/omap_elm.c:213:37: sparse:     expected unsigned int [assigned] [usertype] val
       drivers/mtd/nand/raw/omap_elm.c:213:37: sparse:     got restricted __be32 [usertype]
       drivers/mtd/nand/raw/omap_elm.c:216:37: sparse:     expected unsigned int [assigned] [usertype] val
       drivers/mtd/nand/raw/omap_elm.c:216:37: sparse:     got restricted __be32 [usertype]
       drivers/mtd/nand/raw/omap_elm.c:219:37: sparse:     expected unsigned int [assigned] [usertype] val
       drivers/mtd/nand/raw/omap_elm.c:219:37: sparse:     got restricted __be32 [usertype]
       drivers/mtd/nand/raw/omap_elm.c:222:37: sparse:     expected unsigned int [assigned] [usertype] val
       drivers/mtd/nand/raw/omap_elm.c:222:37: sparse:     got restricted __be32 [usertype]
       drivers/mtd/nand/raw/omap_elm.c:225:37: sparse:     expected unsigned int [assigned] [usertype] val
       drivers/mtd/nand/raw/omap_elm.c:225:37: sparse:     got restricted __be32 [usertype]
       drivers/mtd/nand/raw/omap_elm.c:228:39: sparse: sparse: restricted __be32 degrades to integer
    
    Fixes: bf22433575ef ("mtd: devices: elm: Add support for ELM error correction")
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202306212211.WDXokuWh-lkp@intel.com/
    Signed-off-by: Roger Quadros <rogerq@kernel.org>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Link: https://lore.kernel.org/linux-mtd/20230624184021.7740-1-rogerq@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nbd: Add the maximum limit of allocated index in nbd_dev_add [+ + +]
Author: Zhong Jinghua <zhongjinghua@huawei.com>
Date:   Mon Jun 5 20:21:59 2023 +0800

    nbd: Add the maximum limit of allocated index in nbd_dev_add
    
    [ Upstream commit f12bc113ce904777fd6ca003b473b427782b3dde ]
    
    If the index allocated by idr_alloc greater than MINORMASK >> part_shift,
    the device number will overflow, resulting in failure to create a block
    device.
    
    Fix it by imiting the size of the max allocation.
    
    Signed-off-by: Zhong Jinghua <zhongjinghua@huawei.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Link: https://lore.kernel.org/r/20230605122159.2134384-1-zhongjinghua@huaweicloud.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5e: fix return value check in mlx5e_ipsec_remove_trailer() [+ + +]
Author: Yuanjun Gong <ruc_gongyuanjun@163.com>
Date:   Tue Jul 25 14:56:55 2023 +0800

    net/mlx5e: fix return value check in mlx5e_ipsec_remove_trailer()
    
    [ Upstream commit e5bcb7564d3bd0c88613c76963c5349be9c511c5 ]
    
    mlx5e_ipsec_remove_trailer() should return an error code if function
    pskb_trim() returns an unexpected value.
    
    Fixes: 2ac9cfe78223 ("net/mlx5e: IPSec, Add Innova IPSec offload TX data path")
    Signed-off-by: Yuanjun Gong <ruc_gongyuanjun@163.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sched: act_pedit: Add size check for TCA_PEDIT_PARMS_EX [+ + +]
Author: Lin Ma <linma@zju.edu.cn>
Date:   Mon Jul 3 19:08:42 2023 +0800

    net/sched: act_pedit: Add size check for TCA_PEDIT_PARMS_EX
    
    [ Upstream commit 30c45b5361d39b4b793780ffac5538090b9e2eb1 ]
    
    The attribute TCA_PEDIT_PARMS_EX is not be included in pedit_policy and
    one malicious user could fake a TCA_PEDIT_PARMS_EX whose length is
    smaller than the intended sizeof(struct tc_pedit). Hence, the
    dereference in tcf_pedit_init() could access dirty heap data.
    
    static int tcf_pedit_init(...)
    {
      // ...
      pattr = tb[TCA_PEDIT_PARMS]; // TCA_PEDIT_PARMS is included
      if (!pattr)
        pattr = tb[TCA_PEDIT_PARMS_EX]; // but this is not
    
      // ...
      parm = nla_data(pattr);
    
      index = parm->index; // parm is able to be smaller than 4 bytes
                           // and this dereference gets dirty skb_buff
                           // data created in netlink_sendmsg
    }
    
    This commit adds TCA_PEDIT_PARMS_EX length in pedit_policy which avoid
    the above case, just like the TCA_PEDIT_PARMS.
    
    Fixes: 71d0ed7079df ("net/act_pedit: Support using offset relative to the conventional network headers")
    Signed-off-by: Lin Ma <linma@zju.edu.cn>
    Reviewed-by: Pedro Tammela <pctammela@mojatatu.com>
    Link: https://lore.kernel.org/r/20230703110842.590282-1-linma@zju.edu.cn
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: cls_fw: Fix improper refcount update leads to use-after-free [+ + +]
Author: M A Ramdhan <ramdhan@starlabs.sg>
Date:   Wed Jul 5 12:15:30 2023 -0400

    net/sched: cls_fw: Fix improper refcount update leads to use-after-free
    
    commit 0323bce598eea038714f941ce2b22541c46d488f upstream.
    
    In the event of a failure in tcf_change_indev(), fw_set_parms() will
    immediately return an error after incrementing or decrementing
    reference counter in tcf_bind_filter().  If attacker can control
    reference counter to zero and make reference freed, leading to
    use after free.
    
    In order to prevent this, move the point of possible failure above the
    point where the TC_FW_CLASSID is handled.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: M A Ramdhan <ramdhan@starlabs.sg>
    Signed-off-by: M A Ramdhan <ramdhan@starlabs.sg>
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Reviewed-by: Pedro Tammela <pctammela@mojatatu.com>
    Message-ID: <20230705161530.52003-1-ramdhan@starlabs.sg>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: SeongJae Park <sj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net/sched: cls_route: No longer copy tcf_result on update to avoid use-after-free [+ + +]
Author: valis <sec@valis.email>
Date:   Sat Jul 29 08:32:02 2023 -0400

    net/sched: cls_route: No longer copy tcf_result on update to avoid use-after-free
    
    [ Upstream commit b80b829e9e2c1b3f7aae34855e04d8f6ecaf13c8 ]
    
    When route4_change() is called on an existing filter, the whole
    tcf_result struct is always copied into the new instance of the filter.
    
    This causes a problem when updating a filter bound to a class,
    as tcf_unbind_filter() is always called on the old instance in the
    success path, decreasing filter_cnt of the still referenced class
    and allowing it to be deleted, leading to a use-after-free.
    
    Fix this by no longer copying the tcf_result struct from the old filter.
    
    Fixes: 1109c00547fc ("net: sched: RCU cls_route")
    Reported-by: valis <sec@valis.email>
    Reported-by: Bing-Jhong Billy Jheng <billy@starlabs.sg>
    Signed-off-by: valis <sec@valis.email>
    Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Reviewed-by: Victor Nogueira <victor@mojatatu.com>
    Reviewed-by: Pedro Tammela <pctammela@mojatatu.com>
    Reviewed-by: M A Ramdhan <ramdhan@starlabs.sg>
    Link: https://lore.kernel.org/r/20230729123202.72406-4-jhs@mojatatu.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: cls_u32: Fix reference counter leak leading to overflow [+ + +]
Author: Lee Jones <lee@kernel.org>
Date:   Thu Jun 8 08:29:03 2023 +0100

    net/sched: cls_u32: Fix reference counter leak leading to overflow
    
    commit 04c55383fa5689357bcdd2c8036725a55ed632bc upstream.
    
    In the event of a failure in tcf_change_indev(), u32_set_parms() will
    immediately return without decrementing the recently incremented
    reference counter.  If this happens enough times, the counter will
    rollover and the reference freed, leading to a double free which can be
    used to do 'bad things'.
    
    In order to prevent this, move the point of possible failure above the
    point where the reference counter is incremented.  Also save any
    meaningful return values to be applied to the return data at the
    appropriate point in time.
    
    This issue was caught with KASAN.
    
    Fixes: 705c7091262d ("net: sched: cls_u32: no need to call tcf_exts_change for newly allocated struct")
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Lee Jones <lee@kernel.org>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Rishabh Bhatnagar <risbhat@amazon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net/sched: cls_u32: No longer copy tcf_result on update to avoid use-after-free [+ + +]
Author: valis <sec@valis.email>
Date:   Sat Jul 29 08:32:00 2023 -0400

    net/sched: cls_u32: No longer copy tcf_result on update to avoid use-after-free
    
    [ Upstream commit 3044b16e7c6fe5d24b1cdbcf1bd0a9d92d1ebd81 ]
    
    When u32_change() is called on an existing filter, the whole
    tcf_result struct is always copied into the new instance of the filter.
    
    This causes a problem when updating a filter bound to a class,
    as tcf_unbind_filter() is always called on the old instance in the
    success path, decreasing filter_cnt of the still referenced class
    and allowing it to be deleted, leading to a use-after-free.
    
    Fix this by no longer copying the tcf_result struct from the old filter.
    
    Fixes: de5df63228fc ("net: sched: cls_u32 changes to knode must appear atomic to readers")
    Reported-by: valis <sec@valis.email>
    Reported-by: M A Ramdhan <ramdhan@starlabs.sg>
    Signed-off-by: valis <sec@valis.email>
    Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Reviewed-by: Victor Nogueira <victor@mojatatu.com>
    Reviewed-by: Pedro Tammela <pctammela@mojatatu.com>
    Reviewed-by: M A Ramdhan <ramdhan@starlabs.sg>
    Link: https://lore.kernel.org/r/20230729123202.72406-2-jhs@mojatatu.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: make psched_mtu() RTNL-less safe [+ + +]
Author: Pedro Tammela <pctammela@mojatatu.com>
Date:   Mon Jul 10 23:16:34 2023 -0300

    net/sched: make psched_mtu() RTNL-less safe
    
    [ Upstream commit 150e33e62c1fa4af5aaab02776b6c3812711d478 ]
    
    Eric Dumazet says[1]:
    -------
    Speaking of psched_mtu(), I see that net/sched/sch_pie.c is using it
    without holding RTNL, so dev->mtu can be changed underneath.
    KCSAN could issue a warning.
    -------
    
    Annotate dev->mtu with READ_ONCE() so KCSAN don't issue a warning.
    
    [1] https://lore.kernel.org/all/CANn89iJoJO5VtaJ-2=_d2aOQhb0Xw8iBT_Cxqp2HyuS-zj6azw@mail.gmail.com/
    
    v1 -> v2: Fix commit message
    
    Fixes: d4b36210c2e6 ("net: pkt_sched: PIE AQM scheme")
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Pedro Tammela <pctammela@mojatatu.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Link: https://lore.kernel.org/r/20230711021634.561598-1-pctammela@mojatatu.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: mqprio: add extack to mqprio_parse_nlattr() [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Tue Apr 11 21:01:51 2023 +0300

    net/sched: mqprio: add extack to mqprio_parse_nlattr()
    
    [ Upstream commit 57f21bf85400abadac0cb2a4db5de1d663f8863f ]
    
    Netlink attribute parsing in mqprio is a minesweeper game, with many
    options having the possibility of being passed incorrectly and the user
    being none the wiser.
    
    Try to make errors less sour by giving user space some information
    regarding what went wrong.
    
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Ferenc Fejes <fejes@inf.elte.hu>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 6c58c8816abb ("net/sched: mqprio: Add length check for TCA_MQPRIO_{MAX/MIN}_RATE64")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: mqprio: Add length check for TCA_MQPRIO_{MAX/MIN}_RATE64 [+ + +]
Author: Lin Ma <linma@zju.edu.cn>
Date:   Tue Jul 25 10:42:27 2023 +0800

    net/sched: mqprio: Add length check for TCA_MQPRIO_{MAX/MIN}_RATE64
    
    [ Upstream commit 6c58c8816abb7b93b21fa3b1d0c1726402e5e568 ]
    
    The nla_for_each_nested parsing in function mqprio_parse_nlattr() does
    not check the length of the nested attribute. This can lead to an
    out-of-attribute read and allow a malformed nlattr (e.g., length 0) to
    be viewed as 8 byte integer and passed to priv->max_rate/min_rate.
    
    This patch adds the check based on nla_len() when check the nla_type(),
    which ensures that the length of these two attribute must equals
    sizeof(u64).
    
    Fixes: 4e8b86c06269 ("mqprio: Introduce new hardware offload mode and shaper in mqprio")
    Reviewed-by: Victor Nogueira <victor@mojatatu.com>
    Signed-off-by: Lin Ma <linma@zju.edu.cn>
    Link: https://lore.kernel.org/r/20230725024227.426561-1-linma@zju.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: mqprio: refactor nlattr parsing to a separate function [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Sat Feb 4 15:52:55 2023 +0200

    net/sched: mqprio: refactor nlattr parsing to a separate function
    
    [ Upstream commit feb2cf3dcfb930aec2ca65c66d1365543d5ba943 ]
    
    mqprio_init() is quite large and unwieldy to add more code to.
    Split the netlink attribute parsing to a dedicated function.
    
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 6c58c8816abb ("net/sched: mqprio: Add length check for TCA_MQPRIO_{MAX/MIN}_RATE64")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: sch_qfq: account for stab overhead in qfq_enqueue [+ + +]
Author: Pedro Tammela <pctammela@mojatatu.com>
Date:   Tue Jul 11 18:01:02 2023 -0300

    net/sched: sch_qfq: account for stab overhead in qfq_enqueue
    
    commit 3e337087c3b5805fe0b8a46ba622a962880b5d64 upstream.
    
    Lion says:
    -------
    In the QFQ scheduler a similar issue to CVE-2023-31436
    persists.
    
    Consider the following code in net/sched/sch_qfq.c:
    
    static int qfq_enqueue(struct sk_buff *skb, struct Qdisc *sch,
                    struct sk_buff **to_free)
    {
         unsigned int len = qdisc_pkt_len(skb), gso_segs;
    
        // ...
    
         if (unlikely(cl->agg->lmax < len)) {
             pr_debug("qfq: increasing maxpkt from %u to %u for class %u",
                  cl->agg->lmax, len, cl->common.classid);
             err = qfq_change_agg(sch, cl, cl->agg->class_weight, len);
             if (err) {
                 cl->qstats.drops++;
                 return qdisc_drop(skb, sch, to_free);
             }
    
        // ...
    
         }
    
    Similarly to CVE-2023-31436, "lmax" is increased without any bounds
    checks according to the packet length "len". Usually this would not
    impose a problem because packet sizes are naturally limited.
    
    This is however not the actual packet length, rather the
    "qdisc_pkt_len(skb)" which might apply size transformations according to
    "struct qdisc_size_table" as created by "qdisc_get_stab()" in
    net/sched/sch_api.c if the TCA_STAB option was set when modifying the qdisc.
    
    A user may choose virtually any size using such a table.
    
    As a result the same issue as in CVE-2023-31436 can occur, allowing heap
    out-of-bounds read / writes in the kmalloc-8192 cache.
    -------
    
    We can create the issue with the following commands:
    
    tc qdisc add dev $DEV root handle 1: stab mtu 2048 tsize 512 mpu 0 \
    overhead 999999999 linklayer ethernet qfq
    tc class add dev $DEV parent 1: classid 1:1 htb rate 6mbit burst 15k
    tc filter add dev $DEV parent 1: matchall classid 1:1
    ping -I $DEV 1.1.1.2
    
    This is caused by incorrectly assuming that qdisc_pkt_len() returns a
    length within the QFQ_MIN_LMAX < len < QFQ_MAX_LMAX.
    
    Fixes: 462dbc9101ac ("pkt_sched: QFQ Plus: fair-queueing service at DRR cost")
    Reported-by: Lion <nnamrec@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: Pedro Tammela <pctammela@mojatatu.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Shaoying Xu <shaoyi@amazon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net: add missing data-race annotation for sk_ll_usec [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Jul 28 15:03:17 2023 +0000

    net: add missing data-race annotation for sk_ll_usec
    
    [ Upstream commit e5f0d2dd3c2faa671711dac6d3ff3cef307bcfe3 ]
    
    In a prior commit I forgot that sk_getsockopt() reads
    sk->sk_ll_usec without holding a lock.
    
    Fixes: 0dbffbb5335a ("net: annotate data race around sk_ll_usec")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: add missing data-race annotations around sk->sk_peek_off [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Jul 28 15:03:16 2023 +0000

    net: add missing data-race annotations around sk->sk_peek_off
    
    [ Upstream commit 11695c6e966b0ec7ed1d16777d294cef865a5c91 ]
    
    sk_getsockopt() runs locklessly, thus we need to annotate the read
    of sk->sk_peek_off.
    
    While we are at it, add corresponding annotations to sk_set_peek_off()
    and unix_set_peek_off().
    
    Fixes: b9bb53f3836f ("sock: convert sk_peek_offset functions to WRITE_ONCE")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Willem de Bruijn <willemb@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: bcmgenet: Ensure MDIO unregistration has clocks enabled [+ + +]
Author: Florian Fainelli <florian.fainelli@broadcom.com>
Date:   Thu Jun 22 03:31:07 2023 -0700

    net: bcmgenet: Ensure MDIO unregistration has clocks enabled
    
    commit 1b5ea7ffb7a3bdfffb4b7f40ce0d20a3372ee405 upstream.
    
    With support for Ethernet PHY LEDs having been added, while
    unregistering a MDIO bus and its child device liks PHYs there may be
    "late" accesses to the MDIO bus. One typical use case is setting the PHY
    LEDs brightness to OFF for instance.
    
    We need to ensure that the MDIO bus controller remains entirely
    functional since it runs off the main GENET adapter clock.
    
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20230617155500.4005881-1-andrew@lunn.ch/
    Fixes: 9a4e79697009 ("net: bcmgenet: utilize generic Broadcom UniMAC MDIO controller driver")
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20230622103107.1760280-1-florian.fainelli@broadcom.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: bridge: keep ports without IFF_UNICAST_FLT in BR_PROMISC mode [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Fri Jun 30 19:41:18 2023 +0300

    net: bridge: keep ports without IFF_UNICAST_FLT in BR_PROMISC mode
    
    [ Upstream commit 6ca3c005d0604e8d2b439366e3923ea58db99641 ]
    
    According to the synchronization rules for .ndo_get_stats() as seen in
    Documentation/networking/netdevices.rst, acquiring a plain spin_lock()
    should not be illegal, but the bridge driver implementation makes it so.
    
    After running these commands, I am being faced with the following
    lockdep splat:
    
    $ ip link add link swp0 name macsec0 type macsec encrypt on && ip link set swp0 up
    $ ip link add dev br0 type bridge vlan_filtering 1 && ip link set br0 up
    $ ip link set macsec0 master br0 && ip link set macsec0 up
    
      ========================================================
      WARNING: possible irq lock inversion dependency detected
      6.4.0-04295-g31b577b4bd4a #603 Not tainted
      --------------------------------------------------------
      swapper/1/0 just changed the state of lock:
      ffff6bd348724cd8 (&br->lock){+.-.}-{3:3}, at: br_forward_delay_timer_expired+0x34/0x198
      but this lock took another, SOFTIRQ-unsafe lock in the past:
       (&ocelot->stats_lock){+.+.}-{3:3}
    
      and interrupts could create inverse lock ordering between them.
    
      other info that might help us debug this:
      Chain exists of:
        &br->lock --> &br->hash_lock --> &ocelot->stats_lock
    
       Possible interrupt unsafe locking scenario:
    
             CPU0                    CPU1
             ----                    ----
        lock(&ocelot->stats_lock);
                                     local_irq_disable();
                                     lock(&br->lock);
                                     lock(&br->hash_lock);
        <Interrupt>
          lock(&br->lock);
    
       *** DEADLOCK ***
    
    (details about the 3 locks skipped)
    
    swp0 is instantiated by drivers/net/dsa/ocelot/felix.c, and this
    only matters to the extent that its .ndo_get_stats64() method calls
    spin_lock(&ocelot->stats_lock).
    
    Documentation/locking/lockdep-design.rst says:
    
    | A lock is irq-safe means it was ever used in an irq context, while a lock
    | is irq-unsafe means it was ever acquired with irq enabled.
    
    (...)
    
    | Furthermore, the following usage based lock dependencies are not allowed
    | between any two lock-classes::
    |
    |    <hardirq-safe>   ->  <hardirq-unsafe>
    |    <softirq-safe>   ->  <softirq-unsafe>
    
    Lockdep marks br->hash_lock as softirq-safe, because it is sometimes
    taken in softirq context (for example br_fdb_update() which runs in
    NET_RX softirq), and when it's not in softirq context it blocks softirqs
    by using spin_lock_bh().
    
    Lockdep marks ocelot->stats_lock as softirq-unsafe, because it never
    blocks softirqs from running, and it is never taken from softirq
    context. So it can always be interrupted by softirqs.
    
    There is a call path through which a function that holds br->hash_lock:
    fdb_add_hw_addr() will call a function that acquires ocelot->stats_lock:
    ocelot_port_get_stats64(). This can be seen below:
    
    ocelot_port_get_stats64+0x3c/0x1e0
    felix_get_stats64+0x20/0x38
    dsa_slave_get_stats64+0x3c/0x60
    dev_get_stats+0x74/0x2c8
    rtnl_fill_stats+0x4c/0x150
    rtnl_fill_ifinfo+0x5cc/0x7b8
    rtmsg_ifinfo_build_skb+0xe4/0x150
    rtmsg_ifinfo+0x5c/0xb0
    __dev_notify_flags+0x58/0x200
    __dev_set_promiscuity+0xa0/0x1f8
    dev_set_promiscuity+0x30/0x70
    macsec_dev_change_rx_flags+0x68/0x88
    __dev_set_promiscuity+0x1a8/0x1f8
    __dev_set_rx_mode+0x74/0xa8
    dev_uc_add+0x74/0xa0
    fdb_add_hw_addr+0x68/0xd8
    fdb_add_local+0xc4/0x110
    br_fdb_add_local+0x54/0x88
    br_add_if+0x338/0x4a0
    br_add_slave+0x20/0x38
    do_setlink+0x3a4/0xcb8
    rtnl_newlink+0x758/0x9d0
    rtnetlink_rcv_msg+0x2f0/0x550
    netlink_rcv_skb+0x128/0x148
    rtnetlink_rcv+0x24/0x38
    
    the plain English explanation for it is:
    
    The macsec0 bridge port is created without p->flags & BR_PROMISC,
    because it is what br_manage_promisc() decides for a VLAN filtering
    bridge with a single auto port.
    
    As part of the br_add_if() procedure, br_fdb_add_local() is called for
    the MAC address of the device, and this results in a call to
    dev_uc_add() for macsec0 while the softirq-safe br->hash_lock is taken.
    
    Because macsec0 does not have IFF_UNICAST_FLT, dev_uc_add() ends up
    calling __dev_set_promiscuity() for macsec0, which is propagated by its
    implementation, macsec_dev_change_rx_flags(), to the lower device: swp0.
    This triggers the call path:
    
    dev_set_promiscuity(swp0)
    -> rtmsg_ifinfo()
       -> dev_get_stats()
          -> ocelot_port_get_stats64()
    
    with a calling context that lockdep doesn't like (br->hash_lock held).
    
    Normally we don't see this, because even though many drivers that can be
    bridge ports don't support IFF_UNICAST_FLT, we need a driver that
    
    (a) doesn't support IFF_UNICAST_FLT, *and*
    (b) it forwards the IFF_PROMISC flag to another driver, and
    (c) *that* driver implements ndo_get_stats64() using a softirq-unsafe
        spinlock.
    
    Condition (b) is necessary because the first __dev_set_rx_mode() calls
    __dev_set_promiscuity() with "bool notify=false", and thus, the
    rtmsg_ifinfo() code path won't be entered.
    
    The same criteria also hold true for DSA switches which don't report
    IFF_UNICAST_FLT. When the DSA master uses a spin_lock() in its
    ndo_get_stats64() method, the same lockdep splat can be seen.
    
    I think the deadlock possibility is real, even though I didn't reproduce
    it, and I'm thinking of the following situation to support that claim:
    
    fdb_add_hw_addr() runs on a CPU A, in a context with softirqs locally
    disabled and br->hash_lock held, and may end up attempting to acquire
    ocelot->stats_lock.
    
    In parallel, ocelot->stats_lock is currently held by a thread B (say,
    ocelot_check_stats_work()), which is interrupted while holding it by a
    softirq which attempts to lock br->hash_lock.
    
    Thread B cannot make progress because br->hash_lock is held by A. Whereas
    thread A cannot make progress because ocelot->stats_lock is held by B.
    
    When taking the issue at face value, the bridge can avoid that problem
    by simply making the ports promiscuous from a code path with a saner
    calling context (br->hash_lock not held). A bridge port without
    IFF_UNICAST_FLT is going to become promiscuous as soon as we call
    dev_uc_add() on it (which we do unconditionally), so why not be
    preemptive and make it promiscuous right from the beginning, so as to
    not be taken by surprise.
    
    With this, we've broken the links between code that holds br->hash_lock
    or br->lock and code that calls into the ndo_change_rx_flags() or
    ndo_get_stats64() ops of the bridge port.
    
    Fixes: 2796d0c648c9 ("bridge: Automatically manage port promiscuous mode.")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: create netdev->dev_addr assignment helpers [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Thu Sep 2 11:10:37 2021 -0700

    net: create netdev->dev_addr assignment helpers
    
    [ Upstream commit 48eab831ae8b9f7002a533fa4235eed63ea1f1a3 ]
    
    Recent work on converting address list to a tree made it obvious
    we need an abstraction around writing netdev->dev_addr. Without
    such abstraction updating the main device address is invisible
    to the core.
    
    Introduce a number of helpers which for now just wrap memcpy()
    but in the future can make necessary changes to the address
    tree.
    
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 391af06a02e7 ("wifi: wl3501_cs: Fix an error handling path in wl3501_probe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: ti: cpsw_ale: Fix cpsw_ale_get_field()/cpsw_ale_set_field() [+ + +]
Author: Tanmay Patil <t-patil@ti.com>
Date:   Wed Jul 12 16:36:57 2023 +0530

    net: ethernet: ti: cpsw_ale: Fix cpsw_ale_get_field()/cpsw_ale_set_field()
    
    [ Upstream commit b685f1a58956fa36cc01123f253351b25bfacfda ]
    
    CPSW ALE has 75 bit ALE entries which are stored within three 32 bit words.
    The cpsw_ale_get_field() and cpsw_ale_set_field() functions assume that the
    field will be strictly contained within one word. However, this is not
    guaranteed to be the case and it is possible for ALE field entries to span
    across up to two words at the most.
    
    Fix the methods to handle getting/setting fields spanning up to two words.
    
    Fixes: db82173f23c5 ("netdev: driver: ethernet: add cpsw address lookup engine support")
    Signed-off-by: Tanmay Patil <t-patil@ti.com>
    [s-vadapalli@ti.com: rephrased commit message and added Fixes tag]
    Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: lan743x: Don't sleep in atomic context [+ + +]
Author: Moritz Fischer <moritzf@google.com>
Date:   Tue Jun 27 03:50:00 2023 +0000

    net: lan743x: Don't sleep in atomic context
    
    commit 7a8227b2e76be506b2ac64d2beac950ca04892a5 upstream.
    
    dev_set_rx_mode() grabs a spin_lock, and the lan743x implementation
    proceeds subsequently to go to sleep using readx_poll_timeout().
    
    Introduce a helper wrapping the readx_poll_timeout_atomic() function
    and use it to replace the calls to readx_polL_timeout().
    
    Fixes: 23f0703c125b ("lan743x: Add main source files for new lan743x driver")
    Cc: stable@vger.kernel.org
    Cc: Bryan Whitehead <bryan.whitehead@microchip.com>
    Cc: UNGLinuxDriver@microchip.com
    Signed-off-by: Moritz Fischer <moritzf@google.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20230627035000.1295254-1-moritzf@google.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: mvneta: fix txq_map in case of txq_number==1 [+ + +]
Author: Klaus Kudielka <klaus.kudielka@gmail.com>
Date:   Wed Jul 5 07:37:12 2023 +0200

    net: mvneta: fix txq_map in case of txq_number==1
    
    [ Upstream commit 21327f81db6337c8843ce755b01523c7d3df715b ]
    
    If we boot with mvneta.txq_number=1, the txq_map is set incorrectly:
    MVNETA_CPU_TXQ_ACCESS(1) refers to TX queue 1, but only TX queue 0 is
    initialized. Fix this.
    
    Fixes: 50bf8cb6fc9c ("net: mvneta: Configure XPS support")
    Signed-off-by: Klaus Kudielka <klaus.kudielka@gmail.com>
    Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>
    Link: https://lore.kernel.org/r/20230705053712.3914-1-klaus.kudielka@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: Replace the limit of TCP_LINGER2 with TCP_FIN_TIMEOUT_MAX [+ + +]
Author: Cambda Zhu <cambda@linux.alibaba.com>
Date:   Fri Apr 24 16:06:16 2020 +0800

    net: Replace the limit of TCP_LINGER2 with TCP_FIN_TIMEOUT_MAX
    
    [ Upstream commit f0628c524fd188c3f9418e12478dfdfadacba815 ]
    
    This patch changes the behavior of TCP_LINGER2 about its limit. The
    sysctl_tcp_fin_timeout used to be the limit of TCP_LINGER2 but now it's
    only the default value. A new macro named TCP_FIN_TIMEOUT_MAX is added
    as the limit of TCP_LINGER2, which is 2 minutes.
    
    Since TCP_LINGER2 used sysctl_tcp_fin_timeout as the default value
    and the limit in the past, the system administrator cannot set the
    default value for most of sockets and let some sockets have a greater
    timeout. It might be a mistake that let the sysctl to be the limit of
    the TCP_LINGER2. Maybe we can add a new sysctl to set the max of
    TCP_LINGER2, but FIN-WAIT-2 timeout is usually no need to be too long
    and 2 minutes are legal considering TCP specs.
    
    Changes in v3:
    - Remove the new socket option and change the TCP_LINGER2 behavior so
      that the timeout can be set to value between sysctl_tcp_fin_timeout
      and 2 minutes.
    
    Changes in v2:
    - Add int overflow check for the new socket option.
    
    Changes in v1:
    - Add a new socket option to set timeout greater than
      sysctl_tcp_fin_timeout.
    
    Signed-off-by: Cambda Zhu <cambda@linux.alibaba.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 9df5335ca974 ("tcp: annotate data-races around tp->linger2")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sched: cls_u32: Fix match key mis-addressing [+ + +]
Author: Jamal Hadi Salim <jhs@mojatatu.com>
Date:   Wed Jul 26 09:51:51 2023 -0400

    net: sched: cls_u32: Fix match key mis-addressing
    
    [ Upstream commit e68409db995380d1badacba41ff24996bd396171 ]
    
    A match entry is uniquely identified with an "address" or "path" in the
    form of: hashtable ID(12b):bucketid(8b):nodeid(12b).
    
    When creating table match entries all of hash table id, bucket id and
    node (match entry id) are needed to be either specified by the user or
    reasonable in-kernel defaults are used. The in-kernel default for a table id is
    0x800(omnipresent root table); for bucketid it is 0x0. Prior to this fix there
    was none for a nodeid i.e. the code assumed that the user passed the correct
    nodeid and if the user passes a nodeid of 0 (as Mingi Cho did) then that is what
    was used. But nodeid of 0 is reserved for identifying the table. This is not
    a problem until we dump. The dump code notices that the nodeid is zero and
    assumes it is referencing a table and therefore references table struct
    tc_u_hnode instead of what was created i.e match entry struct tc_u_knode.
    
    Ming does an equivalent of:
    tc filter add dev dummy0 parent 10: prio 1 handle 0x1000 \
    protocol ip u32 match ip src 10.0.0.1/32 classid 10:1 action ok
    
    Essentially specifying a table id 0, bucketid 1 and nodeid of zero
    Tableid 0 is remapped to the default of 0x800.
    Bucketid 1 is ignored and defaults to 0x00.
    Nodeid was assumed to be what Ming passed - 0x000
    
    dumping before fix shows:
    ~$ tc filter ls dev dummy0 parent 10:
    filter protocol ip pref 1 u32 chain 0
    filter protocol ip pref 1 u32 chain 0 fh 800: ht divisor 1
    filter protocol ip pref 1 u32 chain 0 fh 800: ht divisor -30591
    
    Note that the last line reports a table instead of a match entry
    (you can tell this because it says "ht divisor...").
    As a result of reporting the wrong data type (misinterpretting of struct
    tc_u_knode as being struct tc_u_hnode) the divisor is reported with value
    of -30591. Ming identified this as part of the heap address
    (physmap_base is 0xffff8880 (-30591 - 1)).
    
    The fix is to ensure that when table entry matches are added and no
    nodeid is specified (i.e nodeid == 0) then we get the next available
    nodeid from the table's pool.
    
    After the fix, this is what the dump shows:
    $ tc filter ls dev dummy0 parent 10:
    filter protocol ip pref 1 u32 chain 0
    filter protocol ip pref 1 u32 chain 0 fh 800: ht divisor 1
    filter protocol ip pref 1 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 flowid 10:1 not_in_hw
      match 0a000001/ffffffff at 12
            action order 1: gact action pass
             random type none pass val 0
             index 1 ref 1 bind 1
    
    Reported-by: Mingi Cho <mgcho.minic@gmail.com>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Link: https://lore.kernel.org/r/20230726135151.416917-1-jhs@mojatatu.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usbnet: Fix WARNING in usbnet_start_xmit/usb_submit_urb [+ + +]
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Wed Jul 12 10:15:10 2023 -0400

    net: usbnet: Fix WARNING in usbnet_start_xmit/usb_submit_urb
    
    commit 5e1627cb43ddf1b24b92eb26f8d958a3f5676ccb upstream.
    
    The syzbot fuzzer identified a problem in the usbnet driver:
    
    usb 1-1: BOGUS urb xfer, pipe 3 != type 1
    WARNING: CPU: 0 PID: 754 at drivers/usb/core/urb.c:504 usb_submit_urb+0xed6/0x1880 drivers/usb/core/urb.c:504
    Modules linked in:
    CPU: 0 PID: 754 Comm: kworker/0:2 Not tainted 6.4.0-rc7-syzkaller-00014-g692b7dc87ca6 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/27/2023
    Workqueue: mld mld_ifc_work
    RIP: 0010:usb_submit_urb+0xed6/0x1880 drivers/usb/core/urb.c:504
    Code: 7c 24 18 e8 2c b4 5b fb 48 8b 7c 24 18 e8 42 07 f0 fe 41 89 d8 44 89 e1 4c 89 ea 48 89 c6 48 c7 c7 a0 c9 fc 8a e8 5a 6f 23 fb <0f> 0b e9 58 f8 ff ff e8 fe b3 5b fb 48 81 c5 c0 05 00 00 e9 84 f7
    RSP: 0018:ffffc9000463f568 EFLAGS: 00010086
    RAX: 0000000000000000 RBX: 0000000000000001 RCX: 0000000000000000
    RDX: ffff88801eb28000 RSI: ffffffff814c03b7 RDI: 0000000000000001
    RBP: ffff8881443b7190 R08: 0000000000000001 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000001 R12: 0000000000000003
    R13: ffff88802a77cb18 R14: 0000000000000003 R15: ffff888018262500
    FS:  0000000000000000(0000) GS:ffff8880b9800000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000556a99c15a18 CR3: 0000000028c71000 CR4: 0000000000350ef0
    Call Trace:
     <TASK>
     usbnet_start_xmit+0xfe5/0x2190 drivers/net/usb/usbnet.c:1453
     __netdev_start_xmit include/linux/netdevice.h:4918 [inline]
     netdev_start_xmit include/linux/netdevice.h:4932 [inline]
     xmit_one net/core/dev.c:3578 [inline]
     dev_hard_start_xmit+0x187/0x700 net/core/dev.c:3594
    ...
    
    This bug is caused by the fact that usbnet trusts the bulk endpoint
    addresses its probe routine receives in the driver_info structure, and
    it does not check to see that these endpoints actually exist and have
    the expected type and directions.
    
    The fix is simply to add such a check.
    
    Reported-and-tested-by: syzbot+63ee658b9a100ffadbe2@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/linux-usb/000000000000a56e9105d0cec021@google.com/
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    CC: Oliver Neukum <oneukum@suse.com>
    Link: https://lore.kernel.org/r/ea152b6d-44df-4f8a-95c6-4db51143dcc1@rowland.harvard.edu
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: net:ipv6: check return value of pskb_trim() [+ + +]
Author: Yuanjun Gong <ruc_gongyuanjun@163.com>
Date:   Mon Jul 17 22:45:19 2023 +0800

    net:ipv6: check return value of pskb_trim()
    
    [ Upstream commit 4258faa130be4ea43e5e2d839467da421b8ff274 ]
    
    goto tx_err if an unexpected result is returned by pskb_tirm()
    in ip6erspan_tunnel_xmit().
    
    Fixes: 5a963eb61b7c ("ip6_gre: Add ERSPAN native tunnel support")
    Signed-off-by: Yuanjun Gong <ruc_gongyuanjun@163.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: add helper function to set up the nfnetlink header and use it [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed Jul 5 18:55:10 2023 +0200

    netfilter: add helper function to set up the nfnetlink header and use it
    
    [ 19c28b1374fb1073a9ec873a6c10bf5f16b10b9d ]
    
    This patch adds a helper function to set up the netlink and nfnetlink headers.
    Update existing codebase to use it.
    
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: conntrack: Avoid nf_ct_helper_hash uses after free [+ + +]
Author: Florent Revest <revest@chromium.org>
Date:   Mon Jul 3 16:52:16 2023 +0200

    netfilter: conntrack: Avoid nf_ct_helper_hash uses after free
    
    commit 6eef7a2b933885a17679eb8ed0796ddf0ee5309b upstream.
    
    If nf_conntrack_init_start() fails (for example due to a
    register_nf_conntrack_bpf() failure), the nf_conntrack_helper_fini()
    clean-up path frees the nf_ct_helper_hash map.
    
    When built with NF_CONNTRACK=y, further netfilter modules (e.g:
    netfilter_conntrack_ftp) can still be loaded and call
    nf_conntrack_helpers_register(), independently of whether nf_conntrack
    initialized correctly. This accesses the nf_ct_helper_hash dangling
    pointer and causes a uaf, possibly leading to random memory corruption.
    
    This patch guards nf_conntrack_helper_register() from accessing a freed
    or uninitialized nf_ct_helper_hash pointer and fixes possible
    uses-after-free when loading a conntrack module.
    
    Cc: stable@vger.kernel.org
    Fixes: 12f7a505331e ("netfilter: add user-space connection tracking helper infrastructure")
    Signed-off-by: Florent Revest <revest@chromium.org>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_conntrack_sip: fix the ct_sip_parse_numerical_param() return value. [+ + +]
Author: Ilia.Gavrilov <Ilia.Gavrilov@infotecs.ru>
Date:   Fri Jun 23 11:23:46 2023 +0000

    netfilter: nf_conntrack_sip: fix the ct_sip_parse_numerical_param() return value.
    
    [ Upstream commit f188d30087480eab421cd8ca552fb15f55d57f4d ]
    
    ct_sip_parse_numerical_param() returns only 0 or 1 now.
    But process_register_request() and process_register_response() imply
    checking for a negative value if parsing of a numerical header parameter
    failed.
    The invocation in nf_nat_sip() looks correct:
            if (ct_sip_parse_numerical_param(...) > 0 &&
                ...) { ... }
    
    Make the return value of the function ct_sip_parse_numerical_param()
    a tristate to fix all the cases
    a) return 1 if value is found; *val is set
    b) return 0 if value is not found; *val is unchanged
    c) return -1 on error; *val is undefined
    
    Found by InfoTeCS on behalf of Linux Verification Center
    (linuxtesting.org) with SVACE.
    
    Fixes: 0f32a40fc91a ("[NETFILTER]: nf_conntrack_sip: create signalling expectations")
    Signed-off-by: Ilia.Gavrilov <Ilia.Gavrilov@infotecs.ru>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: add NFT_TRANS_PREPARE_ERROR to deal with bound set/chain [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed Jul 5 18:55:13 2023 +0200

    netfilter: nf_tables: add NFT_TRANS_PREPARE_ERROR to deal with bound set/chain
    
    [ 26b5a5712eb85e253724e56a54c17f8519bd8e4e ]
    
    Add a new state to deal with rule expressions deactivation from the
    newrule error path, otherwise the anonymous set remains in the list in
    inactive state for the next generation. Mark the set/chain transaction
    as unbound so the abort path releases this object, set it as inactive in
    the next generation so it is not reachable anymore from this transaction
    and reference counter is dropped.
    
    Fixes: 1240eb93f061 ("netfilter: nf_tables: incorrect error path handling with NFT_MSG_NEWRULE")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: add rescheduling points during loop detection walks [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Wed Jul 5 18:55:08 2023 +0200

    netfilter: nf_tables: add rescheduling points during loop detection walks
    
    [ 81ea010667417ef3f218dfd99b69769fe66c2b67 ]
    
    Add explicit rescheduling points during ruleset walk.
    
    Switching to a faster algorithm is possible but this is a much
    smaller change, suitable for nf tree.
    
    Link: https://bugzilla.netfilter.org/show_bug.cgi?id=1460
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Acked-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: can't schedule in nft_chain_validate [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Tue Jul 18 01:30:33 2023 +0200

    netfilter: nf_tables: can't schedule in nft_chain_validate
    
    [ Upstream commit 314c82841602a111c04a7210c21dc77e0d560242 ]
    
    Can be called via nft set element list iteration, which may acquire
    rcu and/or bh read lock (depends on set type).
    
    BUG: sleeping function called from invalid context at net/netfilter/nf_tables_api.c:3353
    in_atomic(): 0, irqs_disabled(): 0, non_block: 0, pid: 1232, name: nft
    preempt_count: 0, expected: 0
    RCU nest depth: 1, expected: 0
    2 locks held by nft/1232:
     #0: ffff8881180e3ea8 (&nft_net->commit_mutex){+.+.}-{3:3}, at: nf_tables_valid_genid
     #1: ffffffff83f5f540 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire
    Call Trace:
     nft_chain_validate
     nft_lookup_validate_setelem
     nft_pipapo_walk
     nft_lookup_validate
     nft_chain_validate
     nft_immediate_validate
     nft_chain_validate
     nf_tables_validate
     nf_tables_abort
    
    No choice but to move it to nf_tables_validate().
    
    Fixes: 81ea01066741 ("netfilter: nf_tables: add rescheduling points during loop detection walks")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: fix nat hook table deletion [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Wed Jul 5 18:55:07 2023 +0200

    netfilter: nf_tables: fix nat hook table deletion
    
    [ 1e9451cbda456a170518b2bfd643e2cb980880bf ]
    
    sybot came up with following transaction:
     add table ip syz0
     add chain ip syz0 syz2 { type nat hook prerouting priority 0; policy accept; }
     add table ip syz0 { flags dormant; }
     delete chain ip syz0 syz2
     delete table ip syz0
    
    which yields:
    hook not found, pf 2 num 0
    WARNING: CPU: 0 PID: 6775 at net/netfilter/core.c:413 __nf_unregister_net_hook+0x3e6/0x4a0 net/netfilter/core.c:413
    [..]
     nft_unregister_basechain_hooks net/netfilter/nf_tables_api.c:206 [inline]
     nft_table_disable net/netfilter/nf_tables_api.c:835 [inline]
     nf_tables_table_disable net/netfilter/nf_tables_api.c:868 [inline]
     nf_tables_commit+0x32d3/0x4d70 net/netfilter/nf_tables_api.c:7550
     nfnetlink_rcv_batch net/netfilter/nfnetlink.c:486 [inline]
     nfnetlink_rcv_skb_batch net/netfilter/nfnetlink.c:544 [inline]
     nfnetlink_rcv+0x14a5/0x1e50 net/netfilter/nfnetlink.c:562
     netlink_unicast_kernel net/netlink/af_netlink.c:1303 [inline]
    
    Problem is that when I added ability to override base hook registration
    to make nat basechains register with the nat core instead of netfilter
    core, I forgot to update nft_table_disable() to use that instead of
    the 'raw' hook register interface.
    
    In syzbot transaction, the basechain is of 'nat' type. Its registered
    with the nat core.  The switch to 'dormant mode' attempts to delete from
    netfilter core instead.
    
    After updating nft_table_disable/enable to use the correct helper,
    nft_(un)register_basechain_hooks can be folded into the only remaining
    caller.
    
    Because nft_trans_table_enable() won't do anything when the DORMANT flag
    is set, remove the flag first, then re-add it in case re-enablement
    fails, else this patch breaks sequence:
    
    add table ip x { flags dormant; }
    /* add base chains */
    add table ip x
    
    The last 'add' will remove the dormant flags, but won't have any other
    effect -- base chains are not registered.
    Then, next 'set dormant flag' will create another 'hook not found'
    splat.
    
    Reported-by: syzbot+2570f2c036e3da5db176@syzkaller.appspotmail.com
    Fixes: 4e25ceb80b58 ("netfilter: nf_tables: allow chain type to override hook register")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    (cherry picked from commit 1e9451cbda456a170518b2bfd643e2cb980880bf)
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: fix scheduling-while-atomic splat [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Wed Jul 5 18:55:16 2023 +0200

    netfilter: nf_tables: fix scheduling-while-atomic splat
    
    [ 2024439bd5ceb145eeeb428b2a59e9b905153ac3 ]
    
    nf_tables_check_loops() can be called from rhashtable list
    walk so cond_resched() cannot be used here.
    
    Fixes: 81ea01066741 ("netfilter: nf_tables: add rescheduling points during loop detection walks")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: fix spurious set element insertion failure [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 20 00:29:58 2023 +0200

    netfilter: nf_tables: fix spurious set element insertion failure
    
    [ Upstream commit ddbd8be68941985f166f5107109a90ce13147c44 ]
    
    On some platforms there is a padding hole in the nft_verdict
    structure, between the verdict code and the chain pointer.
    
    On element insertion, if the new element clashes with an existing one and
    NLM_F_EXCL flag isn't set, we want to ignore the -EEXIST error as long as
    the data associated with duplicated element is the same as the existing
    one.  The data equality check uses memcmp.
    
    For normal data (NFT_DATA_VALUE) this works fine, but for NFT_DATA_VERDICT
    padding area leads to spurious failure even if the verdict data is the
    same.
    
    This then makes the insertion fail with 'already exists' error, even
    though the new "key : data" matches an existing entry and userspace
    told the kernel that it doesn't want to receive an error indication.
    
    Fixes: c016c7e45ddf ("netfilter: nf_tables: honor NLM_F_EXCL flag in set element insertion")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: incorrect error path handling with NFT_MSG_NEWRULE [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed Jul 5 18:55:12 2023 +0200

    netfilter: nf_tables: incorrect error path handling with NFT_MSG_NEWRULE
    
    [ 1240eb93f0616b21c675416516ff3d74798fdc97 ]
    
    In case of error when adding a new rule that refers to an anonymous set,
    deactivate expressions via NFT_TRANS_PREPARE state, not NFT_TRANS_RELEASE.
    Thus, the lookup expression marks anonymous sets as inactive in the next
    generation to ensure it is not reachable in this transaction anymore and
    decrement the set refcount as introduced by c1592a89942e ("netfilter:
    nf_tables: deactivate anonymous set from preparation phase"). The abort
    step takes care of undoing the anonymous set.
    
    This is also consistent with rule deletion, where NFT_TRANS_PREPARE is
    used. Note that this error path is exercised in the preparation step of
    the commit protocol. This patch replaces nf_tables_rule_release() by the
    deactivate and destroy calls, this time with NFT_TRANS_PREPARE.
    
    Due to this incorrect error handling, it is possible to access a
    dangling pointer to the anonymous set that remains in the transaction
    list.
    
    [1009.379054] BUG: KASAN: use-after-free in nft_set_lookup_global+0x147/0x1a0 [nf_tables]
    [1009.379106] Read of size 8 at addr ffff88816c4c8020 by task nft-rule-add/137110
    [1009.379116] CPU: 7 PID: 137110 Comm: nft-rule-add Not tainted 6.4.0-rc4+ #256
    [1009.379128] Call Trace:
    [1009.379132]  <TASK>
    [1009.379135]  dump_stack_lvl+0x33/0x50
    [1009.379146]  ? nft_set_lookup_global+0x147/0x1a0 [nf_tables]
    [1009.379191]  print_address_description.constprop.0+0x27/0x300
    [1009.379201]  kasan_report+0x107/0x120
    [1009.379210]  ? nft_set_lookup_global+0x147/0x1a0 [nf_tables]
    [1009.379255]  nft_set_lookup_global+0x147/0x1a0 [nf_tables]
    [1009.379302]  nft_lookup_init+0xa5/0x270 [nf_tables]
    [1009.379350]  nf_tables_newrule+0x698/0xe50 [nf_tables]
    [1009.379397]  ? nf_tables_rule_release+0xe0/0xe0 [nf_tables]
    [1009.379441]  ? kasan_unpoison+0x23/0x50
    [1009.379450]  nfnetlink_rcv_batch+0x97c/0xd90 [nfnetlink]
    [1009.379470]  ? nfnetlink_rcv_msg+0x480/0x480 [nfnetlink]
    [1009.379485]  ? __alloc_skb+0xb8/0x1e0
    [1009.379493]  ? __alloc_skb+0xb8/0x1e0
    [1009.379502]  ? entry_SYSCALL_64_after_hwframe+0x46/0xb0
    [1009.379509]  ? unwind_get_return_address+0x2a/0x40
    [1009.379517]  ? write_profile+0xc0/0xc0
    [1009.379524]  ? avc_lookup+0x8f/0xc0
    [1009.379532]  ? __rcu_read_unlock+0x43/0x60
    
    Fixes: 958bee14d071 ("netfilter: nf_tables: use new transaction infrastructure to handle sets")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: prevent OOB access in nft_byteorder_eval [+ + +]
Author: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
Date:   Wed Jul 5 18:05:35 2023 -0300

    netfilter: nf_tables: prevent OOB access in nft_byteorder_eval
    
    commit caf3ef7468f7534771b5c44cd8dbd6f7f87c2cbd upstream.
    
    When evaluating byteorder expressions with size 2, a union with 32-bit and
    16-bit members is used. Since the 16-bit members are aligned to 32-bit,
    the array accesses will be out-of-bounds.
    
    It may lead to a stack-out-of-bounds access like the one below:
    
    [   23.095215] ==================================================================
    [   23.095625] BUG: KASAN: stack-out-of-bounds in nft_byteorder_eval+0x13c/0x320
    [   23.096020] Read of size 2 at addr ffffc90000007948 by task ping/115
    [   23.096358]
    [   23.096456] CPU: 0 PID: 115 Comm: ping Not tainted 6.4.0+ #413
    [   23.096770] Call Trace:
    [   23.096910]  <IRQ>
    [   23.097030]  dump_stack_lvl+0x60/0xc0
    [   23.097218]  print_report+0xcf/0x630
    [   23.097388]  ? nft_byteorder_eval+0x13c/0x320
    [   23.097577]  ? kasan_addr_to_slab+0xd/0xc0
    [   23.097760]  ? nft_byteorder_eval+0x13c/0x320
    [   23.097949]  kasan_report+0xc9/0x110
    [   23.098106]  ? nft_byteorder_eval+0x13c/0x320
    [   23.098298]  __asan_load2+0x83/0xd0
    [   23.098453]  nft_byteorder_eval+0x13c/0x320
    [   23.098659]  nft_do_chain+0x1c8/0xc50
    [   23.098852]  ? __pfx_nft_do_chain+0x10/0x10
    [   23.099078]  ? __kasan_check_read+0x11/0x20
    [   23.099295]  ? __pfx___lock_acquire+0x10/0x10
    [   23.099535]  ? __pfx___lock_acquire+0x10/0x10
    [   23.099745]  ? __kasan_check_read+0x11/0x20
    [   23.099929]  nft_do_chain_ipv4+0xfe/0x140
    [   23.100105]  ? __pfx_nft_do_chain_ipv4+0x10/0x10
    [   23.100327]  ? lock_release+0x204/0x400
    [   23.100515]  ? nf_hook.constprop.0+0x340/0x550
    [   23.100779]  nf_hook_slow+0x6c/0x100
    [   23.100977]  ? __pfx_nft_do_chain_ipv4+0x10/0x10
    [   23.101223]  nf_hook.constprop.0+0x334/0x550
    [   23.101443]  ? __pfx_ip_local_deliver_finish+0x10/0x10
    [   23.101677]  ? __pfx_nf_hook.constprop.0+0x10/0x10
    [   23.101882]  ? __pfx_ip_rcv_finish+0x10/0x10
    [   23.102071]  ? __pfx_ip_local_deliver_finish+0x10/0x10
    [   23.102291]  ? rcu_read_lock_held+0x4b/0x70
    [   23.102481]  ip_local_deliver+0xbb/0x110
    [   23.102665]  ? __pfx_ip_rcv+0x10/0x10
    [   23.102839]  ip_rcv+0x199/0x2a0
    [   23.102980]  ? __pfx_ip_rcv+0x10/0x10
    [   23.103140]  __netif_receive_skb_one_core+0x13e/0x150
    [   23.103362]  ? __pfx___netif_receive_skb_one_core+0x10/0x10
    [   23.103647]  ? mark_held_locks+0x48/0xa0
    [   23.103819]  ? process_backlog+0x36c/0x380
    [   23.103999]  __netif_receive_skb+0x23/0xc0
    [   23.104179]  process_backlog+0x91/0x380
    [   23.104350]  __napi_poll.constprop.0+0x66/0x360
    [   23.104589]  ? net_rx_action+0x1cb/0x610
    [   23.104811]  net_rx_action+0x33e/0x610
    [   23.105024]  ? _raw_spin_unlock+0x23/0x50
    [   23.105257]  ? __pfx_net_rx_action+0x10/0x10
    [   23.105485]  ? mark_held_locks+0x48/0xa0
    [   23.105741]  __do_softirq+0xfa/0x5ab
    [   23.105956]  ? __dev_queue_xmit+0x765/0x1c00
    [   23.106193]  do_softirq.part.0+0x49/0xc0
    [   23.106423]  </IRQ>
    [   23.106547]  <TASK>
    [   23.106670]  __local_bh_enable_ip+0xf5/0x120
    [   23.106903]  __dev_queue_xmit+0x789/0x1c00
    [   23.107131]  ? __pfx___dev_queue_xmit+0x10/0x10
    [   23.107381]  ? find_held_lock+0x8e/0xb0
    [   23.107585]  ? lock_release+0x204/0x400
    [   23.107798]  ? neigh_resolve_output+0x185/0x350
    [   23.108049]  ? mark_held_locks+0x48/0xa0
    [   23.108265]  ? neigh_resolve_output+0x185/0x350
    [   23.108514]  neigh_resolve_output+0x246/0x350
    [   23.108753]  ? neigh_resolve_output+0x246/0x350
    [   23.109003]  ip_finish_output2+0x3c3/0x10b0
    [   23.109250]  ? __pfx_ip_finish_output2+0x10/0x10
    [   23.109510]  ? __pfx_nf_hook+0x10/0x10
    [   23.109732]  __ip_finish_output+0x217/0x390
    [   23.109978]  ip_finish_output+0x2f/0x130
    [   23.110207]  ip_output+0xc9/0x170
    [   23.110404]  ip_push_pending_frames+0x1a0/0x240
    [   23.110652]  raw_sendmsg+0x102e/0x19e0
    [   23.110871]  ? __pfx_raw_sendmsg+0x10/0x10
    [   23.111093]  ? lock_release+0x204/0x400
    [   23.111304]  ? __mod_lruvec_page_state+0x148/0x330
    [   23.111567]  ? find_held_lock+0x8e/0xb0
    [   23.111777]  ? find_held_lock+0x8e/0xb0
    [   23.111993]  ? __rcu_read_unlock+0x7c/0x2f0
    [   23.112225]  ? aa_sk_perm+0x18a/0x550
    [   23.112431]  ? filemap_map_pages+0x4f1/0x900
    [   23.112665]  ? __pfx_aa_sk_perm+0x10/0x10
    [   23.112880]  ? find_held_lock+0x8e/0xb0
    [   23.113098]  inet_sendmsg+0xa0/0xb0
    [   23.113297]  ? inet_sendmsg+0xa0/0xb0
    [   23.113500]  ? __pfx_inet_sendmsg+0x10/0x10
    [   23.113727]  sock_sendmsg+0xf4/0x100
    [   23.113924]  ? move_addr_to_kernel.part.0+0x4f/0xa0
    [   23.114190]  __sys_sendto+0x1d4/0x290
    [   23.114391]  ? __pfx___sys_sendto+0x10/0x10
    [   23.114621]  ? __pfx_mark_lock.part.0+0x10/0x10
    [   23.114869]  ? lock_release+0x204/0x400
    [   23.115076]  ? find_held_lock+0x8e/0xb0
    [   23.115287]  ? rcu_is_watching+0x23/0x60
    [   23.115503]  ? __rseq_handle_notify_resume+0x6e2/0x860
    [   23.115778]  ? __kasan_check_write+0x14/0x30
    [   23.116008]  ? blkcg_maybe_throttle_current+0x8d/0x770
    [   23.116285]  ? mark_held_locks+0x28/0xa0
    [   23.116503]  ? do_syscall_64+0x37/0x90
    [   23.116713]  __x64_sys_sendto+0x7f/0xb0
    [   23.116924]  do_syscall_64+0x59/0x90
    [   23.117123]  ? irqentry_exit_to_user_mode+0x25/0x30
    [   23.117387]  ? irqentry_exit+0x77/0xb0
    [   23.117593]  ? exc_page_fault+0x92/0x140
    [   23.117806]  entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    [   23.118081] RIP: 0033:0x7f744aee2bba
    [   23.118282] Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 7e c3 0f 1f 44 00 00 41 54 48 83 ec 30 44 89
    [   23.119237] RSP: 002b:00007ffd04a7c9f8 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
    [   23.119644] RAX: ffffffffffffffda RBX: 00007ffd04a7e0a0 RCX: 00007f744aee2bba
    [   23.120023] RDX: 0000000000000040 RSI: 000056488e9e6300 RDI: 0000000000000003
    [   23.120413] RBP: 000056488e9e6300 R08: 00007ffd04a80320 R09: 0000000000000010
    [   23.120809] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000040
    [   23.121219] R13: 00007ffd04a7dc38 R14: 00007ffd04a7ca00 R15: 00007ffd04a7e0a0
    [   23.121617]  </TASK>
    [   23.121749]
    [   23.121845] The buggy address belongs to the virtual mapping at
    [   23.121845]  [ffffc90000000000, ffffc90000009000) created by:
    [   23.121845]  irq_init_percpu_irqstack+0x1cf/0x270
    [   23.122707]
    [   23.122803] The buggy address belongs to the physical page:
    [   23.123104] page:0000000072ac19f0 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x24a09
    [   23.123609] flags: 0xfffffc0001000(reserved|node=0|zone=1|lastcpupid=0x1fffff)
    [   23.123998] page_type: 0xffffffff()
    [   23.124194] raw: 000fffffc0001000 ffffea0000928248 ffffea0000928248 0000000000000000
    [   23.124610] raw: 0000000000000000 0000000000000000 00000001ffffffff 0000000000000000
    [   23.125023] page dumped because: kasan: bad access detected
    [   23.125326]
    [   23.125421] Memory state around the buggy address:
    [   23.125682]  ffffc90000007800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [   23.126072]  ffffc90000007880: 00 00 00 00 00 f1 f1 f1 f1 f1 f1 00 00 f2 f2 00
    [   23.126455] >ffffc90000007900: 00 00 00 00 00 00 00 00 00 f2 f2 f2 f2 00 00 00
    [   23.126840]                                               ^
    [   23.127138]  ffffc90000007980: 00 00 00 00 00 00 00 00 00 00 00 00 00 f3 f3 f3
    [   23.127522]  ffffc90000007a00: f3 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1
    [   23.127906] ==================================================================
    [   23.128324] Disabling lock debugging due to kernel taint
    
    Using simple s16 pointers for the 16-bit accesses fixes the problem. For
    the 32-bit accesses, src and dst can be used directly.
    
    Fixes: 96518518cc41 ("netfilter: add nftables")
    Cc: stable@vger.kernel.org
    Reported-by: Tanguy DUBROCA (@SidewayRE) from @Synacktiv working with ZDI
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: reject unbound anonymous set before commit phase [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed Jul 5 18:55:14 2023 +0200

    netfilter: nf_tables: reject unbound anonymous set before commit phase
    
    [ 938154b93be8cd611ddfd7bafc1849f3c4355201 ]
    
    Add a new list to track set transaction and to check for unbound
    anonymous sets before entering the commit phase.
    
    Bail out at the end of the transaction handling if an anonymous set
    remains unbound.
    
    Fixes: 96518518cc41 ("netfilter: add nftables")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: unbind non-anonymous set if rule construction fails [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed Jul 5 18:55:15 2023 +0200

    netfilter: nf_tables: unbind non-anonymous set if rule construction fails
    
    [ 3e70489721b6c870252c9082c496703677240f53 ]
    
    Otherwise a dangling reference to a rule object that is gone remains
    in the set binding list.
    
    Fixes: 26b5a5712eb8 ("netfilter: nf_tables: add NFT_TRANS_PREPARE_ERROR to deal with bound set/chain")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: use net_generic infra for transaction data [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed Jul 5 18:55:11 2023 +0200

    netfilter: nf_tables: use net_generic infra for transaction data
    
    [ 0854db2aaef3fcdd3498a9d299c60adea2aa3dc6 ]
    
    This moves all nf_tables pernet data from struct net to a net_generic
    extension, with the exception of the gencursor.
    
    The latter is used in the data path and also outside of the nf_tables
    core. All others are only used from the configuration plane.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nftables: add helper function to set the base sequence number [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed Jul 5 18:55:09 2023 +0200

    netfilter: nftables: add helper function to set the base sequence number
    
    [ 802b805162a1b7d8391c40ac8a878e9e63287aff ]
    
    This patch adds a helper function to calculate the base sequence number
    field that is stored in the nfnetlink header. Use the helper function
    whenever possible.
    
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
netlink: Add __sock_i_ino() for __netlink_diag_dump(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Mon Jun 26 09:43:13 2023 -0700

    netlink: Add __sock_i_ino() for __netlink_diag_dump().
    
    [ Upstream commit 25a9c8a4431c364f97f75558cb346d2ad3f53fbb ]
    
    syzbot reported a warning in __local_bh_enable_ip(). [0]
    
    Commit 8d61f926d420 ("netlink: fix potential deadlock in
    netlink_set_err()") converted read_lock(&nl_table_lock) to
    read_lock_irqsave() in __netlink_diag_dump() to prevent a deadlock.
    
    However, __netlink_diag_dump() calls sock_i_ino() that uses
    read_lock_bh() and read_unlock_bh().  If CONFIG_TRACE_IRQFLAGS=y,
    read_unlock_bh() finally enables IRQ even though it should stay
    disabled until the following read_unlock_irqrestore().
    
    Using read_lock() in sock_i_ino() would trigger a lockdep splat
    in another place that was fixed in commit f064af1e500a ("net: fix
    a lockdep splat"), so let's add __sock_i_ino() that would be safe
    to use under BH disabled.
    
    [0]:
    WARNING: CPU: 0 PID: 5012 at kernel/softirq.c:376 __local_bh_enable_ip+0xbe/0x130 kernel/softirq.c:376
    Modules linked in:
    CPU: 0 PID: 5012 Comm: syz-executor487 Not tainted 6.4.0-rc7-syzkaller-00202-g6f68fc395f49 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/27/2023
    RIP: 0010:__local_bh_enable_ip+0xbe/0x130 kernel/softirq.c:376
    Code: 45 bf 01 00 00 00 e8 91 5b 0a 00 e8 3c 15 3d 00 fb 65 8b 05 ec e9 b5 7e 85 c0 74 58 5b 5d c3 65 8b 05 b2 b6 b4 7e 85 c0 75 a2 <0f> 0b eb 9e e8 89 15 3d 00 eb 9f 48 89 ef e8 6f 49 18 00 eb a8 0f
    RSP: 0018:ffffc90003a1f3d0 EFLAGS: 00010046
    RAX: 0000000000000000 RBX: 0000000000000201 RCX: 1ffffffff1cf5996
    RDX: 0000000000000000 RSI: 0000000000000201 RDI: ffffffff8805c6f3
    RBP: ffffffff8805c6f3 R08: 0000000000000001 R09: ffff8880152b03a3
    R10: ffffed1002a56074 R11: 0000000000000005 R12: 00000000000073e4
    R13: dffffc0000000000 R14: 0000000000000002 R15: 0000000000000000
    FS:  0000555556726300(0000) GS:ffff8880b9800000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 000000000045ad50 CR3: 000000007c646000 CR4: 00000000003506f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     sock_i_ino+0x83/0xa0 net/core/sock.c:2559
     __netlink_diag_dump+0x45c/0x790 net/netlink/diag.c:171
     netlink_diag_dump+0xd6/0x230 net/netlink/diag.c:207
     netlink_dump+0x570/0xc50 net/netlink/af_netlink.c:2269
     __netlink_dump_start+0x64b/0x910 net/netlink/af_netlink.c:2374
     netlink_dump_start include/linux/netlink.h:329 [inline]
     netlink_diag_handler_dump+0x1ae/0x250 net/netlink/diag.c:238
     __sock_diag_cmd net/core/sock_diag.c:238 [inline]
     sock_diag_rcv_msg+0x31e/0x440 net/core/sock_diag.c:269
     netlink_rcv_skb+0x165/0x440 net/netlink/af_netlink.c:2547
     sock_diag_rcv+0x2a/0x40 net/core/sock_diag.c:280
     netlink_unicast_kernel net/netlink/af_netlink.c:1339 [inline]
     netlink_unicast+0x547/0x7f0 net/netlink/af_netlink.c:1365
     netlink_sendmsg+0x925/0xe30 net/netlink/af_netlink.c:1914
     sock_sendmsg_nosec net/socket.c:724 [inline]
     sock_sendmsg+0xde/0x190 net/socket.c:747
     ____sys_sendmsg+0x71c/0x900 net/socket.c:2503
     ___sys_sendmsg+0x110/0x1b0 net/socket.c:2557
     __sys_sendmsg+0xf7/0x1c0 net/socket.c:2586
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x39/0xb0 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x63/0xcd
    RIP: 0033:0x7f5303aaabb9
    Code: 28 c3 e8 2a 14 00 00 66 2e 0f 1f 84 00 00 00 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 c0 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007ffc7506e548 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f5303aaabb9
    RDX: 0000000000000000 RSI: 0000000020000180 RDI: 0000000000000003
    RBP: 00007f5303a6ed60 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 00007f5303a6edf0
    R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
     </TASK>
    
    Fixes: 8d61f926d420 ("netlink: fix potential deadlock in netlink_set_err()")
    Reported-by: syzbot+5da61cf6a9bc1902d422@syzkaller.appspotmail.com
    Link: https://syzkaller.appspot.com/bug?extid=5da61cf6a9bc1902d422
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230626164313.52528-1-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netlink: do not hard code device address lenth in fdb dumps [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jun 21 17:47:20 2023 +0000

    netlink: do not hard code device address lenth in fdb dumps
    
    [ Upstream commit aa5406950726e336c5c9585b09799a734b6e77bf ]
    
    syzbot reports that some netdev devices do not have a six bytes
    address [1]
    
    Replace ETH_ALEN by dev->addr_len.
    
    [1] (Case of a device where dev->addr_len = 4)
    
    BUG: KMSAN: kernel-infoleak in instrument_copy_to_user include/linux/instrumented.h:114 [inline]
    BUG: KMSAN: kernel-infoleak in copyout+0xb8/0x100 lib/iov_iter.c:169
    instrument_copy_to_user include/linux/instrumented.h:114 [inline]
    copyout+0xb8/0x100 lib/iov_iter.c:169
    _copy_to_iter+0x6d8/0x1d00 lib/iov_iter.c:536
    copy_to_iter include/linux/uio.h:206 [inline]
    simple_copy_to_iter+0x68/0xa0 net/core/datagram.c:513
    __skb_datagram_iter+0x123/0xdc0 net/core/datagram.c:419
    skb_copy_datagram_iter+0x5c/0x200 net/core/datagram.c:527
    skb_copy_datagram_msg include/linux/skbuff.h:3960 [inline]
    netlink_recvmsg+0x4ae/0x15a0 net/netlink/af_netlink.c:1970
    sock_recvmsg_nosec net/socket.c:1019 [inline]
    sock_recvmsg net/socket.c:1040 [inline]
    ____sys_recvmsg+0x283/0x7f0 net/socket.c:2722
    ___sys_recvmsg+0x223/0x840 net/socket.c:2764
    do_recvmmsg+0x4f9/0xfd0 net/socket.c:2858
    __sys_recvmmsg net/socket.c:2937 [inline]
    __do_sys_recvmmsg net/socket.c:2960 [inline]
    __se_sys_recvmmsg net/socket.c:2953 [inline]
    __x64_sys_recvmmsg+0x397/0x490 net/socket.c:2953
    do_syscall_x64 arch/x86/entry/common.c:50 [inline]
    do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
    entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    Uninit was stored to memory at:
    __nla_put lib/nlattr.c:1009 [inline]
    nla_put+0x1c6/0x230 lib/nlattr.c:1067
    nlmsg_populate_fdb_fill+0x2b8/0x600 net/core/rtnetlink.c:4071
    nlmsg_populate_fdb net/core/rtnetlink.c:4418 [inline]
    ndo_dflt_fdb_dump+0x616/0x840 net/core/rtnetlink.c:4456
    rtnl_fdb_dump+0x14ff/0x1fc0 net/core/rtnetlink.c:4629
    netlink_dump+0x9d1/0x1310 net/netlink/af_netlink.c:2268
    netlink_recvmsg+0xc5c/0x15a0 net/netlink/af_netlink.c:1995
    sock_recvmsg_nosec+0x7a/0x120 net/socket.c:1019
    ____sys_recvmsg+0x664/0x7f0 net/socket.c:2720
    ___sys_recvmsg+0x223/0x840 net/socket.c:2764
    do_recvmmsg+0x4f9/0xfd0 net/socket.c:2858
    __sys_recvmmsg net/socket.c:2937 [inline]
    __do_sys_recvmmsg net/socket.c:2960 [inline]
    __se_sys_recvmmsg net/socket.c:2953 [inline]
    __x64_sys_recvmmsg+0x397/0x490 net/socket.c:2953
    do_syscall_x64 arch/x86/entry/common.c:50 [inline]
    do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
    entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    Uninit was created at:
    slab_post_alloc_hook+0x12d/0xb60 mm/slab.h:716
    slab_alloc_node mm/slub.c:3451 [inline]
    __kmem_cache_alloc_node+0x4ff/0x8b0 mm/slub.c:3490
    kmalloc_trace+0x51/0x200 mm/slab_common.c:1057
    kmalloc include/linux/slab.h:559 [inline]
    __hw_addr_create net/core/dev_addr_lists.c:60 [inline]
    __hw_addr_add_ex+0x2e5/0x9e0 net/core/dev_addr_lists.c:118
    __dev_mc_add net/core/dev_addr_lists.c:867 [inline]
    dev_mc_add+0x9a/0x130 net/core/dev_addr_lists.c:885
    igmp6_group_added+0x267/0xbc0 net/ipv6/mcast.c:680
    ipv6_mc_up+0x296/0x3b0 net/ipv6/mcast.c:2754
    ipv6_mc_remap+0x1e/0x30 net/ipv6/mcast.c:2708
    addrconf_type_change net/ipv6/addrconf.c:3731 [inline]
    addrconf_notify+0x4d3/0x1d90 net/ipv6/addrconf.c:3699
    notifier_call_chain kernel/notifier.c:93 [inline]
    raw_notifier_call_chain+0xe4/0x430 kernel/notifier.c:461
    call_netdevice_notifiers_info net/core/dev.c:1935 [inline]
    call_netdevice_notifiers_extack net/core/dev.c:1973 [inline]
    call_netdevice_notifiers+0x1ee/0x2d0 net/core/dev.c:1987
    bond_enslave+0xccd/0x53f0 drivers/net/bonding/bond_main.c:1906
    do_set_master net/core/rtnetlink.c:2626 [inline]
    rtnl_newlink_create net/core/rtnetlink.c:3460 [inline]
    __rtnl_newlink net/core/rtnetlink.c:3660 [inline]
    rtnl_newlink+0x378c/0x40e0 net/core/rtnetlink.c:3673
    rtnetlink_rcv_msg+0x16a6/0x1840 net/core/rtnetlink.c:6395
    netlink_rcv_skb+0x371/0x650 net/netlink/af_netlink.c:2546
    rtnetlink_rcv+0x34/0x40 net/core/rtnetlink.c:6413
    netlink_unicast_kernel net/netlink/af_netlink.c:1339 [inline]
    netlink_unicast+0xf28/0x1230 net/netlink/af_netlink.c:1365
    netlink_sendmsg+0x122f/0x13d0 net/netlink/af_netlink.c:1913
    sock_sendmsg_nosec net/socket.c:724 [inline]
    sock_sendmsg net/socket.c:747 [inline]
    ____sys_sendmsg+0x999/0xd50 net/socket.c:2503
    ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2557
    __sys_sendmsg net/socket.c:2586 [inline]
    __do_sys_sendmsg net/socket.c:2595 [inline]
    __se_sys_sendmsg net/socket.c:2593 [inline]
    __x64_sys_sendmsg+0x304/0x490 net/socket.c:2593
    do_syscall_x64 arch/x86/entry/common.c:50 [inline]
    do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
    entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    Bytes 2856-2857 of 3500 are uninitialized
    Memory access of size 3500 starts at ffff888018d99104
    Data copied to user address 0000000020000480
    
    Fixes: d83b06036048 ("net: add fdb generic dump routine")
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Link: https://lore.kernel.org/r/20230621174720.1845040-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netlink: fix potential deadlock in netlink_set_err() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jun 21 15:43:37 2023 +0000

    netlink: fix potential deadlock in netlink_set_err()
    
    [ Upstream commit 8d61f926d42045961e6b65191c09e3678d86a9cf ]
    
    syzbot reported a possible deadlock in netlink_set_err() [1]
    
    A similar issue was fixed in commit 1d482e666b8e ("netlink: disable IRQs
    for netlink_lock_table()") in netlink_lock_table()
    
    This patch adds IRQ safety to netlink_set_err() and __netlink_diag_dump()
    which were not covered by cited commit.
    
    [1]
    
    WARNING: possible irq lock inversion dependency detected
    6.4.0-rc6-syzkaller-00240-g4e9f0ec38852 #0 Not tainted
    
    syz-executor.2/23011 just changed the state of lock:
    ffffffff8e1a7a58 (nl_table_lock){.+.?}-{2:2}, at: netlink_set_err+0x2e/0x3a0 net/netlink/af_netlink.c:1612
    but this lock was taken by another, SOFTIRQ-safe lock in the past:
     (&local->queue_stop_reason_lock){..-.}-{2:2}
    
    and interrupts could create inverse lock ordering between them.
    
    other info that might help us debug this:
     Possible interrupt unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(nl_table_lock);
                                   local_irq_disable();
                                   lock(&local->queue_stop_reason_lock);
                                   lock(nl_table_lock);
      <Interrupt>
        lock(&local->queue_stop_reason_lock);
    
     *** DEADLOCK ***
    
    Fixes: 1d482e666b8e ("netlink: disable IRQs for netlink_lock_table()")
    Reported-by: syzbot+a7d200a347f912723e5c@syzkaller.appspotmail.com
    Link: https://syzkaller.appspot.com/bug?extid=a7d200a347f912723e5c
    Link: https://lore.kernel.org/netdev/000000000000e38d1605fea5747e@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Johannes Berg <johannes.berg@intel.com>
    Link: https://lore.kernel.org/r/20230621154337.1668594-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfc: constify several pointers to u8, char and sk_buff [+ + +]
Author: Krzysztof Kozlowski <krzk@kernel.org>
Date:   Fri Jul 30 16:41:59 2021 +0200

    nfc: constify several pointers to u8, char and sk_buff
    
    [ Upstream commit 3df40eb3a2ea58bf404a38f15a7a2768e4762cb0 ]
    
    Several functions receive pointers to u8, char or sk_buff but do not
    modify the contents so make them const.  This allows doing the same for
    local variables and in total makes the code a little bit safer.
    
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 0d9b41daa590 ("nfc: llcp: fix possible use of uninitialized variable in nfc_llcp_send_connect()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfc: llcp: fix possible use of uninitialized variable in nfc_llcp_send_connect() [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Sat May 13 13:52:04 2023 +0200

    nfc: llcp: fix possible use of uninitialized variable in nfc_llcp_send_connect()
    
    [ Upstream commit 0d9b41daa5907756a31772d8af8ac5ff25cf17c1 ]
    
    If sock->service_name is NULL, the local variable
    service_name_tlv_length will not be assigned by nfc_llcp_build_tlv(),
    later leading to using value frmo the stack.  Smatch warning:
    
      net/nfc/llcp_commands.c:442 nfc_llcp_send_connect() error: uninitialized symbol 'service_name_tlv_length'.
    
    Fixes: de9e5aeb4f40 ("NFC: llcp: Fix usage of llcp_add_tlv()")
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFSD: add encoding of op_recall flag for write delegation [+ + +]
Author: Dai Ngo <dai.ngo@oracle.com>
Date:   Tue Jun 6 16:41:02 2023 -0700

    NFSD: add encoding of op_recall flag for write delegation
    
    commit 58f5d894006d82ed7335e1c37182fbc5f08c2f51 upstream.
    
    Modified nfsd4_encode_open to encode the op_recall flag properly
    for OPEN result with write delegation granted.
    
    Signed-off-by: Dai Ngo <dai.ngo@oracle.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
NTB: amd: Fix error handling in amd_ntb_pci_driver_init() [+ + +]
Author: Yuan Can <yuancan@huawei.com>
Date:   Sat Nov 5 09:43:09 2022 +0000

    NTB: amd: Fix error handling in amd_ntb_pci_driver_init()
    
    [ Upstream commit 98af0a33c1101c29b3ce4f0cf4715fd927c717f9 ]
    
    A problem about ntb_hw_amd create debugfs failed is triggered with the
    following log given:
    
     [  618.431232] AMD(R) PCI-E Non-Transparent Bridge Driver 1.0
     [  618.433284] debugfs: Directory 'ntb_hw_amd' with parent '/' already present!
    
    The reason is that amd_ntb_pci_driver_init() returns pci_register_driver()
    directly without checking its return value, if pci_register_driver()
    failed, it returns without destroy the newly created debugfs, resulting
    the debugfs of ntb_hw_amd can never be created later.
    
     amd_ntb_pci_driver_init()
       debugfs_create_dir() # create debugfs directory
       pci_register_driver()
         driver_register()
           bus_add_driver()
             priv = kzalloc(...) # OOM happened
       # return without destroy debugfs directory
    
    Fix by removing debugfs when pci_register_driver() returns error.
    
    Fixes: a1b3695820aa ("NTB: Add support for AMD PCI-Express Non-Transparent Bridge")
    Signed-off-by: Yuan Can <yuancan@huawei.com>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ntb: idt: Fix error handling in idt_pci_driver_init() [+ + +]
Author: Yuan Can <yuancan@huawei.com>
Date:   Sat Nov 5 09:43:01 2022 +0000

    ntb: idt: Fix error handling in idt_pci_driver_init()
    
    [ Upstream commit c012968259b451dc4db407f2310fe131eaefd800 ]
    
    A problem about ntb_hw_idt create debugfs failed is triggered with the
    following log given:
    
     [ 1236.637636] IDT PCI-E Non-Transparent Bridge Driver 2.0
     [ 1236.639292] debugfs: Directory 'ntb_hw_idt' with parent '/' already present!
    
    The reason is that idt_pci_driver_init() returns pci_register_driver()
    directly without checking its return value, if pci_register_driver()
    failed, it returns without destroy the newly created debugfs, resulting
    the debugfs of ntb_hw_idt can never be created later.
    
     idt_pci_driver_init()
       debugfs_create_dir() # create debugfs directory
       pci_register_driver()
         driver_register()
           bus_add_driver()
             priv = kzalloc(...) # OOM happened
       # return without destroy debugfs directory
    
    Fix by removing debugfs when pci_register_driver() returns error.
    
    Fixes: bf2a952d31d2 ("NTB: Add IDT 89HPESxNTx PCIe-switches support")
    Signed-off-by: Yuan Can <yuancan@huawei.com>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ntb: intel: Fix error handling in intel_ntb_pci_driver_init() [+ + +]
Author: Yuan Can <yuancan@huawei.com>
Date:   Sat Nov 5 09:43:22 2022 +0000

    ntb: intel: Fix error handling in intel_ntb_pci_driver_init()
    
    [ Upstream commit 4c3c796aca02883ad35bb117468938cc4022ca41 ]
    
    A problem about ntb_hw_intel create debugfs failed is triggered with the
    following log given:
    
     [  273.112733] Intel(R) PCI-E Non-Transparent Bridge Driver 2.0
     [  273.115342] debugfs: Directory 'ntb_hw_intel' with parent '/' already present!
    
    The reason is that intel_ntb_pci_driver_init() returns
    pci_register_driver() directly without checking its return value, if
    pci_register_driver() failed, it returns without destroy the newly created
    debugfs, resulting the debugfs of ntb_hw_intel can never be created later.
    
     intel_ntb_pci_driver_init()
       debugfs_create_dir() # create debugfs directory
       pci_register_driver()
         driver_register()
           bus_add_driver()
             priv = kzalloc(...) # OOM happened
       # return without destroy debugfs directory
    
    Fix by removing debugfs when pci_register_driver() returns error.
    
    Fixes: e26a5843f7f5 ("NTB: Split ntb_hw_intel and ntb_transport drivers")
    Signed-off-by: Yuan Can <yuancan@huawei.com>
    Acked-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NTB: ntb_tool: Add check for devm_kcalloc [+ + +]
Author: Jiasheng Jiang <jiasheng@iscas.ac.cn>
Date:   Tue Nov 22 11:32:44 2022 +0800

    NTB: ntb_tool: Add check for devm_kcalloc
    
    [ Upstream commit 2790143f09938776a3b4f69685b380bae8fd06c7 ]
    
    As the devm_kcalloc may return NULL pointer,
    it should be better to add check for the return
    value, as same as the others.
    
    Fixes: 7f46c8b3a552 ("NTB: ntb_tool: Add full multi-port NTB API support")
    Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
    Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
    Reviewed-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

NTB: ntb_transport: fix possible memory leak while device_register() fails [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Thu Nov 10 23:19:17 2022 +0800

    NTB: ntb_transport: fix possible memory leak while device_register() fails
    
    [ Upstream commit 8623ccbfc55d962e19a3537652803676ad7acb90 ]
    
    If device_register() returns error, the name allocated by
    dev_set_name() need be freed. As comment of device_register()
    says, it should use put_device() to give up the reference in
    the error path. So fix this by calling put_device(), then the
    name can be freed in kobject_cleanup(), and client_dev is freed
    in ntb_transport_client_release().
    
    Fixes: fce8a7bb5b4b ("PCI-Express Non-Transparent Bridge Support")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Reviewed-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PCI/ASPM: Avoid link retraining race [+ + +]
Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Date:   Tue May 2 11:39:23 2023 +0300

    PCI/ASPM: Avoid link retraining race
    
    [ Upstream commit e7e39756363ad5bd83ddeae1063193d0f13870fd ]
    
    PCIe r6.0.1, sec 7.5.3.7, recommends setting the link control parameters,
    then waiting for the Link Training bit to be clear before setting the
    Retrain Link bit.
    
    This avoids a race where the LTSSM may not use the updated parameters if it
    is already in the midst of link training because of other normal link
    activity.
    
    Wait for the Link Training bit to be clear before toggling the Retrain Link
    bit to ensure that the LTSSM uses the updated link control parameters.
    
    [bhelgaas: commit log, return 0 (success)/-ETIMEDOUT instead of bool for
    both pcie_wait_for_retrain() and the existing pcie_retrain_link()]
    Suggested-by: Lukas Wunner <lukas@wunner.de>
    Fixes: 7d715a6c1ae5 ("PCI: add PCI Express ASPM support")
    Link: https://lore.kernel.org/r/20230502083923.34562-1-ilpo.jarvinen@linux.intel.com
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Lukas Wunner <lukas@wunner.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI/ASPM: Factor out pcie_wait_for_retrain() [+ + +]
Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Date:   Tue Jun 20 14:49:33 2023 -0500

    PCI/ASPM: Factor out pcie_wait_for_retrain()
    
    [ Upstream commit 9c7f136433d26592cb4d9cd00b4e15c33d9797c6 ]
    
    Factor pcie_wait_for_retrain() out from pcie_retrain_link().  No functional
    change intended.
    
    [bhelgaas: split out from
    https: //lore.kernel.org/r/20230502083923.34562-1-ilpo.jarvinen@linux.intel.com]
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Stable-dep-of: e7e39756363a ("PCI/ASPM: Avoid link retraining race")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI/ASPM: Return 0 or -ETIMEDOUT from pcie_retrain_link() [+ + +]
Author: Bjorn Helgaas <bhelgaas@google.com>
Date:   Tue Jun 20 14:44:55 2023 -0500

    PCI/ASPM: Return 0 or -ETIMEDOUT from pcie_retrain_link()
    
    [ Upstream commit f5297a01ee805d7fa569d288ed65fc0f9ac9b03d ]
    
    "pcie_retrain_link" is not a question with a true/false answer, so "bool"
    isn't quite the right return type.  Return 0 for success or -ETIMEDOUT if
    the retrain failed.  No functional change intended.
    
    [bhelgaas: based on Ilpo's patch below]
    Link: https://lore.kernel.org/r/20230502083923.34562-1-ilpo.jarvinen@linux.intel.com
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Stable-dep-of: e7e39756363a ("PCI/ASPM: Avoid link retraining race")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PCI/PM: Avoid putting EloPOS E2/S2/H2 PCIe Ports in D3cold [+ + +]
Author: Ondrej Zary <linux@zary.sk>
Date:   Wed Jun 14 09:42:53 2023 +0200

    PCI/PM: Avoid putting EloPOS E2/S2/H2 PCIe Ports in D3cold
    
    commit 9e30fd26f43b89cb6b4e850a86caa2e50dedb454 upstream.
    
    The quirk for Elo i2 introduced in commit 92597f97a40b ("PCI/PM: Avoid
    putting Elo i2 PCIe Ports in D3cold") is also needed by EloPOS E2/S2/H2
    which uses the same Continental Z2 board.
    
    Change the quirk to match the board instead of system.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=215715
    Link: https://lore.kernel.org/r/20230614074253.22318-1-linux@zary.sk
    Signed-off-by: Ondrej Zary <linux@zary.sk>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI: Add function 1 DMA alias quirk for Marvell 88SE9235 [+ + +]
Author: Robin Murphy <robin.murphy@arm.com>
Date:   Wed Jun 7 18:18:47 2023 +0100

    PCI: Add function 1 DMA alias quirk for Marvell 88SE9235
    
    commit 88d341716b83abd355558523186ca488918627ee upstream.
    
    Marvell's own product brief implies the 92xx series are a closely related
    family, and sure enough it turns out that 9235 seems to need the same quirk
    as the other three, although possibly only when certain ports are used.
    
    Link: https://lore.kernel.org/linux-iommu/2a699a99-545c-1324-e052-7d2f41fed1ae@yahoo.co.uk/
    Link: https://lore.kernel.org/r/731507e05d70239aec96fcbfab6e65d8ce00edd2.1686157165.git.robin.murphy@arm.com
    Reported-by: Jason Adriaanse <jason_a69@yahoo.co.uk>
    Signed-off-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: Add pci_clear_master() stub for non-CONFIG_PCI [+ + +]
Author: Sui Jingfeng <suijingfeng@loongson.cn>
Date:   Wed May 31 18:27:44 2023 +0800

    PCI: Add pci_clear_master() stub for non-CONFIG_PCI
    
    [ Upstream commit 2aa5ac633259843f656eb6ecff4cf01e8e810c5e ]
    
    Add a pci_clear_master() stub when CONFIG_PCI is not set so drivers that
    support both PCI and platform devices don't need #ifdefs or extra Kconfig
    symbols for the PCI parts.
    
    [bhelgaas: commit log]
    Fixes: 6a479079c072 ("PCI: Add pci_clear_master() as opposite of pci_set_master()")
    Link: https://lore.kernel.org/r/20230531102744.2354313-1-suijingfeng@loongson.cn
    Signed-off-by: Sui Jingfeng <suijingfeng@loongson.cn>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: qcom: Disable write access to read only registers for IP v2.3.3 [+ + +]
Author: Manivannan Sadhasivam <mani@kernel.org>
Date:   Mon Jun 19 20:34:00 2023 +0530

    PCI: qcom: Disable write access to read only registers for IP v2.3.3
    
    commit a33d700e8eea76c62120cb3dbf5e01328f18319a upstream.
    
    In the post init sequence of v2.9.0, write access to read only registers
    are not disabled after updating the registers. Fix it by disabling the
    access after register update.
    
    Link: https://lore.kernel.org/r/20230619150408.8468-2-manivannan.sadhasivam@linaro.org
    Fixes: 5d76117f070d ("PCI: qcom: Add support for IPQ8074 PCIe controller")
    Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: Rework pcie_retrain_link() wait loop [+ + +]
Author: Stefan Mätje <stefan.maetje@esd.eu>
Date:   Fri Mar 29 18:07:36 2019 +0100

    PCI: Rework pcie_retrain_link() wait loop
    
    [ Upstream commit 658eec837b11fbfab9082ebf8da24d94cefa47c0 ]
    
    Transform wait code to a "do {} while (time_before())" loop as recommended
    by reviewer.  No functional change intended.
    
    Signed-off-by: Stefan Mätje <stefan.maetje@esd.eu>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Stable-dep-of: e7e39756363a ("PCI/ASPM: Avoid link retraining race")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: rockchip: Add poll and timeout to wait for PHY PLLs to be locked [+ + +]
Author: Rick Wertenbroek <rick.wertenbroek@gmail.com>
Date:   Tue Apr 18 09:46:51 2023 +0200

    PCI: rockchip: Add poll and timeout to wait for PHY PLLs to be locked
    
    commit 9dd3c7c4c8c3f7f010d9cdb7c3f42506d93c9527 upstream.
    
    The RK3399 PCIe controller should wait until the PHY PLLs are locked.
    Add poll and timeout to wait for PHY PLLs to be locked. If they cannot
    be locked generate error message and jump to error handler. Accessing
    registers in the PHY clock domain when PLLs are not locked causes hang
    The PHY PLLs status is checked through a side channel register.
    This is documented in the TRM section 17.5.8.1 "PCIe Initialization
    Sequence".
    
    Link: https://lore.kernel.org/r/20230418074700.1083505-5-rick.wertenbroek@gmail.com
    Fixes: cf590b078391 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
    Tested-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Rick Wertenbroek <rick.wertenbroek@gmail.com>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: rockchip: Assert PCI Configuration Enable bit after probe [+ + +]
Author: Rick Wertenbroek <rick.wertenbroek@gmail.com>
Date:   Tue Apr 18 09:46:50 2023 +0200

    PCI: rockchip: Assert PCI Configuration Enable bit after probe
    
    commit f397fd4ac1fa3afcabd8cee030f953ccaed2a364 upstream.
    
    Assert PCI Configuration Enable bit after probe. When this bit is left to
    0 in the endpoint mode, the RK3399 PCIe endpoint core will generate
    configuration request retry status (CRS) messages back to the root complex.
    Assert this bit after probe to allow the RK3399 PCIe endpoint core to reply
    to configuration requests from the root complex.
    This is documented in section 17.5.8.1.2 of the RK3399 TRM.
    
    Link: https://lore.kernel.org/r/20230418074700.1083505-4-rick.wertenbroek@gmail.com
    Fixes: cf590b078391 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
    Tested-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Rick Wertenbroek <rick.wertenbroek@gmail.com>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: rockchip: Fix legacy IRQ generation for RK3399 PCIe endpoint core [+ + +]
Author: Rick Wertenbroek <rick.wertenbroek@gmail.com>
Date:   Tue Apr 18 09:46:54 2023 +0200

    PCI: rockchip: Fix legacy IRQ generation for RK3399 PCIe endpoint core
    
    commit 166e89d99dd85a856343cca51eee781b793801f2 upstream.
    
    Fix legacy IRQ generation for RK3399 PCIe endpoint core according to
    the technical reference manual (TRM). Assert and deassert legacy
    interrupt (INTx) through the legacy interrupt control register
    ("PCIE_CLIENT_LEGACY_INT_CTRL") instead of manually generating a PCIe
    message. The generation of the legacy interrupt was tested and validated
    with the PCIe endpoint test driver.
    
    Link: https://lore.kernel.org/r/20230418074700.1083505-8-rick.wertenbroek@gmail.com
    Fixes: cf590b078391 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
    Tested-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Rick Wertenbroek <rick.wertenbroek@gmail.com>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: rockchip: Use u32 variable to access 32-bit registers [+ + +]
Author: Rick Wertenbroek <rick.wertenbroek@gmail.com>
Date:   Tue Apr 18 09:46:56 2023 +0200

    PCI: rockchip: Use u32 variable to access 32-bit registers
    
    commit 8962b2cb39119cbda4fc69a1f83957824f102f81 upstream.
    
    Previously u16 variables were used to access 32-bit registers, this
    resulted in not all of the data being read from the registers. Also
    the left shift of more than 16-bits would result in moving data out
    of the variable. Use u32 variables to access 32-bit registers
    
    Link: https://lore.kernel.org/r/20230418074700.1083505-10-rick.wertenbroek@gmail.com
    Fixes: cf590b078391 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
    Tested-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Rick Wertenbroek <rick.wertenbroek@gmail.com>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: rockchip: Write PCI Device ID to correct register [+ + +]
Author: Rick Wertenbroek <rick.wertenbroek@gmail.com>
Date:   Tue Apr 18 09:46:49 2023 +0200

    PCI: rockchip: Write PCI Device ID to correct register
    
    commit 1f1c42ece18de365c976a060f3c8eb481b038e3a upstream.
    
    Write PCI Device ID (DID) to the correct register. The Device ID was not
    updated through the correct register. Device ID was written to a read-only
    register and therefore did not work. The Device ID is now set through the
    correct register. This is documented in the RK3399 TRM section 17.6.6.1.1
    
    Link: https://lore.kernel.org/r/20230418074700.1083505-3-rick.wertenbroek@gmail.com
    Fixes: cf590b078391 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
    Tested-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Rick Wertenbroek <rick.wertenbroek@gmail.com>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
perf dwarf-aux: Fix off-by-one in die_get_varname() [+ + +]
Author: Namhyung Kim <namhyung@kernel.org>
Date:   Mon Jun 12 16:41:01 2023 -0700

    perf dwarf-aux: Fix off-by-one in die_get_varname()
    
    [ Upstream commit 3abfcfd847717d232e36963f31a361747c388fe7 ]
    
    The die_get_varname() returns "(unknown_type)" string if it failed to
    find a type for the variable.  But it had a space before the opening
    parenthesis and it made the closing parenthesis cut off due to the
    off-by-one in the string length (14).
    
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Fixes: 88fd633cdfa19060 ("perf probe: No need to use formatting strbuf method")
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20230612234102.3909116-1-namhyung@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf intel-pt: Fix CYC timestamps after standalone CBR [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Mon Apr 3 18:48:31 2023 +0300

    perf intel-pt: Fix CYC timestamps after standalone CBR
    
    commit 430635a0ef1ce958b7b4311f172694ece2c692b8 upstream.
    
    After a standalone CBR (not associated with TSC), update the cycles
    reference timestamp and reset the cycle count, so that CYC timestamps
    are calculated relative to that point with the new frequency.
    
    Fixes: cc33618619cefc6d ("perf tools: Add Intel PT support for decoding CYC packets")
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230403154831.8651-2-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
perf probe: Add test for regression introduced by switch to die_get_decl_file() [+ + +]
Author: Georg Müller <georgmueller@gmx.net>
Date:   Wed Jun 28 10:45:50 2023 +0200

    perf probe: Add test for regression introduced by switch to die_get_decl_file()
    
    commit 56cbeacf143530576905623ac72ae0964f3293a6 upstream.
    
    This patch adds a test to validate that 'perf probe' works for binaries
    where DWARF info is split into multiple CUs
    
    Signed-off-by: Georg Müller <georgmueller@gmx.net>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: regressions@lists.linux.dev
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230628084551.1860532-5-georgmueller@gmx.net
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
perf test uprobe_from_different_cu: Skip if there is no gcc [+ + +]
Author: Georg Müller <georgmueller@gmx.net>
Date:   Fri Jul 28 17:18:12 2023 +0200

    perf test uprobe_from_different_cu: Skip if there is no gcc
    
    [ Upstream commit 98ce8e4a9dcfb448b30a2d7a16190f4a00382377 ]
    
    Without gcc, the test will fail.
    
    On cleanup, ignore probe removal errors. Otherwise, in case of an error
    adding the probe, the temporary directory is not removed.
    
    Fixes: 56cbeacf14353057 ("perf probe: Add test for regression introduced by switch to die_get_decl_file()")
    Signed-off-by: Georg Müller <georgmueller@gmx.net>
    Acked-by: Ian Rogers <irogers@google.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Georg Müller <georgmueller@gmx.net>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20230728151812.454806-2-georgmueller@gmx.net
    Link: https://lore.kernel.org/r/CAP-5=fUP6UuLgRty3t2=fQsQi3k4hDMz415vWdp1x88QMvZ8ug@mail.gmail.com/
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf: Fix function pointer case [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Wed Nov 16 22:40:17 2022 +0100

    perf: Fix function pointer case
    
    commit 1af6239d1d3e61d33fd2f0ba53d3d1a67cc50574 upstream.
    
    With the advent of CFI it is no longer acceptible to cast function
    pointers.
    
    The robot complains thusly:
    
      kernel-events-core.c:warning:cast-from-int-(-)(struct-perf_cpu_pmu_context-)-to-remote_function_f-(aka-int-(-)(void-)-)-converts-to-incompatible-function-type
    
    Reported-by: kernel test robot <lkp@intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Cixi Geng <cixi.geng1@unisoc.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
phy: hisilicon: Fix an out of bounds check in hisi_inno_phy_probe() [+ + +]
Author: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Date:   Fri Jul 21 02:05:55 2023 -0700

    phy: hisilicon: Fix an out of bounds check in hisi_inno_phy_probe()
    
    [ Upstream commit 13c088cf3657d70893d75cf116be937f1509cc0f ]
    
    The size of array 'priv->ports[]' is INNO_PHY_PORT_NUM.
    
    In the for loop, 'i' is used as the index for array 'priv->ports[]'
    with a check (i > INNO_PHY_PORT_NUM) which indicates that
    INNO_PHY_PORT_NUM is allowed value for 'i' in the same loop.
    
    This > comparison needs to be changed to >=, otherwise it potentially leads
    to an out of bounds write on the next iteration through the loop
    
    Fixes: ba8b0ee81fbb ("phy: add inno-usb2-phy driver for hi3798cv200 SoC")
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Link: https://lore.kernel.org/r/20230721090558.3588613-1-harshit.m.mogalapalli@oracle.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pinctrl: amd: Detect internal GPIO0 debounce handling [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Fri Apr 21 07:06:21 2023 -0500

    pinctrl: amd: Detect internal GPIO0 debounce handling
    
    commit 968ab9261627fa305307e3935ca1a32fcddd36cb upstream.
    
    commit 4e5a04be88fe ("pinctrl: amd: disable and mask interrupts on probe")
    had a mistake in loop iteration 63 that it would clear offset 0xFC instead
    of 0x100.  Offset 0xFC is actually `WAKE_INT_MASTER_REG`.  This was
    clearing bits 13 and 15 from the register which significantly changed the
    expected handling for some platforms for GPIO0.
    
    commit b26cd9325be4 ("pinctrl: amd: Disable and mask interrupts on resume")
    actually fixed this bug, but lead to regressions on Lenovo Z13 and some
    other systems.  This is because there was no handling in the driver for bit
    15 debounce behavior.
    
    Quoting a public BKDG:
    ```
    EnWinBlueBtn. Read-write. Reset: 0. 0=GPIO0 detect debounced power button;
    Power button override is 4 seconds. 1=GPIO0 detect debounced power button
    in S3/S5/S0i3, and detect "pressed less than 2 seconds" and "pressed 2~10
    seconds" in S0; Power button override is 10 seconds
    ```
    
    Cross referencing the same master register in Windows it's obvious that
    Windows doesn't use debounce values in this configuration.  So align the
    Linux driver to do this as well.  This fixes wake on lid when
    WAKE_INT_MASTER_REG is properly programmed.
    
    Cc: stable@vger.kernel.org
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=217315
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://lore.kernel.org/r/20230421120625.3366-2-mario.limonciello@amd.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pinctrl: amd: Fix mistake in handling clearing pins at startup [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Fri Apr 21 07:06:22 2023 -0500

    pinctrl: amd: Fix mistake in handling clearing pins at startup
    
    commit a855724dc08b8cb0c13ab1e065a4922f1e5a7552 upstream.
    
    commit 4e5a04be88fe ("pinctrl: amd: disable and mask interrupts on probe")
    had a mistake in loop iteration 63 that it would clear offset 0xFC instead
    of 0x100.  Offset 0xFC is actually `WAKE_INT_MASTER_REG`.  This was
    clearing bits 13 and 15 from the register which significantly changed the
    expected handling for some platforms for GPIO0.
    
    Cc: stable@vger.kernel.org
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=217315
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://lore.kernel.org/r/20230421120625.3366-3-mario.limonciello@amd.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pinctrl: amd: Only use special debounce behavior for GPIO 0 [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Wed Jul 5 08:30:02 2023 -0500

    pinctrl: amd: Only use special debounce behavior for GPIO 0
    
    commit 0d5ace1a07f7e846d0f6d972af60d05515599d0b upstream.
    
    It's uncommon to use debounce on any other pin, but technically
    we should only set debounce to 0 when working off GPIO0.
    
    Cc: stable@vger.kernel.org
    Tested-by: Jan Visser <starquake@linuxeverywhere.org>
    Fixes: 968ab9261627 ("pinctrl: amd: Detect internal GPIO0 debounce handling")
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://lore.kernel.org/r/20230705133005.577-2-mario.limonciello@amd.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pinctrl: amd: Use amd_pinconf_set() for all config options [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Wed Jul 5 08:30:03 2023 -0500

    pinctrl: amd: Use amd_pinconf_set() for all config options
    
    [ Upstream commit 635a750d958e158e17af0f524bedc484b27fbb93 ]
    
    On ASUS TUF A16 it is reported that the ITE5570 ACPI device connected to
    GPIO 7 is causing an interrupt storm.  This issue doesn't happen on
    Windows.
    
    Comparing the GPIO register configuration between Windows and Linux
    bit 20 has been configured as a pull up on Windows, but not on Linux.
    Checking GPIO declaration from the firmware it is clear it *should* have
    been a pull up on Linux as well.
    
    ```
    GpioInt (Level, ActiveLow, Exclusive, PullUp, 0x0000,
             "\\_SB.GPIO", 0x00, ResourceConsumer, ,)
    {   // Pin list
    0x0007
    }
    ```
    
    On Linux amd_gpio_set_config() is currently only used for programming
    the debounce. Actually the GPIO core calls it with all the arguments
    that are supported by a GPIO, pinctrl-amd just responds `-ENOTSUPP`.
    
    To solve this issue expand amd_gpio_set_config() to support the other
    arguments amd_pinconf_set() supports, namely `PIN_CONFIG_BIAS_PULL_DOWN`,
    `PIN_CONFIG_BIAS_PULL_UP`, and `PIN_CONFIG_DRIVE_STRENGTH`.
    
    Reported-by: Nik P <npliashechnikov@gmail.com>
    Reported-by: Nathan Schulte <nmschulte@gmail.com>
    Reported-by: Friedrich Vock <friedrich.vock@gmx.de>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217336
    Reported-by: dridri85@gmail.com
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217493
    Link: https://lore.kernel.org/linux-input/20230530154058.17594-1-friedrich.vock@gmx.de/
    Tested-by: Jan Visser <starquake@linuxeverywhere.org>
    Fixes: 2956b5d94a76 ("pinctrl / gpio: Introduce .set_config() callback for GPIO chips")
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20230705133005.577-3-mario.limonciello@amd.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: at91-pio4: check return value of devm_kasprintf() [+ + +]
Author: Claudiu Beznea <claudiu.beznea@microchip.com>
Date:   Thu Jun 15 13:53:33 2023 +0300

    pinctrl: at91-pio4: check return value of devm_kasprintf()
    
    [ Upstream commit f6fd5d4ff8ca0b24cee1af4130bcb1fa96b61aa0 ]
    
    devm_kasprintf() returns a pointer to dynamically allocated memory.
    Pointer could be NULL in case allocation fails. Check pointer validity.
    Identified with coccinelle (kmerr.cocci script).
    
    Fixes: 776180848b57 ("pinctrl: introduce driver for Atmel PIO4 controller")
    Depends-on: 1c4e5c470a56 ("pinctrl: at91: use devm_kasprintf() to avoid potential leaks")
    Depends-on: 5a8f9cf269e8 ("pinctrl: at91-pio4: use proper format specifier for unsigned int")
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20230615105333.585304-4-claudiu.beznea@microchip.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: cherryview: Return correct value if pin in push-pull mode [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Mon Jun 5 17:37:34 2023 +0300

    pinctrl: cherryview: Return correct value if pin in push-pull mode
    
    [ Upstream commit 5835196a17be5cfdcad0b617f90cf4abe16951a4 ]
    
    Currently the getter returns ENOTSUPP on pin configured in
    the push-pull mode. Fix this by adding the missed switch case.
    
    Fixes: ccdf81d08dbe ("pinctrl: cherryview: add option to set open-drain pin config")
    Fixes: 6e08d6bbebeb ("pinctrl: Add Intel Cherryview/Braswell pin controller support")
    Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86: msi-laptop: Fix rfkill out-of-sync on MSI Wind U100 [+ + +]
Author: Maxim Mikityanskiy <maxtram95@gmail.com>
Date:   Fri Jul 21 17:54:23 2023 +0300

    platform/x86: msi-laptop: Fix rfkill out-of-sync on MSI Wind U100
    
    [ Upstream commit ad084a6d99bc182bf109c190c808e2ea073ec57b ]
    
    Only the HW rfkill state is toggled on laptops with quirks->ec_read_only
    (so far only MSI Wind U90/U100). There are, however, a few issues with
    the implementation:
    
    1. The initial HW state is always unblocked, regardless of the actual
       state on boot, because msi_init_rfkill only sets the SW state,
       regardless of ec_read_only.
    
    2. The initial SW state corresponds to the actual state on boot, but it
       can't be changed afterwards, because set_device_state returns
       -EOPNOTSUPP. It confuses the userspace, making Wi-Fi and/or Bluetooth
       unusable if it was blocked on boot, and breaking the airplane mode if
       the rfkill was unblocked on boot.
    
    Address the above issues by properly initializing the HW state on
    ec_read_only laptops and by allowing the userspace to toggle the SW
    state. Don't set the SW state ourselves and let the userspace fully
    control it. Toggling the SW state is a no-op, however, it allows the
    userspace to properly toggle the airplane mode. The actual SW radio
    disablement is handled by the corresponding rtl818x_pci and btusb
    drivers that have their own rfkills.
    
    Tested on MSI Wind U100 Plus, BIOS ver 1.0G, EC ver 130.
    
    Fixes: 0816392b97d4 ("msi-laptop: merge quirk tables to one")
    Fixes: 0de6575ad0a8 ("msi-laptop: Add MSI Wind U90/U100 support")
    Signed-off-by: Maxim Mikityanskiy <maxtram95@gmail.com>
    Link: https://lore.kernel.org/r/20230721145423.161057-1-maxtram95@gmail.com
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PM / wakeirq: support enabling wake-up irq after runtime_suspend called [+ + +]
Author: Chunfeng Yun <chunfeng.yun@mediatek.com>
Date:   Mon Oct 25 15:01:53 2021 +0800

    PM / wakeirq: support enabling wake-up irq after runtime_suspend called
    
    [ Upstream commit 259714100d98b50bf04d36a21bf50ca8b829fc11 ]
    
    When the dedicated wake IRQ is level trigger, and it uses the
    device's low-power status as the wakeup source, that means if the
    device is not in low-power state, the wake IRQ will be triggered
    if enabled; For this case, need enable the wake IRQ after running
    the device's ->runtime_suspend() which make it enter low-power state.
    
    e.g.
    Assume the wake IRQ is a low level trigger type, and the wakeup
    signal comes from the low-power status of the device.
    The wakeup signal is low level at running time (0), and becomes
    high level when the device enters low-power state (runtime_suspend
    (1) is called), a wakeup event at (2) make the device exit low-power
    state, then the wakeup signal also becomes low level.
    
                    ------------------
                   |           ^     ^|
    ----------------           |     | --------------
     |<---(0)--->|<--(1)--|   (3)   (2)    (4)
    
    if enable the wake IRQ before running runtime_suspend during (0),
    a wake IRQ will arise, it causes resume immediately;
    it works if enable wake IRQ ( e.g. at (3) or (4)) after running
    ->runtime_suspend().
    
    This patch introduces a new status WAKE_IRQ_DEDICATED_REVERSE to
    optionally support enabling wake IRQ after running ->runtime_suspend().
    
    Suggested-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Stable-dep-of: 8527beb12087 ("PM: sleep: wakeirq: fix wake irq arming")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PM: domains: fix integer overflow issues in genpd_parse_state() [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Tue Apr 18 06:07:43 2023 -0700

    PM: domains: fix integer overflow issues in genpd_parse_state()
    
    [ Upstream commit e5d1c8722083f0332dcd3c85fa1273d85fb6bed8 ]
    
    Currently, while calculating residency and latency values, right
    operands may overflow if resulting values are big enough.
    
    To prevent this, albeit unlikely case, play it safe and convert
    right operands to left ones' type s64.
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    Fixes: 30f604283e05 ("PM / Domains: Allow domain power states to be read from DT")
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PM: sleep: wakeirq: fix wake irq arming [+ + +]
Author: Johan Hovold <johan+linaro@kernel.org>
Date:   Thu Jul 13 16:57:39 2023 +0200

    PM: sleep: wakeirq: fix wake irq arming
    
    [ Upstream commit 8527beb12087238d4387607597b4020bc393c4b4 ]
    
    The decision whether to enable a wake irq during suspend can not be done
    based on the runtime PM state directly as a driver may use wake irqs
    without implementing runtime PM. Such drivers specifically leave the
    state set to the default 'suspended' and the wake irq is thus never
    enabled at suspend.
    
    Add a new wake irq flag to track whether a dedicated wake irq has been
    enabled at runtime suspend and therefore must not be enabled at system
    suspend.
    
    Note that pm_runtime_enabled() can not be used as runtime PM is always
    disabled during late suspend.
    
    Fixes: 69728051f5bf ("PM / wakeirq: Fix unbalanced IRQ enable for wakeirq")
    Cc: 4.16+ <stable@vger.kernel.org> # 4.16+
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    Reviewed-by: Tony Lindgren <tony@atomide.com>
    Tested-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
posix-timers: Ensure timer ID search-loop limit is valid [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Thu Jun 1 20:58:47 2023 +0200

    posix-timers: Ensure timer ID search-loop limit is valid
    
    [ Upstream commit 8ce8849dd1e78dadcee0ec9acbd259d239b7069f ]
    
    posix_timer_add() tries to allocate a posix timer ID by starting from the
    cached ID which was stored by the last successful allocation.
    
    This is done in a loop searching the ID space for a free slot one by
    one. The loop has to terminate when the search wrapped around to the
    starting point.
    
    But that's racy vs. establishing the starting point. That is read out
    lockless, which leads to the following problem:
    
    CPU0                               CPU1
    posix_timer_add()
      start = sig->posix_timer_id;
      lock(hash_lock);
      ...                              posix_timer_add()
      if (++sig->posix_timer_id < 0)
                                         start = sig->posix_timer_id;
         sig->posix_timer_id = 0;
    
    So CPU1 can observe a negative start value, i.e. -1, and the loop break
    never happens because the condition can never be true:
    
      if (sig->posix_timer_id == start)
         break;
    
    While this is unlikely to ever turn into an endless loop as the ID space is
    huge (INT_MAX), the racy read of the start value caught the attention of
    KCSAN and Dmitry unearthed that incorrectness.
    
    Rewrite it so that all id operations are under the hash lock.
    
    Reported-by: syzbot+5c54bd3eb218bb595aa9@syzkaller.appspotmail.com
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
    Link: https://lore.kernel.org/r/87bkhzdn6g.ffs@tglx
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/mm/altmap: Fix altmap boundary check [+ + +]
Author: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Date:   Mon Jul 24 23:43:20 2023 +0530

    powerpc/mm/altmap: Fix altmap boundary check
    
    [ Upstream commit 6722b25712054c0f903b839b8f5088438dd04df3 ]
    
    altmap->free includes the entire free space from which altmap blocks
    can be allocated. So when checking whether the kernel is doing altmap
    block free, compute the boundary correctly, otherwise memory hotunplug
    can fail.
    
    Fixes: 9ef34630a461 ("powerpc/mm: Fallback to RAM if the altmap is unusable")
    Signed-off-by: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
    Reviewed-by: David Hildenbrand <david@redhat.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20230724181320.471386-1-aneesh.kumar@linux.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc: allow PPC_EARLY_DEBUG_CPM only when SERIAL_CPM=y [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Fri Jun 30 22:47:12 2023 -0700

    powerpc: allow PPC_EARLY_DEBUG_CPM only when SERIAL_CPM=y
    
    [ Upstream commit 39f49684036d24af800ff194c33c7b2653c591d7 ]
    
    In a randconfig with CONFIG_SERIAL_CPM=m and
    CONFIG_PPC_EARLY_DEBUG_CPM=y, there is a build error:
    ERROR: modpost: "udbg_putc" [drivers/tty/serial/cpm_uart/cpm_uart.ko] undefined!
    
    Prevent the build error by allowing PPC_EARLY_DEBUG_CPM only when
    SERIAL_CPM=y.
    
    Fixes: c374e00e17f1 ("[POWERPC] Add early debug console for CPM serial ports.")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Reviewed-by: Pali Rohár <pali@kernel.org>
    Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20230701054714.30512-1-rdunlap@infradead.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
radeon: avoid double free in ci_dpm_init() [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Thu Apr 13 08:12:28 2023 -0700

    radeon: avoid double free in ci_dpm_init()
    
    [ Upstream commit 20c3dffdccbd494e0dd631d1660aeecbff6775f2 ]
    
    Several calls to ci_dpm_fini() will attempt to free resources that
    either have been freed before or haven't been allocated yet. This
    may lead to undefined or dangerous behaviour.
    
    For instance, if r600_parse_extended_power_table() fails, it might
    call r600_free_extended_power_table() as will ci_dpm_fini() later
    during error handling.
    
    Fix this by only freeing pointers to objects previously allocated.
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    Fixes: cc8dbbb4f62a ("drm/radeon: add dpm support for CI dGPUs (v2)")
    Co-developed-by: Natalia Petrova <n.petrova@fintech.ru>
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/mlx4: Make check for invalid flags stricter [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Thu Jun 29 09:07:37 2023 +0300

    RDMA/mlx4: Make check for invalid flags stricter
    
    [ Upstream commit d64b1ee12a168030fbb3e0aebf7bce49e9a07589 ]
    
    This code is trying to ensure that only the flags specified in the list
    are allowed.  The problem is that ucmd->rx_hash_fields_mask is a u64 and
    the flags are an enum which is treated as a u32 in this context.  That
    means the test doesn't check whether the highest 32 bits are zero.
    
    Fixes: 4d02ebd9bbbd ("IB/mlx4: Fix RSS hash fields restrictions")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://lore.kernel.org/r/233ed975-982d-422a-b498-410f71d8a101@moroto.mountain
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "8250: add support for ASIX devices with a FIFO bug" [+ + +]
Author: Jiaqing Zhao <jiaqing.zhao@linux.intel.com>
Date:   Mon Jun 19 15:57:44 2023 +0000

    Revert "8250: add support for ASIX devices with a FIFO bug"
    
    commit a82d62f708545d22859584e0e0620da8e3759bbc upstream.
    
    This reverts commit eb26dfe8aa7eeb5a5aa0b7574550125f8aa4c3b3.
    
    Commit eb26dfe8aa7e ("8250: add support for ASIX devices with a FIFO
    bug") merged on Jul 13, 2012 adds a quirk for PCI_VENDOR_ID_ASIX
    (0x9710). But that ID is the same as PCI_VENDOR_ID_NETMOS defined in
    1f8b061050c7 ("[PATCH] Netmos parallel/serial/combo support") merged
    on Mar 28, 2005. In pci_serial_quirks array, the NetMos entry always
    takes precedence over the ASIX entry even since it was initially
    merged, code in that commit is always unreachable.
    
    In my tests, adding the FIFO workaround to pci_netmos_init() makes no
    difference, and the vendor driver also does not have such workaround.
    Given that the code was never used for over a decade, it's safe to
    revert it.
    
    Also, the real PCI_VENDOR_ID_ASIX should be 0x125b, which is used on
    their newer AX99100 PCIe serial controllers released on 2016. The FIFO
    workaround should not be intended for these newer controllers, and it
    was never implemented in vendor driver.
    
    Fixes: eb26dfe8aa7e ("8250: add support for ASIX devices with a FIFO bug")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Jiaqing Zhao <jiaqing.zhao@linux.intel.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20230619155743.827859-1-jiaqing.zhao@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "tcp: avoid the lookup process failing to get sk in ehash table" [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Mon Jul 17 14:59:18 2023 -0700

    Revert "tcp: avoid the lookup process failing to get sk in ehash table"
    
    [ Upstream commit 81b3ade5d2b98ad6e0a473b0e1e420a801275592 ]
    
    This reverts commit 3f4ca5fafc08881d7a57daa20449d171f2887043.
    
    Commit 3f4ca5fafc08 ("tcp: avoid the lookup process failing to get sk in
    ehash table") reversed the order in how a socket is inserted into ehash
    to fix an issue that ehash-lookup could fail when reqsk/full sk/twsk are
    swapped.  However, it introduced another lookup failure.
    
    The full socket in ehash is allocated from a slab with SLAB_TYPESAFE_BY_RCU
    and does not have SOCK_RCU_FREE, so the socket could be reused even while
    it is being referenced on another CPU doing RCU lookup.
    
    Let's say a socket is reused and inserted into the same hash bucket during
    lookup.  After the blamed commit, a new socket is inserted at the end of
    the list.  If that happens, we will skip sockets placed after the previous
    position of the reused socket, resulting in ehash lookup failure.
    
    As described in Documentation/RCU/rculist_nulls.rst, we should insert a
    new socket at the head of the list to avoid such an issue.
    
    This issue, the swap-lookup-failure, and another variant reported in [0]
    can all be handled properly by adding a locked ehash lookup suggested by
    Eric Dumazet [1].
    
    However, this issue could occur for every packet, thus more likely than
    the other two races, so let's revert the change for now.
    
    Link: https://lore.kernel.org/netdev/20230606064306.9192-1-duanmuquan@baidu.com/ [0]
    Link: https://lore.kernel.org/netdev/CANn89iK8snOz8TYOhhwfimC7ykYA78GA3Nyv8x06SZYa1nKdyA@mail.gmail.com/ [1]
    Fixes: 3f4ca5fafc08 ("tcp: avoid the lookup process failing to get sk in ehash table")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20230717215918.15723-1-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "usb: dwc3: core: Enable AutoRetry feature in the controller" [+ + +]
Author: Jakub Vanek <linuxtardis@gmail.com>
Date:   Fri Jul 14 14:24:19 2023 +0200

    Revert "usb: dwc3: core: Enable AutoRetry feature in the controller"
    
    commit 734ae15ab95a18d3d425fc9cb38b7a627d786f08 upstream.
    
    This reverts commit b138e23d3dff90c0494925b4c1874227b81bddf7.
    
    AutoRetry has been found to sometimes cause controller freezes when
    communicating with buggy USB devices.
    
    This controller feature allows the controller in host mode to send
    non-terminating/burst retry ACKs instead of terminating retry ACKs
    to devices when a transaction error (CRC error or overflow) occurs.
    
    Unfortunately, if the USB device continues to respond with a CRC error,
    the controller will not complete endpoint-related commands while it
    keeps trying to auto-retry. [3] The xHCI driver will notice this once
    it tries to abort the transfer using a Stop Endpoint command and
    does not receive a completion in time. [1]
    This situation is reported to dmesg:
    
    [sda] tag#29 uas_eh_abort_handler 0 uas-tag 1 inflight: CMD IN
    [sda] tag#29 CDB: opcode=0x28 28 00 00 69 42 80 00 00 48 00
    xhci-hcd: xHCI host not responding to stop endpoint command
    xhci-hcd: xHCI host controller not responding, assume dead
    xhci-hcd: HC died; cleaning up
    
    Some users observed this problem on an Odroid HC2 with the JMS578
    USB3-to-SATA bridge. The issue can be triggered by starting
    a read-heavy workload on an attached SSD. After a while, the host
    controller would die and the SSD would disappear from the system. [1]
    
    Further analysis by Synopsys determined that controller revisions
    other than the one in Odroid HC2 are also affected by this.
    The recommended solution was to disable AutoRetry altogether.
    This change does not have a noticeable performance impact. [2]
    
    Revert the enablement commit. This will keep the AutoRetry bit in
    the default state configured during SoC design [2].
    
    Fixes: b138e23d3dff ("usb: dwc3: core: Enable AutoRetry feature in the controller")
    Link: https://lore.kernel.org/r/a21f34c04632d250cd0a78c7c6f4a1c9c7a43142.camel@gmail.com/ [1]
    Link: https://lore.kernel.org/r/20230711214834.kyr6ulync32d4ktk@synopsys.com/ [2]
    Link: https://lore.kernel.org/r/20230712225518.2smu7wse6djc7l5o@synopsys.com/ [3]
    Cc: stable@vger.kernel.org
    Cc: Mauro Ribeiro <mauro.ribeiro@hardkernel.com>
    Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Suggested-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Signed-off-by: Jakub Vanek <linuxtardis@gmail.com>
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/20230714122419.27741-1-linuxtardis@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ring-buffer: Fix deadloop issue on reading trace_pipe [+ + +]
Author: Zheng Yejian <zhengyejian1@huawei.com>
Date:   Sun Jul 9 06:51:44 2023 +0800

    ring-buffer: Fix deadloop issue on reading trace_pipe
    
    commit 7e42907f3a7b4ce3a2d1757f6d78336984daf8f5 upstream.
    
    Soft lockup occurs when reading file 'trace_pipe':
    
      watchdog: BUG: soft lockup - CPU#6 stuck for 22s! [cat:4488]
      [...]
      RIP: 0010:ring_buffer_empty_cpu+0xed/0x170
      RSP: 0018:ffff88810dd6fc48 EFLAGS: 00000246
      RAX: 0000000000000000 RBX: 0000000000000246 RCX: ffffffff93d1aaeb
      RDX: ffff88810a280040 RSI: 0000000000000008 RDI: ffff88811164b218
      RBP: ffff88811164b218 R08: 0000000000000000 R09: ffff88815156600f
      R10: ffffed102a2acc01 R11: 0000000000000001 R12: 0000000051651901
      R13: 0000000000000000 R14: ffff888115e49500 R15: 0000000000000000
      [...]
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f8d853c2000 CR3: 000000010dcd8000 CR4: 00000000000006e0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
       __find_next_entry+0x1a8/0x4b0
       ? peek_next_entry+0x250/0x250
       ? down_write+0xa5/0x120
       ? down_write_killable+0x130/0x130
       trace_find_next_entry_inc+0x3b/0x1d0
       tracing_read_pipe+0x423/0xae0
       ? tracing_splice_read_pipe+0xcb0/0xcb0
       vfs_read+0x16b/0x490
       ksys_read+0x105/0x210
       ? __ia32_sys_pwrite64+0x200/0x200
       ? switch_fpu_return+0x108/0x220
       do_syscall_64+0x33/0x40
       entry_SYSCALL_64_after_hwframe+0x61/0xc6
    
    Through the vmcore, I found it's because in tracing_read_pipe(),
    ring_buffer_empty_cpu() found some buffer is not empty but then it
    cannot read anything due to "rb_num_of_entries() == 0" always true,
    Then it infinitely loop the procedure due to user buffer not been
    filled, see following code path:
    
      tracing_read_pipe() {
        ... ...
        waitagain:
          tracing_wait_pipe() // 1. find non-empty buffer here
          trace_find_next_entry_inc()  // 2. loop here try to find an entry
            __find_next_entry()
              ring_buffer_empty_cpu();  // 3. find non-empty buffer
              peek_next_entry()  // 4. but peek always return NULL
                ring_buffer_peek()
                  rb_buffer_peek()
                    rb_get_reader_page()
                      // 5. because rb_num_of_entries() == 0 always true here
                      //    then return NULL
          // 6. user buffer not been filled so goto 'waitgain'
          //    and eventually leads to an deadloop in kernel!!!
      }
    
    By some analyzing, I found that when resetting ringbuffer, the 'entries'
    of its pages are not all cleared (see rb_reset_cpu()). Then when reducing
    the ringbuffer, and if some reduced pages exist dirty 'entries' data, they
    will be added into 'cpu_buffer->overrun' (see rb_remove_pages()), which
    cause wrong 'overrun' count and eventually cause the deadloop issue.
    
    To fix it, we need to clear every pages in rb_reset_cpu().
    
    Link: https://lore.kernel.org/linux-trace-kernel/20230708225144.3785600-1-zhengyejian1@huawei.com
    
    Cc: stable@vger.kernel.org
    Fixes: a5fb833172eca ("ring-buffer: Fix uninitialized read_stamp")
    Signed-off-by: Zheng Yejian <zhengyejian1@huawei.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ring-buffer: Fix wrong stat of cpu_buffer->read [+ + +]
Author: Zheng Yejian <zhengyejian1@huawei.com>
Date:   Mon Jul 24 13:40:40 2023 +0800

    ring-buffer: Fix wrong stat of cpu_buffer->read
    
    [ Upstream commit 2d093282b0d4357373497f65db6a05eb0c28b7c8 ]
    
    When pages are removed in rb_remove_pages(), 'cpu_buffer->read' is set
    to 0 in order to make sure any read iterators reset themselves. However,
    this will mess 'entries' stating, see following steps:
    
      # cd /sys/kernel/tracing/
      # 1. Enlarge ring buffer prepare for later reducing:
      # echo 20 > per_cpu/cpu0/buffer_size_kb
      # 2. Write a log into ring buffer of cpu0:
      # taskset -c 0 echo "hello1" > trace_marker
      # 3. Read the log:
      # cat per_cpu/cpu0/trace_pipe
           <...>-332     [000] .....    62.406844: tracing_mark_write: hello1
      # 4. Stop reading and see the stats, now 0 entries, and 1 event readed:
      # cat per_cpu/cpu0/stats
       entries: 0
       [...]
       read events: 1
      # 5. Reduce the ring buffer
      # echo 7 > per_cpu/cpu0/buffer_size_kb
      # 6. Now entries became unexpected 1 because actually no entries!!!
      # cat per_cpu/cpu0/stats
       entries: 1
       [...]
       read events: 0
    
    To fix it, introduce 'page_removed' field to count total removed pages
    since last reset, then use it to let read iterators reset themselves
    instead of changing the 'read' pointer.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20230724054040.3489499-1-zhengyejian1@huawei.com
    
    Cc: <mhiramat@kernel.org>
    Cc: <vnagarnaik@google.com>
    Fixes: 83f40318dab0 ("ring-buffer: Make removal of ring buffer pages atomic")
    Signed-off-by: Zheng Yejian <zhengyejian1@huawei.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rtc: st-lpc: Release some resources in st_rtc_probe() in case of error [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Thu Jun 8 21:11:42 2023 +0200

    rtc: st-lpc: Release some resources in st_rtc_probe() in case of error
    
    [ Upstream commit 06c6e1b01d9261f03629cefd1f3553503291e6cf ]
    
    If an error occurs after clk_get(), the corresponding resources should be
    released.
    
    Use devm_clk_get() to fix it.
    
    Fixes: b5b2bdfc2893 ("rtc: st: Add new driver for ST's LPC RTC")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Link: https://lore.kernel.org/r/866af6adbc7454a7b4505eb6c28fbdc86ccff39e.1686251455.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/dasd: fix hanging device after quiesce/resume [+ + +]
Author: Stefan Haberland <sth@linux.ibm.com>
Date:   Fri Jul 21 21:36:44 2023 +0200

    s390/dasd: fix hanging device after quiesce/resume
    
    commit 05f1d8ed03f547054efbc4d29bb7991c958ede95 upstream.
    
    Quiesce and resume are functions that tell the DASD driver to stop/resume
    issuing I/Os to a specific DASD.
    
    On resume dasd_schedule_block_bh() is called to kick handling of IO
    requests again. This does unfortunately not cover internal requests which
    are used for path verification for example.
    
    This could lead to a hanging device when a path event or anything else
    that triggers internal requests occurs on a quiesced device.
    
    Fix by also calling dasd_schedule_device_bh() which triggers handling of
    internal requests on resume.
    
    Fixes: 8e09f21574ea ("[S390] dasd: add hyper PAV support to DASD device driver, part 1")
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
    Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
    Link: https://lore.kernel.org/r/20230721193647.3889634-2-sth@linux.ibm.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
samples/bpf: Fix buffer overflow in tcp_basertt [+ + +]
Author: Pengcheng Yang <yangpc@wangsu.com>
Date:   Fri May 5 16:50:58 2023 +0800

    samples/bpf: Fix buffer overflow in tcp_basertt
    
    [ Upstream commit f4dea9689c5fea3d07170c2cb0703e216f1a0922 ]
    
    Using sizeof(nv) or strlen(nv)+1 is correct.
    
    Fixes: c890063e4404 ("bpf: sample BPF_SOCKET_OPS_BASE_RTT program")
    Signed-off-by: Pengcheng Yang <yangpc@wangsu.com>
    Link: https://lore.kernel.org/r/1683276658-2860-1-git-send-email-yangpc@wangsu.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/fair: Don't balance task to its current running CPU [+ + +]
Author: Yicong Yang <yangyicong@hisilicon.com>
Date:   Tue May 30 16:25:07 2023 +0800

    sched/fair: Don't balance task to its current running CPU
    
    [ Upstream commit 0dd37d6dd33a9c23351e6115ae8cdac7863bc7de ]
    
    We've run into the case that the balancer tries to balance a migration
    disabled task and trigger the warning in set_task_cpu() like below:
    
     ------------[ cut here ]------------
     WARNING: CPU: 7 PID: 0 at kernel/sched/core.c:3115 set_task_cpu+0x188/0x240
     Modules linked in: hclgevf xt_CHECKSUM ipt_REJECT nf_reject_ipv4 <...snip>
     CPU: 7 PID: 0 Comm: swapper/7 Kdump: loaded Tainted: G           O       6.1.0-rc4+ #1
     Hardware name: Huawei TaiShan 2280 V2/BC82AMDC, BIOS 2280-V2 CS V5.B221.01 12/09/2021
     pstate: 604000c9 (nZCv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
     pc : set_task_cpu+0x188/0x240
     lr : load_balance+0x5d0/0xc60
     sp : ffff80000803bc70
     x29: ffff80000803bc70 x28: ffff004089e190e8 x27: ffff004089e19040
     x26: ffff007effcabc38 x25: 0000000000000000 x24: 0000000000000001
     x23: ffff80000803be84 x22: 000000000000000c x21: ffffb093e79e2a78
     x20: 000000000000000c x19: ffff004089e19040 x18: 0000000000000000
     x17: 0000000000001fad x16: 0000000000000030 x15: 0000000000000000
     x14: 0000000000000003 x13: 0000000000000000 x12: 0000000000000000
     x11: 0000000000000001 x10: 0000000000000400 x9 : ffffb093e4cee530
     x8 : 00000000fffffffe x7 : 0000000000ce168a x6 : 000000000000013e
     x5 : 00000000ffffffe1 x4 : 0000000000000001 x3 : 0000000000000b2a
     x2 : 0000000000000b2a x1 : ffffb093e6d6c510 x0 : 0000000000000001
     Call trace:
      set_task_cpu+0x188/0x240
      load_balance+0x5d0/0xc60
      rebalance_domains+0x26c/0x380
      _nohz_idle_balance.isra.0+0x1e0/0x370
      run_rebalance_domains+0x6c/0x80
      __do_softirq+0x128/0x3d8
      ____do_softirq+0x18/0x24
      call_on_irq_stack+0x2c/0x38
      do_softirq_own_stack+0x24/0x3c
      __irq_exit_rcu+0xcc/0xf4
      irq_exit_rcu+0x18/0x24
      el1_interrupt+0x4c/0xe4
      el1h_64_irq_handler+0x18/0x2c
      el1h_64_irq+0x74/0x78
      arch_cpu_idle+0x18/0x4c
      default_idle_call+0x58/0x194
      do_idle+0x244/0x2b0
      cpu_startup_entry+0x30/0x3c
      secondary_start_kernel+0x14c/0x190
      __secondary_switched+0xb0/0xb4
     ---[ end trace 0000000000000000 ]---
    
    Further investigation shows that the warning is superfluous, the migration
    disabled task is just going to be migrated to its current running CPU.
    This is because that on load balance if the dst_cpu is not allowed by the
    task, we'll re-select a new_dst_cpu as a candidate. If no task can be
    balanced to dst_cpu we'll try to balance the task to the new_dst_cpu
    instead. In this case when the migration disabled task is not on CPU it
    only allows to run on its current CPU, load balance will select its
    current CPU as new_dst_cpu and later triggers the warning above.
    
    The new_dst_cpu is chosen from the env->dst_grpmask. Currently it
    contains CPUs in sched_group_span() and if we have overlapped groups it's
    possible to run into this case. This patch makes env->dst_grpmask of
    group_balance_mask() which exclude any CPUs from the busiest group and
    solve the issue. For balancing in a domain with no overlapped groups
    the behaviour keeps same as before.
    
    Suggested-by: Vincent Guittot <vincent.guittot@linaro.org>
    Signed-off-by: Yicong Yang <yangyicong@hisilicon.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
    Link: https://lore.kernel.org/r/20230530082507.10444-1-yangyicong@huawei.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scripts/tags.sh: Resolve gtags empty index generation [+ + +]
Author: Ahmed S. Darwish <darwi@linutronix.de>
Date:   Mon May 15 19:32:16 2023 +0200

    scripts/tags.sh: Resolve gtags empty index generation
    
    commit e1b37563caffc410bb4b55f153ccb14dede66815 upstream.
    
    gtags considers any file outside of its current working directory
    "outside the source tree" and refuses to index it. For O= kernel builds,
    or when "make" is invoked from a directory other then the kernel source
    tree, gtags ignores the entire kernel source and generates an empty
    index.
    
    Force-set gtags current working directory to the kernel source tree.
    
    Due to commit 9da0763bdd82 ("kbuild: Use relative path when building in
    a subdir of the source tree"), if the kernel build is done in a
    sub-directory of the kernel source tree, the kernel Makefile will set
    the kernel's $srctree to ".." for shorter compile-time and run-time
    warnings. Consequently, the list of files to be indexed will be in the
    "../*" form, rendering all such paths invalid once gtags switches to the
    kernel source tree as its current working directory.
    
    If gtags indexing is requested and the build directory is not the kernel
    source tree, index all files in absolute-path form.
    
    Note, indexing in absolute-path form will not affect the generated
    index, as paths in gtags indices are always relative to the gtags "root
    directory" anyway (as evidenced by "gtags --dump").
    
    Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
scsi: 3w-xxxx: Add error handling for initialization failure in tw_probe() [+ + +]
Author: Yuchen Yang <u202114568@hust.edu.cn>
Date:   Fri May 5 22:12:55 2023 +0800

    scsi: 3w-xxxx: Add error handling for initialization failure in tw_probe()
    
    [ Upstream commit 2e2fe5ac695a00ab03cab4db1f4d6be07168ed9d ]
    
    Smatch complains that:
    
    tw_probe() warn: missing error code 'retval'
    
    This patch adds error checking to tw_probe() to handle initialization
    failure. If tw_reset_sequence() function returns a non-zero value, the
    function will return -EINVAL to indicate initialization failure.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Yuchen Yang <u202114568@hust.edu.cn>
    Link: https://lore.kernel.org/r/20230505141259.7730-1-u202114568@hust.edu.cn
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: qla2xxx: Array index may go out of bound [+ + +]
Author: Nilesh Javali <njavali@marvell.com>
Date:   Wed Jun 7 17:08:36 2023 +0530

    scsi: qla2xxx: Array index may go out of bound
    
    [ Upstream commit d721b591b95cf3f290f8a7cbe90aa2ee0368388d ]
    
    Klocwork reports array 'vha->host_str' of size 16 may use index value(s)
    16..19.  Use snprintf() instead of sprintf().
    
    Cc: stable@vger.kernel.org
    Co-developed-by: Bikash Hazarika <bhazarika@marvell.com>
    Signed-off-by: Bikash Hazarika <bhazarika@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20230607113843.37185-2-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: qla2xxx: Check valid rport returned by fc_bsg_to_rport() [+ + +]
Author: Nilesh Javali <njavali@marvell.com>
Date:   Wed Jun 7 17:08:39 2023 +0530

    scsi: qla2xxx: Check valid rport returned by fc_bsg_to_rport()
    
    commit af73f23a27206ffb3c477cac75b5fcf03410556e upstream.
    
    Klocwork reported warning of rport maybe NULL and will be dereferenced.
    rport returned by call to fc_bsg_to_rport() could be NULL and dereferenced.
    
    Check valid rport returned by fc_bsg_to_rport().
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20230607113843.37185-5-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Fix inconsistent format argument type in qla_os.c [+ + +]
Author: Ye Bin <yebin10@huawei.com>
Date:   Wed Sep 30 10:25:14 2020 +0800

    scsi: qla2xxx: Fix inconsistent format argument type in qla_os.c
    
    [ Upstream commit 250bd00923c72c846092271a9e51ee373db081b6 ]
    
    Fix the following warnings:
    
    [drivers/scsi/qla2xxx/qla_os.c:4882]: (warning) %ld in format string (no. 2)
            requires 'long' but the argument type is 'unsigned long'.
    [drivers/scsi/qla2xxx/qla_os.c:5011]: (warning) %ld in format string (no. 1)
            requires 'long' but the argument type is 'unsigned long'.
    
    Link: https://lore.kernel.org/r/20200930022515.2862532-3-yebin10@huawei.com
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Reviewed-by: Nilesh Javali <njavali@marvell.com>
    Signed-off-by: Ye Bin <yebin10@huawei.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Stable-dep-of: d721b591b95c ("scsi: qla2xxx: Array index may go out of bound")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: qla2xxx: Fix potential NULL pointer dereference [+ + +]
Author: Bikash Hazarika <bhazarika@marvell.com>
Date:   Wed Jun 7 17:08:37 2023 +0530

    scsi: qla2xxx: Fix potential NULL pointer dereference
    
    commit 464ea494a40c6e3e0e8f91dd325408aaf21515ba upstream.
    
    Klocwork tool reported 'cur_dsd' may be dereferenced.  Add fix to validate
    pointer before dereferencing the pointer.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Bikash Hazarika <bhazarika@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20230607113843.37185-3-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Pointer may be dereferenced [+ + +]
Author: Shreyas Deodhar <sdeodhar@marvell.com>
Date:   Wed Jun 7 17:08:41 2023 +0530

    scsi: qla2xxx: Pointer may be dereferenced
    
    commit 00eca15319d9ce8c31cdf22f32a3467775423df4 upstream.
    
    Klocwork tool reported pointer 'rport' returned from call to function
    fc_bsg_to_rport() may be NULL and will be dereferenced.
    
    Add a fix to validate rport before dereferencing.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Shreyas Deodhar <sdeodhar@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20230607113843.37185-7-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Wait for io return on terminate rport [+ + +]
Author: Quinn Tran <qutran@marvell.com>
Date:   Fri Apr 28 00:53:38 2023 -0700

    scsi: qla2xxx: Wait for io return on terminate rport
    
    commit fc0cba0c7be8261a1625098bd1d695077ec621c9 upstream.
    
    System crash due to use after free.
    Current code allows terminate_rport_io to exit before making
    sure all IOs has returned. For FCP-2 device, IO's can hang
    on in HW because driver has not tear down the session in FW at
    first sign of cable pull. When dev_loss_tmo timer pops,
    terminate_rport_io is called and upper layer is about to
    free various resources. Terminate_rport_io trigger qla to do
    the final cleanup, but the cleanup might not be fast enough where it
    leave qla still holding on to the same resource.
    
    Wait for IO's to return to upper layer before resources are freed.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Quinn Tran <qutran@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20230428075339.32551-7-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: zfcp: Defer fc_rport blocking until after ADISC response [+ + +]
Author: Steffen Maier <maier@linux.ibm.com>
Date:   Mon Jul 24 16:51:56 2023 +0200

    scsi: zfcp: Defer fc_rport blocking until after ADISC response
    
    commit e65851989001c0c9ba9177564b13b38201c0854c upstream.
    
    Storage devices are free to send RSCNs, e.g. for internal state changes. If
    this happens on all connected paths, zfcp risks temporarily losing all
    paths at the same time. This has strong requirements on multipath
    configuration such as "no_path_retry queue".
    
    Avoid such situations by deferring fc_rport blocking until after the ADISC
    response, when any actual state change of the remote port became clear.
    The already existing port recovery triggers explicitly block the fc_rport.
    The triggers are: on ADISC reject or timeout (typical cable pull case), and
    on ADISC indicating that the remote port has changed its WWPN or
    the port is meanwhile no longer open.
    
    As a side effect, this also removes a confusing direct function call to
    another work item function zfcp_scsi_rport_work() instead of scheduling
    that other work item. It was probably done that way to have the rport block
    side effect immediate and synchronous to the caller.
    
    Fixes: a2fa0aede07c ("[SCSI] zfcp: Block FC transport rports early on errors")
    Cc: stable@vger.kernel.org #v2.6.30+
    Reviewed-by: Benjamin Block <bblock@linux.ibm.com>
    Reviewed-by: Fedor Loshakov <loshakov@linux.ibm.com>
    Signed-off-by: Steffen Maier <maier@linux.ibm.com>
    Link: https://lore.kernel.org/r/20230724145156.3920244-1-maier@linux.ibm.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sctp: fix potential deadlock on &net->sctp.addr_wq_lock [+ + +]
Author: Chengfeng Ye <dg573847474@gmail.com>
Date:   Tue Jun 27 12:03:40 2023 +0000

    sctp: fix potential deadlock on &net->sctp.addr_wq_lock
    
    [ Upstream commit 6feb37b3b06e9049e20dcf7e23998f92c9c5be9a ]
    
    As &net->sctp.addr_wq_lock is also acquired by the timer
    sctp_addr_wq_timeout_handler() in protocal.c, the same lock acquisition
    at sctp_auto_asconf_init() seems should disable irq since it is called
    from sctp_accept() under process context.
    
    Possible deadlock scenario:
    sctp_accept()
        -> sctp_sock_migrate()
        -> sctp_auto_asconf_init()
        -> spin_lock(&net->sctp.addr_wq_lock)
            <timer interrupt>
            -> sctp_addr_wq_timeout_handler()
            -> spin_lock_bh(&net->sctp.addr_wq_lock); (deadlock here)
    
    This flaw was found using an experimental static analysis tool we are
    developing for irq-related deadlock.
    
    The tentative patch fix the potential deadlock by spin_lock_bh().
    
    Signed-off-by: Chengfeng Ye <dg573847474@gmail.com>
    Fixes: 34e5b0118685 ("sctp: delay auto_asconf init until binding the first addr")
    Acked-by: Xin Long <lucien.xin@gmail.com>
    Link: https://lore.kernel.org/r/20230627120340.19432-1-dg573847474@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
serial: 8250_dw: Preserve original value of DLF register [+ + +]
Author: Ruihong Luo <colorsu1922@gmail.com>
Date:   Thu Jul 13 08:42:36 2023 +0800

    serial: 8250_dw: Preserve original value of DLF register
    
    [ Upstream commit 748c5ea8b8796ae8ee80b8d3a3d940570b588d59 ]
    
    Preserve the original value of the Divisor Latch Fraction (DLF) register.
    When the DLF register is modified without preservation, it can disrupt
    the baudrate settings established by firmware or bootloader, leading to
    data corruption and the generation of unreadable or distorted characters.
    
    Fixes: 701c5e73b296 ("serial: 8250_dw: add fractional divisor support")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Ruihong Luo <colorsu1922@gmail.com>
    Link: https://lore.kernel.org/stable/20230713004235.35904-1-colorsu1922%40gmail.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20230713004235.35904-1-colorsu1922@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: 8250_dw: split Synopsys DesignWare 8250 common functions [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Tue Aug 6 12:43:16 2019 +0300

    serial: 8250_dw: split Synopsys DesignWare 8250 common functions
    
    [ Upstream commit 136e0ab99b22378e3ff7d54f799a3a329316e869 ]
    
    We would like to use same functions in the couple of drivers for
    Synopsys DesignWare 8250 UART. Split them from 8250_dw into new brand
    library module which users will select explicitly.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://lore.kernel.org/r/20190806094322.64987-3-andriy.shevchenko@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 748c5ea8b879 ("serial: 8250_dw: Preserve original value of DLF register")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: atmel: don't enable IRQs prematurely [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Mon Jun 19 12:45:17 2023 +0300

    serial: atmel: don't enable IRQs prematurely
    
    commit 27a826837ec9a3e94cc44bd9328b8289b0fcecd7 upstream.
    
    The atmel_complete_tx_dma() function disables IRQs at the start
    of the function by calling spin_lock_irqsave(&port->lock, flags);
    There is no need to disable them a second time using the
    spin_lock_irq() function and, in fact, doing so is a bug because
    it will enable IRQs prematurely when we call spin_unlock_irq().
    
    Just use spin_lock/unlock() instead without disabling or enabling
    IRQs.
    
    Fixes: 08f738be88bb ("serial: at91: add tx dma support")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Jiri Slaby <jirislaby@kernel.org>
    Acked-by: Richard Genoud <richard.genoud@gmail.com>
    Link: https://lore.kernel.org/r/cb7c39a9-c004-4673-92e1-be4e34b85368@moroto.mountain
    Cc: stable <stable@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sh: dma: Fix DMA channel offset calculation [+ + +]
Author: Artur Rojek <contact@artur-rojek.eu>
Date:   Sat May 27 18:44:50 2023 +0200

    sh: dma: Fix DMA channel offset calculation
    
    [ Upstream commit e82e47584847129a20b8c9f4a1dcde09374fb0e0 ]
    
    Various SoCs of the SH3, SH4 and SH4A family, which use this driver,
    feature a differing number of DMA channels, which can be distributed
    between up to two DMAC modules. The existing implementation fails to
    correctly accommodate for all those variations, resulting in wrong
    channel offset calculations and leading to kernel panics.
    
    Rewrite dma_base_addr() in order to properly calculate channel offsets
    in a DMAC module. Fix dmaor_read_reg() and dmaor_write_reg(), so that
    the correct DMAC module base is selected for the DMAOR register.
    
    Fixes: 7f47c7189b3e8f19 ("sh: dma: More legacy cpu dma chainsawing.")
    Signed-off-by: Artur Rojek <contact@artur-rojek.eu>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Reviewed-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Link: https://lore.kernel.org/r/20230527164452.64797-2-contact@artur-rojek.eu
    Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sh: j2: Use ioremap() to translate device tree address into kernel memory [+ + +]
Author: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Date:   Wed May 3 14:57:41 2023 +0200

    sh: j2: Use ioremap() to translate device tree address into kernel memory
    
    [ Upstream commit bc9d1f0cecd2407cfb2364a7d4be2f52d1d46a9d ]
    
    Addresses the following warning when building j2_defconfig:
    
    arch/sh/kernel/cpu/sh2/probe.c: In function 'scan_cache':
    arch/sh/kernel/cpu/sh2/probe.c:24:16: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
       24 |  j2_ccr_base = (u32 __iomem *)of_flat_dt_translate_address(node);
          |
    
    Fixes: 5a846abad07f ("sh: add support for J-Core J2 processor")
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Tested-by: Rob Landley <rob@landley.net>
    Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Link: https://lore.kernel.org/r/20230503125746.331835-1-glaubitz@physik.fu-berlin.de
    Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
soc/fsl/qe: fix usb.c build errors [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Sun May 21 15:52:16 2023 -0700

    soc/fsl/qe: fix usb.c build errors
    
    [ Upstream commit 7b1a78babd0d2cd27aa07255dee0c2d7ac0f31e3 ]
    
    Fix build errors in soc/fsl/qe/usb.c when QUICC_ENGINE is not set.
    This happens when PPC_EP88XC is set, which selects CPM1 & CPM.
    When CPM is set, USB_FSL_QE can be set without QUICC_ENGINE
    being set. When USB_FSL_QE is set, QE_USB deafults to y, which
    causes build errors when QUICC_ENGINE is not set. Making
    QE_USB depend on QUICC_ENGINE prevents QE_USB from defaulting to y.
    
    Fixes these build errors:
    
    drivers/soc/fsl/qe/usb.o: in function `qe_usb_clock_set':
    usb.c:(.text+0x1e): undefined reference to `qe_immr'
    powerpc-linux-ld: usb.c:(.text+0x2a): undefined reference to `qe_immr'
    powerpc-linux-ld: usb.c:(.text+0xbc): undefined reference to `qe_setbrg'
    powerpc-linux-ld: usb.c:(.text+0xca): undefined reference to `cmxgcr_lock'
    powerpc-linux-ld: usb.c:(.text+0xce): undefined reference to `cmxgcr_lock'
    
    Fixes: 5e41486c408e ("powerpc/QE: add support for QE USB clocks routing")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Reported-by: kernel test robot <lkp@intel.com>
    Link: https://lore.kernel.org/all/202301101500.pillNv6R-lkp@intel.com/
    Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Leo Li <leoyang.li@nxp.com>
    Cc: Masahiro Yamada <masahiroy@kernel.org>
    Cc: Nicolas Schier <nicolas@fjasle.eu>
    Cc: Qiang Zhao <qiang.zhao@nxp.com>
    Cc: linuxppc-dev <linuxppc-dev@lists.ozlabs.org>
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Kumar Gala <galak@kernel.crashing.org>
    Acked-by: Nicolas Schier <nicolas@jasle.eu>
    Signed-off-by: Li Yang <leoyang.li@nxp.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
spi: bcm-qspi: return error if neither hif_mspi nor mspi is available [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Thu Jun 29 15:43:05 2023 +0200

    spi: bcm-qspi: return error if neither hif_mspi nor mspi is available
    
    [ Upstream commit 7c1f23ad34fcdace50275a6aa1e1969b41c6233f ]
    
    If neither a "hif_mspi" nor "mspi" resource is present, the driver will
    just early exit in probe but still return success. Apart from not doing
    anything meaningful, this would then also lead to a null pointer access
    on removal, as platform_get_drvdata() would return NULL, which it would
    then try to dereference when trying to unregister the spi master.
    
    Fix this by unconditionally calling devm_ioremap_resource(), as it can
    handle a NULL res and will then return a viable ERR_PTR() if we get one.
    
    The "return 0;" was previously a "goto qspi_resource_err;" where then
    ret was returned, but since ret was still initialized to 0 at this place
    this was a valid conversion in 63c5395bb7a9 ("spi: bcm-qspi: Fix
    use-after-free on unbind"). The issue was not introduced by this commit,
    only made more obvious.
    
    Fixes: fa236a7ef240 ("spi: bcm-qspi: Add Broadcom MSPI driver")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Reviewed-by: Kamal Dasu <kamal.dasu@broadcom.com>
    Link: https://lore.kernel.org/r/20230629134306.95823-1-jonas.gorski@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: bcm63xx: fix max prepend length [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Thu Jun 29 09:14:52 2023 +0200

    spi: bcm63xx: fix max prepend length
    
    [ Upstream commit 5158814cbb37bbb38344b3ecddc24ba2ed0365f2 ]
    
    The command word is defined as following:
    
        /* Command */
        #define SPI_CMD_COMMAND_SHIFT           0
        #define SPI_CMD_DEVICE_ID_SHIFT         4
        #define SPI_CMD_PREPEND_BYTE_CNT_SHIFT  8
        #define SPI_CMD_ONE_BYTE_SHIFT          11
        #define SPI_CMD_ONE_WIRE_SHIFT          12
    
    If the prepend byte count field starts at bit 8, and the next defined
    bit is SPI_CMD_ONE_BYTE at bit 11, it can be at most 3 bits wide, and
    thus the max value is 7, not 15.
    
    Fixes: b17de076062a ("spi/bcm63xx: work around inability to keep CS up")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Link: https://lore.kernel.org/r/20230629071453.62024-1-jonas.gorski@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: spi-fsl-spi: allow changing bits_per_word while CS is still active [+ + +]
Author: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Date:   Wed Mar 27 14:30:51 2019 +0000

    spi: spi-fsl-spi: allow changing bits_per_word while CS is still active
    
    commit a798a7086c38d91d304132c194cff9f02197f5cd upstream.
    
    Commit c9bfcb315104 (spi_mpc83xx: much improved driver) introduced
    logic to ensure bits_per_word and speed_hz stay the same for a series
    of spi_transfers with CS active, arguing that
    
        The current driver may cause glitches on SPI CLK line since one
        must disable the SPI controller before changing any HW settings.
    
    This sounds quite reasonable. So this is a quite naive attempt at
    relaxing this sanity checking to only ensure that speed_hz is
    constant - in the faint hope that if we do not causes changes to the
    clock-related fields of the SPMODE register (DIV16 and PM), those
    glitches won't appear.
    
    The purpose of this change is to allow automatically optimizing large
    transfers to use 32 bits-per-word; taking one interrupt for every byte
    is extremely slow.
    
    Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: spi-fsl-spi: relax message sanity checking a little [+ + +]
Author: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Date:   Wed Mar 27 14:30:51 2019 +0000

    spi: spi-fsl-spi: relax message sanity checking a little
    
    commit 17ecffa289489e8442306bbc62ebb964e235cdad upstream.
    
    The comment says that we should not allow changes (to
    bits_per_word/speed_hz) while CS is active, and indeed the code below
    does fsl_spi_setup_transfer() when the ->cs_change of the previous
    spi_transfer was set (and for the very first transfer).
    
    So the sanity checking is a bit too strict - we can change it to
    follow the same logic as is used by the actual transfer loop.
    
    Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: spi-fsl-spi: remove always-true conditional in fsl_spi_do_one_msg [+ + +]
Author: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Date:   Wed Mar 27 14:30:50 2019 +0000

    spi: spi-fsl-spi: remove always-true conditional in fsl_spi_do_one_msg
    
    commit 24c363623361b430fb79459ca922e816e6f48603 upstream.
    
    __spi_validate() in the generic SPI code sets ->speed_hz and
    ->bits_per_word to non-zero values, so this condition is always true.
    
    Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
staging: ks7010: potential buffer overflow in ks_wlan_set_encode_ext() [+ + +]
Author: Zhang Shurong <zhang_shurong@foxmail.com>
Date:   Sun Jul 9 13:50:07 2023 +0800

    staging: ks7010: potential buffer overflow in ks_wlan_set_encode_ext()
    
    commit 5f1c7031e044cb2fba82836d55cc235e2ad619dc upstream.
    
    The "exc->key_len" is a u16 that comes from the user.  If it's over
    IW_ENCODING_TOKEN_MAX (64) that could lead to memory corruption.
    
    Fixes: b121d84882b9 ("staging: ks7010: simplify calls to memcpy()")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Zhang Shurong <zhang_shurong@foxmail.com>
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://lore.kernel.org/r/tencent_5153B668C0283CAA15AA518325346E026A09@qq.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
SUNRPC: Fix UAF in svc_tcp_listen_data_ready() [+ + +]
Author: Ding Hui <dinghui@sangfor.com.cn>
Date:   Mon May 15 10:13:07 2023 +0800

    SUNRPC: Fix UAF in svc_tcp_listen_data_ready()
    
    commit fc80fc2d4e39137869da3150ee169b40bf879287 upstream.
    
    After the listener svc_sock is freed, and before invoking svc_tcp_accept()
    for the established child sock, there is a window that the newsock
    retaining a freed listener svc_sock in sk_user_data which cloning from
    parent. In the race window, if data is received on the newsock, we will
    observe use-after-free report in svc_tcp_listen_data_ready().
    
    Reproduce by two tasks:
    
    1. while :; do rpc.nfsd 0 ; rpc.nfsd; done
    2. while :; do echo "" | ncat -4 127.0.0.1 2049 ; done
    
    KASAN report:
    
      ==================================================================
      BUG: KASAN: slab-use-after-free in svc_tcp_listen_data_ready+0x1cf/0x1f0 [sunrpc]
      Read of size 8 at addr ffff888139d96228 by task nc/102553
      CPU: 7 PID: 102553 Comm: nc Not tainted 6.3.0+ #18
      Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 11/12/2020
      Call Trace:
       <IRQ>
       dump_stack_lvl+0x33/0x50
       print_address_description.constprop.0+0x27/0x310
       print_report+0x3e/0x70
       kasan_report+0xae/0xe0
       svc_tcp_listen_data_ready+0x1cf/0x1f0 [sunrpc]
       tcp_data_queue+0x9f4/0x20e0
       tcp_rcv_established+0x666/0x1f60
       tcp_v4_do_rcv+0x51c/0x850
       tcp_v4_rcv+0x23fc/0x2e80
       ip_protocol_deliver_rcu+0x62/0x300
       ip_local_deliver_finish+0x267/0x350
       ip_local_deliver+0x18b/0x2d0
       ip_rcv+0x2fb/0x370
       __netif_receive_skb_one_core+0x166/0x1b0
       process_backlog+0x24c/0x5e0
       __napi_poll+0xa2/0x500
       net_rx_action+0x854/0xc90
       __do_softirq+0x1bb/0x5de
       do_softirq+0xcb/0x100
       </IRQ>
       <TASK>
       ...
       </TASK>
    
      Allocated by task 102371:
       kasan_save_stack+0x1e/0x40
       kasan_set_track+0x21/0x30
       __kasan_kmalloc+0x7b/0x90
       svc_setup_socket+0x52/0x4f0 [sunrpc]
       svc_addsock+0x20d/0x400 [sunrpc]
       __write_ports_addfd+0x209/0x390 [nfsd]
       write_ports+0x239/0x2c0 [nfsd]
       nfsctl_transaction_write+0xac/0x110 [nfsd]
       vfs_write+0x1c3/0xae0
       ksys_write+0xed/0x1c0
       do_syscall_64+0x38/0x90
       entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
      Freed by task 102551:
       kasan_save_stack+0x1e/0x40
       kasan_set_track+0x21/0x30
       kasan_save_free_info+0x2a/0x50
       __kasan_slab_free+0x106/0x190
       __kmem_cache_free+0x133/0x270
       svc_xprt_free+0x1e2/0x350 [sunrpc]
       svc_xprt_destroy_all+0x25a/0x440 [sunrpc]
       nfsd_put+0x125/0x240 [nfsd]
       nfsd_svc+0x2cb/0x3c0 [nfsd]
       write_threads+0x1ac/0x2a0 [nfsd]
       nfsctl_transaction_write+0xac/0x110 [nfsd]
       vfs_write+0x1c3/0xae0
       ksys_write+0xed/0x1c0
       do_syscall_64+0x38/0x90
       entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    Fix the UAF by simply doing nothing in svc_tcp_listen_data_ready()
    if state != TCP_LISTEN, that will avoid dereferencing svsk for all
    child socket.
    
    Link: https://lore.kernel.org/lkml/20230507091131.23540-1-dinghui@sangfor.com.cn/
    Fixes: fa9251afc33c ("SUNRPC: Call the default socket callbacks instead of open coding")
    Signed-off-by: Ding Hui <dinghui@sangfor.com.cn>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tcp: annotate data races in __tcp_oow_rate_limited() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Jun 29 16:41:50 2023 +0000

    tcp: annotate data races in __tcp_oow_rate_limited()
    
    [ Upstream commit 998127cdb4699b9d470a9348ffe9f1154346be5f ]
    
    request sockets are lockless, __tcp_oow_rate_limited() could be called
    on the same object from different cpus. This is harmless.
    
    Add READ_ONCE()/WRITE_ONCE() annotations to avoid a KCSAN report.
    
    Fixes: 4ce7e93cb3fe ("tcp: rate limit ACK sent by SYN_RECV request sockets")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around fastopenq.max_qlen [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 19 21:28:57 2023 +0000

    tcp: annotate data-races around fastopenq.max_qlen
    
    [ Upstream commit 70f360dd7042cb843635ece9d28335a4addff9eb ]
    
    This field can be read locklessly.
    
    Fixes: 1536e2857bd3 ("tcp: Add a TCP_FASTOPEN socket option to get a max backlog on its listner")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230719212857.3943972-12-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around rskq_defer_accept [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 19 21:28:54 2023 +0000

    tcp: annotate data-races around rskq_defer_accept
    
    [ Upstream commit ae488c74422fb1dcd807c0201804b3b5e8a322a3 ]
    
    do_tcp_getsockopt() reads rskq_defer_accept while another cpu
    might change its value.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230719212857.3943972-9-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around tp->linger2 [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 19 21:28:53 2023 +0000

    tcp: annotate data-races around tp->linger2
    
    [ Upstream commit 9df5335ca974e688389c875546e5819778a80d59 ]
    
    do_tcp_getsockopt() reads tp->linger2 while another cpu
    might change its value.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230719212857.3943972-8-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate data-races around tp->notsent_lowat [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 19 21:28:55 2023 +0000

    tcp: annotate data-races around tp->notsent_lowat
    
    [ Upstream commit 1aeb87bc1440c5447a7fa2d6e3c2cca52cbd206b ]
    
    tp->notsent_lowat can be read locklessly from do_tcp_getsockopt()
    and tcp_poll().
    
    Fixes: c9bee3b7fdec ("tcp: TCP_NOTSENT_LOWAT socket option")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230719212857.3943972-10-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: Reduce chance of collisions in inet6_hashfn(). [+ + +]
Author: Stewart Smith <trawets@amazon.com>
Date:   Fri Jul 21 15:24:10 2023 -0700

    tcp: Reduce chance of collisions in inet6_hashfn().
    
    [ Upstream commit d11b0df7ddf1831f3e170972f43186dad520bfcc ]
    
    For both IPv4 and IPv6 incoming TCP connections are tracked in a hash
    table with a hash over the source & destination addresses and ports.
    However, the IPv6 hash is insufficient and can lead to a high rate of
    collisions.
    
    The IPv6 hash used an XOR to fit everything into the 96 bits for the
    fast jenkins hash, meaning it is possible for an external entity to
    ensure the hash collides, thus falling back to a linear search in the
    bucket, which is slow.
    
    We take the approach of hash the full length of IPv6 address in
    __ipv6_addr_jhash() so that all users can benefit from a more secure
    version.
    
    While this may look like it adds overhead, the reality of modern CPUs
    means that this is unmeasurable in real world scenarios.
    
    In simulating with llvm-mca, the increase in cycles for the hashing
    code was ~16 cycles on Skylake (from a base of ~155), and an extra ~9
    on Nehalem (base of ~173).
    
    In commit dd6d2910c5e0 ("netfilter: conntrack: switch to siphash")
    netfilter switched from a jenkins hash to a siphash, but even the faster
    hsiphash is a more significant overhead (~20-30%) in some preliminary
    testing.  So, in this patch, we keep to the more conservative approach to
    ensure we don't add much overhead per SYN.
    
    In testing, this results in a consistently even spread across the
    connection buckets.  In both testing and real-world scenarios, we have
    not found any measurable performance impact.
    
    Fixes: 08dcdbf6a7b9 ("ipv6: use a stronger hash for tcp")
    Signed-off-by: Stewart Smith <trawets@amazon.com>
    Signed-off-by: Samuel Mendoza-Jonas <samjonas@amazon.com>
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20230721222410.17914-1-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tcp_metrics: annotate data-races around tm->tcpm_lock [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Aug 2 13:14:57 2023 +0000

    tcp_metrics: annotate data-races around tm->tcpm_lock
    
    [ Upstream commit 285ce119a3c6c4502585936650143e54c8692788 ]
    
    tm->tcpm_lock can be read or written locklessly.
    
    Add needed READ_ONCE()/WRITE_ONCE() to document this.
    
    Fixes: 51c5d0c4b169 ("tcp: Maintain dynamic metrics in local cache.")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20230802131500.1478140-4-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp_metrics: annotate data-races around tm->tcpm_net [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Aug 2 13:14:59 2023 +0000

    tcp_metrics: annotate data-races around tm->tcpm_net
    
    [ Upstream commit d5d986ce42c71a7562d32c4e21e026b0f87befec ]
    
    tm->tcpm_net can be read or written locklessly.
    
    Instead of changing write_pnet() and read_pnet() and potentially
    hurt performance, add the needed READ_ONCE()/WRITE_ONCE()
    in tm_net() and tcpm_new().
    
    Fixes: 849e8a0ca8d5 ("tcp_metrics: Add a field tcpm_net and verify it matches on lookup")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20230802131500.1478140-6-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp_metrics: annotate data-races around tm->tcpm_stamp [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Aug 2 13:14:56 2023 +0000

    tcp_metrics: annotate data-races around tm->tcpm_stamp
    
    [ Upstream commit 949ad62a5d5311d36fce2e14fe5fed3f936da51c ]
    
    tm->tcpm_stamp can be read or written locklessly.
    
    Add needed READ_ONCE()/WRITE_ONCE() to document this.
    
    Also constify tcpm_check_stamp() dst argument.
    
    Fixes: 51c5d0c4b169 ("tcp: Maintain dynamic metrics in local cache.")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20230802131500.1478140-3-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp_metrics: annotate data-races around tm->tcpm_vals[] [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Aug 2 13:14:58 2023 +0000

    tcp_metrics: annotate data-races around tm->tcpm_vals[]
    
    [ Upstream commit 8c4d04f6b443869d25e59822f7cec88d647028a9 ]
    
    tm->tcpm_vals[] values can be read or written locklessly.
    
    Add needed READ_ONCE()/WRITE_ONCE() to document this,
    and force use of tcp_metric_get() and tcp_metric_set()
    
    Fixes: 51c5d0c4b169 ("tcp: Maintain dynamic metrics in local cache.")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp_metrics: fix addr_same() helper [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Aug 2 13:14:55 2023 +0000

    tcp_metrics: fix addr_same() helper
    
    [ Upstream commit e6638094d7af6c7b9dcca05ad009e79e31b4f670 ]
    
    Because v4 and v6 families use separate inetpeer trees (respectively
    net->ipv4.peers and net->ipv6.peers), inetpeer_addr_cmp(a, b) assumes
    a & b share the same family.
    
    tcp_metrics use a common hash table, where entries can have different
    families.
    
    We must therefore make sure to not call inetpeer_addr_cmp()
    if the families do not match.
    
    Fixes: d39d14ffa24c ("net: Add helper function to compare inetpeer addresses")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20230802131500.1478140-2-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp_metrics: fix data-race in tcpm_suck_dst() vs fastopen [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Aug 2 13:15:00 2023 +0000

    tcp_metrics: fix data-race in tcpm_suck_dst() vs fastopen
    
    [ Upstream commit ddf251fa2bc1d3699eec0bae6ed0bc373b8fda79 ]
    
    Whenever tcpm_new() reclaims an old entry, tcpm_suck_dst()
    would overwrite data that could be read from tcp_fastopen_cache_get()
    or tcp_metrics_fill_info().
    
    We need to acquire fastopen_seqlock to maintain consistency.
    
    For newly allocated objects, tcpm_new() can switch to kzalloc()
    to avoid an extra fastopen_seqlock acquisition.
    
    Fixes: 1fe4c481ba63 ("net-tcp: Fast Open client - cookie cache")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Yuchung Cheng <ycheng@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20230802131500.1478140-7-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
team: reset team's flags when down link is P2P device [+ + +]
Author: Hangbin Liu <liuhangbin@gmail.com>
Date:   Fri Jul 21 12:03:56 2023 +0800

    team: reset team's flags when down link is P2P device
    
    [ Upstream commit fa532bee17d15acf8bba4bc8e2062b7a093ba801 ]
    
    When adding a point to point downlink to team device, we neglected to reset
    the team's flags, which were still using flags like BROADCAST and
    MULTICAST. Consequently, this would initiate ARP/DAD for P2P downlink
    interfaces, such as when adding a GRE device to team device. Fix this by
    remove multicast/broadcast flags and add p2p and noarp flags.
    
    After removing the none ethernet interface and adding an ethernet interface
    to team, we need to reset team interface flags. Unlike bonding interface,
    team do not need restore IFF_MASTER, IFF_SLAVE flags.
    
    Reported-by: Liang Li <liali@redhat.com>
    Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2221438
    Fixes: 1d76efe1577b ("team: add support for non-ethernet devices")
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
test_firmware: fix a memory leak with reqs buffer [+ + +]
Author: Mirsad Goran Todorovac <mirsad.todorovac@alu.unizg.hr>
Date:   Tue May 9 10:47:47 2023 +0200

    test_firmware: fix a memory leak with reqs buffer
    
    commit be37bed754ed90b2655382f93f9724b3c1aae847 upstream.
    
    Dan Carpenter spotted that test_fw_config->reqs will be leaked if
    trigger_batched_requests_store() is called two or more times.
    The same appears with trigger_batched_requests_async_store().
    
    This bug wasn't trigger by the tests, but observed by Dan's visual
    inspection of the code.
    
    The recommended workaround was to return -EBUSY if test_fw_config->reqs
    is already allocated.
    
    Fixes: 7feebfa487b92 ("test_firmware: add support for request_firmware_into_buf")
    Cc: Luis Chamberlain <mcgrof@kernel.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Russ Weight <russell.h.weight@intel.com>
    Cc: Tianfei Zhang <tianfei.zhang@intel.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Colin Ian King <colin.i.king@gmail.com>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Cc: linux-kselftest@vger.kernel.org
    Cc: stable@vger.kernel.org # v5.4
    Suggested-by: Dan Carpenter <error27@gmail.com>
    Suggested-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Mirsad Goran Todorovac <mirsad.todorovac@alu.unizg.hr>
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Acked-by: Luis Chamberlain <mcgrof@kernel.org>
    Link: https://lore.kernel.org/r/20230509084746.48259-2-mirsad.todorovac@alu.unizg.hr
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

test_firmware: return ENOMEM instead of ENOSPC on failed memory allocation [+ + +]
Author: Mirsad Goran Todorovac <mirsad.todorovac@alu.unizg.hr>
Date:   Tue Jun 6 09:08:10 2023 +0200

    test_firmware: return ENOMEM instead of ENOSPC on failed memory allocation
    
    commit 7dae593cd226a0bca61201cf85ceb9335cf63682 upstream.
    
    In a couple of situations like
    
            name = kstrndup(buf, count, GFP_KERNEL);
            if (!name)
                    return -ENOSPC;
    
    the error is not actually "No space left on device", but "Out of memory".
    
    It is semantically correct to return -ENOMEM in all failed kstrndup()
    and kzalloc() cases in this driver, as it is not a problem with disk
    space, but with kernel memory allocator failing allocation.
    
    The semantically correct should be:
    
            name = kstrndup(buf, count, GFP_KERNEL);
            if (!name)
                    return -ENOMEM;
    
    Cc: Dan Carpenter <error27@gmail.com>
    Cc: Takashi Iwai <tiwai@suse.de>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: "Luis R. Rodriguez" <mcgrof@ruslug.rutgers.edu>
    Cc: Scott Branden <sbranden@broadcom.com>
    Cc: Hans de Goede <hdegoede@redhat.com>
    Cc: Brian Norris <briannorris@chromium.org>
    Fixes: c92316bf8e948 ("test_firmware: add batched firmware tests")
    Fixes: 0a8adf584759c ("test: add firmware_class loader test")
    Fixes: 548193cba2a7d ("test_firmware: add support for firmware_request_platform")
    Fixes: eb910947c82f9 ("test: firmware_class: add asynchronous request trigger")
    Fixes: 061132d2b9c95 ("test_firmware: add test custom fallback trigger")
    Fixes: 7feebfa487b92 ("test_firmware: add support for request_firmware_into_buf")
    Signed-off-by: Mirsad Goran Todorovac <mirsad.todorovac@alu.unizg.hr>
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Message-ID: <20230606070808.9300-1-mirsad.todorovac@alu.unizg.hr>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tpm: tpm_vtpm_proxy: fix a race condition in /dev/vtpmx creation [+ + +]
Author: Jarkko Sakkinen <jarkko@kernel.org>
Date:   Tue May 16 01:25:54 2023 +0300

    tpm: tpm_vtpm_proxy: fix a race condition in /dev/vtpmx creation
    
    commit f4032d615f90970d6c3ac1d9c0bce3351eb4445c upstream.
    
    /dev/vtpmx is made visible before 'workqueue' is initialized, which can
    lead to a memory corruption in the worst case scenario.
    
    Address this by initializing 'workqueue' as the very first step of the
    driver initialization.
    
    Cc: stable@vger.kernel.org
    Fixes: 6f99612e2500 ("tpm: Proxy driver for supporting multiple emulated TPMs")
    Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
    Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@tuni.fi>
    Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tpm_tis: Explicitly check for error code [+ + +]
Author: Alexander Steffen <Alexander.Steffen@infineon.com>
Date:   Tue Jun 13 20:02:56 2023 +0200

    tpm_tis: Explicitly check for error code
    
    commit 513253f8c293c0c8bd46d09d337fc892bf8f9f48 upstream.
    
    recv_data either returns the number of received bytes, or a negative value
    representing an error code. Adding the return value directly to the total
    number of received bytes therefore looks a little weird, since it might add
    a negative error code to a sum of bytes.
    
    The following check for size < expected usually makes the function return
    ETIME in that case, so it does not cause too many problems in practice. But
    to make the code look cleaner and because the caller might still be
    interested in the original error code, explicitly check for the presence of
    an error code and pass that through.
    
    Cc: stable@vger.kernel.org
    Fixes: cb5354253af2 ("[PATCH] tpm: spacing cleanups 2")
    Signed-off-by: Alexander Steffen <Alexander.Steffen@infineon.com>
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing/histograms: Add histograms to hist_vars if they have referenced variables [+ + +]
Author: Mohamed Khalfella <mkhalfella@purestorage.com>
Date:   Wed Jul 12 22:30:21 2023 +0000

    tracing/histograms: Add histograms to hist_vars if they have referenced variables
    
    commit 6018b585e8c6fa7d85d4b38d9ce49a5b67be7078 upstream.
    
    Hist triggers can have referenced variables without having direct
    variables fields. This can be the case if referenced variables are added
    for trigger actions. In this case the newly added references will not
    have field variables. Not taking such referenced variables into
    consideration can result in a bug where it would be possible to remove
    hist trigger with variables being refenced. This will result in a bug
    that is easily reproducable like so
    
    $ cd /sys/kernel/tracing
    $ echo 'synthetic_sys_enter char[] comm; long id' >> synthetic_events
    $ echo 'hist:keys=common_pid.execname,id.syscall:vals=hitcount:comm=common_pid.execname' >> events/raw_syscalls/sys_enter/trigger
    $ echo 'hist:keys=common_pid.execname,id.syscall:onmatch(raw_syscalls.sys_enter).synthetic_sys_enter($comm, id)' >> events/raw_syscalls/sys_enter/trigger
    $ echo '!hist:keys=common_pid.execname,id.syscall:vals=hitcount:comm=common_pid.execname' >> events/raw_syscalls/sys_enter/trigger
    
    [  100.263533] ==================================================================
    [  100.264634] BUG: KASAN: slab-use-after-free in resolve_var_refs+0xc7/0x180
    [  100.265520] Read of size 8 at addr ffff88810375d0f0 by task bash/439
    [  100.266320]
    [  100.266533] CPU: 2 PID: 439 Comm: bash Not tainted 6.5.0-rc1 #4
    [  100.267277] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.0-20220807_005459-localhost 04/01/2014
    [  100.268561] Call Trace:
    [  100.268902]  <TASK>
    [  100.269189]  dump_stack_lvl+0x4c/0x70
    [  100.269680]  print_report+0xc5/0x600
    [  100.270165]  ? resolve_var_refs+0xc7/0x180
    [  100.270697]  ? kasan_complete_mode_report_info+0x80/0x1f0
    [  100.271389]  ? resolve_var_refs+0xc7/0x180
    [  100.271913]  kasan_report+0xbd/0x100
    [  100.272380]  ? resolve_var_refs+0xc7/0x180
    [  100.272920]  __asan_load8+0x71/0xa0
    [  100.273377]  resolve_var_refs+0xc7/0x180
    [  100.273888]  event_hist_trigger+0x749/0x860
    [  100.274505]  ? kasan_save_stack+0x2a/0x50
    [  100.275024]  ? kasan_set_track+0x29/0x40
    [  100.275536]  ? __pfx_event_hist_trigger+0x10/0x10
    [  100.276138]  ? ksys_write+0xd1/0x170
    [  100.276607]  ? do_syscall_64+0x3c/0x90
    [  100.277099]  ? entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    [  100.277771]  ? destroy_hist_data+0x446/0x470
    [  100.278324]  ? event_hist_trigger_parse+0xa6c/0x3860
    [  100.278962]  ? __pfx_event_hist_trigger_parse+0x10/0x10
    [  100.279627]  ? __kasan_check_write+0x18/0x20
    [  100.280177]  ? mutex_unlock+0x85/0xd0
    [  100.280660]  ? __pfx_mutex_unlock+0x10/0x10
    [  100.281200]  ? kfree+0x7b/0x120
    [  100.281619]  ? ____kasan_slab_free+0x15d/0x1d0
    [  100.282197]  ? event_trigger_write+0xac/0x100
    [  100.282764]  ? __kasan_slab_free+0x16/0x20
    [  100.283293]  ? __kmem_cache_free+0x153/0x2f0
    [  100.283844]  ? sched_mm_cid_remote_clear+0xb1/0x250
    [  100.284550]  ? __pfx_sched_mm_cid_remote_clear+0x10/0x10
    [  100.285221]  ? event_trigger_write+0xbc/0x100
    [  100.285781]  ? __kasan_check_read+0x15/0x20
    [  100.286321]  ? __bitmap_weight+0x66/0xa0
    [  100.286833]  ? _find_next_bit+0x46/0xe0
    [  100.287334]  ? task_mm_cid_work+0x37f/0x450
    [  100.287872]  event_triggers_call+0x84/0x150
    [  100.288408]  trace_event_buffer_commit+0x339/0x430
    [  100.289073]  ? ring_buffer_event_data+0x3f/0x60
    [  100.292189]  trace_event_raw_event_sys_enter+0x8b/0xe0
    [  100.295434]  syscall_trace_enter.constprop.0+0x18f/0x1b0
    [  100.298653]  syscall_enter_from_user_mode+0x32/0x40
    [  100.301808]  do_syscall_64+0x1a/0x90
    [  100.304748]  entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    [  100.307775] RIP: 0033:0x7f686c75c1cb
    [  100.310617] Code: 73 01 c3 48 8b 0d 65 3c 10 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 21 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 35 3c 10 00 f7 d8 64 89 01 48
    [  100.317847] RSP: 002b:00007ffc60137a38 EFLAGS: 00000246 ORIG_RAX: 0000000000000021
    [  100.321200] RAX: ffffffffffffffda RBX: 000055f566469ea0 RCX: 00007f686c75c1cb
    [  100.324631] RDX: 0000000000000001 RSI: 0000000000000001 RDI: 000000000000000a
    [  100.328104] RBP: 00007ffc60137ac0 R08: 00007f686c818460 R09: 000000000000000a
    [  100.331509] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000009
    [  100.334992] R13: 0000000000000007 R14: 000000000000000a R15: 0000000000000007
    [  100.338381]  </TASK>
    
    We hit the bug because when second hist trigger has was created
    has_hist_vars() returned false because hist trigger did not have
    variables. As a result of that save_hist_vars() was not called to add
    the trigger to trace_array->hist_vars. Later on when we attempted to
    remove the first histogram find_any_var_ref() failed to detect it is
    being used because it did not find the second trigger in hist_vars list.
    
    With this change we wait until trigger actions are created so we can take
    into consideration if hist trigger has variable references. Also, now we
    check the return value of save_hist_vars() and fail trigger creation if
    save_hist_vars() fails.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20230712223021.636335-1-mkhalfella@purestorage.com
    
    Cc: stable@vger.kernel.org
    Fixes: 067fe038e70f6 ("tracing: Add variable reference handling to hist triggers")
    Signed-off-by: Mohamed Khalfella <mkhalfella@purestorage.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing/histograms: Return an error if we fail to add histogram to hist_vars list [+ + +]
Author: Mohamed Khalfella <mkhalfella@purestorage.com>
Date:   Fri Jul 14 20:33:41 2023 +0000

    tracing/histograms: Return an error if we fail to add histogram to hist_vars list
    
    commit 4b8b3905165ef98386a3c06f196c85d21292d029 upstream.
    
    Commit 6018b585e8c6 ("tracing/histograms: Add histograms to hist_vars if
    they have referenced variables") added a check to fail histogram creation
    if save_hist_vars() failed to add histogram to hist_vars list. But the
    commit failed to set ret to failed return code before jumping to
    unregister histogram, fix it.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20230714203341.51396-1-mkhalfella@purestorage.com
    
    Cc: stable@vger.kernel.org
    Fixes: 6018b585e8c6 ("tracing/histograms: Add histograms to hist_vars if they have referenced variables")
    Signed-off-by: Mohamed Khalfella <mkhalfella@purestorage.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing: Fix warning in trace_buffered_event_disable() [+ + +]
Author: Zheng Yejian <zhengyejian1@huawei.com>
Date:   Wed Jul 26 17:58:04 2023 +0800

    tracing: Fix warning in trace_buffered_event_disable()
    
    [ Upstream commit dea499781a1150d285c62b26659f62fb00824fce ]
    
    Warning happened in trace_buffered_event_disable() at
      WARN_ON_ONCE(!trace_buffered_event_ref)
    
      Call Trace:
       ? __warn+0xa5/0x1b0
       ? trace_buffered_event_disable+0x189/0x1b0
       __ftrace_event_enable_disable+0x19e/0x3e0
       free_probe_data+0x3b/0xa0
       unregister_ftrace_function_probe_func+0x6b8/0x800
       event_enable_func+0x2f0/0x3d0
       ftrace_process_regex.isra.0+0x12d/0x1b0
       ftrace_filter_write+0xe6/0x140
       vfs_write+0x1c9/0x6f0
       [...]
    
    The cause of the warning is in __ftrace_event_enable_disable(),
    trace_buffered_event_enable() was called once while
    trace_buffered_event_disable() was called twice.
    Reproduction script show as below, for analysis, see the comments:
     ```
     #!/bin/bash
    
     cd /sys/kernel/tracing/
    
     # 1. Register a 'disable_event' command, then:
     #    1) SOFT_DISABLED_BIT was set;
     #    2) trace_buffered_event_enable() was called first time;
     echo 'cmdline_proc_show:disable_event:initcall:initcall_finish' > \
         set_ftrace_filter
    
     # 2. Enable the event registered, then:
     #    1) SOFT_DISABLED_BIT was cleared;
     #    2) trace_buffered_event_disable() was called first time;
     echo 1 > events/initcall/initcall_finish/enable
    
     # 3. Try to call into cmdline_proc_show(), then SOFT_DISABLED_BIT was
     #    set again!!!
     cat /proc/cmdline
    
     # 4. Unregister the 'disable_event' command, then:
     #    1) SOFT_DISABLED_BIT was cleared again;
     #    2) trace_buffered_event_disable() was called second time!!!
     echo '!cmdline_proc_show:disable_event:initcall:initcall_finish' > \
         set_ftrace_filter
     ```
    
    To fix it, IIUC, we can change to call trace_buffered_event_enable() at
    fist time soft-mode enabled, and call trace_buffered_event_disable() at
    last time soft-mode disabled.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20230726095804.920457-1-zhengyejian1@huawei.com
    
    Cc: <mhiramat@kernel.org>
    Fixes: 0fc1b09ff1ff ("tracing: Use temp buffer when filtering events")
    Signed-off-by: Zheng Yejian <zhengyejian1@huawei.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
treewide: Remove uninitialized_var() usage [+ + +]
Author: Kees Cook <keescook@chromium.org>
Date:   Wed Jun 3 13:09:38 2020 -0700

    treewide: Remove uninitialized_var() usage
    
    commit 3f649ab728cda8038259d8f14492fe400fbab911 upstream.
    
    Using uninitialized_var() is dangerous as it papers over real bugs[1]
    (or can in the future), and suppresses unrelated compiler warnings
    (e.g. "unused variable"). If the compiler thinks it is uninitialized,
    either simply initialize the variable or make compiler changes.
    
    In preparation for removing[2] the[3] macro[4], remove all remaining
    needless uses with the following script:
    
    git grep '\buninitialized_var\b' | cut -d: -f1 | sort -u | \
            xargs perl -pi -e \
                    's/\buninitialized_var\(([^\)]+)\)/\1/g;
                     s:\s*/\* (GCC be quiet|to make compiler happy) \*/$::g;'
    
    drivers/video/fbdev/riva/riva_hw.c was manually tweaked to avoid
    pathological white-space.
    
    No outstanding warnings were found building allmodconfig with GCC 9.3.0
    for x86_64, i386, arm64, arm, powerpc, powerpc64le, s390x, mips, sparc64,
    alpha, and m68k.
    
    [1] https://lore.kernel.org/lkml/20200603174714.192027-1-glider@google.com/
    [2] https://lore.kernel.org/lkml/CA+55aFw+Vbj0i=1TGqCR5vQkCzWJ0QxK6CernOU6eedsudAixw@mail.gmail.com/
    [3] https://lore.kernel.org/lkml/CA+55aFwgbgqhbp1fkxvRKEpzyR5J8n1vKT1VZdz9knmPuXhOeg@mail.gmail.com/
    [4] https://lore.kernel.org/lkml/CA+55aFz2500WfbKXAx8s67wrm9=yVJu65TpLgN_ybYNv0VEOKA@mail.gmail.com/
    
    Reviewed-by: Leon Romanovsky <leonro@mellanox.com> # drivers/infiniband and mlx4/mlx5
    Acked-by: Jason Gunthorpe <jgg@mellanox.com> # IB
    Acked-by: Kalle Valo <kvalo@codeaurora.org> # wireless drivers
    Reviewed-by: Chao Yu <yuchao0@huawei.com> # erofs
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tty: serial: samsung_tty: Fix a memory leak in s3c24xx_serial_getclk() in case of error [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat Jun 10 17:59:25 2023 +0200

    tty: serial: samsung_tty: Fix a memory leak in s3c24xx_serial_getclk() in case of error
    
    commit a9c09546e903f1068acfa38e1ee18bded7114b37 upstream.
    
    If clk_get_rate() fails, the clk that has just been allocated needs to be
    freed.
    
    Cc: <stable@vger.kernel.org> # v3.3+
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
    Fixes: 5f5a7a5578c5 ("serial: samsung: switch to clkdev based clock lookup")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Jiri Slaby <jirislaby@kernel.org>
    Message-ID: <e4baf6039368f52e5a5453982ddcb9a330fc689e.1686412569.git.christophe.jaillet@wanadoo.fr>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tty: serial: samsung_tty: Fix a memory leak in s3c24xx_serial_getclk() when iterating clk [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat Jun 10 17:59:26 2023 +0200

    tty: serial: samsung_tty: Fix a memory leak in s3c24xx_serial_getclk() when iterating clk
    
    commit 832e231cff476102e8204a9e7bddfe5c6154a375 upstream.
    
    When the best clk is searched, we iterate over all possible clk.
    
    If we find a better match, the previous one, if any, needs to be freed.
    If a better match has already been found, we still need to free the new
    one, otherwise it leaks.
    
    Cc: <stable@vger.kernel.org> # v3.3+
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
    Fixes: 5f5a7a5578c5 ("serial: samsung: switch to clkdev based clock lookup")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Jiri Slaby <jirislaby@kernel.org>
    Message-ID: <cf3e0053d2fc7391b2d906a86cd01a5ef15fb9dc.1686412569.git.christophe.jaillet@wanadoo.fr>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
udp6: fix udp6_ehashfn() typo [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Sat Jul 8 08:29:58 2023 +0000

    udp6: fix udp6_ehashfn() typo
    
    [ Upstream commit 51d03e2f2203e76ed02d33fb5ffbb5fc85ffaf54 ]
    
    Amit Klein reported that udp6_ehash_secret was initialized but never used.
    
    Fixes: 1bbdceef1e53 ("inet: convert inet_ehash_secret and ipv6_hash_secret to net_get_random_once")
    Reported-by: Amit Klein <aksecurity@gmail.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Willy Tarreau <w@1wt.eu>
    Cc: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
    Cc: David Ahern <dsahern@kernel.org>
    Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
usb: dwc3: don't reset device side if dwc3 was configured as host-only [+ + +]
Author: Jisheng Zhang <jszhang@kernel.org>
Date:   Wed Jun 28 00:20:18 2023 +0800

    usb: dwc3: don't reset device side if dwc3 was configured as host-only
    
    commit e835c0a4e23c38531dcee5ef77e8d1cf462658c7 upstream.
    
    Commit c4a5153e87fd ("usb: dwc3: core: Power-off core/PHYs on
    system_suspend in host mode") replaces check for HOST only dr_mode with
    current_dr_role. But during booting, the current_dr_role isn't
    initialized, thus the device side reset is always issued even if dwc3
    was configured as host-only. What's more, on some platforms with host
    only dwc3, aways issuing device side reset by accessing device register
    block can cause kernel panic.
    
    Fixes: c4a5153e87fd ("usb: dwc3: core: Power-off core/PHYs on system_suspend in host mode")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/20230627162018.739-1-jszhang@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: dwc3: pci: skip BYT GPIO lookup table for hardwired phy [+ + +]
Author: Gratian Crisan <gratian.crisan@ni.com>
Date:   Wed Jul 26 13:45:56 2023 -0500

    usb: dwc3: pci: skip BYT GPIO lookup table for hardwired phy
    
    commit b32b8f2b9542d8039f5468303a6ca78c1b5611a5 upstream.
    
    Hardware based on the Bay Trail / BYT SoCs require an external ULPI phy for
    USB device-mode. The phy chip usually has its 'reset' and 'chip select'
    lines connected to GPIOs described by ACPI fwnodes in the DSDT table.
    
    Because of hardware with missing ACPI resources for the 'reset' and 'chip
    select' GPIOs commit 5741022cbdf3 ("usb: dwc3: pci: Add GPIO lookup table
    on platforms without ACPI GPIO resources") introduced a fallback
    gpiod_lookup_table with hard-coded mappings for Bay Trail devices.
    
    However there are existing Bay Trail based devices, like the National
    Instruments cRIO-903x series, where the phy chip has its 'reset' and
    'chip-select' lines always asserted in hardware via resistor pull-ups. On
    this hardware the phy chip is always enabled and the ACPI dsdt table is
    missing information not only for the 'chip-select' and 'reset' lines but
    also for the BYT GPIO controller itself "INT33FC".
    
    With the introduction of the gpiod_lookup_table initializing the USB
    device-mode on these hardware now errors out. The error comes from the
    gpiod_get_optional() calls in dwc3_pci_quirks() which will now return an
    -ENOENT error due to the missing ACPI entry for the INT33FC gpio controller
    used in the aforementioned table.
    
    This hardware used to work before because gpiod_get_optional() will return
    NULL instead of -ENOENT if no GPIO has been assigned to the requested
    function. The dwc3_pci_quirks() code for setting the 'cs' and 'reset' GPIOs
    was then skipped (due to the NULL return). This is the correct behavior in
    cases where the phy chip is hardwired and there are no GPIOs to control.
    
    Since the gpiod_lookup_table relies on the presence of INT33FC fwnode
    in ACPI tables only add the table if we know the entry for the INT33FC
    gpio controller is present. This allows Bay Trail based devices with
    hardwired dwc3 ULPI phys to continue working.
    
    Fixes: 5741022cbdf3 ("usb: dwc3: pci: Add GPIO lookup table on platforms without ACPI GPIO resources")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Gratian Crisan <gratian.crisan@ni.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20230726184555.218091-2-gratian.crisan@ni.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: ohci-at91: Fix the unhandle interrupt when resume [+ + +]
Author: Guiting Shen <aarongt.shen@gmail.com>
Date:   Mon Jun 26 23:27:13 2023 +0800

    usb: ohci-at91: Fix the unhandle interrupt when resume
    
    commit c55afcbeaa7a6f4fffdbc999a9bf3f0b29a5186f upstream.
    
    The ohci_hcd_at91_drv_suspend() sets ohci->rh_state to OHCI_RH_HALTED when
    suspend which will let the ohci_irq() skip the interrupt after resume. And
    nobody to handle this interrupt.
    
    According to the comment in ohci_hcd_at91_drv_suspend(), it need to reset
    when resume from suspend(MEM) to fix by setting "hibernated" argument of
    ohci_resume().
    
    Signed-off-by: Guiting Shen <aarongt.shen@gmail.com>
    Cc: stable <stable@kernel.org>
    Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/20230626152713.18950-1-aarongt.shen@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: phy: phy-tahvo: fix memory leak in tahvo_usb_probe() [+ + +]
Author: Li Yang <lidaxian@hust.edu.cn>
Date:   Thu Apr 20 22:08:31 2023 +0800

    usb: phy: phy-tahvo: fix memory leak in tahvo_usb_probe()
    
    [ Upstream commit 342161c11403ea00e9febc16baab1d883d589d04 ]
    
    Smatch reports:
    drivers/usb/phy/phy-tahvo.c: tahvo_usb_probe()
    warn: missing unwind goto?
    
    After geting irq, if ret < 0, it will return without error handling to
    free memory.
    Just add error handling to fix this problem.
    
    Fixes: 0d45a1373e66 ("usb: phy: tahvo: add IRQ check")
    Signed-off-by: Li Yang <lidaxian@hust.edu.cn>
    Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
    Link: https://lore.kernel.org/r/20230420140832.9110-1-lidaxian@hust.edu.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
USB: quirks: add quirk for Focusrite Scarlett [+ + +]
Author: Łukasz Bartosik <lb@semihalf.com>
Date:   Mon Jul 24 13:29:11 2023 +0200

    USB: quirks: add quirk for Focusrite Scarlett
    
    commit 9dc162e22387080e2d06de708b89920c0e158c9a upstream.
    
    The Focusrite Scarlett audio device does not behave correctly during
    resumes. Below is what happens during every resume (captured with
    Beagle 5000):
    
    <Suspend>
    <Resume>
    <Reset>/<Chirp J>/<Tiny J>
    <Reset/Target disconnected>
    <High Speed>
    
    The Scarlett disconnects and is enumerated again.
    
    However from time to time it drops completely off the USB bus during
    resume. Below is captured occurrence of such an event:
    
    <Suspend>
    <Resume>
    <Reset>/<Chirp J>/<Tiny J>
    <Reset>/<Chirp K>/<Tiny K>
    <High Speed>
    <Corrupted packet>
    <Reset/Target disconnected>
    
    To fix the condition a user has to unplug and plug the device again.
    
    With USB_QUIRK_RESET_RESUME applied ("usbcore.quirks=1235:8211:b")
    for the Scarlett audio device the issue still reproduces.
    
    Applying USB_QUIRK_DISCONNECT_SUSPEND ("usbcore.quirks=1235:8211:m")
    fixed the issue and the Scarlett audio device didn't drop off the USB
    bus for ~5000 suspend/resume cycles where originally issue reproduced in
    ~100 or less suspend/resume cycles.
    
    Signed-off-by: Łukasz Bartosik <lb@semihalf.com>
    Cc: stable <stable@kernel.org>
    Link: https://lore.kernel.org/r/20230724112911.1802577-1-lb@semihalf.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add LARA-R6 01B PIDs [+ + +]
Author: Davide Tronchin <davide.tronchin.94@gmail.com>
Date:   Thu Jun 22 11:29:21 2023 +0200

    USB: serial: option: add LARA-R6 01B PIDs
    
    commit ffa5f7a3bf28c1306eef85d4056539c2d4b8eb09 upstream.
    
    The new LARA-R6 product variant identified by the "01B" string can be
    configured (by AT interface) in three different USB modes:
    
    * Default mode (Vendor ID: 0x1546 Product ID: 0x1311) with 4 serial
    interfaces
    
    * RmNet mode (Vendor ID: 0x1546 Product ID: 0x1312) with 4 serial
    interfaces and 1 RmNet virtual network interface
    
    * CDC-ECM mode (Vendor ID: 0x1546 Product ID: 0x1313) with 4 serial
    interface and 1 CDC-ECM virtual network interface
    The first 4 interfaces of all the 3 USB configurations (default, RmNet,
    CDC-ECM) are the same.
    
    In default mode LARA-R6 01B exposes the following interfaces:
    If 0: Diagnostic
    If 1: AT parser
    If 2: AT parser
    If 3: AT parser/alternative functions
    
    In RmNet mode LARA-R6 01B exposes the following interfaces:
    If 0: Diagnostic
    If 1: AT parser
    If 2: AT parser
    If 3: AT parser/alternative functions
    If 4: RMNET interface
    
    In CDC-ECM mode LARA-R6 01B exposes the following interfaces:
    If 0: Diagnostic
    If 1: AT parser
    If 2: AT parser
    If 3: AT parser/alternative functions
    If 4: CDC-ECM interface
    
    Signed-off-by: Davide Tronchin <davide.tronchin.94@gmail.com>
    Link: https://lore.kernel.org/r/20230622092921.12651-1-davide.tronchin.94@gmail.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Quectel EC200A module support [+ + +]
Author: Mohsen Tahmasebi <moh53n@moh53n.ir>
Date:   Mon Jul 10 11:22:18 2023 +0330

    USB: serial: option: add Quectel EC200A module support
    
    commit 857ea9005806e2a458016880278f98715873e977 upstream.
    
    Add Quectel EC200A "DIAG, AT, MODEM":
    
    0x6005: ECM / RNDIS + DIAG + AT + MODEM
    
    T:  Bus=01 Lev=01 Prnt=02 Port=05 Cnt=01 Dev#=  8 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=2c7c ProdID=6005 Rev=03.18
    S:  Manufacturer=Android
    S:  Product=Android
    S:  SerialNumber=0000
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
    E:  Ad=87(I) Atr=03(Int.) MxPS=  64 Ivl=4096ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    E:  Ad=0c(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=0b(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=03(Int.) MxPS=  64 Ivl=4096ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=0a(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  64 Ivl=4096ms
    
    Signed-off-by: Mohsen Tahmasebi <moh53n@moh53n.ir>
    Tested-by: Mostafa Ghofrani <mostafaghrr@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: support Quectel EM060K_128 [+ + +]
Author: Jerry Meng <jerry-meng@foxmail.com>
Date:   Thu Jun 29 17:35:22 2023 +0800

    USB: serial: option: support Quectel EM060K_128
    
    commit 4f7cab49cecee16120d27c1734cfdf3d6c0e5329 upstream.
    
    EM060K_128 is EM060K's sub-model, having the same name "Quectel EM060K-GL"
    
    MBIM + GNSS + DIAG + NMEA + AT + QDSS + DPL
    
    T:  Bus=03 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  8 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=2c7c ProdID=0128 Rev= 5.04
    S:  Manufacturer=Quectel
    S:  Product=Quectel EM060K-GL
    S:  SerialNumber=f6fa08b6
    C:* #Ifs= 8 Cfg#= 1 Atr=a0 MxPwr=500mA
    A:  FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=40 Driver=option
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 6 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8f(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: Jerry Meng <jerry-meng@foxmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: simple: add Kaufmann RKS+CAN VCP [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Wed Jul 12 16:16:41 2023 +0200

    USB: serial: simple: add Kaufmann RKS+CAN VCP
    
    commit dd92c8a1f99bcd166204ffc219ea5a23dd65d64f upstream.
    
    Add the device and product ID for this CAN bus interface / license
    dongle. The device is usable either directly from user space or can be
    attached to a kernel CAN interface with slcan_attach.
    
    Reported-by: Kaufmann Automotive GmbH <info@kaufmann-automotive.ch>
    Tested-by: Kaufmann Automotive GmbH <info@kaufmann-automotive.ch>
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    [ johan: amend commit message and move entries in sort order ]
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: simple: sort driver entries [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Jul 20 09:53:57 2023 +0200

    USB: serial: simple: sort driver entries
    
    commit d245aedc00775c4d7265a9f4522cc4e1fd34d102 upstream.
    
    Sort the driver symbols alphabetically in order to make it more obvious
    where new driver entries should be added.
    
    Cc: stable@vger.kernel.org
    Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: xhci-mtk: set the dma max_seg_size [+ + +]
Author: Ricardo Ribalda <ribalda@chromium.org>
Date:   Wed Jul 19 13:01:04 2023 +0000

    usb: xhci-mtk: set the dma max_seg_size
    
    commit 9fd10829a9eb482e192a845675ecc5480e0bfa10 upstream.
    
    Allow devices to have dma operations beyond 64K, and avoid warnings such
    as:
    
    DMA-API: xhci-mtk 11200000.usb: mapping sg segment longer than device claims to support [len=98304] [max=65536]
    
    Fixes: 0cbd4b34cda9 ("xhci: mediatek: support MTK xHCI host controller")
    Cc: stable <stable@kernel.org>
    Tested-by: Zubin Mithra <zsm@chromium.org>
    Reported-by: Zubin Mithra <zsm@chromium.org>
    Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
    Link: https://lore.kernel.org/r/20230628-mtk-usb-v2-1-c8c34eb9f229@chromium.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: zaurus: Add ID for A-300/B-500/C-700 [+ + +]
Author: Ross Maynard <bids.7405@bigpond.com>
Date:   Mon Jul 31 15:42:04 2023 +1000

    USB: zaurus: Add ID for A-300/B-500/C-700
    
    commit b99225b4fe297d07400f9e2332ecd7347b224f8d upstream.
    
    The SL-A300, B500/5600, and C700 devices no longer auto-load because of
    "usbnet: Remove over-broad module alias from zaurus."
    This patch adds IDs for those 3 devices.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=217632
    Fixes: 16adf5d07987 ("usbnet: Remove over-broad module alias from zaurus.")
    Signed-off-by: Ross Maynard <bids.7405@bigpond.com>
    Cc: stable@vger.kernel.org
    Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/69b5423b-2013-9fc9-9569-58e707d9bafb@bigpond.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
video: imsttfb: check for ioremap() failures [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon May 3 13:57:34 2021 +0200

    video: imsttfb: check for ioremap() failures
    
    commit 13b7c0390a5d3840e1e2cda8f44a310fdbb982de upstream.
    
    We should check if ioremap() were to somehow fail in imsttfb_probe() and
    handle the unwinding of the resources allocated here properly.
    
    Ideally if anyone cares about this driver (it's for a PowerMac era PCI
    display card), they wouldn't even be using fbdev anymore.  Or the devm_*
    apis could be used, but that's just extra work for diminishing
    returns...
    
    Cc: Finn Thain <fthain@telegraphics.com.au>
    Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Link: https://lore.kernel.org/r/20210503115736.2104747-68-gregkh@linuxfoundation.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
virtio-net: fix race between set queues and probe [+ + +]
Author: Jason Wang <jasowang@redhat.com>
Date:   Tue Jul 25 03:20:49 2023 -0400

    virtio-net: fix race between set queues and probe
    
    commit 25266128fe16d5632d43ada34c847d7b8daba539 upstream.
    
    A race were found where set_channels could be called after registering
    but before virtnet_set_queues() in virtnet_probe(). Fixing this by
    moving the virtnet_set_queues() before netdevice registering. While at
    it, use _virtnet_set_queues() to avoid holding rtnl as the device is
    not even registered at that time.
    
    Cc: stable@vger.kernel.org
    Fixes: a220871be66f ("virtio-net: correctly enable multiqueue")
    Signed-off-by: Jason Wang <jasowang@redhat.com>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20230725072049.617289-1-jasowang@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vrf: Increment Icmp6InMsgs on the original netdev [+ + +]
Author: Stephen Suryaputra <ssuryaextr@gmail.com>
Date:   Mon Jun 10 10:32:50 2019 -0400

    vrf: Increment Icmp6InMsgs on the original netdev
    
    [ Upstream commit e1ae5c2ea4783b1fd87be250f9fcc9d9e1a6ba3f ]
    
    Get the ingress interface and increment ICMP counters based on that
    instead of skb->dev when the the dev is a VRF device.
    
    This is a follow up on the following message:
    https://www.spinics.net/lists/netdev/msg560268.html
    
    v2: Avoid changing skb->dev since it has unintended effect for local
        delivery (David Ahern).
    Signed-off-by: Stephen Suryaputra <ssuryaextr@gmail.com>
    Reviewed-by: David Ahern <dsahern@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 2aaa8a15de73 ("icmp6: Fix null-ptr-deref of ip6_null_entry->rt6i_idev in icmp6_dev().")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
w1: fix loop in w1_fini() [+ + +]
Author: Dan Carpenter <error27@gmail.com>
Date:   Wed May 19 17:17:45 2021 +0300

    w1: fix loop in w1_fini()
    
    [ Upstream commit 83f3fcf96fcc7e5405b37d9424c7ef26bfa203f8 ]
    
    The __w1_remove_master_device() function calls:
    
            list_del(&dev->w1_master_entry);
    
    So presumably this can cause an endless loop.
    
    Fixes: 7785925dd8e0 ("[PATCH] w1: cleanups.")
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
watchdog/perf: define dummy watchdog_update_hrtimer_threshold() on correct config [+ + +]
Author: Douglas Anderson <dianders@chromium.org>
Date:   Fri May 19 10:18:25 2023 -0700

    watchdog/perf: define dummy watchdog_update_hrtimer_threshold() on correct config
    
    [ Upstream commit 5e008df11c55228a86a1bae692cc2002503572c9 ]
    
    Patch series "watchdog/hardlockup: Add the buddy hardlockup detector", v5.
    
    This patch series adds the "buddy" hardlockup detector.  In brief, the
    buddy hardlockup detector can detect hardlockups without arch-level
    support by having CPUs checkup on a "buddy" CPU periodically.
    
    Given the new design of this patch series, testing all combinations is
    fairly difficult. I've attempted to make sure that all combinations of
    CONFIG_ options are good, but it wouldn't surprise me if I missed
    something. I apologize in advance and I'll do my best to fix any
    problems that are found.
    
    This patch (of 18):
    
    The real watchdog_update_hrtimer_threshold() is defined in
    kernel/watchdog_hld.c.  That file is included if
    CONFIG_HARDLOCKUP_DETECTOR_PERF and the function is defined in that file
    if CONFIG_HARDLOCKUP_CHECK_TIMESTAMP.
    
    The dummy version of the function in "nmi.h" didn't get that quite right.
    While this doesn't appear to be a huge deal, it's nice to make it
    consistent.
    
    It doesn't break builds because CHECK_TIMESTAMP is only defined by x86 so
    others don't get a double definition, and x86 uses perf lockup detector,
    so it gets the out of line version.
    
    Link: https://lkml.kernel.org/r/20230519101840.v5.18.Ia44852044cdcb074f387e80df6b45e892965d4a1@changeid
    Link: https://lkml.kernel.org/r/20230519101840.v5.1.I8cbb2f4fa740528fcfade4f5439b6cdcdd059251@changeid
    Fixes: 7edaeb6841df ("kernel/watchdog: Prevent false positives with turbo modes")
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
    Reviewed-by: Petr Mladek <pmladek@suse.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Chen-Yu Tsai <wens@csie.org>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Daniel Thompson <daniel.thompson@linaro.org>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Guenter Roeck <groeck@chromium.org>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Lecopzer Chen <lecopzer.chen@mediatek.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Masayoshi Mizuma <msys.mizuma@gmail.com>
    Cc: Matthias Kaehlcke <mka@chromium.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Pingfan Liu <kernelfans@gmail.com>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Cc: "Ravi V. Shankar" <ravi.v.shankar@intel.com>
    Cc: Ricardo Neri <ricardo.neri@intel.com>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Stephen Boyd <swboyd@chromium.org>
    Cc: Sumit Garg <sumit.garg@linaro.org>
    Cc: Tzung-Bi Shih <tzungbi@chromium.org>
    Cc: Will Deacon <will@kernel.org>
    Cc: Colin Cross <ccross@android.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

watchdog/perf: more properly prevent false positives with turbo modes [+ + +]
Author: Douglas Anderson <dianders@chromium.org>
Date:   Fri May 19 10:18:26 2023 -0700

    watchdog/perf: more properly prevent false positives with turbo modes
    
    [ Upstream commit 4379e59fe5665cfda737e45b8bf2f05321ef049c ]
    
    Currently, in the watchdog_overflow_callback() we first check to see if
    the watchdog had been touched and _then_ we handle the workaround for
    turbo mode.  This order should be reversed.
    
    Specifically, "touching" the hardlockup detector's watchdog should avoid
    lockups being detected for one period that should be roughly the same
    regardless of whether we're running turbo or not.  That means that we
    should do the extra accounting for turbo _before_ we look at (and clear)
    the global indicating that we've been touched.
    
    NOTE: this fix is made based on code inspection.  I am not aware of any
    reports where the old code would have generated false positives.  That
    being said, this order seems more correct and also makes it easier down
    the line to share code with the "buddy" hardlockup detector.
    
    Link: https://lkml.kernel.org/r/20230519101840.v5.2.I843b0d1de3e096ba111a179f3adb16d576bef5c7@changeid
    Fixes: 7edaeb6841df ("kernel/watchdog: Prevent false positives with turbo modes")
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Chen-Yu Tsai <wens@csie.org>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Colin Cross <ccross@android.com>
    Cc: Daniel Thompson <daniel.thompson@linaro.org>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Guenter Roeck <groeck@chromium.org>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Lecopzer Chen <lecopzer.chen@mediatek.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Masayoshi Mizuma <msys.mizuma@gmail.com>
    Cc: Matthias Kaehlcke <mka@chromium.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: Pingfan Liu <kernelfans@gmail.com>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Cc: "Ravi V. Shankar" <ravi.v.shankar@intel.com>
    Cc: Ricardo Neri <ricardo.neri@intel.com>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Stephen Boyd <swboyd@chromium.org>
    Cc: Sumit Garg <sumit.garg@linaro.org>
    Cc: Tzung-Bi Shih <tzungbi@chromium.org>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
wifi: airo: avoid uninitialized warning in airo_get_rate() [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Sun Jul 9 06:31:54 2023 -0700

    wifi: airo: avoid uninitialized warning in airo_get_rate()
    
    [ Upstream commit 9373771aaed17f5c2c38485f785568abe3a9f8c1 ]
    
    Quieten a gcc (11.3.0) build error or warning by checking the function
    call status and returning -EBUSY if the function call failed.
    This is similar to what several other wireless drivers do for the
    SIOCGIWRATE ioctl call when there is a locking problem.
    
    drivers/net/wireless/cisco/airo.c: error: 'status_rid.currentXmitRate' is used uninitialized [-Werror=uninitialized]
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Link: https://lore.kernel.org/r/39abf2c7-24a-f167-91da-ed4c5435d1c4@linux-m68k.org
    Link: https://lore.kernel.org/r/20230709133154.26206-1-rdunlap@infradead.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath9k: avoid referencing uninit memory in ath9k_wmi_ctrl_rx [+ + +]
Author: Fedor Pchelkin <pchelkin@ispras.ru>
Date:   Wed Apr 26 17:35:01 2023 +0300

    wifi: ath9k: avoid referencing uninit memory in ath9k_wmi_ctrl_rx
    
    [ Upstream commit f24292e827088bba8de7158501ac25a59b064953 ]
    
    For the reasons also described in commit b383e8abed41 ("wifi: ath9k: avoid
    uninit memory read in ath9k_htc_rx_msg()"), ath9k_htc_rx_msg() should
    validate pkt_len before accessing the SKB.
    
    For example, the obtained SKB may have been badly constructed with
    pkt_len = 8. In this case, the SKB can only contain a valid htc_frame_hdr
    but after being processed in ath9k_htc_rx_msg() and passed to
    ath9k_wmi_ctrl_rx() endpoint RX handler, it is expected to have a WMI
    command header which should be located inside its data payload.
    
    Implement sanity checking inside ath9k_wmi_ctrl_rx(). Otherwise, uninit
    memory can be referenced.
    
    Tested on Qualcomm Atheros Communications AR9271 802.11n .
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: fb9987d0f748 ("ath9k_htc: Support for AR9271 chipset.")
    Reported-and-tested-by: syzbot+f2cb6e0ffdb961921e4d@syzkaller.appspotmail.com
    Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
    Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20230424183348.111355-1-pchelkin@ispras.ru
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath9k: convert msecs to jiffies where needed [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Tue Jun 13 16:46:55 2023 +0300

    wifi: ath9k: convert msecs to jiffies where needed
    
    [ Upstream commit 2aa083acea9f61be3280184384551178f510ff51 ]
    
    Since 'ieee80211_queue_delayed_work()' expects timeout in
    jiffies and not milliseconds, 'msecs_to_jiffies()' should
    be used in 'ath_restart_work()' and '__ath9k_flush()'.
    
    Fixes: d63ffc45c5d3 ("ath9k: rename tx_complete_work to hw_check_work")
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20230613134655.248728-1-dmantipov@yandex.ru
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath9k: don't allow to overwrite ENDPOINT0 attributes [+ + +]
Author: Fedor Pchelkin <pchelkin@ispras.ru>
Date:   Wed May 17 18:03:17 2023 +0300

    wifi: ath9k: don't allow to overwrite ENDPOINT0 attributes
    
    [ Upstream commit 061b0cb9327b80d7a0f63a33e7c3e2a91a71f142 ]
    
    A bad USB device is able to construct a service connection response
    message with target endpoint being ENDPOINT0 which is reserved for
    HTC_CTRL_RSVD_SVC and should not be modified to be used for any other
    services.
    
    Reject such service connection responses.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: fb9987d0f748 ("ath9k_htc: Support for AR9271 chipset.")
    Reported-by: syzbot+b68fbebe56d8362907e8@syzkaller.appspotmail.com
    Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
    Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20230516150427.79469-1-pchelkin@ispras.ru
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath9k: fix AR9003 mac hardware hang check register offset calculation [+ + +]
Author: Peter Seiderer <ps.report@gmx.net>
Date:   Wed Apr 26 17:35:00 2023 +0300

    wifi: ath9k: fix AR9003 mac hardware hang check register offset calculation
    
    [ Upstream commit 3e56c80931c7615250fe4bf83f93b57881969266 ]
    
    Fix ath9k_hw_verify_hang()/ar9003_hw_detect_mac_hang() register offset
    calculation (do not overflow the shift for the second register/queues
    above five, use the register layout described in the comments above
    ath9k_hw_verify_hang() instead).
    
    Fixes: 222e04830ff0 ("ath9k: Fix MAC HW hang check for AR9003")
    
    Reported-by: Gregg Wonderly <greggwonderly@seqtechllc.com>
    Link: https://lore.kernel.org/linux-wireless/E3A9C354-0CB7-420C-ADEF-F0177FB722F4@seqtechllc.com/
    Signed-off-by: Peter Seiderer <ps.report@gmx.net>
    Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20230422212423.26065-1-ps.report@gmx.net
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath9k: Fix possible stall on ath9k_txq_list_has_key() [+ + +]
Author: Remi Pommarel <repk@triplefau.lt>
Date:   Fri Jun 9 11:37:44 2023 +0200

    wifi: ath9k: Fix possible stall on ath9k_txq_list_has_key()
    
    [ Upstream commit 75086cc6dee046e3fbb3dba148b376d8802f83bc ]
    
    On EDMA capable hardware, ath9k_txq_list_has_key() can enter infinite
    loop if it is called while all txq_fifos have packets that use different
    key that the one we are looking for. Fix it by exiting the loop if all
    txq_fifos have been checked already.
    
    Because this loop is called under spin_lock_bh() (see ath_txq_lock) it
    causes the following rcu stall:
    
    rcu: INFO: rcu_sched self-detected stall on CPU
    ath10k_pci 0000:01:00.0: failed to read temperature -11
    rcu:    1-....: (5254 ticks this GP) idle=189/1/0x4000000000000002 softirq=8442983/8442984 fqs=2579
            (t=5257 jiffies g=17983297 q=334)
    Task dump for CPU 1:
    task:hostapd         state:R  running task     stack:    0 pid:  297 ppid:   289 flags:0x0000000a
    Call trace:
     dump_backtrace+0x0/0x170
     show_stack+0x1c/0x24
     sched_show_task+0x140/0x170
     dump_cpu_task+0x48/0x54
     rcu_dump_cpu_stacks+0xf0/0x134
     rcu_sched_clock_irq+0x8d8/0x9fc
     update_process_times+0xa0/0xec
     tick_sched_timer+0x5c/0xd0
     __hrtimer_run_queues+0x154/0x320
     hrtimer_interrupt+0x120/0x2f0
     arch_timer_handler_virt+0x38/0x44
     handle_percpu_devid_irq+0x9c/0x1e0
     handle_domain_irq+0x64/0x90
     gic_handle_irq+0x78/0xb0
     call_on_irq_stack+0x28/0x38
     do_interrupt_handler+0x54/0x5c
     el1_interrupt+0x2c/0x4c
     el1h_64_irq_handler+0x14/0x1c
     el1h_64_irq+0x74/0x78
     ath9k_txq_has_key+0x1bc/0x250 [ath9k]
     ath9k_set_key+0x1cc/0x3dc [ath9k]
     drv_set_key+0x78/0x170
     ieee80211_key_replace+0x564/0x6cc
     ieee80211_key_link+0x174/0x220
     ieee80211_add_key+0x11c/0x300
     nl80211_new_key+0x12c/0x330
     genl_family_rcv_msg_doit+0xbc/0x11c
     genl_rcv_msg+0xd8/0x1c4
     netlink_rcv_skb+0x40/0x100
     genl_rcv+0x3c/0x50
     netlink_unicast+0x1ec/0x2c0
     netlink_sendmsg+0x198/0x3c0
     ____sys_sendmsg+0x210/0x250
     ___sys_sendmsg+0x78/0xc4
     __sys_sendmsg+0x4c/0x90
     __arm64_sys_sendmsg+0x28/0x30
     invoke_syscall.constprop.0+0x60/0x100
     do_el0_svc+0x48/0xd0
     el0_svc+0x14/0x50
     el0t_64_sync_handler+0xa8/0xb0
     el0t_64_sync+0x158/0x15c
    
    This rcu stall is hard to reproduce as is, but changing ATH_TXFIFO_DEPTH
    from 8 to 2 makes it reasonably easy to reproduce.
    
    Fixes: ca2848022c12 ("ath9k: Postpone key cache entry deletion for TXQ frames reference it")
    Signed-off-by: Remi Pommarel <repk@triplefau.lt>
    Tested-by: Nicolas Escande <nico.escande@gmail.com>
    Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20230609093744.1985-1-repk@triplefau.lt
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: atmel: Fix an error handling path in atmel_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat May 20 09:53:14 2023 +0200

    wifi: atmel: Fix an error handling path in atmel_probe()
    
    [ Upstream commit 6b92e4351a29af52c285fe235e6e4d1a75de04b2 ]
    
    Should atmel_config() fail, some resources need to be released as already
    done in the remove function.
    
    While at it, remove a useless and erroneous comment. The probe is
    atmel_probe(), not atmel_attach().
    
    Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/1e65f174607a83348034197fa7d603bab10ba4a9.1684569156.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: iwlwifi: mvm: avoid baid size integer overflow [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Tue Jun 20 13:04:02 2023 +0300

    wifi: iwlwifi: mvm: avoid baid size integer overflow
    
    [ Upstream commit 1a528ab1da324d078ec60283c34c17848580df24 ]
    
    Roee reported various hard-to-debug crashes with pings in
    EHT aggregation scenarios. Enabling KASAN showed that we
    access the BAID allocation out of bounds, and looking at
    the code a bit shows that since the reorder buffer entry
    (struct iwl_mvm_reorder_buf_entry) is 128 bytes if debug
    such as lockdep is enabled, then staring from an agg size
    512 we overflow the size calculation, and allocate a much
    smaller structure than we should, causing slab corruption
    once we initialize this.
    
    Fix this by simply using u32 instead of u16.
    
    Reported-by: Roee Goldfiner <roee.h.goldfiner@intel.com>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
    Link: https://lore.kernel.org/r/20230620125813.f428c856030d.I2c2bb808e945adb71bc15f5b2bac2d8957ea90eb@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mwifiex: Fix the size of a memory allocation in mwifiex_ret_802_11_scan() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat May 6 15:53:15 2023 +0200

    wifi: mwifiex: Fix the size of a memory allocation in mwifiex_ret_802_11_scan()
    
    [ Upstream commit d9aef04fcfa81ee4fb2804a21a3712b7bbd936af ]
    
    The type of "mwifiex_adapter->nd_info" is "struct cfg80211_wowlan_nd_info",
    not "struct cfg80211_wowlan_nd_match".
    
    Use struct_size() to ease the computation of the needed size.
    
    The current code over-allocates some memory, so is safe.
    But it wastes 32 bytes.
    
    Fixes: 7d7f07d8c5d3 ("mwifiex: add wowlan net-detect support")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/7a6074fb056d2181e058a3cc6048d8155c20aec7.1683371982.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: orinoco: Fix an error handling path in orinoco_cs_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat May 20 09:38:22 2023 +0200

    wifi: orinoco: Fix an error handling path in orinoco_cs_probe()
    
    [ Upstream commit 67a81d911c01225f426cc6bee2373df044c1a9b7 ]
    
    Should orinoco_cs_config() fail, some resources need to be released as
    already done in the remove function.
    
    While at it, remove a useless and erroneous comment. The probe is
    orinoco_cs_probe(), not orinoco_cs_attach().
    
    Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/e24735ce4d82901d5f7ea08419eea53bfdde3d65.1684568286.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: orinoco: Fix an error handling path in spectrum_cs_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat May 20 09:29:46 2023 +0200

    wifi: orinoco: Fix an error handling path in spectrum_cs_probe()
    
    [ Upstream commit 925244325159824385209e3e0e3f91fa6bf0646c ]
    
    Should spectrum_cs_config() fail, some resources need to be released as
    already done in the remove function.
    
    While at it, remove a useless and erroneous comment. The probe is
    spectrum_cs_probe(), not spectrum_cs_attach().
    
    Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/c0bc0c21c58ca477fc5521607615bafbf2aef8eb.1684567733.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ray_cs: Drop useless status variable in parse_addr() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Fri Jun 3 19:44:14 2022 +0300

    wifi: ray_cs: Drop useless status variable in parse_addr()
    
    [ Upstream commit 4dfc63c002a555a2c3c34d89009532ad803be876 ]
    
    The status variable assigned only once and used also only once.
    Replace it's usage by actual value.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/20220603164414.48436-2-andriy.shevchenko@linux.intel.com
    Stable-dep-of: 4f8d66a9fb2e ("wifi: ray_cs: Fix an error handling path in ray_probe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ray_cs: Fix an error handling path in ray_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat May 20 10:13:22 2023 +0200

    wifi: ray_cs: Fix an error handling path in ray_probe()
    
    [ Upstream commit 4f8d66a9fb2edcd05c1e563456a55a08910bfb37 ]
    
    Should ray_config() fail, some resources need to be released as already
    done in the remove function.
    
    While at it, remove a useless and erroneous comment. The probe is
    ray_probe(), not ray_attach().
    
    Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/8c544d18084f8b37dd108e844f7e79e85ff708ff.1684570373.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ray_cs: Utilize strnlen() in parse_addr() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Fri Jun 3 19:44:13 2022 +0300

    wifi: ray_cs: Utilize strnlen() in parse_addr()
    
    [ Upstream commit 9e8e9187673cb24324f9165dd47b2b28f60b0b10 ]
    
    Instead of doing simple operations and using an additional variable on stack,
    utilize strnlen() and reuse len variable.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/20220603164414.48436-1-andriy.shevchenko@linux.intel.com
    Stable-dep-of: 4f8d66a9fb2e ("wifi: ray_cs: Fix an error handling path in ray_probe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: rsi: Do not set MMC_PM_KEEP_POWER in shutdown [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Sun May 28 00:28:59 2023 +0200

    wifi: rsi: Do not set MMC_PM_KEEP_POWER in shutdown
    
    [ Upstream commit e74f562328b03fbe9cf438f958464dff3a644dfc ]
    
    It makes no sense to set MMC_PM_KEEP_POWER in shutdown. The flag
    indicates to the MMC subsystem to keep the slot powered on during
    suspend, but in shutdown the slot should actually be powered off.
    Drop this call.
    
    Fixes: 063848c3e155 ("rsi: sdio: Add WOWLAN support for S5 shutdown state")
    Signed-off-by: Marek Vasut <marex@denx.de>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/20230527222859.273768-1-marex@denx.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: wext-core: Fix -Wstringop-overflow warning in ioctl_standard_iw_point() [+ + +]
Author: Gustavo A. R. Silva <gustavoars@kernel.org>
Date:   Thu Jun 15 12:04:07 2023 -0600

    wifi: wext-core: Fix -Wstringop-overflow warning in ioctl_standard_iw_point()
    
    [ Upstream commit 71e7552c90db2a2767f5c17c7ec72296b0d92061 ]
    
    -Wstringop-overflow is legitimately warning us about extra_size
    pontentially being zero at some point, hence potenially ending
    up _allocating_ zero bytes of memory for extra pointer and then
    trying to access such object in a call to copy_from_user().
    
    Fix this by adding a sanity check to ensure we never end up
    trying to allocate zero bytes of data for extra pointer, before
    continue executing the rest of the code in the function.
    
    Address the following -Wstringop-overflow warning seen when built
    m68k architecture with allyesconfig configuration:
                     from net/wireless/wext-core.c:11:
    In function '_copy_from_user',
        inlined from 'copy_from_user' at include/linux/uaccess.h:183:7,
        inlined from 'ioctl_standard_iw_point' at net/wireless/wext-core.c:825:7:
    arch/m68k/include/asm/string.h:48:25: warning: '__builtin_memset' writing 1 or more bytes into a region of size 0 overflows the destination [-Wstringop-overflow=]
       48 | #define memset(d, c, n) __builtin_memset(d, c, n)
          |                         ^~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/uaccess.h:153:17: note: in expansion of macro 'memset'
      153 |                 memset(to + (n - res), 0, res);
          |                 ^~~~~~
    In function 'kmalloc',
        inlined from 'kzalloc' at include/linux/slab.h:694:9,
        inlined from 'ioctl_standard_iw_point' at net/wireless/wext-core.c:819:10:
    include/linux/slab.h:577:16: note: at offset 1 into destination object of size 0 allocated by '__kmalloc'
      577 |         return __kmalloc(size, flags);
          |                ^~~~~~~~~~~~~~~~~~~~~~
    
    This help with the ongoing efforts to globally enable
    -Wstringop-overflow.
    
    Link: https://github.com/KSPP/linux/issues/315
    Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Link: https://lore.kernel.org/r/ZItSlzvIpjdjNfd8@work
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: wl3501_cs: Fix an error handling path in wl3501_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat May 20 10:05:08 2023 +0200

    wifi: wl3501_cs: Fix an error handling path in wl3501_probe()
    
    [ Upstream commit 391af06a02e7642039ac5f6c4b2c034ab0992b5d ]
    
    Should wl3501_config() fail, some resources need to be released as already
    done in the remove function.
    
    Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/7cc9c9316489b7d69b36aeb0edd3123538500b41.1684569865.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
wl3501_cs: Fix a bunch of formatting issues related to function docs [+ + +]
Author: Lee Jones <lee@kernel.org>
Date:   Wed Aug 26 10:33:51 2020 +0100

    wl3501_cs: Fix a bunch of formatting issues related to function docs
    
    [ Upstream commit 2307d0bc9d8b60299f255d1771ce0d997162a957 ]
    
    Fixes the following W=1 kernel build warning(s):
    
     In file included from drivers/net/wireless/wl3501_cs.c:57:
     drivers/net/wireless/wl3501_cs.c:143: warning: Function parameter or member 'reg_domain' not described in 'iw_valid_channel'
     drivers/net/wireless/wl3501_cs.c:143: warning: Function parameter or member 'channel' not described in 'iw_valid_channel'
     drivers/net/wireless/wl3501_cs.c:162: warning: Function parameter or member 'reg_domain' not described in 'iw_default_channel'
     drivers/net/wireless/wl3501_cs.c:248: warning: Function parameter or member 'this' not described in 'wl3501_set_to_wla'
     drivers/net/wireless/wl3501_cs.c:270: warning: Function parameter or member 'this' not described in 'wl3501_get_from_wla'
     drivers/net/wireless/wl3501_cs.c:467: warning: Function parameter or member 'this' not described in 'wl3501_send_pkt'
     drivers/net/wireless/wl3501_cs.c:467: warning: Function parameter or member 'data' not described in 'wl3501_send_pkt'
     drivers/net/wireless/wl3501_cs.c:467: warning: Function parameter or member 'len' not described in 'wl3501_send_pkt'
     drivers/net/wireless/wl3501_cs.c:729: warning: Function parameter or member 'this' not described in 'wl3501_block_interrupt'
     drivers/net/wireless/wl3501_cs.c:746: warning: Function parameter or member 'this' not described in 'wl3501_unblock_interrupt'
     drivers/net/wireless/wl3501_cs.c:1124: warning: Function parameter or member 'irq' not described in 'wl3501_interrupt'
     drivers/net/wireless/wl3501_cs.c:1124: warning: Function parameter or member 'dev_id' not described in 'wl3501_interrupt'
     drivers/net/wireless/wl3501_cs.c:1257: warning: Function parameter or member 'dev' not described in 'wl3501_reset'
     drivers/net/wireless/wl3501_cs.c:1420: warning: Function parameter or member 'link' not described in 'wl3501_detach'
    
    Cc: Kalle Valo <kvalo@codeaurora.org>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Jakub Kicinski <kuba@kernel.org>
    Cc: Fox Chen <mhchen@golf.ccl.itri.org.tw>
    Cc: de Melo <acme@conectiva.com.br>
    Cc: Gustavo Niemeyer <niemeyer@conectiva.com>
    Cc: linux-wireless@vger.kernel.org
    Cc: netdev@vger.kernel.org
    Signed-off-by: Lee Jones <lee.jones@linaro.org>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20200826093401.1458456-21-lee.jones@linaro.org
    Stable-dep-of: 391af06a02e7 ("wifi: wl3501_cs: Fix an error handling path in wl3501_probe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wl3501_cs: Fix misspelling and provide missing documentation [+ + +]
Author: Lee Jones <lee@kernel.org>
Date:   Mon Nov 2 11:23:53 2020 +0000

    wl3501_cs: Fix misspelling and provide missing documentation
    
    [ Upstream commit 8b8a6f8c3b50193d161c598a6784e721128d6dc3 ]
    
    Fixes the following W=1 kernel build warning(s):
    
     In file included from drivers/net/wireless/wl3501_cs.c:57:
     drivers/net/wireless/wl3501_cs.c:143: warning: Function parameter or member 'reg_domain' not described in 'iw_valid_channel'
     drivers/net/wireless/wl3501_cs.c:143: warning: Excess function parameter 'reg_comain' description in 'iw_valid_channel'
     drivers/net/wireless/wl3501_cs.c:469: warning: Function parameter or member 'data' not described in 'wl3501_send_pkt'
     drivers/net/wireless/wl3501_cs.c:469: warning: Function parameter or member 'len' not described in 'wl3501_send_pkt'
    
    Cc: Kalle Valo <kvalo@codeaurora.org>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Jakub Kicinski <kuba@kernel.org>
    Cc: Fox Chen <mhchen@golf.ccl.itri.org.tw>
    Cc: de Melo <acme@conectiva.com.br>
    Cc: Gustavo Niemeyer <niemeyer@conectiva.com>
    Cc: linux-wireless@vger.kernel.org
    Cc: netdev@vger.kernel.org
    Signed-off-by: Lee Jones <lee.jones@linaro.org>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20201102112410.1049272-25-lee.jones@linaro.org
    Stable-dep-of: 391af06a02e7 ("wifi: wl3501_cs: Fix an error handling path in wl3501_probe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wl3501_cs: Remove unnecessary NULL check [+ + +]
Author: Alex Dewar <alex.dewar90@gmail.com>
Date:   Sat Sep 26 18:45:58 2020 +0100

    wl3501_cs: Remove unnecessary NULL check
    
    [ Upstream commit 1d2a85382282e7c77cbde5650335c3ffc6073fa1 ]
    
    In wl3501_detach(), link->priv is checked for a NULL value before being
    passed to free_netdev(). However, it cannot be NULL at this point as it
    has already been passed to other functions, so just remove the check.
    
    Addresses-Coverity: CID 710499: Null pointer dereferences (REVERSE_INULL)
    Signed-off-by: Alex Dewar <alex.dewar90@gmail.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20200926174558.9436-1-alex.dewar90@gmail.com
    Stable-dep-of: 391af06a02e7 ("wifi: wl3501_cs: Fix an error handling path in wl3501_probe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wl3501_cs: use eth_hw_addr_set() [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Mon Oct 18 16:50:20 2021 -0700

    wl3501_cs: use eth_hw_addr_set()
    
    [ Upstream commit 18774612246d036c04ce9fee7f67192f96f48725 ]
    
    Commit 406f42fa0d3c ("net-next: When a bond have a massive amount
    of VLANs...") introduced a rbtree for faster Ethernet address look
    up. To maintain netdev->dev_addr in this tree we need to make all
    the writes to it got through appropriate helpers.
    
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20211018235021.1279697-15-kuba@kernel.org
    Stable-dep-of: 391af06a02e7 ("wifi: wl3501_cs: Fix an error handling path in wl3501_probe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
word-at-a-time: use the same return type for has_zero regardless of endianness [+ + +]
Author: ndesaulniers@google.com <ndesaulniers@google.com>
Date:   Tue Aug 1 15:22:17 2023 -0700

    word-at-a-time: use the same return type for has_zero regardless of endianness
    
    [ Upstream commit 79e8328e5acbe691bbde029a52c89d70dcbc22f3 ]
    
    Compiling big-endian targets with Clang produces the diagnostic:
    
      fs/namei.c:2173:13: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
            } while (!(has_zero(a, &adata, &constants) | has_zero(b, &bdata, &constants)));
                      ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                                   ||
      fs/namei.c:2173:13: note: cast one or both operands to int to silence this warning
    
    It appears that when has_zero was introduced, two definitions were
    produced with different signatures (in particular different return
    types).
    
    Looking at the usage in hash_name() in fs/namei.c, I suspect that
    has_zero() is meant to be invoked twice per while loop iteration; using
    logical-or would not update `bdata` when `a` did not have zeros.  So I
    think it's preferred to always return an unsigned long rather than a
    bool than update the while loop in hash_name() to use a logical-or
    rather than bitwise-or.
    
    [ Also changed powerpc version to do the same  - Linus ]
    
    Link: https://github.com/ClangBuiltLinux/linux/issues/1832
    Link: https://lore.kernel.org/lkml/20230801-bitwise-v1-1-799bec468dc4@google.com/
    Fixes: 36126f8f2ed8 ("word-at-a-time: make the interfaces truly generic")
    Debugged-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
    Acked-by: Heiko Carstens <hca@linux.ibm.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
workqueue: clean up WORK_* constant types, clarify masking [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Fri Jun 23 12:08:14 2023 -0700

    workqueue: clean up WORK_* constant types, clarify masking
    
    commit afa4bb778e48d79e4a642ed41e3b4e0de7489a6c upstream.
    
    Dave Airlie reports that gcc-13.1.1 has started complaining about some
    of the workqueue code in 32-bit arm builds:
    
      kernel/workqueue.c: In function ‘get_work_pwq’:
      kernel/workqueue.c:713:24: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
        713 |                 return (void *)(data & WORK_STRUCT_WQ_DATA_MASK);
            |                        ^
      [ ... a couple of other cases ... ]
    
    and while it's not immediately clear exactly why gcc started complaining
    about it now, I suspect it's some C23-induced enum type handlign fixup in
    gcc-13 is the cause.
    
    Whatever the reason for starting to complain, the code and data types
    are indeed disgusting enough that the complaint is warranted.
    
    The wq code ends up creating various "helper constants" (like that
    WORK_STRUCT_WQ_DATA_MASK) using an enum type, which is all kinds of
    confused.  The mask needs to be 'unsigned long', not some unspecified
    enum type.
    
    To make matters worse, the actual "mask and cast to a pointer" is
    repeated a couple of times, and the cast isn't even always done to the
    right pointer, but - as the error case above - to a 'void *' with then
    the compiler finishing the job.
    
    That's now how we roll in the kernel.
    
    So create the masks using the proper types rather than some ambiguous
    enumeration, and use a nice helper that actually does the type
    conversion in one well-defined place.
    
    Incidentally, this magically makes clang generate better code.  That,
    admittedly, is really just a sign of clang having been seriously
    confused before, and cleaning up the typing unconfuses the compiler too.
    
    Reported-by: Dave Airlie <airlied@gmail.com>
    Link: https://lore.kernel.org/lkml/CAPM=9twNnV4zMCvrPkw3H-ajZOH-01JVh_kDrxdPYQErz8ZTdA@mail.gmail.com/
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Cc: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/smp: Use dedicated cache-line for mwait_play_dead() [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Thu Jun 15 22:33:55 2023 +0200

    x86/smp: Use dedicated cache-line for mwait_play_dead()
    
    commit f9c9987bf52f4e42e940ae217333ebb5a4c3b506 upstream.
    
    Monitoring idletask::thread_info::flags in mwait_play_dead() has been an
    obvious choice as all what is needed is a cache line which is not written
    by other CPUs.
    
    But there is a use case where a "dead" CPU needs to be brought out of
    MWAIT: kexec().
    
    This is required as kexec() can overwrite text, pagetables, stacks and the
    monitored cacheline of the original kernel. The latter causes MWAIT to
    resume execution which obviously causes havoc on the kexec kernel which
    results usually in triple faults.
    
    Use a dedicated per CPU storage to prepare for that.
    
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Ashok Raj <ashok.raj@intel.com>
    Reviewed-by: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230615193330.434553750@linutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xtensa: ISS: fix call to split_if_spec [+ + +]
Author: Max Filippov <jcmvbkbc@gmail.com>
Date:   Mon Jul 3 11:01:42 2023 -0700

    xtensa: ISS: fix call to split_if_spec
    
    commit bc8d5916541fa19ca5bc598eb51a5f78eb891a36 upstream.
    
    split_if_spec expects a NULL-pointer as an end marker for the argument
    list, but tuntap_probe never supplied that terminating NULL. As a result
    incorrectly formatted interface specification string may cause a crash
    because of the random memory access. Fix that by adding NULL terminator
    to the split_if_spec argument list.
    
    Cc: stable@vger.kernel.org
    Fixes: 7282bee78798 ("[PATCH] xtensa: Architecture support for Tensilica Xtensa Part 8")
    Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>