Changelog in Linux kernel 6.11.6

 
[PATCH} hwmon: (jc42) Properly detect TSE2004-compliant devices again [+ + +]
Author: Jean Delvare <jdelvare@suse.de>
Date:   Mon Oct 14 22:04:26 2024 +0200

    [PATCH} hwmon: (jc42) Properly detect TSE2004-compliant devices again
    
    [ Upstream commit eabb03810194b75417b09cff8a526d26939736ac ]
    
    Commit b3e992f69c23 ("hwmon: (jc42)  Strengthen detect function")
    attempted to make the detect function more robust for
    TSE2004-compliant devices by checking capability bits which, according
    to the JEDEC 21-C specification, should always be set. Unfortunately,
    not all real-world implementations fully adhere to this specification,
    so this change caused a regression.
    
    Stop testing bit 7 (EVSD) of the Capabilities register, as it was
    found to be 0 on one real-world device.
    
    Also stop testing bits 0 (EVENT) and 2 (RANGE) as vendor datasheets
    (Renesas TSE2004GB2B0, ST STTS2004) suggest that they may not always
    be set either.
    
    Signed-off-by: Jean Delvare <jdelvare@suse.de>
    Message-ID: <20241014141204.026f4641@endymion.delvare>
    Fixes: b3e992f69c23 ("hwmon: (jc42)  Strengthen detect function")
    Message-ID: <20241014220426.0c8f4d9c@endymion.delvare>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
accel/qaic: Fix the for loop used to walk SG table [+ + +]
Author: Pranjal Ramajor Asha Kanojiya <quic_pkanojiy@quicinc.com>
Date:   Fri Oct 4 13:32:52 2024 -0600

    accel/qaic: Fix the for loop used to walk SG table
    
    [ Upstream commit c5e8e93897b7bb0a336bf3332f82f8d9f2b33f14 ]
    
    Only for_each_sgtable_dma_sg() should be used to walk through a SG table
    to grab correct bus address and length pair after calling DMA MAP API on
    a SG table as DMA MAP APIs updates the SG table and for_each_sgtable_sg()
    walks through the original SG table.
    
    Fixes: ff13be830333 ("accel/qaic: Add datapath")
    Fixes: 129776ac2e38 ("accel/qaic: Add control path")
    Signed-off-by: Pranjal Ramajor Asha Kanojiya <quic_pkanojiy@quicinc.com>
    Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
    Signed-off-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
    Reviewed-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241004193252.3888544-1-quic_jhugo@quicinc.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ACPI: button: Add DMI quirk for Samsung Galaxy Book2 to fix initial lid detection issue [+ + +]
Author: Shubham Panwar <shubiisp8@gmail.com>
Date:   Sun Oct 20 15:20:46 2024 +0530

    ACPI: button: Add DMI quirk for Samsung Galaxy Book2 to fix initial lid detection issue
    
    commit 8fa73ee44daefc884c53a25158c25a4107eb5a94 upstream.
    
    Add a DMI quirk for Samsung Galaxy Book2 to fix an initial lid state
    detection issue.
    
    The _LID device incorrectly returns the lid status as "closed" during
    boot, causing the system to enter a suspend loop right after booting.
    
    The quirk ensures that the correct lid state is reported initially,
    preventing the system from immediately suspending after startup.  It
    only addresses the initial lid state detection and ensures proper
    system behavior upon boot.
    
    Signed-off-by: Shubham Panwar <shubiisp8@gmail.com>
    Link: https://patch.msgid.link/20241020095045.6036-2-shubiisp8@gmail.com
    [ rjw: Changelog edits ]
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ACPI: PRM: Clean up guid type in struct prm_handler_info [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Thu Oct 24 11:07:15 2024 +0300

    ACPI: PRM: Clean up guid type in struct prm_handler_info
    
    commit 3d1c651272cf1df8aac7d9b6d92d836d27bed50f upstream.
    
    Clang 19 prints a warning when we pass &th->guid to efi_pa_va_lookup():
    
    drivers/acpi/prmt.c:156:29: error: passing 1-byte aligned argument to
    4-byte aligned parameter 1 of 'efi_pa_va_lookup' may result in an
    unaligned pointer access [-Werror,-Walign-mismatch]
      156 |                         (void *)efi_pa_va_lookup(&th->guid, handler_info->handler_address);
          |                                                  ^
    
    The problem is that efi_pa_va_lookup() takes a efi_guid_t and &th->guid
    is a regular guid_t.  The difference between the two types is the
    alignment.  efi_guid_t is a typedef.
    
            typedef guid_t efi_guid_t __aligned(__alignof__(u32));
    
    It's possible that this a bug in Clang 19.  Even though the alignment of
    &th->guid is not explicitly specified, it will still end up being aligned
    at 4 or 8 bytes.
    
    Anyway, as Ard points out, it's cleaner to change guid to efi_guid_t type
    and that also makes the warning go away.
    
    Fixes: 088984c8d54c ("ACPI: PRM: Find EFI_MEMORY_RUNTIME block for PRM handler and context")
    Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Suggested-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Tested-by: Paul E. McKenney <paulmck@kernel.org>
    Acked-by: Ard Biesheuvel <ardb@kernel.org>
    Link: https://patch.msgid.link/3777d71b-9e19-45f4-be4e-17bf4fa7a834@stanley.mountain
    [ rjw: Subject edit ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ACPI: PRM: Find EFI_MEMORY_RUNTIME block for PRM handler and context [+ + +]
Author: Koba Ko <kobak@nvidia.com>
Date:   Sun Oct 13 04:50:10 2024 +0800

    ACPI: PRM: Find EFI_MEMORY_RUNTIME block for PRM handler and context
    
    commit 088984c8d54c0053fc4ae606981291d741c5924b upstream.
    
    PRMT needs to find the correct type of block to translate the PA-VA
    mapping for EFI runtime services.
    
    The issue arises because the PRMT is finding a block of type
    EFI_CONVENTIONAL_MEMORY, which is not appropriate for runtime services
    as described in Section 2.2.2 (Runtime Services) of the UEFI
    Specification [1]. Since the PRM handler is a type of runtime service,
    this causes an exception when the PRM handler is called.
    
        [Firmware Bug]: Unable to handle paging request in EFI runtime service
        WARNING: CPU: 22 PID: 4330 at drivers/firmware/efi/runtime-wrappers.c:341
            __efi_queue_work+0x11c/0x170
        Call trace:
    
    Let PRMT find a block with EFI_MEMORY_RUNTIME for PRM handler and PRM
    context.
    
    If no suitable block is found, a warning message will be printed, but
    the procedure continues to manage the next PRM handler.
    
    However, if the PRM handler is actually called without proper allocation,
    it would result in a failure during error handling.
    
    By using the correct memory types for runtime services, ensure that the
    PRM handler and the context are properly mapped in the virtual address
    space during runtime, preventing the paging request error.
    
    The issue is really that only memory that has been remapped for runtime
    by the firmware can be used by the PRM handler, and so the region needs
    to have the EFI_MEMORY_RUNTIME attribute.
    
    Link: https://uefi.org/sites/default/files/resources/UEFI_Spec_2_10_Aug29.pdf # [1]
    Fixes: cefc7ca46235 ("ACPI: PRM: implement OperationRegion handler for the PlatformRtMechanism subtype")
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: Koba Ko <kobak@nvidia.com>
    Reviewed-by: Matthew R. Ochs <mochs@nvidia.com>
    Reviewed-by: Zhang Rui <rui.zhang@intel.com>
    Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
    Link: https://patch.msgid.link/20241012205010.4165798-1-kobak@nvidia.com
    [ rjw: Subject and changelog edits ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ACPI: resource: Add LG 16T90SP to irq1_level_low_skip_override[] [+ + +]
Author: Christian Heusel <christian@heusel.eu>
Date:   Thu Oct 17 13:16:26 2024 +0200

    ACPI: resource: Add LG 16T90SP to irq1_level_low_skip_override[]
    
    commit 53f1a907d36fb3aa02a4d34073bcec25823a6c74 upstream.
    
    The LG Gram Pro 16 2-in-1 (2024) the 16T90SP has its keybopard IRQ (1)
    described as ActiveLow in the DSDT, which the kernel overrides to EdgeHigh
    which breaks the keyboard.
    
    Add the 16T90SP to the irq1_level_low_skip_override[] quirk table to fix
    this.
    
    Reported-by: Dirk Holten <dirk.holten@gmx.de>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219382
    Cc: All applicable <stable@vger.kernel.org>
    Suggested-by: Dirk Holten <dirk.holten@gmx.de>
    Signed-off-by: Christian Heusel <christian@heusel.eu>
    Link: https://patch.msgid.link/20241017-lg-gram-pro-keyboard-v2-1-7c8fbf6ff718@heusel.eu
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ALSA: firewire-lib: Avoid division by zero in apply_constraint_to_size() [+ + +]
Author: Andrey Shumilin <shum.sdl@nppct.ru>
Date:   Fri Oct 18 09:00:18 2024 +0300

    ALSA: firewire-lib: Avoid division by zero in apply_constraint_to_size()
    
    [ Upstream commit 72cafe63b35d06b5cfbaf807e90ae657907858da ]
    
    The step variable is initialized to zero. It is changed in the loop,
    but if it's not changed it will remain zero. Add a variable check
    before the division.
    
    The observed behavior was introduced by commit 826b5de90c0b
    ("ALSA: firewire-lib: fix insufficient PCM rule for period/buffer size"),
    and it is difficult to show that any of the interval parameters will
    satisfy the snd_interval_test() condition with data from the
    amdtp_rate_table[] table.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 826b5de90c0b ("ALSA: firewire-lib: fix insufficient PCM rule for period/buffer size")
    Signed-off-by: Andrey Shumilin <shum.sdl@nppct.ru>
    Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Link: https://patch.msgid.link/20241018060018.1189537-1-shum.sdl@nppct.ru
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/cs8409: Fix possible NULL dereference [+ + +]
Author: Murad Masimov <m.masimov@maxima.ru>
Date:   Fri Oct 11 01:16:45 2024 +0300

    ALSA: hda/cs8409: Fix possible NULL dereference
    
    [ Upstream commit c9bd4a82b4ed32c6d1c90500a52063e6e341517f ]
    
    If snd_hda_gen_add_kctl fails to allocate memory and returns NULL, then
    NULL pointer dereference will occur in the next line.
    
    Since dolphin_fixups function is a hda_fixup function which is not supposed
    to return any errors, add simple check before dereference, ignore the fail.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 20e507724113 ("ALSA: hda/cs8409: Add support for dolphin")
    Signed-off-by: Murad Masimov <m.masimov@maxima.ru>
    Link: https://patch.msgid.link/20241010221649.1305-1-m.masimov@maxima.ru
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek: Add subwoofer quirk for Acer Predator G9-593 [+ + +]
Author: José Relvas <josemonsantorelvas@gmail.com>
Date:   Sun Oct 20 11:27:56 2024 +0100

    ALSA: hda/realtek: Add subwoofer quirk for Acer Predator G9-593
    
    commit 35fdc6e1c16099078bcbd73a6c8f1733ae7f1909 upstream.
    
    The Acer Predator G9-593 has a 2+1 speaker system which isn't probed
    correctly.
    This patch adds a quirk with the proper pin connections.
    
    Note that I do not own this laptop, so I cannot guarantee that this
    fixes the issue.
    Testing was done by other users here:
    https://discussion.fedoraproject.org/t/-/118482
    
    This model appears to have two different dev IDs...
    
    - 0x1177 (as seen on the forum link above)
    - 0x1178 (as seen on https://linux-hardware.org/?probe=127df9999f)
    
    I don't think the audio system was changed between model revisions, so
    the patch applies for both IDs.
    
    Signed-off-by: José Relvas <josemonsantorelvas@gmail.com>
    Link: https://patch.msgid.link/20241020102756.225258-1-josemonsantorelvas@gmail.com
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/realtek: Update default depop procedure [+ + +]
Author: Kailang Yang <kailang@realtek.com>
Date:   Wed Oct 23 16:13:10 2024 +0800

    ALSA: hda/realtek: Update default depop procedure
    
    [ Upstream commit e3ea2757c312e51bbf62ebc434a6f7df1e3a201f ]
    
    Old procedure has a chance to meet Headphone no output.
    
    Fixes: c2d6af53a43f ("ALSA: hda/realtek - Add default procedure for suspend and resume state")
    Signed-off-by: Kailang Yang <kailang@realtek.com>
    Link: https://lore.kernel.org/17b717a0a0b04a77aea4a8ec820cba13@realtek.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/tas2781: select CRC32 instead of CRC32_SARWATE [+ + +]
Author: Eric Biggers <ebiggers@google.com>
Date:   Sun Oct 20 10:56:24 2024 -0700

    ALSA: hda/tas2781: select CRC32 instead of CRC32_SARWATE
    
    commit 86c96e7289c5758284b562ac7b5c94429f48d2d9 upstream.
    
    Fix the kconfig option for the tas2781 HDA driver to select CRC32 rather
    than CRC32_SARWATE.  CRC32_SARWATE is an option from the kconfig
    'choice' that selects the specific CRC32 implementation.  Selecting a
    'choice' option seems to have no effect, but even if it did work, it
    would be incorrect for a random driver to override the user's choice.
    CRC32 is the correct option to select for crc32() to be available.
    
    Fixes: 5be27f1e3ec9 ("ALSA: hda/tas2781: Add tas2781 HDA driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Link: https://patch.msgid.link/20241020175624.7095-1-ebiggers@kernel.org
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arm64: Force position-independent veneers [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Sep 27 11:18:38 2024 +0100

    arm64: Force position-independent veneers
    
    [ Upstream commit 9abe390e689f4f5c23c5f507754f8678431b4f72 ]
    
    Certain portions of code always need to be position-independent
    regardless of CONFIG_RELOCATABLE, including code which is executed in an
    idmap or which is executed before relocations are applied. In some
    kernel configurations the LLD linker generates position-dependent
    veneers for such code, and when executed these result in early boot-time
    failures.
    
    Marc Zyngier encountered a boot failure resulting from this when
    building a (particularly cursed) configuration with LLVM, as he reported
    to the list:
    
      https://lore.kernel.org/linux-arm-kernel/86wmjwvatn.wl-maz@kernel.org/
    
    In Marc's kernel configuration, the .head.text and .rodata.text sections
    end up more than 128MiB apart, requiring a veneer to branch between the
    two:
    
    | [mark@lakrids:~/src/linux]% usekorg 14.1.0 aarch64-linux-objdump -t vmlinux | grep -w _text
    | ffff800080000000 g       .head.text     0000000000000000 _text
    | [mark@lakrids:~/src/linux]% usekorg 14.1.0 aarch64-linux-objdump -t vmlinux | grep -w primary_entry
    | ffff8000889df0e0 g       .rodata.text   000000000000006c primary_entry,
    
    ... consequently, LLD inserts a position-dependent veneer for the branch
    from _stext (in .head.text) to primary_entry (in .rodata.text):
    
    | ffff800080000000 <_text>:
    | ffff800080000000:       fa405a4d        ccmp    x18, #0x0, #0xd, pl     // pl = nfrst
    | ffff800080000004:       14003fff        b       ffff800080010000 <__AArch64AbsLongThunk_primary_entry>
    ...
    | ffff800080010000 <__AArch64AbsLongThunk_primary_entry>:
    | ffff800080010000:       58000050        ldr     x16, ffff800080010008 <__AArch64AbsLongThunk_primary_entry+0x8>
    | ffff800080010004:       d61f0200        br      x16
    | ffff800080010008:       889df0e0        .word   0x889df0e0
    | ffff80008001000c:       ffff8000        .word   0xffff8000
    
    ... and as this is executed early in boot before the kernel is mapped in
    TTBR1 this results in a silent boot failure.
    
    Fix this by passing '--pic-veneer' to the linker, which will cause the
    linker to use position-independent veneers, e.g.
    
    | ffff800080000000 <_text>:
    | ffff800080000000:       fa405a4d        ccmp    x18, #0x0, #0xd, pl     // pl = nfrst
    | ffff800080000004:       14003fff        b       ffff800080010000 <__AArch64ADRPThunk_primary_entry>
    ...
    | ffff800080010000 <__AArch64ADRPThunk_primary_entry>:
    | ffff800080010000:       f004e3f0        adrp    x16, ffff800089c8f000 <__idmap_text_start>
    | ffff800080010004:       91038210        add     x16, x16, #0xe0
    | ffff800080010008:       d61f0200        br      x16
    
    I've opted to pass '--pic-veneer' unconditionally, as:
    
    * In addition to solving the boot failure, these sequences are generally
      nicer as they require fewer instructions and don't need to perform
      data accesses.
    
    * While the position-independent veneer sequences have a limited +/-2GiB
      range, this is not a new restriction. Even kernels built with
      CONFIG_RELOCATABLE=n are limited to 2GiB in size as we have several
      structues using 32-bit relative offsets and PPREL32 relocations, which
      are similarly limited to +/-2GiB in range. These include extable
      entries, jump table entries, and alt_instr entries.
    
    * GNU LD defaults to using position-independent veneers, and supports
      the same '--pic-veneer' option, so this change is not expected to
      adversely affect GNU LD.
    
    I've tested with GNU LD 2.30 to 2.42 inclusive and LLVM 13.0.1 to 19.1.0
    inclusive, using the kernel.org binaries from:
    
    * https://mirrors.edge.kernel.org/pub/tools/crosstool/
    * https://mirrors.edge.kernel.org/pub/tools/llvm/
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Reported-by: Marc Zyngier <maz@kernel.org>
    Cc: Ard Biesheuvel <ardb@kernel.org>
    Cc: Nathan Chancellor <nathan@kernel.org>
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Cc: Will Deacon <will@kernel.org>
    Acked-by: Ard Biesheuvel <ardb@kernel.org>
    Reviewed-by: Nathan Chancellor <nathan@kernel.org>
    Link: https://lore.kernel.org/r/20240927101838.3061054-1-mark.rutland@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ARM: dts: bcm2837-rpi-cm3-io3: Fix HDMI hpd-gpio pin [+ + +]
Author: Florian Klink <flokli@flokli.de>
Date:   Tue Jul 16 02:03:11 2024 +0300

    ARM: dts: bcm2837-rpi-cm3-io3: Fix HDMI hpd-gpio pin
    
    [ Upstream commit dc7785e4723510616d776862ddb4c08857a1bdb2 ]
    
    HDMI_HPD_N_1V8 is connected to GPIO pin 0, not 1.
    
    This fixes HDMI hotplug/output detection.
    
    See https://datasheets.raspberrypi.com/cm/cm3-schematics.pdf
    
    Signed-off-by: Florian Klink <flokli@flokli.de>
    Reviewed-by: Stefan Wahren <wahrenst@gmx.net>
    Link: https://lore.kernel.org/r/20240715230311.685641-1-flokli@flokli.de
    Reviewed-by: Stefan Wahren <wahrenst@gmx.net>
    Fixes: a54fe8a6cf66 ("ARM: dts: add Raspberry Pi Compute Module 3 and IO board")
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ASoC: amd: yc: Add quirk for HP Dragonfly pro one [+ + +]
Author: David Lawrence Glanzman <davidglanzman@yahoo.com>
Date:   Tue Sep 17 00:44:08 2024 -0400

    ASoC: amd: yc: Add quirk for HP Dragonfly pro one
    
    [ Upstream commit 84e8d59651879b2ff8499bddbbc9549b7f1a646b ]
    
    Adds a quirk entry to enable the mic on HP Dragonfly pro one laptop
    
    Signed-off-by: David Lawrence Glanzman <davidglanzman@yahoo.com>
    Link: https://patch.msgid.link/1249c09bd6bf696b59d087a4f546ae397828656c.camel@yahoo.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: codecs: lpass-rx-macro: add missing CDC_RX_BCL_VBAT_RF_PROC2 to default regs values [+ + +]
Author: Alexey Klimov <alexey.klimov@linaro.org>
Date:   Wed Sep 25 05:38:23 2024 +0100

    ASoC: codecs: lpass-rx-macro: add missing CDC_RX_BCL_VBAT_RF_PROC2 to default regs values
    
    [ Upstream commit e249786b2188107a7c50e7174d35f955a60988a1 ]
    
    CDC_RX_BCL_VBAT_RF_PROC1 is listed twice and its default value
    is 0x2a which is overwriten by its next occurence in rx_defaults[].
    The second one should be missing CDC_RX_BCL_VBAT_RF_PROC2 instead
    and its default value is expected 0x0.
    
    Signed-off-by: Alexey Klimov <alexey.klimov@linaro.org>
    Link: https://patch.msgid.link/20240925043823.520218-2-alexey.klimov@linaro.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: dapm: avoid container_of() to get component [+ + +]
Author: Benjamin Bara <benjamin.bara@skidata.com>
Date:   Tue Oct 8 13:36:14 2024 +0200

    ASoC: dapm: avoid container_of() to get component
    
    commit 3fe9f5882cf71573516749b0bb687ef88f470d1d upstream.
    
    The current implementation does not work for widgets of DAPMs without
    component, as snd_soc_dapm_to_component() requires it. If the widget is
    directly owned by the card, e.g. as it is the case for the tegra
    implementation, the call leads to UB. Therefore directly access the
    component of the widget's DAPM to be able to check if a component is
    available.
    
    Fixes: f82eb06a40c8 ("ASoC: tegra: machine: Handle component name prefix")
    Cc: stable@vger.kernel.org # v6.7+
    Signed-off-by: Benjamin Bara <benjamin.bara@skidata.com>
    Link: https://patch.msgid.link/20241008-tegra-dapm-v2-1-5e999cb5f0e7@skidata.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: dt-bindings: davinci-mcasp: Fix interrupt properties [+ + +]
Author: Miquel Raynal <miquel.raynal@bootlin.com>
Date:   Thu Oct 3 10:36:11 2024 +0200

    ASoC: dt-bindings: davinci-mcasp: Fix interrupt properties
    
    [ Upstream commit 8380dbf1b9ef66e3ce6c1d660fd7259637c2a929 ]
    
    Combinations of "tx" alone, "rx" alone and "tx", "rx" together are
    supposedly valid (see link below), which is not the case today as "rx"
    alone is not accepted by the current binding.
    
    Let's rework the two interrupt properties to expose all correct
    possibilities.
    
    Cc: Péter Ujfalusi <peter.ujfalusi@gmail.com>
    Link: https://lore.kernel.org/linux-sound/20241003102552.2c11840e@xps-13/T/#m277fce1d49c50d94e071f7890aed472fa2c64052
    Fixes: 8be90641a0bb ("ASoC: dt-bindings: davinci-mcasp: convert McASP bindings to yaml schema")
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://patch.msgid.link/20241003083611.461894-1-miquel.raynal@bootlin.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: dt-bindings: davinci-mcasp: Fix interrupts property [+ + +]
Author: Miquel Raynal <miquel.raynal@bootlin.com>
Date:   Tue Oct 1 22:47:49 2024 +0200

    ASoC: dt-bindings: davinci-mcasp: Fix interrupts property
    
    [ Upstream commit 17d8adc4cd5181c13c1041b197b76efc09eaf8a8 ]
    
    My understanding of the interrupts property is that it can either be:
    1/ - TX
    2/ - TX
       - RX
    3/ - Common/combined.
    
    There are very little chances that either:
       - TX
       - Common/combined
    or even
       - TX
       - RX
       - Common/combined
    could be a thing.
    
    Looking at the interrupt-names definition (which uses oneOf instead of
    anyOf), it makes indeed little sense to use anyOf in the interrupts
    definition. I believe this is just a mistake, hence let's fix it.
    
    Fixes: 8be90641a0bb ("ASoC: dt-bindings: davinci-mcasp: convert McASP bindings to yaml schema")
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://patch.msgid.link/20241001204749.390054-1-miquel.raynal@bootlin.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 8380dbf1b9ef ("ASoC: dt-bindings: davinci-mcasp: Fix interrupt properties")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: fsl_micfil: Add a flag to distinguish with different volume control types [+ + +]
Author: Chancel Liu <chancel.liu@nxp.com>
Date:   Thu Oct 17 16:15:07 2024 +0900

    ASoC: fsl_micfil: Add a flag to distinguish with different volume control types
    
    [ Upstream commit da95e891dd5d5de6c5ebc010bd028a2e028de093 ]
    
    On i.MX8MM the register of volume control has positive and negative
    values. It is different from other platforms like i.MX8MP and i.MX93
    which only have positive values. Add a volume_sx flag to use SX_TLV
    volume control for this kind of platform. Use common TLV volume control
    for other platforms.
    
    Fixes: cdfa92eb90f5 ("ASoC: fsl_micfil: Correct the number of steps on SX controls")
    Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
    Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com>
    Link: https://patch.msgid.link/20241017071507.2577786-1-chancel.liu@nxp.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: fsl_sai: Enable 'FIFO continue on error' FCONT bit [+ + +]
Author: Shengjiu Wang <shengjiu.wang@nxp.com>
Date:   Mon Sep 30 14:08:28 2024 +0800

    ASoC: fsl_sai: Enable 'FIFO continue on error' FCONT bit
    
    [ Upstream commit 72455e33173c1a00c0ce93d2b0198eb45d5f4195 ]
    
    FCONT=1 means On FIFO error, the SAI will continue from the
    same word that caused the FIFO error to set after the FIFO
    warning flag has been cleared.
    
    Set FCONT bit in control register to avoid the channel swap
    issue after SAI xrun.
    
    Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
    Link: https://patch.msgid.link/1727676508-22830-1-git-send-email-shengjiu.wang@nxp.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: loongson: Fix component check failed on FDT systems [+ + +]
Author: Binbin Zhou <zhoubinbin@loongson.cn>
Date:   Wed Oct 9 15:52:27 2024 +0800

    ASoC: loongson: Fix component check failed on FDT systems
    
    [ Upstream commit a6134e7b4d4a14e0942f113a6df1d518baa2a0a4 ]
    
    Add missing snd_soc_dai_link.platforms assignment to avoid
    soc_dai_link_sanity_check() failure.
    
    Fixes: d24028606e76 ("ASoC: loongson: Add Loongson ASoC Sound Card Support")
    Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn>
    Link: https://patch.msgid.link/6645888f2f9e8a1d8d799109f867d0f97fd78c58.1728459624.git.zhoubinbin@loongson.cn
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: max98388: Fix missing increment of variable slot_found [+ + +]
Author: Colin Ian King <colin.i.king@gmail.com>
Date:   Thu Oct 10 19:20:32 2024 +0100

    ASoC: max98388: Fix missing increment of variable slot_found
    
    [ Upstream commit ca2803fadfd239abf155ef4a563b22a9507ee4b2 ]
    
    The variable slot_found is being initialized to zero and inside
    a for-loop is being checked if it's reached MAX_NUM_CH, however,
    this is currently impossible since slot_found is never changed.
    In a previous loop a similar coding pattern is used and slot_found
    is being incremented. It appears the increment of slot_found is
    missing from the loop, so fix the code by adding in the increment.
    
    Fixes: 6a8e1d46f062 ("ASoC: max98388: add amplifier driver")
    Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
    Link: https://patch.msgid.link/20241010182032.776280-1-colin.i.king@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: qcom: Fix NULL Dereference in asoc_qcom_lpass_cpu_platform_probe() [+ + +]
Author: Zichen Xie <zichenxie0106@gmail.com>
Date:   Sun Oct 6 15:57:37 2024 -0500

    ASoC: qcom: Fix NULL Dereference in asoc_qcom_lpass_cpu_platform_probe()
    
    commit 49da1463c9e3d2082276c3e0e2a8b65a88711cd2 upstream.
    
    A devm_kzalloc() in asoc_qcom_lpass_cpu_platform_probe() could
    possibly return NULL pointer. NULL Pointer Dereference may be
    triggerred without addtional check.
    Add a NULL check for the returned pointer.
    
    Fixes: b5022a36d28f ("ASoC: qcom: lpass: Use regmap_field for i2sctl and dmactl registers")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zichen Xie <zichenxie0106@gmail.com>
    Link: https://patch.msgid.link/20241006205737.8829-1-zichenxie0106@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: qcom: sc7280: Fix missing Soundwire runtime stream alloc [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Sat Oct 12 12:11:08 2024 +0200

    ASoC: qcom: sc7280: Fix missing Soundwire runtime stream alloc
    
    commit db7e59e6a39a4d3d54ca8197c796557e6d480b0d upstream.
    
    Commit 15c7fab0e047 ("ASoC: qcom: Move Soundwire runtime stream alloc to
    soundcards") moved the allocation of Soundwire stream runtime from the
    Qualcomm Soundwire driver to each individual machine sound card driver,
    except that it forgot to update SC7280 card.
    
    Just like for other Qualcomm sound cards using Soundwire, the card
    driver should allocate and release the runtime.  Otherwise sound
    playback will result in a NULL pointer dereference or other effect of
    uninitialized memory accesses (which was confirmed on SDM845 having
    similar issue).
    
    Cc: stable@vger.kernel.org
    Cc: Alexey Klimov <alexey.klimov@linaro.org>
    Cc: Steev Klimaszewski <steev@kali.org>
    Fixes: 15c7fab0e047 ("ASoC: qcom: Move Soundwire runtime stream alloc to soundcards")
    Link: https://lore.kernel.org/r/20241010054109.16938-1-krzysztof.kozlowski@linaro.org
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://patch.msgid.link/20241012101108.129476-1-krzysztof.kozlowski@linaro.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: qcom: sdm845: add missing soundwire runtime stream alloc [+ + +]
Author: Alexey Klimov <alexey.klimov@linaro.org>
Date:   Wed Oct 9 22:39:22 2024 +0100

    ASoC: qcom: sdm845: add missing soundwire runtime stream alloc
    
    commit d0e806b0cc6260b59c65e606034a63145169c04c upstream.
    
    During the migration of Soundwire runtime stream allocation from
    the Qualcomm Soundwire controller to SoC's soundcard drivers the sdm845
    soundcard was forgotten.
    
    At this point any playback attempt or audio daemon startup, for instance
    on sdm845-db845c (Qualcomm RB3 board), will result in stream pointer
    NULL dereference:
    
     Unable to handle kernel NULL pointer dereference at virtual
     address 0000000000000020
     Mem abort info:
       ESR = 0x0000000096000004
       EC = 0x25: DABT (current EL), IL = 32 bits
       SET = 0, FnV = 0
       EA = 0, S1PTW = 0
       FSC = 0x04: level 0 translation fault
     Data abort info:
       ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000
       CM = 0, WnR = 0, TnD = 0, TagAccess = 0
       GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
     user pgtable: 4k pages, 48-bit VAs, pgdp=0000000101ecf000
     [0000000000000020] pgd=0000000000000000, p4d=0000000000000000
     Internal error: Oops: 0000000096000004 [#1] PREEMPT SMP
     Modules linked in: ...
     CPU: 5 UID: 0 PID: 1198 Comm: aplay
     Not tainted 6.12.0-rc2-qcomlt-arm64-00059-g9d78f315a362-dirty #18
     Hardware name: Thundercomm Dragonboard 845c (DT)
     pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
     pc : sdw_stream_add_slave+0x44/0x380 [soundwire_bus]
     lr : sdw_stream_add_slave+0x44/0x380 [soundwire_bus]
     sp : ffff80008a2035c0
     x29: ffff80008a2035c0 x28: ffff80008a203978 x27: 0000000000000000
     x26: 00000000000000c0 x25: 0000000000000000 x24: ffff1676025f4800
     x23: ffff167600ff1cb8 x22: ffff167600ff1c98 x21: 0000000000000003
     x20: ffff167607316000 x19: ffff167604e64e80 x18: 0000000000000000
     x17: 0000000000000000 x16: ffffcec265074160 x15: 0000000000000000
     x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000
     x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000000
     x8 : 0000000000000000 x7 : 0000000000000000 x6 : ffff167600ff1cec
     x5 : ffffcec22cfa2010 x4 : 0000000000000000 x3 : 0000000000000003
     x2 : ffff167613f836c0 x1 : 0000000000000000 x0 : ffff16761feb60b8
     Call trace:
      sdw_stream_add_slave+0x44/0x380 [soundwire_bus]
      wsa881x_hw_params+0x68/0x80 [snd_soc_wsa881x]
      snd_soc_dai_hw_params+0x3c/0xa4
      __soc_pcm_hw_params+0x230/0x660
      dpcm_be_dai_hw_params+0x1d0/0x3f8
      dpcm_fe_dai_hw_params+0x98/0x268
      snd_pcm_hw_params+0x124/0x460
      snd_pcm_common_ioctl+0x998/0x16e8
      snd_pcm_ioctl+0x34/0x58
      __arm64_sys_ioctl+0xac/0xf8
      invoke_syscall+0x48/0x104
      el0_svc_common.constprop.0+0x40/0xe0
      do_el0_svc+0x1c/0x28
      el0_svc+0x34/0xe0
      el0t_64_sync_handler+0x120/0x12c
      el0t_64_sync+0x190/0x194
     Code: aa0403fb f9418400 9100e000 9400102f (f8420f22)
     ---[ end trace 0000000000000000 ]---
    
    0000000000006108 <sdw_stream_add_slave>:
        6108:       d503233f        paciasp
        610c:       a9b97bfd        stp     x29, x30, [sp, #-112]!
        6110:       910003fd        mov     x29, sp
        6114:       a90153f3        stp     x19, x20, [sp, #16]
        6118:       a9025bf5        stp     x21, x22, [sp, #32]
        611c:       aa0103f6        mov     x22, x1
        6120:       2a0303f5        mov     w21, w3
        6124:       a90363f7        stp     x23, x24, [sp, #48]
        6128:       aa0003f8        mov     x24, x0
        612c:       aa0203f7        mov     x23, x2
        6130:       a9046bf9        stp     x25, x26, [sp, #64]
        6134:       aa0403f9        mov     x25, x4        <-- x4 copied to x25
        6138:       a90573fb        stp     x27, x28, [sp, #80]
        613c:       aa0403fb        mov     x27, x4
        6140:       f9418400        ldr     x0, [x0, #776]
        6144:       9100e000        add     x0, x0, #0x38
        6148:       94000000        bl      0 <mutex_lock>
        614c:       f8420f22        ldr     x2, [x25, #32]!  <-- offset 0x44
        ^^^
    This is 0x6108 + offset 0x44 from the beginning of sdw_stream_add_slave()
    where data abort happens.
    wsa881x_hw_params() is called with stream = NULL and passes it further
    in register x4 (5th argument) to sdw_stream_add_slave() without any checks.
    Value from x4 is copied to x25 and finally it aborts on trying to load
    a value from address in x25 plus offset 32 (in dec) which corresponds
    to master_list member in struct sdw_stream_runtime:
    
    struct sdw_stream_runtime {
            const char  *              name;        /*     0     8 */
            struct sdw_stream_params   params;      /*     8    12 */
            enum sdw_stream_state      state;       /*    20     4 */
            enum sdw_stream_type       type;        /*    24     4 */
            /* XXX 4 bytes hole, try to pack */
     here-> struct list_head           master_list; /*    32    16 */
            int                        m_rt_count;  /*    48     4 */
            /* size: 56, cachelines: 1, members: 6 */
            /* sum members: 48, holes: 1, sum holes: 4 */
            /* padding: 4 */
            /* last cacheline: 56 bytes */
    
    Fix this by adding required calls to qcom_snd_sdw_startup() and
    sdw_release_stream() to startup and shutdown routines which restores
    the previous correct behaviour when ->set_stream() method is called to
    set a valid stream runtime pointer on playback startup.
    
    Reproduced and then fix was tested on db845c RB3 board.
    
    Reported-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Cc: stable@vger.kernel.org
    Fixes: 15c7fab0e047 ("ASoC: qcom: Move Soundwire runtime stream alloc to soundcards")
    Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
    Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Signed-off-by: Alexey Klimov <alexey.klimov@linaro.org>
    Tested-by: Steev Klimaszewski <steev@kali.org> # Lenovo Yoga C630
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
    Link: https://patch.msgid.link/20241009213922.999355-1-alexey.klimov@linaro.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: qcom: Select missing common Soundwire module code on SDM845 [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Sat Oct 12 12:09:57 2024 +0200

    ASoC: qcom: Select missing common Soundwire module code on SDM845
    
    commit b930d8647869802a0d430aae6b1b05c3acb24a41 upstream.
    
    SDM845 sound card driver uses qcom_snd_sdw_startup() from the common
    Soundwire module, so select it to fix build failures:
    
      ERROR: modpost: "qcom_snd_sdw_startup" [sound/soc/qcom/snd-soc-sdm845.ko] undefined!
    
    Fixes: d0e806b0cc62 ("ASoC: qcom: sdm845: add missing soundwire runtime stream alloc")
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://patch.msgid.link/20241012100957.129103-1-krzysztof.kozlowski@linaro.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: qcom: sm8250: add qrb4210-rb2-sndcard compatible string [+ + +]
Author: Alexey Klimov <alexey.klimov@linaro.org>
Date:   Wed Oct 2 03:20:10 2024 +0100

    ASoC: qcom: sm8250: add qrb4210-rb2-sndcard compatible string
    
    [ Upstream commit b97bc0656a66f89f78098d4d72dc04fa9518ab11 ]
    
    Add "qcom,qrb4210-rb2-sndcard" to the list of recognizable
    devices.
    
    Signed-off-by: Alexey Klimov <alexey.klimov@linaro.org>
    Link: https://patch.msgid.link/20241002022015.867031-3-alexey.klimov@linaro.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: rsnd: Fix probe failure on HiHope boards due to endpoint parsing [+ + +]
Author: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Date:   Thu Oct 10 15:14:32 2024 +0100

    ASoC: rsnd: Fix probe failure on HiHope boards due to endpoint parsing
    
    [ Upstream commit 9b064d200aa8fee9d1d7ced05d8a617e45966715 ]
    
    On the HiHope boards, we have a single port with a single endpoint defined
    as below:
    ....
            rsnd_port: port {
                    rsnd_endpoint: endpoint {
                            remote-endpoint = <&dw_hdmi0_snd_in>;
    
                            dai-format = "i2s";
                            bitclock-master = <&rsnd_endpoint>;
                            frame-master = <&rsnd_endpoint>;
    
                            playback = <&ssi2>;
                    };
            };
    ....
    
    With commit 547b02f74e4a ("ASoC: rsnd: enable multi Component support for
    Audio Graph Card/Card2"), support for multiple ports was added. This caused
    probe failures on HiHope boards, as the endpoint could not be retrieved due
    to incorrect device node pointers being used.
    
    This patch fixes the issue by updating the `rsnd_dai_of_node()` and
    `rsnd_dai_probe()` functions to use the correct device node pointers based
    on the port names ('port' or 'ports'). It ensures that the endpoint is
    properly parsed for both single and multi-port configurations, restoring
    compatibility with HiHope boards.
    
    Fixes: 547b02f74e4a ("ASoC: rsnd: enable multi Component support for Audio Graph Card/Card2")
    Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
    Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
    Link: https://patch.msgid.link/20241010141432.716868-1-prabhakar.mahadev-lad.rj@bp.renesas.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: SOF: Intel: hda-loader: do not wait for HDaudio IOC [+ + +]
Author: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Date:   Tue Oct 8 09:07:10 2024 +0300

    ASoC: SOF: Intel: hda-loader: do not wait for HDaudio IOC
    
    commit 9814c1447f9cc67c9e88e0a4423de3a496078360 upstream.
    
    Commit 9ee3f0d8c999 ("ASOC: SOF: Intel: hda-loader: only wait for
    HDaudio IOC for IPC4 devices") removed DMA wait for IPC3 case.
    Proceed and remove the wait for IPC4 devices as well.
    
    There is no dependency to IPC version in the load logic and
    checking the firmware status is a sufficient check in case of
    errors.
    
    The removed code also had a bug in that -ETIMEDOUT is returned
    without stopping the DMA transfer.
    
    Cc: stable@vger.kernel.org
    Link: https://github.com/thesofproject/linux/issues/5135
    Fixes: 9ee3f0d8c999 ("ASOC: SOF: Intel: hda-loader: only wait for HDaudio IOC for IPC4 devices")
    Suggested-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
    Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
    Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Link: https://patch.msgid.link/20241008060710.15409-1-peter.ujfalusi@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: SOF: Intel: hda: Always clean up link DMA during stop [+ + +]
Author: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Date:   Wed Oct 16 11:29:10 2024 +0800

    ASoC: SOF: Intel: hda: Always clean up link DMA during stop
    
    commit ab5593793e9088abcddce30ba8e376e31b7285fd upstream.
    
    This is required to reset the DMA read/write pointers when the stream is
    prepared and restarted after a call to snd_pcm_drain()/snd_pcm_drop().
    Also, now that the stream is reset during stop, do not save LLP registers
    in the case of STOP/suspend to avoid erroneous delay reporting.
    
    Link: https://github.com/thesofproject/sof/issues/9502
    Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
    Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
    Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
    All: stable@vger.kernel.org # 6.10.x 6.11.x
    Link: https://patch.msgid.link/20241016032910.14601-5-yung-chuan.liao@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: SOF: Intel: hda: Handle prepare without close for non-HDA DAI's [+ + +]
Author: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Date:   Wed Oct 16 11:29:08 2024 +0800

    ASoC: SOF: Intel: hda: Handle prepare without close for non-HDA DAI's
    
    commit 6e38a7e098d32d128b00b42a536151de9ea1340b upstream.
    
    When a PCM is restarted after a snd_pcm_drain/snd_pcm_drop(), the prepare
    callback will be invoked and the hw_params will be set again. For the
    HDA DAI's, the hw_params function handles this case already but not for
    the non-HDA DAI's. So, add the check for link_prepared to verify if the
    hw_params should be done again or not. Additionally, for SDW DAI's reset
    the PCMSyCM registers as would be done in the case of a start after a
    hw_free.
    
    Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
    Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
    Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
    All: stable@vger.kernel.org # 6.10.x 6.11.x
    Link: https://patch.msgid.link/20241016032910.14601-3-yung-chuan.liao@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: SOF: ipc4-topology: Do not set ALH node_id for aggregated DAIs [+ + +]
Author: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Date:   Wed Oct 16 11:29:07 2024 +0800

    ASoC: SOF: ipc4-topology: Do not set ALH node_id for aggregated DAIs
    
    commit 9822b4c90d77e3c6555fb21c459c4a61c6a8619f upstream.
    
    For aggregated DAIs, the node ID is set to the group_id during the DAI
    widget's ipc_prepare op. With the current logic, setting the dai_index
    for node_id in the dai_config is redundant as it will be overwritten
    with the group_id anyway. Removing it will also prevent any accidental
    clearing/resetting of the group_id for aggregated DAIs due to the
    dai_config calls could that happen before the allocated group_id is
    freed.
    
    Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
    Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
    Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
    All: stable@vger.kernel.org # 6.10.x 6.11.x
    Link: https://patch.msgid.link/20241016032910.14601-2-yung-chuan.liao@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: topology: Bump minimal topology ABI version [+ + +]
Author: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Date:   Wed Oct 9 10:12:30 2024 +0200

    ASoC: topology: Bump minimal topology ABI version
    
    [ Upstream commit 9eb2142a2ae8c8fdfce2aaa4c110f5a6f6b0b56e ]
    
    When v4 topology support was removed, minimal topology ABI version
    should have been bumped.
    
    Fixes: fe4a07454256 ("ASoC: Drop soc-topology ABI v4 support")
    Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com>
    Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
    Link: https://patch.msgid.link/20241009081230.304918-1-amadeuszx.slawinski@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ata: libata: Set DID_TIME_OUT for commands that actually timed out [+ + +]
Author: Niklas Cassel <cassel@kernel.org>
Date:   Wed Oct 23 12:55:41 2024 +0200

    ata: libata: Set DID_TIME_OUT for commands that actually timed out
    
    commit 8e59a2a5459fd9840dbe2cbde85fe154b11e1727 upstream.
    
    When ata_qc_complete() schedules a command for EH using
    ata_qc_schedule_eh(), blk_abort_request() will be called, which leads to
    req->q->mq_ops->timeout() / scsi_timeout() being called.
    
    scsi_timeout(), if the LLDD has no abort handler (libata has no abort
    handler), will set host byte to DID_TIME_OUT, and then call
    scsi_eh_scmd_add() to add the command to EH.
    
    Thus, when commands first enter libata's EH strategy_handler, all the
    commands that have been added to EH will have DID_TIME_OUT set.
    
    Commit e5dd410acb34 ("ata: libata: Clear DID_TIME_OUT for ATA PT commands
    with sense data") clears this bogus DID_TIME_OUT flag for all commands
    that reached libata's EH strategy_handler.
    
    libata has its own flag (AC_ERR_TIMEOUT), that it sets for commands that
    have not received a completion at the time of entering EH.
    
    ata_eh_worth_retry() has no special handling for AC_ERR_TIMEOUT, so by
    default timed out commands will get flag ATA_QCFLAG_RETRY set, and will be
    retried after the port has been reset (ata_eh_link_autopsy() always
    triggers a port reset if any command has AC_ERR_TIMEOUT set).
    
    For a command that has ATA_QCFLAG_RETRY set, while also having an error
    flag set (e.g. AC_ERR_TIMEOUT), ata_eh_finish() will not increment
    scmd->allowed, so the command will at most be retried scmd->allowed number
    of times (which by default is set to 3).
    
    However, scsi_eh_flush_done_q() will only retry commands for which
    scsi_noretry_cmd() returns false.
    
    For a command that has DID_TIME_OUT set, while also having either the
    FAILFAST flag set, or the command being a passthrough command,
    scsi_noretry_cmd() will return true. Thus, such a command will never be
    retried.
    
    Thus, make sure that libata sets SCSI's DID_TIME_OUT flag for commands that
    actually timed out (libata's AC_ERR_TIMEOUT flag), such that timed out
    commands will once again not be retried if they are also a FAILFAST or
    passthrough command.
    
    Cc: stable@vger.kernel.org
    Fixes: e5dd410acb34 ("ata: libata: Clear DID_TIME_OUT for ATA PT commands with sense data")
    Reported-by: Lai, Yi <yi1.lai@linux.intel.com>
    Closes: https://lore.kernel.org/linux-ide/ZxYz871I3Blsi30F@ly-workstation/
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Link: https://lore.kernel.org/r/20241023105540.1070012-2-cassel@kernel.org
    Signed-off-by: Niklas Cassel <cassel@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
be2net: fix potential memory leak in be_xmit() [+ + +]
Author: Wang Hai <wanghai38@huawei.com>
Date:   Tue Oct 15 22:48:02 2024 +0800

    be2net: fix potential memory leak in be_xmit()
    
    [ Upstream commit e4dd8bfe0f6a23acd305f9b892c00899089bd621 ]
    
    The be_xmit() returns NETDEV_TX_OK without freeing skb
    in case of be_xmit_enqueue() fails, add dev_kfree_skb_any() to fix it.
    
    Fixes: 760c295e0e8d ("be2net: Support for OS2BMC.")
    Signed-off-by: Wang Hai <wanghai38@huawei.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Message-ID: <20241015144802.12150-1-wanghai38@huawei.com>
    Signed-off-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Bluetooth: bnep: fix wild-memory-access in proto_unregister [+ + +]
Author: Ye Bin <yebin10@huawei.com>
Date:   Mon Oct 14 17:07:08 2024 +0800

    Bluetooth: bnep: fix wild-memory-access in proto_unregister
    
    [ Upstream commit 64a90991ba8d4e32e3173ddd83d0b24167a5668c ]
    
    There's issue as follows:
      KASAN: maybe wild-memory-access in range [0xdead...108-0xdead...10f]
      CPU: 3 UID: 0 PID: 2805 Comm: rmmod Tainted: G        W
      RIP: 0010:proto_unregister+0xee/0x400
      Call Trace:
       <TASK>
       __do_sys_delete_module+0x318/0x580
       do_syscall_64+0xc1/0x1d0
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    As bnep_init() ignore bnep_sock_init()'s return value, and bnep_sock_init()
    will cleanup all resource. Then when remove bnep module will call
    bnep_sock_cleanup() to cleanup sock's resource.
    To solve above issue just return bnep_sock_init()'s return value in
    bnep_exit().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Ye Bin <yebin10@huawei.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: hci_core: Disable works on hci_unregister_dev [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Tue Oct 22 11:09:13 2024 -0400

    Bluetooth: hci_core: Disable works on hci_unregister_dev
    
    [ Upstream commit 989fa5171f005ecf63440057218d8aeb1795287d ]
    
    This make use of disable_work_* on hci_unregister_dev since the hci_dev is
    about to be freed new submissions are not disarable.
    
    Fixes: 0d151a103775 ("Bluetooth: hci_core: cancel all works upon hci_unregister_dev()")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: ISO: Fix UAF on iso_sock_timeout [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Tue Oct 22 15:35:49 2024 -0400

    Bluetooth: ISO: Fix UAF on iso_sock_timeout
    
    [ Upstream commit 246b435ad668596aa0e2bbb9d491b6413861211a ]
    
    conn->sk maybe have been unlinked/freed while waiting for iso_conn_lock
    so this checks if the conn->sk is still valid by checking if it part of
    iso_sk_list.
    
    Fixes: ccf74f2390d6 ("Bluetooth: Add BTPROTO_ISO socket type")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: SCO: Fix UAF on sco_sock_timeout [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Tue Oct 22 12:31:08 2024 -0400

    Bluetooth: SCO: Fix UAF on sco_sock_timeout
    
    [ Upstream commit 1bf4470a3939c678fb822073e9ea77a0560bc6bb ]
    
    conn->sk maybe have been unlinked/freed while waiting for sco_conn_lock
    so this checks if the conn->sk is still valid by checking if it part of
    sco_sk_list.
    
    Reported-by: syzbot+4c0d0c4cde787116d465@syzkaller.appspotmail.com
    Tested-by: syzbot+4c0d0c4cde787116d465@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=4c0d0c4cde787116d465
    Fixes: ba316be1b6a0 ("Bluetooth: schedule SCO timeouts with delayed_work")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bnxt_en: replace ptp_lock with irqsave variant [+ + +]
Author: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Date:   Wed Oct 16 12:52:34 2024 -0700

    bnxt_en: replace ptp_lock with irqsave variant
    
    [ Upstream commit 4ab3e4983bcc9d9b9dd9720253cb93f44e9e657c ]
    
    In netpoll configuration the completion processing can happen in hard
    irq context which will break with spin_lock_bh() for fullfilling RX
    timestamp in case of all packets timestamping. Replace it with
    spin_lock_irqsave() variant.
    
    Fixes: 7f5515d19cd7 ("bnxt_en: Get the RX packet timestamp")
    Reviewed-by: Michael Chan <michael.chan@broadcom.com>
    Signed-off-by: Vadim Fedorenko <vadfed@meta.com>
    Message-ID: <20241016195234.2622004-1-vadfed@meta.com>
    Signed-off-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf, arm64: Fix address emission with tag-based KASAN enabled [+ + +]
Author: Peter Collingbourne <pcc@google.com>
Date:   Fri Oct 18 15:16:43 2024 -0700

    bpf, arm64: Fix address emission with tag-based KASAN enabled
    
    [ Upstream commit a552e2ef5fd1a6c78267cd4ec5a9b49aa11bbb1c ]
    
    When BPF_TRAMP_F_CALL_ORIG is enabled, the address of a bpf_tramp_image
    struct on the stack is passed during the size calculation pass and
    an address on the heap is passed during code generation. This may
    cause a heap buffer overflow if the heap address is tagged because
    emit_a64_mov_i64() will emit longer code than it did during the size
    calculation pass. The same problem could occur without tag-based
    KASAN if one of the 16-bit words of the stack address happened to
    be all-ones during the size calculation pass. Fix the problem by
    assuming the worst case (4 instructions) when calculating the size
    of the bpf_tramp_image address emission.
    
    Fixes: 19d3c179a377 ("bpf, arm64: Fix trampoline for BPF_TRAMP_F_CALL_ORIG")
    Signed-off-by: Peter Collingbourne <pcc@google.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Xu Kuohai <xukuohai@huawei.com>
    Link: https://linux-review.googlesource.com/id/I1496f2bc24fba7a1d492e16e2b94cf43714f2d3c
    Link: https://lore.kernel.org/bpf/20241018221644.3240898-1-pcc@google.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf, sockmap: SK_DROP on attempted redirects of unsupported af_vsock [+ + +]
Author: Michal Luczaj <mhal@rbox.co>
Date:   Sun Oct 13 18:26:39 2024 +0200

    bpf, sockmap: SK_DROP on attempted redirects of unsupported af_vsock
    
    [ Upstream commit 9c5bd93edf7b8834aecaa7c340b852d5990d7c78 ]
    
    Don't mislead the callers of bpf_{sk,msg}_redirect_{map,hash}(): make sure
    to immediately and visibly fail the forwarding of unsupported af_vsock
    packets.
    
    Fixes: 634f1a7110b4 ("vsock: support sockmap")
    Signed-off-by: Michal Luczaj <mhal@rbox.co>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/20241013-vsock-fixes-for-redir-v2-1-d6577bbfe742@rbox.co
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf, vsock: Drop static vsock_bpf_prot initialization [+ + +]
Author: Michal Luczaj <mhal@rbox.co>
Date:   Sun Oct 13 18:26:42 2024 +0200

    bpf, vsock: Drop static vsock_bpf_prot initialization
    
    [ Upstream commit 19039f279797efbe044cae41ee216c5fe481fc33 ]
    
    vsock_bpf_prot is set up at runtime. Remove the superfluous init.
    
    No functional change intended.
    
    Fixes: 634f1a7110b4 ("vsock: support sockmap")
    Signed-off-by: Michal Luczaj <mhal@rbox.co>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/20241013-vsock-fixes-for-redir-v2-4-d6577bbfe742@rbox.co
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf,perf: Fix perf_event_detach_bpf_prog error handling [+ + +]
Author: Jiri Olsa <jolsa@kernel.org>
Date:   Wed Oct 23 22:03:52 2024 +0200

    bpf,perf: Fix perf_event_detach_bpf_prog error handling
    
    [ Upstream commit 0ee288e69d033850bc87abe0f9cc3ada24763d7f ]
    
    Peter reported that perf_event_detach_bpf_prog might skip to release
    the bpf program for -ENOENT error from bpf_prog_array_copy.
    
    This can't happen because bpf program is stored in perf event and is
    detached and released only when perf event is freed.
    
    Let's drop the -ENOENT check and make sure the bpf program is released
    in any case.
    
    Fixes: 170a7e3ea070 ("bpf: bpf_prog_array_copy() should return -ENOENT if exclude_prog not found")
    Reported-by: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20241023200352.3488610-1-jolsa@kernel.org
    
    Closes: https://lore.kernel.org/lkml/20241022111638.GC16066@noisy.programming.kicks-ass.net/
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: Add MEM_WRITE attribute [+ + +]
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Mon Oct 21 17:28:05 2024 +0200

    bpf: Add MEM_WRITE attribute
    
    [ Upstream commit 6fad274f06f038c29660aa53fbad14241c9fd976 ]
    
    Add a MEM_WRITE attribute for BPF helper functions which can be used in
    bpf_func_proto to annotate an argument type in order to let the verifier
    know that the helper writes into the memory passed as an argument. In
    the past MEM_UNINIT has been (ab)used for this function, but the latter
    merely tells the verifier that the passed memory can be uninitialized.
    
    There have been bugs with overloading the latter but aside from that
    there are also cases where the passed memory is read + written which
    currently cannot be expressed, see also 4b3786a6c539 ("bpf: Zero former
    ARG_PTR_TO_{LONG,INT} args in case of error").
    
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20241021152809.33343-1-daniel@iogearbox.net
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Stable-dep-of: 8ea607330a39 ("bpf: Fix overloading of MEM_UNINIT's meaning")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Add the missing BPF_LINK_TYPE invocation for sockmap [+ + +]
Author: Hou Tao <houtao1@huawei.com>
Date:   Thu Oct 24 09:35:57 2024 +0800

    bpf: Add the missing BPF_LINK_TYPE invocation for sockmap
    
    [ Upstream commit c2f803052bc7a7feb2e03befccc8e49b6ff1f5f5 ]
    
    There is an out-of-bounds read in bpf_link_show_fdinfo() for the sockmap
    link fd. Fix it by adding the missing BPF_LINK_TYPE invocation for
    sockmap link
    
    Also add comments for bpf_link_type to prevent missing updates in the
    future.
    
    Fixes: 699c23f02c65 ("bpf: Add bpf_link support for sk_msg and sk_skb progs")
    Signed-off-by: Hou Tao <houtao1@huawei.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20241024013558.1135167-2-houtao@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Check the remaining info_cnt before repeating btf fields [+ + +]
Author: Hou Tao <houtao1@huawei.com>
Date:   Tue Oct 8 15:11:13 2024 +0800

    bpf: Check the remaining info_cnt before repeating btf fields
    
    [ Upstream commit 797d73ee232dd1833dec4824bc53a22032e97c1c ]
    
    When trying to repeat the btf fields for array of nested struct, it
    doesn't check the remaining info_cnt. The following splat will be
    reported when the value of ret * nelems is greater than BTF_FIELDS_MAX:
    
      ------------[ cut here ]------------
      UBSAN: array-index-out-of-bounds in ../kernel/bpf/btf.c:3951:49
      index 11 is out of range for type 'btf_field_info [11]'
      CPU: 6 UID: 0 PID: 411 Comm: test_progs ...... 6.11.0-rc4+ #1
      Tainted: [O]=OOT_MODULE
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS ...
      Call Trace:
       <TASK>
       dump_stack_lvl+0x57/0x70
       dump_stack+0x10/0x20
       ubsan_epilogue+0x9/0x40
       __ubsan_handle_out_of_bounds+0x6f/0x80
       ? kallsyms_lookup_name+0x48/0xb0
       btf_parse_fields+0x992/0xce0
       map_create+0x591/0x770
       __sys_bpf+0x229/0x2410
       __x64_sys_bpf+0x1f/0x30
       x64_sys_call+0x199/0x9f0
       do_syscall_64+0x3b/0xc0
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
      RIP: 0033:0x7fea56f2cc5d
      ......
       </TASK>
      ---[ end trace ]---
    
    Fix it by checking the remaining info_cnt in btf_repeat_fields() before
    repeating the btf fields.
    
    Fixes: 64e8ee814819 ("bpf: look into the types of the fields of a struct type recursively.")
    Signed-off-by: Hou Tao <houtao1@huawei.com>
    Acked-by: Eduard Zingerman <eddyz87@gmail.com>
    Link: https://lore.kernel.org/r/20241008071114.3718177-2-houtao@huaweicloud.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: devmap: provide rxq after redirect [+ + +]
Author: Florian Kauer <florian.kauer@linutronix.de>
Date:   Wed Sep 11 10:41:18 2024 +0200

    bpf: devmap: provide rxq after redirect
    
    [ Upstream commit ca9984c5f0ab3690d98b13937b2485a978c8dd73 ]
    
    rxq contains a pointer to the device from where
    the redirect happened. Currently, the BPF program
    that was executed after a redirect via BPF_MAP_TYPE_DEVMAP*
    does not have it set.
    
    This is particularly bad since accessing ingress_ifindex, e.g.
    
    SEC("xdp")
    int prog(struct xdp_md *pkt)
    {
            return bpf_redirect_map(&dev_redirect_map, 0, 0);
    }
    
    SEC("xdp/devmap")
    int prog_after_redirect(struct xdp_md *pkt)
    {
            bpf_printk("ifindex %i", pkt->ingress_ifindex);
            return XDP_PASS;
    }
    
    depends on access to rxq, so a NULL pointer gets dereferenced:
    
    <1>[  574.475170] BUG: kernel NULL pointer dereference, address: 0000000000000000
    <1>[  574.475188] #PF: supervisor read access in kernel mode
    <1>[  574.475194] #PF: error_code(0x0000) - not-present page
    <6>[  574.475199] PGD 0 P4D 0
    <4>[  574.475207] Oops: Oops: 0000 [#1] PREEMPT SMP NOPTI
    <4>[  574.475217] CPU: 4 UID: 0 PID: 217 Comm: kworker/4:1 Not tainted 6.11.0-rc5-reduced-00859-g780801200300 #23
    <4>[  574.475226] Hardware name: Intel(R) Client Systems NUC13ANHi7/NUC13ANBi7, BIOS ANRPL357.0026.2023.0314.1458 03/14/2023
    <4>[  574.475231] Workqueue: mld mld_ifc_work
    <4>[  574.475247] RIP: 0010:bpf_prog_5e13354d9cf5018a_prog_after_redirect+0x17/0x3c
    <4>[  574.475257] Code: cc cc cc cc cc cc cc 80 00 00 00 cc cc cc cc cc cc cc cc f3 0f 1e fa 0f 1f 44 00 00 66 90 55 48 89 e5 f3 0f 1e fa 48 8b 57 20 <48> 8b 52 00 8b 92 e0 00 00 00 48 bf f8 a6 d5 c4 5d a0 ff ff be 0b
    <4>[  574.475263] RSP: 0018:ffffa62440280c98 EFLAGS: 00010206
    <4>[  574.475269] RAX: ffffa62440280cd8 RBX: 0000000000000001 RCX: 0000000000000000
    <4>[  574.475274] RDX: 0000000000000000 RSI: ffffa62440549048 RDI: ffffa62440280ce0
    <4>[  574.475278] RBP: ffffa62440280c98 R08: 0000000000000002 R09: 0000000000000001
    <4>[  574.475281] R10: ffffa05dc8b98000 R11: ffffa05f577fca40 R12: ffffa05dcab24000
    <4>[  574.475285] R13: ffffa62440280ce0 R14: ffffa62440549048 R15: ffffa62440549000
    <4>[  574.475289] FS:  0000000000000000(0000) GS:ffffa05f4f700000(0000) knlGS:0000000000000000
    <4>[  574.475294] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    <4>[  574.475298] CR2: 0000000000000000 CR3: 000000025522e000 CR4: 0000000000f50ef0
    <4>[  574.475303] PKRU: 55555554
    <4>[  574.475306] Call Trace:
    <4>[  574.475313]  <IRQ>
    <4>[  574.475318]  ? __die+0x23/0x70
    <4>[  574.475329]  ? page_fault_oops+0x180/0x4c0
    <4>[  574.475339]  ? skb_pp_cow_data+0x34c/0x490
    <4>[  574.475346]  ? kmem_cache_free+0x257/0x280
    <4>[  574.475357]  ? exc_page_fault+0x67/0x150
    <4>[  574.475368]  ? asm_exc_page_fault+0x26/0x30
    <4>[  574.475381]  ? bpf_prog_5e13354d9cf5018a_prog_after_redirect+0x17/0x3c
    <4>[  574.475386]  bq_xmit_all+0x158/0x420
    <4>[  574.475397]  __dev_flush+0x30/0x90
    <4>[  574.475407]  veth_poll+0x216/0x250 [veth]
    <4>[  574.475421]  __napi_poll+0x28/0x1c0
    <4>[  574.475430]  net_rx_action+0x32d/0x3a0
    <4>[  574.475441]  handle_softirqs+0xcb/0x2c0
    <4>[  574.475451]  do_softirq+0x40/0x60
    <4>[  574.475458]  </IRQ>
    <4>[  574.475461]  <TASK>
    <4>[  574.475464]  __local_bh_enable_ip+0x66/0x70
    <4>[  574.475471]  __dev_queue_xmit+0x268/0xe40
    <4>[  574.475480]  ? selinux_ip_postroute+0x213/0x420
    <4>[  574.475491]  ? alloc_skb_with_frags+0x4a/0x1d0
    <4>[  574.475502]  ip6_finish_output2+0x2be/0x640
    <4>[  574.475512]  ? nf_hook_slow+0x42/0xf0
    <4>[  574.475521]  ip6_finish_output+0x194/0x300
    <4>[  574.475529]  ? __pfx_ip6_finish_output+0x10/0x10
    <4>[  574.475538]  mld_sendpack+0x17c/0x240
    <4>[  574.475548]  mld_ifc_work+0x192/0x410
    <4>[  574.475557]  process_one_work+0x15d/0x380
    <4>[  574.475566]  worker_thread+0x29d/0x3a0
    <4>[  574.475573]  ? __pfx_worker_thread+0x10/0x10
    <4>[  574.475580]  ? __pfx_worker_thread+0x10/0x10
    <4>[  574.475587]  kthread+0xcd/0x100
    <4>[  574.475597]  ? __pfx_kthread+0x10/0x10
    <4>[  574.475606]  ret_from_fork+0x31/0x50
    <4>[  574.475615]  ? __pfx_kthread+0x10/0x10
    <4>[  574.475623]  ret_from_fork_asm+0x1a/0x30
    <4>[  574.475635]  </TASK>
    <4>[  574.475637] Modules linked in: veth br_netfilter bridge stp llc iwlmvm x86_pkg_temp_thermal iwlwifi efivarfs nvme nvme_core
    <4>[  574.475662] CR2: 0000000000000000
    <4>[  574.475668] ---[ end trace 0000000000000000 ]---
    
    Therefore, provide it to the program by setting rxq properly.
    
    Fixes: cb261b594b41 ("bpf: Run devmap xdp_prog on flush instead of bulk enqueue")
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Signed-off-by: Florian Kauer <florian.kauer@linutronix.de>
    Acked-by: Jakub Kicinski <kuba@kernel.org>
    Link: https://lore.kernel.org/r/20240911-devel-koalo-fix-ingress-ifindex-v4-1-5c643ae10258@linutronix.de
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: fix do_misc_fixups() for bpf_get_branch_snapshot() [+ + +]
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Wed Oct 23 09:19:16 2024 -0700

    bpf: fix do_misc_fixups() for bpf_get_branch_snapshot()
    
    [ Upstream commit 9806f283140ef3e4d259b7646bd8c66026bbaac5 ]
    
    We need `goto next_insn;` at the end of patching instead of `continue;`.
    It currently works by accident by making verifier re-process patched
    instructions.
    
    Reported-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
    Fixes: 314a53623cd4 ("bpf: inline bpf_get_branch_snapshot() helper")
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Yonghong Song <yonghong.song@linux.dev>
    Acked-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
    Link: https://lore.kernel.org/r/20241023161916.2896274-1-andrii@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix incorrect delta propagation between linked registers [+ + +]
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Wed Oct 16 15:49:11 2024 +0200

    bpf: Fix incorrect delta propagation between linked registers
    
    [ Upstream commit 3878ae04e9fc24dacb77a1d32bd87e7d8108599e ]
    
    Nathaniel reported a bug in the linked scalar delta tracking, which can lead
    to accepting a program with OOB access. The specific code is related to the
    sync_linked_regs() function and the BPF_ADD_CONST flag, which signifies a
    constant offset between two scalar registers tracked by the same register id.
    
    The verifier attempts to track "similar" scalars in order to propagate bounds
    information learned about one scalar to others. For instance, if r1 and r2
    are known to contain the same value, then upon encountering 'if (r1 != 0x1234)
    goto xyz', not only does it know that r1 is equal to 0x1234 on the path where
    that conditional jump is not taken, it also knows that r2 is.
    
    Additionally, with env->bpf_capable set, the verifier will track scalars
    which should be a constant delta apart (if r1 is known to be one greater than
    r2, then if r1 is known to be equal to 0x1234, r2 must be equal to 0x1233.)
    The code path for the latter in adjust_reg_min_max_vals() is reached when
    processing both 32 and 64-bit addition operations. While adjust_reg_min_max_vals()
    knows whether dst_reg was produced by a 32 or a 64-bit addition (based on the
    alu32 bool), the only information saved in dst_reg is the id of the source
    register (reg->id, or'ed by BPF_ADD_CONST) and the value of the constant
    offset (reg->off).
    
    Later, the function sync_linked_regs() will attempt to use this information
    to propagate bounds information from one register (known_reg) to others,
    meaning, for all R in linked_regs, it copies known_reg range (and possibly
    adjusting delta) into R for the case of R->id == known_reg->id.
    
    For the delta adjustment, meaning, matching reg->id with BPF_ADD_CONST, the
    verifier adjusts the register as reg = known_reg; reg += delta where delta
    is computed as (s32)reg->off - (s32)known_reg->off and placed as a scalar
    into a fake_reg to then simulate the addition of reg += fake_reg. This is
    only correct, however, if the value in reg was created by a 64-bit addition.
    When reg contains the result of a 32-bit addition operation, its upper 32
    bits will always be zero. sync_linked_regs() on the other hand, may cause
    the verifier to believe that the addition between fake_reg and reg overflows
    into those upper bits. For example, if reg was generated by adding the
    constant 1 to known_reg using a 32-bit alu operation, then reg->off is 1
    and known_reg->off is 0. If known_reg is known to be the constant 0xFFFFFFFF,
    sync_linked_regs() will tell the verifier that reg is equal to the constant
    0x100000000. This is incorrect as the actual value of reg will be 0, as the
    32-bit addition will wrap around.
    
    Example:
    
      0: (b7) r0 = 0;             R0_w=0
      1: (18) r1 = 0x80000001;    R1_w=0x80000001
      3: (37) r1 /= 1;            R1_w=scalar()
      4: (bf) r2 = r1;            R1_w=scalar(id=1) R2_w=scalar(id=1)
      5: (bf) r4 = r1;            R1_w=scalar(id=1) R4_w=scalar(id=1)
      6: (04) w2 += 2147483647;   R2_w=scalar(id=1+2147483647,smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
      7: (04) w4 += 0 ;           R4_w=scalar(id=1+0,smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
      8: (15) if r2 == 0x0 goto pc+1
     10: R0=0 R1=0xffffffff80000001 R2=0x7fffffff R4=0xffffffff80000001 R10=fp0
    
    What can be seen here is that r1 is copied to r2 and r4, such that {r1,r2,r4}.id
    are all the same which later lets sync_linked_regs() to be invoked. Then, in
    a next step constants are added with alu32 to r2 and r4, setting their ->off,
    as well as id |= BPF_ADD_CONST. Next, the conditional will bind r2 and
    propagate ranges to its linked registers. The verifier now believes the upper
    32 bits of r4 are r4=0xffffffff80000001, while actually r4=r1=0x80000001.
    
    One approach for a simple fix suitable also for stable is to limit the constant
    delta tracking to only 64-bit alu addition. If necessary at some later point,
    BPF_ADD_CONST could be split into BPF_ADD_CONST64 and BPF_ADD_CONST32 to avoid
    mixing the two under the tradeoff to further complicate sync_linked_regs().
    However, none of the added tests from dedf56d775c0 ("selftests/bpf: Add tests
    for add_const") make this necessary at this point, meaning, BPF CI also passes
    with just limiting tracking to 64-bit alu addition.
    
    Fixes: 98d7ca374ba4 ("bpf: Track delta between "linked" registers.")
    Reported-by: Nathaniel Theis <nathaniel.theis@nccgroup.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Reviewed-by: Eduard Zingerman <eddyz87@gmail.com>
    Link: https://lore.kernel.org/bpf/20241016134913.32249-1-daniel@iogearbox.net
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix iter/task tid filtering [+ + +]
Author: Jordan Rome <linux@jordanrome.com>
Date:   Wed Oct 16 14:00:47 2024 -0700

    bpf: Fix iter/task tid filtering
    
    [ Upstream commit 9495a5b731fcaf580448a3438d63601c88367661 ]
    
    In userspace, you can add a tid filter by setting
    the "task.tid" field for "bpf_iter_link_info".
    However, `get_pid_task` when called for the
    `BPF_TASK_ITER_TID` type should have been using
    `PIDTYPE_PID` (tid) instead of `PIDTYPE_TGID` (pid).
    
    Fixes: f0d74c4da1f0 ("bpf: Parameterize task iterators.")
    Signed-off-by: Jordan Rome <linux@jordanrome.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20241016210048.1213935-1-linux@jordanrome.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: fix kfunc btf caching for modules [+ + +]
Author: Toke Høiland-Jørgensen <toke@redhat.com>
Date:   Thu Oct 10 15:27:07 2024 +0200

    bpf: fix kfunc btf caching for modules
    
    [ Upstream commit 6cb86a0fdece87e126323ec1bb19deb16a52aedf ]
    
    The verifier contains a cache for looking up module BTF objects when
    calling kfuncs defined in modules. This cache uses a 'struct
    bpf_kfunc_btf_tab', which contains a sorted list of BTF objects that
    were already seen in the current verifier run, and the BTF objects are
    looked up by the offset stored in the relocated call instruction using
    bsearch().
    
    The first time a given offset is seen, the module BTF is loaded from the
    file descriptor passed in by libbpf, and stored into the cache. However,
    there's a bug in the code storing the new entry: it stores a pointer to
    the new cache entry, then calls sort() to keep the cache sorted for the
    next lookup using bsearch(), and then returns the entry that was just
    stored through the stored pointer. However, because sort() modifies the
    list of entries in place *by value*, the stored pointer may no longer
    point to the right entry, in which case the wrong BTF object will be
    returned.
    
    The end result of this is an intermittent bug where, if a BPF program
    calls two functions with the same signature in two different modules,
    the function from the wrong module may sometimes end up being called.
    Whether this happens depends on the order of the calls in the BPF
    program (as that affects whether sort() reorders the array of BTF
    objects), making it especially hard to track down. Simon, credited as
    reporter below, spent significant effort analysing and creating a
    reproducer for this issue. The reproducer is added as a selftest in a
    subsequent patch.
    
    The fix is straight forward: simply don't use the stored pointer after
    calling sort(). Since we already have an on-stack pointer to the BTF
    object itself at the point where the function return, just use that, and
    populate it from the cache entry in the branch where the lookup
    succeeds.
    
    Fixes: 2357672c54c3 ("bpf: Introduce BPF support for kernel module function calls")
    Reported-by: Simon Sundberg <simon.sundberg@kau.se>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Acked-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Link: https://lore.kernel.org/r/20241010-fix-kfunc-btf-caching-for-modules-v2-1-745af6c1af98@redhat.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix link info netfilter flags to populate defrag flag [+ + +]
Author: Tyrone Wu <wudevelops@gmail.com>
Date:   Fri Oct 11 19:32:51 2024 +0000

    bpf: Fix link info netfilter flags to populate defrag flag
    
    [ Upstream commit 92f3715e1eba1d41e55be06159dc3d856b18326d ]
    
    This fix correctly populates the `bpf_link_info.netfilter.flags` field
    when user passes the `BPF_F_NETFILTER_IP_DEFRAG` flag.
    
    Fixes: 91721c2d02d3 ("netfilter: bpf: Support BPF_F_NETFILTER_IP_DEFRAG in netfilter link")
    Signed-off-by: Tyrone Wu <wudevelops@gmail.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Florian Westphal <fw@strlen.de>
    Cc: Daniel Xu <dxu@dxuuu.xyz>
    Link: https://lore.kernel.org/bpf/20241011193252.178997-1-wudevelops@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix memory leak in bpf_core_apply [+ + +]
Author: Jiri Olsa <jolsa@kernel.org>
Date:   Mon Oct 7 18:09:58 2024 +0200

    bpf: Fix memory leak in bpf_core_apply
    
    [ Upstream commit 45126b155e3b5201179cdc038504bf93a8ccd921 ]
    
    We need to free specs properly.
    
    Fixes: 3d2786d65aaa ("bpf: correctly handle malformed BPF_CORE_TYPE_ID_LOCAL relos")
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Eduard Zingerman <eddyz87@gmail.com>
    Link: https://lore.kernel.org/bpf/20241007160958.607434-1-jolsa@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix overloading of MEM_UNINIT's meaning [+ + +]
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Mon Oct 21 17:28:06 2024 +0200

    bpf: Fix overloading of MEM_UNINIT's meaning
    
    [ Upstream commit 8ea607330a39184f51737c6ae706db7fdca7628e ]
    
    Lonial reported an issue in the BPF verifier where check_mem_size_reg()
    has the following code:
    
        if (!tnum_is_const(reg->var_off))
            /* For unprivileged variable accesses, disable raw
             * mode so that the program is required to
             * initialize all the memory that the helper could
             * just partially fill up.
             */
             meta = NULL;
    
    This means that writes are not checked when the register containing the
    size of the passed buffer has not a fixed size. Through this bug, a BPF
    program can write to a map which is marked as read-only, for example,
    .rodata global maps.
    
    The problem is that MEM_UNINIT's initial meaning that "the passed buffer
    to the BPF helper does not need to be initialized" which was added back
    in commit 435faee1aae9 ("bpf, verifier: add ARG_PTR_TO_RAW_STACK type")
    got overloaded over time with "the passed buffer is being written to".
    
    The problem however is that checks such as the above which were added later
    via 06c1c049721a ("bpf: allow helpers access to variable memory") set meta
    to NULL in order force the user to always initialize the passed buffer to
    the helper. Due to the current double meaning of MEM_UNINIT, this bypasses
    verifier write checks to the memory (not boundary checks though) and only
    assumes the latter memory is read instead.
    
    Fix this by reverting MEM_UNINIT back to its original meaning, and having
    MEM_WRITE as an annotation to BPF helpers in order to then trigger the
    BPF verifier checks for writing to memory.
    
    Some notes: check_arg_pair_ok() ensures that for ARG_CONST_SIZE{,_OR_ZERO}
    we can access fn->arg_type[arg - 1] since it must contain a preceding
    ARG_PTR_TO_MEM. For check_mem_reg() the meta argument can be removed
    altogether since we do check both BPF_READ and BPF_WRITE. Same for the
    equivalent check_kfunc_mem_size_reg().
    
    Fixes: 7b3552d3f9f6 ("bpf: Reject writes for PTR_TO_MAP_KEY in check_helper_mem_access")
    Fixes: 97e6d7dab1ca ("bpf: Check PTR_TO_MEM | MEM_RDONLY in check_helper_mem_access")
    Fixes: 15baa55ff5b0 ("bpf/verifier: allow all functions to read user provided context")
    Reported-by: Lonial Con <kongln9170@gmail.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20241021152809.33343-2-daniel@iogearbox.net
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix print_reg_state's constant scalar dump [+ + +]
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Wed Oct 16 15:49:12 2024 +0200

    bpf: Fix print_reg_state's constant scalar dump
    
    [ Upstream commit 3e9e708757ca3b7eb65a820031d62fea1a265709 ]
    
    print_reg_state() should not consider adding reg->off to reg->var_off.value
    when dumping scalars. Scalars can be produced with reg->off != 0 through
    BPF_ADD_CONST, and thus as-is this can skew the register log dump.
    
    Fixes: 98d7ca374ba4 ("bpf: Track delta between "linked" registers.")
    Reported-by: Nathaniel Theis <nathaniel.theis@nccgroup.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20241016134913.32249-2-daniel@iogearbox.net
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix truncation bug in coerce_reg_to_size_sx() [+ + +]
Author: Dimitar Kanaliev <dimitar.kanaliev@siteground.com>
Date:   Mon Oct 14 15:11:53 2024 +0300

    bpf: Fix truncation bug in coerce_reg_to_size_sx()
    
    [ Upstream commit ae67b9fb8c4e981e929a665dcaa070f4b05ebdb4 ]
    
    coerce_reg_to_size_sx() updates the register state after a sign-extension
    operation. However, there's a bug in the assignment order of the unsigned
    min/max values, leading to incorrect truncation:
    
      0: (85) call bpf_get_prandom_u32#7    ; R0_w=scalar()
      1: (57) r0 &= 1                       ; R0_w=scalar(smin=smin32=0,smax=umax=smax32=umax32=1,var_off=(0x0; 0x1))
      2: (07) r0 += 254                     ; R0_w=scalar(smin=umin=smin32=umin32=254,smax=umax=smax32=umax32=255,var_off=(0xfe; 0x1))
      3: (bf) r0 = (s8)r0                   ; R0_w=scalar(smin=smin32=-2,smax=smax32=-1,umin=umin32=0xfffffffe,umax=0xffffffff,var_off=(0xfffffffffffffffe; 0x1))
    
    In the current implementation, the unsigned 32-bit min/max values
    (u32_min_value and u32_max_value) are assigned directly from the 64-bit
    signed min/max values (s64_min and s64_max):
    
      reg->umin_value = reg->u32_min_value = s64_min;
      reg->umax_value = reg->u32_max_value = s64_max;
    
    Due to the chain assigmnent, this is equivalent to:
    
      reg->u32_min_value = s64_min;  // Unintended truncation
      reg->umin_value = reg->u32_min_value;
      reg->u32_max_value = s64_max;  // Unintended truncation
      reg->umax_value = reg->u32_max_value;
    
    Fixes: 1f9a1ea821ff ("bpf: Support new sign-extension load insns")
    Reported-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
    Reported-by: Zac Ecob <zacecob@protonmail.com>
    Signed-off-by: Dimitar Kanaliev <dimitar.kanaliev@siteground.com>
    Acked-by: Yonghong Song <yonghong.song@linux.dev>
    Reviewed-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
    Link: https://lore.kernel.org/r/20241014121155.92887-2-dimitar.kanaliev@siteground.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: fix unpopulated name_len field in perf_event link info [+ + +]
Author: Tyrone Wu <wudevelops@gmail.com>
Date:   Tue Oct 8 16:43:11 2024 +0000

    bpf: fix unpopulated name_len field in perf_event link info
    
    [ Upstream commit 4deecdd29cf29844c7bd164d72dc38d2e672f64e ]
    
    Previously when retrieving `bpf_link_info.perf_event` for
    kprobe/uprobe/tracepoint, the `name_len` field was not populated by the
    kernel, leaving it to reflect the value initially set by the user. This
    behavior was inconsistent with how other input/output string buffer
    fields function (e.g. `raw_tracepoint.tp_name_len`).
    
    This patch fills `name_len` with the actual size of the string name.
    
    Fixes: 1b715e1b0ec5 ("bpf: Support ->fill_link_info for perf_event")
    Signed-off-by: Tyrone Wu <wudevelops@gmail.com>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Acked-by: Yafang Shao <laoar.shao@gmail.com>
    Link: https://lore.kernel.org/r/20241008164312.46269-1-wudevelops@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix unpopulated path_size when uprobe_multi fields unset [+ + +]
Author: Tyrone Wu <wudevelops@gmail.com>
Date:   Fri Oct 11 00:08:02 2024 +0000

    bpf: Fix unpopulated path_size when uprobe_multi fields unset
    
    [ Upstream commit ad6b5b6ea9b764018249285a4fe0a2226bef4caa ]
    
    Previously when retrieving `bpf_link_info.uprobe_multi` with `path` and
    `path_size` fields unset, the `path_size` field is not populated
    (remains 0). This behavior was inconsistent with how other input/output
    string buffer fields work, as the field should be populated in cases
    when:
    - both buffer and length are set (currently works as expected)
    - both buffer and length are unset (not working as expected)
    
    This patch now fills the `path_size` field when `path` and `path_size`
    are unset.
    
    Fixes: e56fdbfb06e2 ("bpf: Add link_info support for uprobe multi link")
    Signed-off-by: Tyrone Wu <wudevelops@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20241011000803.681190-1-wudevelops@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Make sure internal and UAPI bpf_redirect flags don't overlap [+ + +]
Author: Toke Høiland-Jørgensen <toke@redhat.com>
Date:   Fri Sep 20 14:56:24 2024 +0200

    bpf: Make sure internal and UAPI bpf_redirect flags don't overlap
    
    [ Upstream commit 09d88791c7cd888d5195c84733caf9183dcfbd16 ]
    
    The bpf_redirect_info is shared between the SKB and XDP redirect paths,
    and the two paths use the same numeric flag values in the ri->flags
    field (specifically, BPF_F_BROADCAST == BPF_F_NEXTHOP). This means that
    if skb bpf_redirect_neigh() is used with a non-NULL params argument and,
    subsequently, an XDP redirect is performed using the same
    bpf_redirect_info struct, the XDP path will get confused and end up
    crashing, which syzbot managed to trigger.
    
    With the stack-allocated bpf_redirect_info, the structure is no longer
    shared between the SKB and XDP paths, so the crash doesn't happen
    anymore. However, different code paths using identically-numbered flag
    values in the same struct field still seems like a bit of a mess, so
    this patch cleans that up by moving the flag definitions together and
    redefining the three flags in BPF_F_REDIRECT_INTERNAL to not overlap
    with the flags used for XDP. It also adds a BUILD_BUG_ON() check to make
    sure the overlap is not re-introduced by mistake.
    
    Fixes: e624d4ed4aa8 ("xdp: Extend xdp_redirect_map with broadcast support")
    Reported-by: syzbot+cca39e6e84a367a7e6f6@syzkaller.appspotmail.com
    Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Closes: https://syzkaller.appspot.com/bug?extid=cca39e6e84a367a7e6f6
    Link: https://lore.kernel.org/bpf/20240920125625.59465-1-toke@redhat.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Preserve param->string when parsing mount options [+ + +]
Author: Hou Tao <houtao1@huawei.com>
Date:   Tue Oct 22 21:01:33 2024 +0800

    bpf: Preserve param->string when parsing mount options
    
    [ Upstream commit 1f97c03f43fadc407de5b5cb01c07755053e1c22 ]
    
    In bpf_parse_param(), keep the value of param->string intact so it can
    be freed later. Otherwise, the kmalloc area pointed to by param->string
    will be leaked as shown below:
    
    unreferenced object 0xffff888118c46d20 (size 8):
      comm "new_name", pid 12109, jiffies 4295580214
      hex dump (first 8 bytes):
        61 6e 79 00 38 c9 5c 7e                          any.8.\~
      backtrace (crc e1b7f876):
        [<00000000c6848ac7>] kmemleak_alloc+0x4b/0x80
        [<00000000de9f7d00>] __kmalloc_node_track_caller_noprof+0x36e/0x4a0
        [<000000003e29b886>] memdup_user+0x32/0xa0
        [<0000000007248326>] strndup_user+0x46/0x60
        [<0000000035b3dd29>] __x64_sys_fsconfig+0x368/0x3d0
        [<0000000018657927>] x64_sys_call+0xff/0x9f0
        [<00000000c0cabc95>] do_syscall_64+0x3b/0xc0
        [<000000002f331597>] entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    Fixes: 6c1752e0b6ca ("bpf: Support symbolic BPF FS delegation mount options")
    Signed-off-by: Hou Tao <houtao1@huawei.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Link: https://lore.kernel.org/bpf/20241022130133.3798232-1-houtao@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Remove MEM_UNINIT from skb/xdp MTU helpers [+ + +]
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Mon Oct 21 17:28:07 2024 +0200

    bpf: Remove MEM_UNINIT from skb/xdp MTU helpers
    
    [ Upstream commit 14a3d3ef02ba53447d5112a2641aac0d10dc994f ]
    
    We can now undo parts of 4b3786a6c539 ("bpf: Zero former ARG_PTR_TO_{LONG,INT}
    args in case of error") as discussed in [0].
    
    Given the BPF helpers now have MEM_WRITE tag, the MEM_UNINIT can be cleared.
    
    The mtu_len is an input as well as output argument, meaning, the BPF program
    has to set it to something. It cannot be uninitialized. Therefore, allowing
    uninitialized memory and zeroing it on error would be odd. It was done as
    an interim step in 4b3786a6c539 as the desired behavior could not have been
    expressed before the introduction of MEM_WRITE tag.
    
    Fixes: 4b3786a6c539 ("bpf: Zero former ARG_PTR_TO_{LONG,INT} args in case of error")
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/a86eb76d-f52f-dee4-e5d2-87e45de3e16f@iogearbox.net [0]
    Acked-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20241021152809.33343-3-daniel@iogearbox.net
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: sync_linked_regs() must preserve subreg_def [+ + +]
Author: Eduard Zingerman <eddyz87@gmail.com>
Date:   Tue Sep 24 14:08:43 2024 -0700

    bpf: sync_linked_regs() must preserve subreg_def
    
    [ Upstream commit e9bd9c498cb0f5843996dbe5cbce7a1836a83c70 ]
    
    Range propagation must not affect subreg_def marks, otherwise the
    following example is rewritten by verifier incorrectly when
    BPF_F_TEST_RND_HI32 flag is set:
    
      0: call bpf_ktime_get_ns                   call bpf_ktime_get_ns
      1: r0 &= 0x7fffffff       after verifier   r0 &= 0x7fffffff
      2: w1 = w0                rewrites         w1 = w0
      3: if w0 < 10 goto +0     -------------->  r11 = 0x2f5674a6     (r)
      4: r1 >>= 32                               r11 <<= 32           (r)
      5: r0 = r1                                 r1 |= r11            (r)
      6: exit;                                   if w0 < 0xa goto pc+0
                                                 r1 >>= 32
                                                 r0 = r1
                                                 exit
    
    (or zero extension of w1 at (2) is missing for architectures that
     require zero extension for upper register half).
    
    The following happens w/o this patch:
    - r0 is marked as not a subreg at (0);
    - w1 is marked as subreg at (2);
    - w1 subreg_def is overridden at (3) by copy_register_state();
    - w1 is read at (5) but mark_insn_zext() does not mark (2)
      for zero extension, because w1 subreg_def is not set;
    - because of BPF_F_TEST_RND_HI32 flag verifier inserts random
      value for hi32 bits of (2) (marked (r));
    - this random value is read at (5).
    
    Fixes: 75748837b7e5 ("bpf: Propagate scalar ranges through register assignments.")
    Reported-by: Lonial Con <kongln9170@gmail.com>
    Signed-off-by: Lonial Con <kongln9170@gmail.com>
    Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Closes: https://lore.kernel.org/bpf/7e2aa30a62d740db182c170fdd8f81c596df280d.camel@gmail.com
    Link: https://lore.kernel.org/bpf/20240924210844.1758441-1-eddyz87@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Use raw_spinlock_t in ringbuf [+ + +]
Author: Wander Lairson Costa <wander.lairson@gmail.com>
Date:   Fri Sep 20 16:06:59 2024 -0300

    bpf: Use raw_spinlock_t in ringbuf
    
    [ Upstream commit 8b62645b09f870d70c7910e7550289d444239a46 ]
    
    The function __bpf_ringbuf_reserve is invoked from a tracepoint, which
    disables preemption. Using spinlock_t in this context can lead to a
    "sleep in atomic" warning in the RT variant. This issue is illustrated
    in the example below:
    
    BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
    in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 556208, name: test_progs
    preempt_count: 1, expected: 0
    RCU nest depth: 1, expected: 1
    INFO: lockdep is turned off.
    Preemption disabled at:
    [<ffffd33a5c88ea44>] migrate_enable+0xc0/0x39c
    CPU: 7 PID: 556208 Comm: test_progs Tainted: G
    Hardware name: Qualcomm SA8775P Ride (DT)
    Call trace:
     dump_backtrace+0xac/0x130
     show_stack+0x1c/0x30
     dump_stack_lvl+0xac/0xe8
     dump_stack+0x18/0x30
     __might_resched+0x3bc/0x4fc
     rt_spin_lock+0x8c/0x1a4
     __bpf_ringbuf_reserve+0xc4/0x254
     bpf_ringbuf_reserve_dynptr+0x5c/0xdc
     bpf_prog_ac3d15160d62622a_test_read_write+0x104/0x238
     trace_call_bpf+0x238/0x774
     perf_call_bpf_enter.isra.0+0x104/0x194
     perf_syscall_enter+0x2f8/0x510
     trace_sys_enter+0x39c/0x564
     syscall_trace_enter+0x220/0x3c0
     do_el0_svc+0x138/0x1dc
     el0_svc+0x54/0x130
     el0t_64_sync_handler+0x134/0x150
     el0t_64_sync+0x17c/0x180
    
    Switch the spinlock to raw_spinlock_t to avoid this error.
    
    Fixes: 457f44363a88 ("bpf: Implement BPF ring buffer and verifier support for it")
    Reported-by: Brian Grech <bgrech@redhat.com>
    Signed-off-by: Wander Lairson Costa <wander.lairson@gmail.com>
    Signed-off-by: Wander Lairson Costa <wander@redhat.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/r/20240920190700.617253-1-wander@redhat.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
 
btrfs: clear force-compress on remount when compress mount option is given [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Mon Oct 14 16:14:18 2024 +0100

    btrfs: clear force-compress on remount when compress mount option is given
    
    commit 3510e684b8f6a569c2f8b86870da116e2ffeec2d upstream.
    
    After the migration to use fs context for processing mount options we had
    a slight change in the semantics for remounting a filesystem that was
    mounted with compress-force. Before we could clear compress-force by
    passing only "-o compress[=algo]" during a remount, but after that change
    that does not work anymore, force-compress is still present and one needs
    to pass "-o compress-force=no,compress[=algo]" to the mount command.
    
    Example, when running on a kernel 6.8+:
    
      $ mount -o compress-force=zlib:9 /dev/sdi /mnt/sdi
      $ mount | grep sdi
      /dev/sdi on /mnt/sdi type btrfs (rw,relatime,compress-force=zlib:9,discard=async,space_cache=v2,subvolid=5,subvol=/)
    
      $ mount -o remount,compress=zlib:5 /mnt/sdi
      $ mount | grep sdi
      /dev/sdi on /mnt/sdi type btrfs (rw,relatime,compress-force=zlib:5,discard=async,space_cache=v2,subvolid=5,subvol=/)
    
    On a 6.7 kernel (or older):
    
      $ mount -o compress-force=zlib:9 /dev/sdi /mnt/sdi
      $ mount | grep sdi
      /dev/sdi on /mnt/sdi type btrfs (rw,relatime,compress-force=zlib:9,discard=async,space_cache=v2,subvolid=5,subvol=/)
    
      $ mount -o remount,compress=zlib:5 /mnt/sdi
      $ mount | grep sdi
      /dev/sdi on /mnt/sdi type btrfs (rw,relatime,compress=zlib:5,discard=async,space_cache=v2,subvolid=5,subvol=/)
    
    So update btrfs_parse_param() to clear "compress-force" when "compress" is
    given, providing the same semantics as kernel 6.7 and older.
    
    Reported-by: Roman Mamedov <rm@romanrm.net>
    Link: https://lore.kernel.org/linux-btrfs/20241014182416.13d0f8b0@nvm/
    CC: stable@vger.kernel.org # 6.8+
    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 passing 0 to ERR_PTR in btrfs_search_dir_index_item() [+ + +]
Author: Yue Haibing <yuehaibing@huawei.com>
Date:   Tue Oct 22 17:52:08 2024 +0800

    btrfs: fix passing 0 to ERR_PTR in btrfs_search_dir_index_item()
    
    commit 75f49c3dc7b7423d3734f2e4dabe3dac8d064338 upstream.
    
    The ret may be zero in btrfs_search_dir_index_item() and should not
    passed to ERR_PTR(). Now btrfs_unlink_subvol() is the only caller to
    this, reconstructed it to check ERR_PTR(-ENOENT) while ret >= 0.
    
    This fixes smatch warnings:
    
    fs/btrfs/dir-item.c:353
      btrfs_search_dir_index_item() warn: passing zero to 'ERR_PTR'
    
    Fixes: 9dcbe16fccbb ("btrfs: use btrfs_for_each_slot in btrfs_search_dir_index_item")
    CC: stable@vger.kernel.org # 6.1+
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: Yue Haibing <yuehaibing@huawei.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 read corruption due to race with extent map merging [+ + +]
Author: Boris Burkov <boris@bur.io>
Date:   Fri Oct 18 15:44:34 2024 -0700

    btrfs: fix read corruption due to race with extent map merging
    
    commit 7a2339058ed71f54c1e12e1b3c25aab1b1ba7943 upstream.
    
    In debugging some corrupt squashfs files, we observed symptoms of
    corrupt page cache pages but correct on-disk contents. Further
    investigation revealed that the exact symptom was a correct page
    followed by an incorrect, duplicate, page. This got us thinking about
    extent maps.
    
    commit ac05ca913e9f ("Btrfs: fix race between using extent maps and merging them")
    enforces a reference count on the primary `em` extent_map being merged,
    as that one gets modified.
    
    However, since,
    commit 3d2ac9922465 ("btrfs: introduce new members for extent_map")
    both 'em' and 'merge' get modified, which started modifying 'merge'
    and thus introduced the same race.
    
    We were able to reproduce this by looping the affected squashfs workload
    in parallel on a bunch of separate btrfs-es while also dropping caches.
    We are still working on a simple enough reproducer to make into an fstest.
    
    The simplest fix is to stop modifying 'merge', which is not essential,
    as it is dropped immediately after the merge. This behavior is simply
    a consequence of the order of the two extent maps being important in
    computing the new values. Modify merge_ondisk_extents to take prev and
    next by const* and also take a third merged parameter that it puts the
    results in. Note that this introduces the rather odd behavior of passing
    'em' to merge_ondisk_extents as a const * and as a regular ptr.
    
    Fixes: 3d2ac9922465 ("btrfs: introduce new members for extent_map")
    CC: stable@vger.kernel.org # 6.11+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Omar Sandoval <osandov@fb.com>
    Signed-off-by: Boris Burkov <boris@bur.io>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: qgroup: set a more sane default value for subtree drop threshold [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Tue Sep 10 15:21:04 2024 +0930

    btrfs: qgroup: set a more sane default value for subtree drop threshold
    
    commit 5f9062a48db260fd6b53d86ecfb4d5dc59266316 upstream.
    
    Since commit 011b46c30476 ("btrfs: skip subtree scan if it's too high to
    avoid low stall in btrfs_commit_transaction()"), btrfs qgroup can
    automatically skip large subtree scan at the cost of marking qgroup
    inconsistent.
    
    It's designed to address the final performance problem of snapshot drop
    with qgroup enabled, but to be safe the default value is
    BTRFS_MAX_LEVEL, requiring a user space daemon to set a different value
    to make it work.
    
    I'd say it's not a good idea to rely on user space tool to set this
    default value, especially when some operations (snapshot dropping) can
    be triggered immediately after mount, leaving a very small window to
    that that sysfs interface.
    
    So instead of disabling this new feature by default, enable it with a
    low threshold (3), so that large subvolume tree drop at mount time won't
    cause huge qgroup workload.
    
    CC: stable@vger.kernel.org # 6.1
    Signed-off-by: Qu Wenruo <wqu@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: reject ro->rw reconfiguration if there are hard ro requirements [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Thu Sep 19 20:18:11 2024 +0930

    btrfs: reject ro->rw reconfiguration if there are hard ro requirements
    
    commit 3c36a72c1d27de6618c1c480c793d9924640f5bb upstream.
    
    [BUG]
    Syzbot reports the following crash:
    
      BTRFS info (device loop0 state MCS): disabling free space tree
      BTRFS info (device loop0 state MCS): clearing compat-ro feature flag for FREE_SPACE_TREE (0x1)
      BTRFS info (device loop0 state MCS): clearing compat-ro feature flag for FREE_SPACE_TREE_VALID (0x2)
      Oops: general protection fault, probably for non-canonical address 0xdffffc0000000003: 0000 [#1] PREEMPT SMP KASAN NOPTI
      KASAN: null-ptr-deref in range [0x0000000000000018-0x000000000000001f]
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
      RIP: 0010:backup_super_roots fs/btrfs/disk-io.c:1691 [inline]
      RIP: 0010:write_all_supers+0x97a/0x40f0 fs/btrfs/disk-io.c:4041
      Call Trace:
       <TASK>
       btrfs_commit_transaction+0x1eae/0x3740 fs/btrfs/transaction.c:2530
       btrfs_delete_free_space_tree+0x383/0x730 fs/btrfs/free-space-tree.c:1312
       btrfs_start_pre_rw_mount+0xf28/0x1300 fs/btrfs/disk-io.c:3012
       btrfs_remount_rw fs/btrfs/super.c:1309 [inline]
       btrfs_reconfigure+0xae6/0x2d40 fs/btrfs/super.c:1534
       btrfs_reconfigure_for_mount fs/btrfs/super.c:2020 [inline]
       btrfs_get_tree_subvol fs/btrfs/super.c:2079 [inline]
       btrfs_get_tree+0x918/0x1920 fs/btrfs/super.c:2115
       vfs_get_tree+0x90/0x2b0 fs/super.c:1800
       do_new_mount+0x2be/0xb40 fs/namespace.c:3472
       do_mount fs/namespace.c:3812 [inline]
       __do_sys_mount fs/namespace.c:4020 [inline]
       __se_sys_mount+0x2d6/0x3c0 fs/namespace.c:3997
       do_syscall_x64 arch/x86/entry/common.c:52 [inline]
       do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    [CAUSE]
    To support mounting different subvolume with different RO/RW flags for
    the new mount APIs, btrfs introduced two workaround to support this feature:
    
    - Skip mount option/feature checks if we are mounting a different
      subvolume
    
    - Reconfigure the fs to RW if the initial mount is RO
    
    Combining these two, we can have the following sequence:
    
    - Mount the fs ro,rescue=all,clear_cache,space_cache=v1
      rescue=all will mark the fs as hard read-only, so no v2 cache clearing
      will happen.
    
    - Mount a subvolume rw of the same fs.
      We go into btrfs_get_tree_subvol(), but fc_mount() returns EBUSY
      because our new fc is RW, different from the original fs.
    
      Now we enter btrfs_reconfigure_for_mount(), which switches the RO flag
      first so that we can grab the existing fs_info.
      Then we reconfigure the fs to RW.
    
    - During reconfiguration, option/features check is skipped
      This means we will restart the v2 cache clearing, and convert back to
      v1 cache.
      This will trigger fs writes, and since the original fs has "rescue=all"
      option, it skips the csum tree read.
    
      And eventually causing NULL pointer dereference in super block
      writeback.
    
    [FIX]
    For reconfiguration caused by different subvolume RO/RW flags, ensure we
    always run btrfs_check_options() to ensure we have proper hard RO
    requirements met.
    
    In fact the function btrfs_check_options() doesn't really do many
    complex checks, but hard RO requirement and some feature dependency
    checks, thus there is no special reason not to do the check for mount
    reconfiguration.
    
    Reported-by: syzbot+56360f93efa90ff15870@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/linux-btrfs/0000000000008c5d090621cb2770@google.com/
    Fixes: f044b318675f ("btrfs: handle the ro->rw transition for mounting different subvolumes")
    CC: stable@vger.kernel.org # 6.8+
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: zoned: fix zone unusable accounting for freed reserved extent [+ + +]
Author: Naohiro Aota <naohiro.aota@wdc.com>
Date:   Tue Oct 1 17:03:32 2024 +0900

    btrfs: zoned: fix zone unusable accounting for freed reserved extent
    
    commit bf9821ba4792a0d9a2e72803ae7b4341faf3d532 upstream.
    
    When btrfs reserves an extent and does not use it (e.g, by an error), it
    calls btrfs_free_reserved_extent() to free the reserved extent. In the
    process, it calls btrfs_add_free_space() and then it accounts the region
    bytes as block_group->zone_unusable.
    
    However, it leaves the space_info->bytes_zone_unusable side not updated. As
    a result, ENOSPC can happen while a space_info reservation succeeded. The
    reservation is fine because the freed region is not added in
    space_info->bytes_zone_unusable, leaving that space as "free". OTOH,
    corresponding block group counts it as zone_unusable and its allocation
    pointer is not rewound, we cannot allocate an extent from that block group.
    That will also negate space_info's async/sync reclaim process, and cause an
    ENOSPC error from the extent allocation process.
    
    Fix that by returning the space to space_info->bytes_zone_unusable.
    Ideally, since a bio is not submitted for this reserved region, we should
    return the space to free space and rewind the allocation pointer. But, it
    needs rework on extent allocation handling, so let it work in this way for
    now.
    
    Fixes: 169e0da91a21 ("btrfs: zoned: track unusable bytes for zones")
    CC: stable@vger.kernel.org # 5.15+
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: Naohiro Aota <naohiro.aota@wdc.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>

 
cdrom: Avoid barrier_nospec() in cdrom_ioctl_media_changed() [+ + +]
Author: Josh Poimboeuf <jpoimboe@kernel.org>
Date:   Thu Oct 17 15:09:02 2024 -0700

    cdrom: Avoid barrier_nospec() in cdrom_ioctl_media_changed()
    
    [ Upstream commit b0bf1afde7c34698cf61422fa8ee60e690dc25c3 ]
    
    The barrier_nospec() after the array bounds check is overkill and
    painfully slow for arches which implement it.
    
    Furthermore, most arches don't implement it, so they remain exposed to
    Spectre v1 (which can affect pretty much any CPU with branch
    prediction).
    
    Instead, clamp the user pointer to a valid range so it's guaranteed to
    be a valid array index even when the bounds check mispredicts.
    
    Fixes: 8270cb10c068 ("cdrom: Fix spectre-v1 gadget")
    Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Link: https://lore.kernel.org/r/1d86f4d9d8fba68e5ca64cdeac2451b95a8bf872.1729202937.git.jpoimboe@kernel.org
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cifs: fix warning when destroy 'cifs_io_request_pool' [+ + +]
Author: Ye Bin <yebin10@huawei.com>
Date:   Wed Oct 23 09:24:30 2024 +0800

    cifs: fix warning when destroy 'cifs_io_request_pool'
    
    [ Upstream commit 2ce1007f42b8a6a0814386cb056feb28dc6d6091 ]
    
    There's a issue as follows:
    WARNING: CPU: 1 PID: 27826 at mm/slub.c:4698 free_large_kmalloc+0xac/0xe0
    RIP: 0010:free_large_kmalloc+0xac/0xe0
    Call Trace:
     <TASK>
     ? __warn+0xea/0x330
     mempool_destroy+0x13f/0x1d0
     init_cifs+0xa50/0xff0 [cifs]
     do_one_initcall+0xdc/0x550
     do_init_module+0x22d/0x6b0
     load_module+0x4e96/0x5ff0
     init_module_from_file+0xcd/0x130
     idempotent_init_module+0x330/0x620
     __x64_sys_finit_module+0xb3/0x110
     do_syscall_64+0xc1/0x1d0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Obviously, 'cifs_io_request_pool' is not created by mempool_create().
    So just use mempool_exit() to revert 'cifs_io_request_pool'.
    
    Fixes: edea94a69730 ("cifs: Add mempools for cifs_io_request and cifs_io_subrequest structs")
    Signed-off-by: Ye Bin <yebin10@huawei.com>
    Acked-by: David Howells <dhowells@redhat.com
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

cifs: Validate content of NFS reparse point buffer [+ + +]
Author: Pali Rohár <pali@kernel.org>
Date:   Sat Sep 28 23:59:47 2024 +0200

    cifs: Validate content of NFS reparse point buffer
    
    [ Upstream commit 556ac52bb1e76cc28fd30aa117b42989965b3efd ]
    
    Symlink target location stored in DataBuffer is encoded in UTF-16. So check
    that symlink DataBuffer length is non-zero and even number. And check that
    DataBuffer does not contain UTF-16 null codepoint because Linux cannot
    process symlink with null byte.
    
    DataBuffer for char and block devices is 8 bytes long as it contains two
    32-bit numbers (major and minor). Add check for this.
    
    DataBuffer buffer for sockets and fifos zero-length. Add checks for this.
    
    Signed-off-by: Pali Rohár <pali@kernel.org>
    Reviewed-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clk: rockchip: fix finding of maximum clock ID [+ + +]
Author: Yao Zi <ziyao@disroot.org>
Date:   Thu Sep 12 13:32:05 2024 +0000

    clk: rockchip: fix finding of maximum clock ID
    
    [ Upstream commit ad1081a0da2744141d12e94ff816ac91feb871ca ]
    
    If an ID of a branch's child is greater than current maximum, we should
    set new maximum to the child's ID, instead of its parent's.
    
    Fixes: 2dc66a5ab2c6 ("clk: rockchip: rk3588: fix CLK_NR_CLKS usage")
    Signed-off-by: Yao Zi <ziyao@disroot.org>
    Link: https://lore.kernel.org/r/20240912133204.29089-2-ziyao@disroot.org
    Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Reviewed-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cpufreq/amd-pstate: Fix amd_pstate mode switch on shared memory systems [+ + +]
Author: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
Date:   Fri Oct 4 12:23:04 2024 +0000

    cpufreq/amd-pstate: Fix amd_pstate mode switch on shared memory systems
    
    [ Upstream commit c10e50a469b5ec91eabf653526a22bdce03a9bca ]
    
    While switching the driver mode between active and passive, Collaborative
    Processor Performance Control (CPPC) is disabled in
    amd_pstate_unregister_driver(). But, it is not enabled back while registering
    the new driver (passive or active). This leads to the new driver mode not
    working correctly, so enable it back in amd_pstate_register_driver().
    
    Fixes: 3ca7bc818d8c ("cpufreq: amd-pstate: Add guided mode control support via sysfs")
    Signed-off-by: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
    Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://lore.kernel.org/r/20241004122303.94283-1-Dhananjay.Ugwekar@amd.com
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cpufreq: CPPC: fix perf_to_khz/khz_to_perf conversion exception [+ + +]
Author: liwei <liwei728@huawei.com>
Date:   Thu Oct 24 10:29:52 2024 +0800

    cpufreq: CPPC: fix perf_to_khz/khz_to_perf conversion exception
    
    [ Upstream commit d93df29bdab133b85e94b3c328e7fe26a0ebd56c ]
    
    When the nominal_freq recorded by the kernel is equal to the lowest_freq,
    and the frequency adjustment operation is triggered externally, there is
    a logic error in cppc_perf_to_khz()/cppc_khz_to_perf(), resulting in perf
    and khz conversion errors.
    
    Fix this by adding a branch processing logic when nominal_freq is equal
    to lowest_freq.
    
    Fixes: ec1c7ad47664 ("cpufreq: CPPC: Fix performance/frequency conversion")
    Signed-off-by: liwei <liwei728@huawei.com>
    Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
    Link: https://patch.msgid.link/20241024022952.2627694-1-liwei728@huawei.com
    [ rjw: Subject and changelog edits ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/amdgpu: Fix double unlock in amdgpu_mes_add_ring [+ + +]
Author: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Date:   Tue Oct 8 19:01:48 2024 +0530

    drm/amd/amdgpu: Fix double unlock in amdgpu_mes_add_ring
    
    [ Upstream commit e7457532cb7167516263150ceae86f36d6ef9683 ]
    
    This patch addresses a double unlock issue in the amdgpu_mes_add_ring
    function. The mutex was being unlocked twice under certain error
    conditions, which could lead to undefined behavior.
    
    The fix ensures that the mutex is unlocked only once before jumping to
    the clean_up_memory label. The unlock operation is moved to just before
    the goto statement within the conditional block that checks the return
    value of amdgpu_ring_init. This prevents the second unlock attempt after
    the clean_up_memory label, which is no longer necessary as the mutex is
    already unlocked by this point in the code flow.
    
    This change resolves the potential double unlock and maintains the
    correct mutex handling throughout the function.
    
    Fixes below:
    Commit d0c423b64765 ("drm/amdgpu/mes: use ring for kernel queue
    submission"), leads to the following Smatch static checker warning:
    
            drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c:1240 amdgpu_mes_add_ring()
            warn: double unlock '&adev->mes.mutex_hidden' (orig line 1213)
    
    drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
        1143 int amdgpu_mes_add_ring(struct amdgpu_device *adev, int gang_id,
        1144                         int queue_type, int idx,
        1145                         struct amdgpu_mes_ctx_data *ctx_data,
        1146                         struct amdgpu_ring **out)
        1147 {
        1148         struct amdgpu_ring *ring;
        1149         struct amdgpu_mes_gang *gang;
        1150         struct amdgpu_mes_queue_properties qprops = {0};
        1151         int r, queue_id, pasid;
        1152
        1153         /*
        1154          * Avoid taking any other locks under MES lock to avoid circular
        1155          * lock dependencies.
        1156          */
        1157         amdgpu_mes_lock(&adev->mes);
        1158         gang = idr_find(&adev->mes.gang_id_idr, gang_id);
        1159         if (!gang) {
        1160                 DRM_ERROR("gang id %d doesn't exist\n", gang_id);
        1161                 amdgpu_mes_unlock(&adev->mes);
        1162                 return -EINVAL;
        1163         }
        1164         pasid = gang->process->pasid;
        1165
        1166         ring = kzalloc(sizeof(struct amdgpu_ring), GFP_KERNEL);
        1167         if (!ring) {
        1168                 amdgpu_mes_unlock(&adev->mes);
        1169                 return -ENOMEM;
        1170         }
        1171
        1172         ring->ring_obj = NULL;
        1173         ring->use_doorbell = true;
        1174         ring->is_mes_queue = true;
        1175         ring->mes_ctx = ctx_data;
        1176         ring->idx = idx;
        1177         ring->no_scheduler = true;
        1178
        1179         if (queue_type == AMDGPU_RING_TYPE_COMPUTE) {
        1180                 int offset = offsetof(struct amdgpu_mes_ctx_meta_data,
        1181                                       compute[ring->idx].mec_hpd);
        1182                 ring->eop_gpu_addr =
        1183                         amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
        1184         }
        1185
        1186         switch (queue_type) {
        1187         case AMDGPU_RING_TYPE_GFX:
        1188                 ring->funcs = adev->gfx.gfx_ring[0].funcs;
        1189                 ring->me = adev->gfx.gfx_ring[0].me;
        1190                 ring->pipe = adev->gfx.gfx_ring[0].pipe;
        1191                 break;
        1192         case AMDGPU_RING_TYPE_COMPUTE:
        1193                 ring->funcs = adev->gfx.compute_ring[0].funcs;
        1194                 ring->me = adev->gfx.compute_ring[0].me;
        1195                 ring->pipe = adev->gfx.compute_ring[0].pipe;
        1196                 break;
        1197         case AMDGPU_RING_TYPE_SDMA:
        1198                 ring->funcs = adev->sdma.instance[0].ring.funcs;
        1199                 break;
        1200         default:
        1201                 BUG();
        1202         }
        1203
        1204         r = amdgpu_ring_init(adev, ring, 1024, NULL, 0,
        1205                              AMDGPU_RING_PRIO_DEFAULT, NULL);
        1206         if (r)
        1207                 goto clean_up_memory;
        1208
        1209         amdgpu_mes_ring_to_queue_props(adev, ring, &qprops);
        1210
        1211         dma_fence_wait(gang->process->vm->last_update, false);
        1212         dma_fence_wait(ctx_data->meta_data_va->last_pt_update, false);
        1213         amdgpu_mes_unlock(&adev->mes);
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
        1214
        1215         r = amdgpu_mes_add_hw_queue(adev, gang_id, &qprops, &queue_id);
        1216         if (r)
        1217                 goto clean_up_ring;
                             ^^^^^^^^^^^^^^^^^^
    
        1218
        1219         ring->hw_queue_id = queue_id;
        1220         ring->doorbell_index = qprops.doorbell_off;
        1221
        1222         if (queue_type == AMDGPU_RING_TYPE_GFX)
        1223                 sprintf(ring->name, "gfx_%d.%d.%d", pasid, gang_id, queue_id);
        1224         else if (queue_type == AMDGPU_RING_TYPE_COMPUTE)
        1225                 sprintf(ring->name, "compute_%d.%d.%d", pasid, gang_id,
        1226                         queue_id);
        1227         else if (queue_type == AMDGPU_RING_TYPE_SDMA)
        1228                 sprintf(ring->name, "sdma_%d.%d.%d", pasid, gang_id,
        1229                         queue_id);
        1230         else
        1231                 BUG();
        1232
        1233         *out = ring;
        1234         return 0;
        1235
        1236 clean_up_ring:
        1237         amdgpu_ring_fini(ring);
        1238 clean_up_memory:
        1239         kfree(ring);
    --> 1240         amdgpu_mes_unlock(&adev->mes);
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
        1241         return r;
        1242 }
    
    Fixes: d0c423b64765 ("drm/amdgpu/mes: use ring for kernel queue submission")
    Cc: Christian König <christian.koenig@amd.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Cc: Hawking Zhang <Hawking.Zhang@amd.com>
    Suggested-by: Jack Xiao <Jack.Xiao@amd.com>
    Reported by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
    Reviewed-by: Jack Xiao <Jack.Xiao@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit bfaf1883605fd0c0dbabacd67ed49708470d5ea4)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/display: Disable PSR-SU on Parade 08-01 TCON too [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Mon Feb 5 15:12:33 2024 -0600

    drm/amd/display: Disable PSR-SU on Parade 08-01 TCON too
    
    commit ba1959f71117b27f3099ee789e0815360b4081dd upstream.
    
    Stuart Hayhurst has found that both at bootup and fullscreen VA-API video
    is leading to black screens for around 1 second and kernel WARNING [1] traces
    when calling dmub_psr_enable() with Parade 08-01 TCON.
    
    These symptoms all go away with PSR-SU disabled for this TCON, so disable
    it for now while DMUB traces [2] from the failure can be analyzed and the failure
    state properly root caused.
    
    Cc: Marc Rossi <Marc.Rossi@amd.com>
    Cc: Hamza Mahfooz <Hamza.Mahfooz@amd.com>
    Link: https://gitlab.freedesktop.org/drm/amd/uploads/a832dd515b571ee171b3e3b566e99a13/dmesg.log [1]
    Link: https://gitlab.freedesktop.org/drm/amd/uploads/8f13ff3b00963c833e23e68aa8116959/output.log [2]
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/2645
    Reviewed-by: Leo Li <sunpeng.li@amd.com>
    Link: https://lore.kernel.org/r/20240205211233.2601-1-mario.limonciello@amd.com
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit afb634a6823d8d9db23c5fb04f79c5549349628b)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: temp w/a for DP Link Layer compliance [+ + +]
Author: Aurabindo Pillai <aurabindo.pillai@amd.com>
Date:   Mon Oct 7 14:19:32 2024 -0400

    drm/amd/display: temp w/a for DP Link Layer compliance
    
    commit 63feb35cd26557572ad95fc062ede344bb61d9ad upstream.
    
    [Why&How]
    Disabling P-State support on full updates for DCN401 results in
    introducing additional communication with SMU. A UCLK hard min message
    to SMU takes 4 seconds to go through, which was due to DCN not allowing
    pstate switch, which was caused by incorrect value for TTU watermark
    before blanking the HUBP prior to DPG on for servicing the test request.
    
    Fix the issue temporarily by disallowing pstate changes for compliance
    test while test request handler is reworked for a proper fix.
    
    Fixes: 67ea53a4bd9d ("drm/amd/display: Disable DCN401 UCLK P-State support on full updates")
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Dillon Varone <dillon.varone@amd.com>
    Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
    Signed-off-by: Wayne Lin <wayne.lin@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 8a79f7cdbb41bb0ddfd4d7662b4428d4a9d5306d)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd: Guard against bad data for ATIF ACPI method [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Fri Oct 11 12:23:15 2024 -0500

    drm/amd: Guard against bad data for ATIF ACPI method
    
    commit bf58f03931fdcf7b3c45cb76ac13244477a60f44 upstream.
    
    If a BIOS provides bad data in response to an ATIF method call
    this causes a NULL pointer dereference in the caller.
    
    ```
    ? show_regs (arch/x86/kernel/dumpstack.c:478 (discriminator 1))
    ? __die (arch/x86/kernel/dumpstack.c:423 arch/x86/kernel/dumpstack.c:434)
    ? page_fault_oops (arch/x86/mm/fault.c:544 (discriminator 2) arch/x86/mm/fault.c:705 (discriminator 2))
    ? do_user_addr_fault (arch/x86/mm/fault.c:440 (discriminator 1) arch/x86/mm/fault.c:1232 (discriminator 1))
    ? acpi_ut_update_object_reference (drivers/acpi/acpica/utdelete.c:642)
    ? exc_page_fault (arch/x86/mm/fault.c:1542)
    ? asm_exc_page_fault (./arch/x86/include/asm/idtentry.h:623)
    ? amdgpu_atif_query_backlight_caps.constprop.0 (drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c:387 (discriminator 2)) amdgpu
    ? amdgpu_atif_query_backlight_caps.constprop.0 (drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c:386 (discriminator 1)) amdgpu
    ```
    
    It has been encountered on at least one system, so guard for it.
    
    Fixes: d38ceaf99ed0 ("drm/amdgpu: add core driver (v4)")
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit c9b7c809b89f24e9372a4e7f02d64c950b07fdee)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/bridge: Fix assignment of the of_node of the parent to aux bridge [+ + +]
Author: Abel Vesa <abel.vesa@linaro.org>
Date:   Fri Oct 18 15:49:34 2024 +0300

    drm/bridge: Fix assignment of the of_node of the parent to aux bridge
    
    commit 85e444a68126a631221ae32c63fce882bb18a262 upstream.
    
    The assignment of the of_node to the aux bridge needs to mark the
    of_node as reused as well, otherwise resource providers like pinctrl will
    report a gpio as already requested by a different device when both pinconf
    and gpios property are present.
    Fix that by using the device_set_of_node_from_dev() helper instead.
    
    Fixes: 6914968a0b52 ("drm/bridge: properly refcount DT nodes in aux bridge drivers")
    Cc: stable@vger.kernel.org      # 6.8
    Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20241018-drm-aux-bridge-mark-of-node-reused-v2-1-aeed1b445c7d@linaro.org
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241018-drm-aux-bridge-mark-of-node-reused-v2-1-aeed1b445c7d@linaro.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/msm/a6xx+: Insert a fence wait before SMMU table update [+ + +]
Author: Rob Clark <robdclark@chromium.org>
Date:   Tue Oct 15 15:13:34 2024 -0700

    drm/msm/a6xx+: Insert a fence wait before SMMU table update
    
    [ Upstream commit 77ad507dbb7ec1ecd60fc081d03616960ef596fd ]
    
    The CP_SMMU_TABLE_UPDATE _should_ be waiting for idle, but on some
    devices (x1-85, possibly others), it seems to pass that barrier while
    there are still things in the event completion FIFO waiting to be
    written back to memory.
    
    Work around that by adding a fence wait before context switch.  The
    CP_EVENT_WRITE that writes the fence is the last write from a submit,
    so seeing this value hit memory is a reliable indication that it is
    safe to proceed with the context switch.
    
    v2: Only emit CP_WAIT_TIMESTAMP on a7xx, as it is not supported on a6xx.
        Conversely, I've not been able to reproduce this issue on a6xx, so
        hopefully it is limited to a7xx, or perhaps just certain a7xx
        devices.
    
    Fixes: af66706accdf ("drm/msm/a6xx: Add skeleton A7xx support")
    Closes: https://gitlab.freedesktop.org/drm/msm/-/issues/63
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Reviewed-by: Akhil P Oommen <quic_akhilpo@quicinc.com>
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm/dpu: check for overflow in _dpu_crtc_setup_lm_bounds() [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Tue Sep 3 06:22:46 2024 +0300

    drm/msm/dpu: check for overflow in _dpu_crtc_setup_lm_bounds()
    
    [ Upstream commit 3a0851b442d1f63ba42ecfa2506d3176cfabf9d4 ]
    
    Make _dpu_crtc_setup_lm_bounds() check that CRTC width is not
    overflowing LM requirements. Rename the function accordingly.
    
    Fixes: 25fdd5933e4c ("drm/msm: Add SDM845 DPU support")
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Tested-by: Abhinav Kumar <quic_abhinavk@quicinc.com> # sc7280
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Patchwork: https://patchwork.freedesktop.org/patch/612237/
    Link: https://lore.kernel.org/r/20240903-dpu-mode-config-width-v6-3-617e1ecc4b7a@linaro.org
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm/dpu: don't always program merge_3d block [+ + +]
Author: Jessica Zhang <quic_jesszhan@quicinc.com>
Date:   Wed Oct 9 20:46:19 2024 -0700

    drm/msm/dpu: don't always program merge_3d block
    
    [ Upstream commit f87f3b80abaf7949e638dd17dfdc267066eb52d5 ]
    
    Only program the merge_3d block for the video phys encoder when the 3d
    blend mode is not NONE
    
    Fixes: 3e79527a33a8 ("drm/msm/dpu: enable merge_3d support on sm8150/sm8250")
    Suggested-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/619095/
    Link: https://lore.kernel.org/r/20241009-merge3d-fix-v1-1-0d0b6f5c244e@quicinc.com
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm/dpu: Don't always set merge_3d pending flush [+ + +]
Author: Jessica Zhang <quic_jesszhan@quicinc.com>
Date:   Wed Oct 9 20:41:13 2024 -0700

    drm/msm/dpu: Don't always set merge_3d pending flush
    
    [ Upstream commit 40dad89cb86ce824f2080441b2a6b7aedf695329 ]
    
    Don't set the merge_3d pending flush bits if the mode_3d is
    BLEND_3D_NONE.
    
    Always flushing merge_3d can cause timeout issues when there are
    multiple commits with concurrent writeback enabled.
    
    This is because the video phys enc waits for the hw_ctl flush register
    to be completely cleared [1] in its wait_for_commit_done(), but the WB
    encoder always sets the merge_3d pending flush during each commit
    regardless of if the merge_3d is actually active.
    
    This means that the hw_ctl flush register will never be 0 when there are
    multiple CWB commits and the video phys enc will hit vblank timeout
    errors after the first CWB commit.
    
    [1] commit fe9df3f50c39 ("drm/msm/dpu: add real wait_for_commit_done()")
    
    Fixes: 3e79527a33a8 ("drm/msm/dpu: enable merge_3d support on sm8150/sm8250")
    Fixes: d7d0e73f7de3 ("drm/msm/dpu: introduce the dpu_encoder_phys_* for writeback")
    Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Patchwork: https://patchwork.freedesktop.org/patch/619092/
    Link: https://lore.kernel.org/r/20241009-mode3d-fix-v1-1-c0258354fadc@quicinc.com
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm/dpu: make sure phys resources are properly initialized [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Tue Sep 3 06:22:44 2024 +0300

    drm/msm/dpu: make sure phys resources are properly initialized
    
    [ Upstream commit bfecbc2cfba9b06d67d9d249c33d92e570e2fa70 ]
    
    The commit b954fa6baaca ("drm/msm/dpu: Refactor rm iterator") removed
    zero-init of the hw_ctl array, but didn't change the error condition,
    that checked for hw_ctl[i] being NULL. At the same time because of the
    early returns in case of an error dpu_encoder_phys might be left with
    the resources assigned in the previous state. Rework assigning of hw_pp
    / hw_ctl to the dpu_encoder_phys in order to make sure they are always
    set correctly.
    
    Fixes: b954fa6baaca ("drm/msm/dpu: Refactor rm iterator")
    Suggested-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/612233/
    Link: https://lore.kernel.org/r/20240903-dpu-mode-config-width-v6-1-617e1ecc4b7a@linaro.org
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm/dpu: move CRTC resource assignment to dpu_encoder_virt_atomic_check [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Tue Sep 3 06:22:45 2024 +0300

    drm/msm/dpu: move CRTC resource assignment to dpu_encoder_virt_atomic_check
    
    [ Upstream commit 3ae133b0192b9b0c9f560bbc096887053150195f ]
    
    Historically CRTC resources (LMs and CTLs) were assigned in
    dpu_crtc_atomic_begin(). The commit 9222cdd27e82 ("drm/msm/dpu: move hw
    resource tracking to crtc state") simply moved resources to
    struct dpu_crtc_state, without changing the code sequence. Later on the
    commit b107603b4ad0 ("drm/msm/dpu: map mixer/ctl hw blocks in encoder
    modeset") rearanged the code, but still kept the cstate->num_mixers
    assignment to happen during commit phase. This makes dpu_crtc_state
    inconsistent between consequent atomic_check() calls.
    
    Move CRTC resource assignment to happen at the end of
    dpu_encoder_virt_atomic_check().
    
    Fixes: b107603b4ad0 ("drm/msm/dpu: map mixer/ctl hw blocks in encoder modeset")
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/612235/
    Link: https://lore.kernel.org/r/20240903-dpu-mode-config-width-v6-2-617e1ecc4b7a@linaro.org
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm/dsi: fix 32-bit signed integer extension in pclk_rate calculation [+ + +]
Author: Jonathan Marek <jonathan@marek.ca>
Date:   Mon Oct 7 01:01:49 2024 -0400

    drm/msm/dsi: fix 32-bit signed integer extension in pclk_rate calculation
    
    [ Upstream commit 358b762400bd94db2a14a72dfcef74c7da6bd845 ]
    
    When (mode->clock * 1000) is larger than (1<<31), int to unsigned long
    conversion will sign extend the int to 64 bits and the pclk_rate value
    will be incorrect.
    
    Fix this by making the result of the multiplication unsigned.
    
    Note that above (1<<32) would still be broken and require more changes, but
    its unlikely anyone will need that anytime soon.
    
    Fixes: c4d8cfe516dc ("drm/msm/dsi: add implementation for helper functions")
    Signed-off-by: Jonathan Marek <jonathan@marek.ca>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/618434/
    Link: https://lore.kernel.org/r/20241007050157.26855-2-jonathan@marek.ca
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm/dsi: improve/fix dsc pclk calculation [+ + +]
Author: Jonathan Marek <jonathan@marek.ca>
Date:   Mon Oct 7 01:01:48 2024 -0400

    drm/msm/dsi: improve/fix dsc pclk calculation
    
    [ Upstream commit 24436a540d16ca6a523b8e5441180001c31b6b35 ]
    
    drm_mode_vrefresh() can introduce a large rounding error, avoid it.
    
    Fixes: 7c9e4a554d4a ("drm/msm/dsi: Reduce pclk rate for compression")
    Signed-off-by: Jonathan Marek <jonathan@marek.ca>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/618432/
    Link: https://lore.kernel.org/r/20241007050157.26855-1-jonathan@marek.ca
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm: Allocate memory for disp snapshot with kvzalloc() [+ + +]
Author: Douglas Anderson <dianders@chromium.org>
Date:   Mon Oct 14 09:36:09 2024 -0700

    drm/msm: Allocate memory for disp snapshot with kvzalloc()
    
    [ Upstream commit e4a45582db1b792c57bdb52c45958264f7fcfbdc ]
    
    With the "drm/msm: add a display mmu fault handler" series [1] we saw
    issues in the field where memory allocation was failing when
    allocating space for registers in msm_disp_state_dump_regs().
    Specifically we were seeing an order 5 allocation fail. It's not
    surprising that order 5 allocations will sometimes fail after the
    system has been up and running for a while.
    
    There's no need here for contiguous memory. Change the allocation to
    kvzalloc() which should make it much less likely to fail.
    
    [1] https://lore.kernel.org/r/20240628214848.4075651-1-quic_abhinavk@quicinc.com/
    
    Fixes: 98659487b845 ("drm/msm: add support to take dpu snapshot")
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/619658/
    Link: https://lore.kernel.org/r/20241014093605.2.I72441365ffe91f3dceb17db0a8ec976af8139590@changeid
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm: Avoid NULL dereference in msm_disp_state_print_regs() [+ + +]
Author: Douglas Anderson <dianders@chromium.org>
Date:   Mon Oct 14 09:36:08 2024 -0700

    drm/msm: Avoid NULL dereference in msm_disp_state_print_regs()
    
    [ Upstream commit 293f53263266bc4340d777268ab4328a97f041fa ]
    
    If the allocation in msm_disp_state_dump_regs() failed then
    `block->state` can be NULL. The msm_disp_state_print_regs() function
    _does_ have code to try to handle it with:
    
      if (*reg)
        dump_addr = *reg;
    
    ...but since "dump_addr" is initialized to NULL the above is actually
    a noop. The code then goes on to dereference `dump_addr`.
    
    Make the function print "Registers not stored" when it sees a NULL to
    solve this. Since we're touching the code, fix
    msm_disp_state_print_regs() not to pointlessly take a double-pointer
    and properly mark the pointer as `const`.
    
    Fixes: 98659487b845 ("drm/msm: add support to take dpu snapshot")
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/619657/
    Link: https://lore.kernel.org/r/20241014093605.1.Ia1217cecec9ef09eb3c6d125360cc6c8574b0e73@changeid
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/panel: himax-hx83102: Adjust power and gamma to optimize brightness [+ + +]
Author: Cong Yang <yangcong5@huaqin.corp-partner.google.com>
Date:   Fri Oct 11 10:08:19 2024 +0800

    drm/panel: himax-hx83102: Adjust power and gamma to optimize brightness
    
    [ Upstream commit fcf38bc321fbc87dfcd829f42e64e541f17599f7 ]
    
    The current panel brightness is only 360 nit. Adjust the power and gamma to
    optimize the panel brightness. The brightness after adjustment is 390 nit.
    
    Fixes: 3179338750d8 ("drm/panel: himax-hx83102: Support for IVO t109nw41 MIPI-DSI panel")
    Signed-off-by: Cong Yang <yangcong5@huaqin.corp-partner.google.com>
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241011020819.1254157-1-yangcong5@huaqin.corp-partner.google.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/vboxvideo: Replace fake VLA at end of vbva_mouse_pointer_shape with real VLA [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Tue Aug 27 12:45:23 2024 +0200

    drm/vboxvideo: Replace fake VLA at end of vbva_mouse_pointer_shape with real VLA
    
    [ Upstream commit d92b90f9a54d9300a6e883258e79f36dab53bfae ]
    
    Replace the fake VLA at end of the vbva_mouse_pointer_shape shape with
    a real VLA to fix a "memcpy: detected field-spanning write error" warning:
    
    [   13.319813] memcpy: detected field-spanning write (size 16896) of single field "p->data" at drivers/gpu/drm/vboxvideo/hgsmi_base.c:154 (size 4)
    [   13.319841] WARNING: CPU: 0 PID: 1105 at drivers/gpu/drm/vboxvideo/hgsmi_base.c:154 hgsmi_update_pointer_shape+0x192/0x1c0 [vboxvideo]
    [   13.320038] Call Trace:
    [   13.320173]  hgsmi_update_pointer_shape [vboxvideo]
    [   13.320184]  vbox_cursor_atomic_update [vboxvideo]
    
    Note as mentioned in the added comment it seems the original length
    calculation for the allocated and send hgsmi buffer is 4 bytes too large.
    Changing this is not the goal of this patch, so this behavior is kept.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Reviewed-by: Jani Nikula <jani.nikula@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240827104523.17442-1-hdegoede@redhat.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/vmwgfx: Handle possible ENOMEM in vmw_stdu_connector_atomic_check [+ + +]
Author: Ian Forbes <ian.forbes@broadcom.com>
Date:   Fri Aug 9 13:37:56 2024 -0500

    drm/vmwgfx: Handle possible ENOMEM in vmw_stdu_connector_atomic_check
    
    [ Upstream commit 4809a017a2bc42ff239d53ade4b2e70f2fe81348 ]
    
    Handle unlikely ENOMEN condition and other errors in
    vmw_stdu_connector_atomic_check.
    
    Signed-off-by: Ian Forbes <ian.forbes@broadcom.com>
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Fixes: 75c3e8a26a35 ("drm/vmwgfx: Trigger a modeset when the screen moves")
    Reviewed-by: Zack Rusin <zack.rusin@broadcom.com>
    Reviewed-by: Martin Krastev <martin.krastev@broadcom.com>
    Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240809183756.27283-1-ian.forbes@broadcom.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/xe/mcr: Use Xe2_LPM steering tables for Xe2_HPM [+ + +]
Author: Gustavo Sousa <gustavo.sousa@intel.com>
Date:   Fri Sep 20 18:13:15 2024 -0300

    drm/xe/mcr: Use Xe2_LPM steering tables for Xe2_HPM
    
    [ Upstream commit 7929ffce0f8b9c76cb5c2a67d1966beaed20ab61 ]
    
    According to Bspec, Xe2 steering tables must be used for Xe2_HPM, just
    as it is with Xe2_LPM. Update our driver to reflect that.
    
    Bspec: 71186
    Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
    Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
    Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
    Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240920211459.255181-2-gustavo.sousa@intel.com
    (cherry picked from commit 21ae035ae5c33ef176f4062bd9d4aa973dde240b)
    Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/xe: Don't free job in TDR [+ + +]
Author: Matthew Brost <matthew.brost@intel.com>
Date:   Wed Oct 2 17:16:57 2024 -0700

    drm/xe: Don't free job in TDR
    
    [ Upstream commit 82926f52d7a09c65d916c0ef8d4305fc95d68c0c ]
    
    Freeing job in TDR is not safe as TDR can pass the run_job thread
    resulting in UAF. It is only safe for free job to naturally be called by
    the scheduler. Rather free job in TDR, add to pending list.
    
    Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2811
    Cc: Matthew Auld <matthew.auld@intel.com>
    Fixes: e275d61c5f3f ("drm/xe/guc: Handle timing out of signaled jobs gracefully")
    Signed-off-by: Matthew Brost <matthew.brost@intel.com>
    Reviewed-by: Matthew Auld <matthew.auld@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241003001657.3517883-3-matthew.brost@intel.com
    (cherry picked from commit ea2f6a77d0c40d97f4a4dc93fee4afe15d94926d)
    Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/xe: fix unbalanced rpm put() with declare_wedged() [+ + +]
Author: Matthew Auld <matthew.auld@intel.com>
Date:   Wed Oct 9 09:48:10 2024 +0100

    drm/xe: fix unbalanced rpm put() with declare_wedged()
    
    [ Upstream commit 761f916af44279a99db4e78c5f5ee839b31107ea ]
    
    Technically the or_reset() means we call the action on failure, however
    that would lead to unbalanced rpm put(). Move the get() earlier to fix
    this. It should be extremely unlikely to ever trigger this in practice.
    
    Fixes: 90936a0a4c54 ("drm/xe: Don't suspend device upon wedge")
    Signed-off-by: Matthew Auld <matthew.auld@intel.com>
    Cc: Matthew Brost <matthew.brost@intel.com>
    Cc: Nirmoy Das <nirmoy.das@intel.com>
    Reviewed-by: Matthew Brost <matthew.brost@intel.com>
    Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241009084808.204432-4-matthew.auld@intel.com
    (cherry picked from commit a187c1b0a800565a4db6372268692aff99df7f53)
    Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/xe: fix unbalanced rpm put() with fence_fini() [+ + +]
Author: Matthew Auld <matthew.auld@intel.com>
Date:   Wed Oct 9 09:48:09 2024 +0100

    drm/xe: fix unbalanced rpm put() with fence_fini()
    
    [ Upstream commit 03a86c24aea0920a1ca20a0d7771d5e176db538d ]
    
    Currently we can call fence_fini() twice if something goes wrong when
    sending the GuC CT for the tlb request, since we signal the fence and
    return an error, leading to the caller also calling fini() on the error
    path in the case of stack version of the flow, which leads to an extra
    rpm put() which might later cause device to enter suspend when it
    shouldn't. It looks like we can just drop the fini() call since the
    fence signaller side will already call this for us.
    
    There are known mysterious splats with device going to sleep even with
    an rpm ref, and this could be one candidate.
    
    v2 (Matt B):
      - Prefer warning if we detect double fini()
    
    Fixes: f002702290fc ("drm/xe: Hold a PM ref when GT TLB invalidations are inflight")
    Signed-off-by: Matthew Auld <matthew.auld@intel.com>
    Cc: Matthew Brost <matthew.brost@intel.com>
    Cc: Nirmoy Das <nirmoy.das@intel.com>
    Reviewed-by: Matthew Brost <matthew.brost@intel.com>
    Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241009084808.204432-3-matthew.auld@intel.com
    (cherry picked from commit cfcbc0520d5055825f0647ab922b655688605183)
    Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/xe: Take job list lock in xe_sched_add_pending_job [+ + +]
Author: Matthew Brost <matthew.brost@intel.com>
Date:   Wed Oct 2 17:16:56 2024 -0700

    drm/xe: Take job list lock in xe_sched_add_pending_job
    
    [ Upstream commit ed931fb40e353586f26c3327813d142f782f5f78 ]
    
    A fragile micro optimization in xe_sched_add_pending_job relied on both
    the GPU scheduler being stopped and fence signaling stopped to safely
    add a job to the pending list without the job list lock in
    xe_sched_add_pending_job. Remove this optimization and just take the job
    list lock.
    
    Fixes: 7ddb9403dd74 ("drm/xe: Sample ctx timestamp to determine if jobs have timed out")
    Signed-off-by: Matthew Brost <matthew.brost@intel.com>
    Reviewed-by: Matthew Auld <matthew.auld@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241003001657.3517883-2-matthew.brost@intel.com
    (cherry picked from commit 90521df5fc43980e4575bd8c5b1cb62afe1a9f5f)
    Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/xe: Use bookkeep slots for external BO's in exec IOCTL [+ + +]
Author: Matthew Brost <matthew.brost@intel.com>
Date:   Wed Sep 11 08:26:22 2024 -0700

    drm/xe: Use bookkeep slots for external BO's in exec IOCTL
    
    [ Upstream commit e7518276e9388d36f103e8c1c7e99898a30d11f5 ]
    
    Fix external BO's dma-resv usage in exec IOCTL using bookkeep slots
    rather than write slots. This leaves syncing to user space rather than
    the KMD blindly enforcing write semantics on every external BO.
    
    Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
    Cc: José Roberto de Souza <jose.souza@intel.com>
    Cc: Kenneth Graunke <kenneth.w.graunke@intel.com>
    Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
    Reported-by: Simona Vetter <simona.vetter@ffwll.ch>
    Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2673
    Signed-off-by: Matthew Brost <matthew.brost@intel.com>
    Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
    Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240911152622.903058-1-matthew.brost@intel.com
    (cherry picked from commit b8b1163248759ba18509f7443a2d19b15b4c1df8)
    Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
elevator: do not request_module if elevator exists [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Fri Oct 11 10:01:21 2024 -0700

    elevator: do not request_module if elevator exists
    
    [ Upstream commit b4ff6e93bfd0093ce3ffc7322e89fbaa8300488f ]
    
    Whenever an I/O elevator is changed, the system attempts to load a
    module for the new elevator. This occurs regardless of whether the
    elevator is already loaded or built directly into the kernel. This
    behavior introduces unnecessary overhead and potential issues.
    
    This makes the operation slower, and more error-prone. For instance,
    making the problem fixed by [1] visible for users that doesn't even rely
    on modules being available through modules.
    
    Do not try to load the ioscheduler if it is already visible.
    
    This change brings two main benefits: it improves the performance of
    elevator changes, and it reduces the likelihood of errors occurring
    during this process.
    
    [1] Commit e3accac1a976 ("block: Fix elv_iosched_local_module handling of "none" scheduler")
    
    Fixes: 734e1a860312 ("block: Prevent deadlocks when switching elevators")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Link: https://lore.kernel.org/r/20241011170122.3880087-1-leitao@debian.org
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

elevator: Remove argument from elevator_find_get [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Fri Oct 11 08:56:15 2024 -0700

    elevator: Remove argument from elevator_find_get
    
    [ Upstream commit ee7ff15bf507d4cf9a2b11b00690dfe6046ad325 ]
    
    Commit e4eb37cc0f3ed ("block: Remove elevator required features")
    removed the usage of `struct request_queue` from elevator_find_get(),
    but didn't removed the argument.
    
    Remove the "struct request_queue *q" argument from elevator_find_get()
    given it is useless.
    
    Fixes: e4eb37cc0f3e ("block: Remove elevator required features")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Link: https://lore.kernel.org/r/20241011155615.3361143-1-leitao@debian.org
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fbdev: wm8505fb: select CONFIG_FB_IOMEM_FOPS [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Fri Oct 18 15:12:49 2024 +0000

    fbdev: wm8505fb: select CONFIG_FB_IOMEM_FOPS
    
    [ Upstream commit 51521d2e2c35959cc70a62ccddf694965e29c950 ]
    
    The fb_io_mmap() function is used in the file operations but
    not enabled in all configurations unless FB_IOMEM_FOPS gets
    selected:
    
    ld.lld-20: error: undefined symbol: fb_io_mmap
       referenced by wm8505fb.c
       drivers/video/fbdev/wm8505fb.o:(wm8505fb_ops) in archive vmlinux.a
    
    Fixes: 11754a504608 ("fbdev/wm8505fb: Initialize fb_ops to fbdev I/O-memory helpers")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fgraph: Allocate ret_stack_list with proper size [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Fri Oct 18 21:52:12 2024 -0400

    fgraph: Allocate ret_stack_list with proper size
    
    [ Upstream commit fae4078c289a2f24229c0de652249948b1cd6bdb ]
    
    The ret_stack_list is an array of ret_stack shadow stacks for the function
    graph usage. When the first function graph is enabled, all tasks in the
    system get a shadow stack. The ret_stack_list is a 32 element array of
    pointers to these shadow stacks. It allocates the shadow stack in batches
    (32 stacks at a time), assigns them to running tasks, and continues until
    all tasks are covered.
    
    When the function graph shadow stack changed from an array of
    ftrace_ret_stack structures to an array of longs, the allocation of
    ret_stack_list went from allocating an array of 32 elements to just a
    block defined by SHADOW_STACK_SIZE. Luckily, that's defined as PAGE_SIZE
    and is much more than enough to hold 32 pointers. But it is way overkill
    for the amount needed to allocate.
    
    Change the allocation of ret_stack_list back to a kcalloc() of
    FTRACE_RETSTACK_ALLOC_SIZE pointers.
    
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://lore.kernel.org/20241018215212.23f13f40@rorschach
    Fixes: 42675b723b484 ("function_graph: Convert ret_stack to a series of longs")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fgraph: Change the name of cpuhp state to "fgraph:online" [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Thu Oct 24 22:29:44 2024 -0400

    fgraph: Change the name of cpuhp state to "fgraph:online"
    
    [ Upstream commit a574e7f80e86c740e241c762923f50077b2c2a30 ]
    
    The cpuhp state name given to cpuhp_setup_state() is "fgraph_idle_init"
    which doesn't really conform to the names that are used for cpu hotplug
    setups. Instead rename it to "fgraph:online" to be in line with other
    states.
    
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/20241024222944.473d88c5@rorschach.local.home
    Suggested-by: Masami Hiramatsu <mhiramat@kernel.org>
    Fixes: 2c02f7375e658 ("fgraph: Use CPU hotplug mechanism to initialize idle shadow stacks")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fgraph: Fix missing unlock in register_ftrace_graph() [+ + +]
Author: Li Huafei <lihuafei1@huawei.com>
Date:   Thu Oct 24 23:59:17 2024 +0800

    fgraph: Fix missing unlock in register_ftrace_graph()
    
    [ Upstream commit bd3734db86e01e20dd239a40b419059a0ce9c901 ]
    
    Use guard(mutex)() to acquire and automatically release ftrace_lock,
    fixing the issue of not unlocking when calling cpuhp_setup_state()
    fails.
    
    Fixes smatch warning:
    
    kernel/trace/fgraph.c:1317 register_ftrace_graph() warn: inconsistent returns '&ftrace_lock'.
    
    Link: https://lore.kernel.org/20241024155917.1019580-1-lihuafei1@huawei.com
    Fixes: 2c02f7375e65 ("fgraph: Use CPU hotplug mechanism to initialize idle shadow stacks")
    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Closes: https://lore.kernel.org/r/202410220121.wxg0olfd-lkp@intel.com/
    Suggested-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Li Huafei <lihuafei1@huawei.com>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
firewire: core: fix invalid port index for parent device [+ + +]
Author: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Date:   Fri Oct 25 12:41:37 2024 +0900

    firewire: core: fix invalid port index for parent device
    
    commit f6a6780e0b9bbcf311a727afed06fee533a5e957 upstream.
    
    In a commit 24b7f8e5cd65 ("firewire: core: use helper functions for self
    ID sequence"), the enumeration over self ID sequence was refactored with
    some helper functions with KUnit tests. These helper functions are
    guaranteed to work expectedly by the KUnit tests, however their application
    includes a mistake to assign invalid value to the index of port connected
    to parent device.
    
    This bug affects the case that any extra node devices which has three or
    more ports are connected to 1394 OHCI controller. In the case, the path
    to update the tree cache could hits WARN_ON(), and gets general protection
    fault due to the access to invalid address computed by the invalid value.
    
    This commit fixes the bug to assign correct port index.
    
    Cc: stable@vger.kernel.org
    Reported-by: Edmund Raile <edmund.raile@proton.me>
    Closes: https://lore.kernel.org/lkml/8a9902a4ece9329af1e1e42f5fea76861f0bf0e8.camel@proton.me/
    Fixes: 24b7f8e5cd65 ("firewire: core: use helper functions for self ID sequence")
    Link: https://lore.kernel.org/r/20241025034137.99317-1-o-takashi@sakamocchi.jp
    Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
firmware: arm_scmi: Fix the double free in scmi_debugfs_common_setup() [+ + +]
Author: Su Hui <suhui@nfschina.com>
Date:   Fri Oct 11 18:40:02 2024 +0800

    firmware: arm_scmi: Fix the double free in scmi_debugfs_common_setup()
    
    [ Upstream commit 39b13dce1a91cdfc3bec9238f9e89094551bd428 ]
    
    Clang static checker(scan-build) throws below warning:
      |  drivers/firmware/arm_scmi/driver.c:line 2915, column 2
      |        Attempt to free released memory.
    
    When devm_add_action_or_reset() fails, scmi_debugfs_common_cleanup()
    will run twice which causes double free of 'dbg->name'.
    
    Remove the redundant scmi_debugfs_common_cleanup() to fix this problem.
    
    Fixes: c3d4aed763ce ("firmware: arm_scmi: Populate a common SCMI debugfs root")
    Signed-off-by: Su Hui <suhui@nfschina.com>
    Reviewed-by: Cristian Marussi <cristian.marussi@arm.com>
    Message-Id: <20241011104001.1546476-1-suhui@nfschina.com>
    Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

firmware: arm_scmi: Queue in scmi layer for mailbox implementation [+ + +]
Author: Justin Chen <justin.chen@broadcom.com>
Date:   Mon Oct 14 09:07:17 2024 -0700

    firmware: arm_scmi: Queue in scmi layer for mailbox implementation
    
    [ Upstream commit da1642bc97c4ef67f347edcd493bd0a52f88777b ]
    
    send_message() does not block in the MBOX implementation. This is
    because the mailbox layer has its own queue. However, this confuses
    the per xfer timeouts as they all start their timeout ticks in
    parallel.
    
    Consider a case where the xfer timeout is 30ms and a SCMI transaction
    takes 25ms:
    
      | 0ms: Message #0 is queued in mailbox layer and sent out, then sits
      |      at scmi_wait_for_message_response() with a timeout of 30ms
      | 1ms: Message #1 is queued in mailbox layer but not sent out yet.
      |      Since send_message() doesn't block, it also sits at
      |      scmi_wait_for_message_response() with a timeout of 30ms
      |  ...
      | 25ms: Message #0 is completed, txdone is called and message #1 is sent
      | 31ms: Message #1 times out since the count started at 1ms. Even though
      |       it has only been inflight for 6ms.
    
    Fixes: 5c8a47a5a91d ("firmware: arm_scmi: Make scmi core independent of the transport type")
    Signed-off-by: Justin Chen <justin.chen@broadcom.com>
    Message-Id: <20241014160717.1678953-1-justin.chen@broadcom.com>
    Reviewed-by: Cristian Marussi <cristian.marussi@arm.com>
    Tested-by: Cristian Marussi <cristian.marussi@arm.com>
    Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs: don't try and remove empty rbtree node [+ + +]
Author: Christian Brauner <brauner@kernel.org>
Date:   Wed Oct 16 19:49:48 2024 +0200

    fs: don't try and remove empty rbtree node
    
    commit 229fd15908fe1f99b1de4cde3326e62d1e892611 upstream.
    
    When copying a namespace we won't have added the new copy into the
    namespace rbtree until after the copy succeeded. Calling free_mnt_ns()
    will try to remove the copy from the rbtree which is invalid. Simply
    free the namespace skeleton directly.
    
    Link: https://lore.kernel.org/r/20241016-adapter-seilwinde-83c508a7bde1@brauner
    Fixes: 1901c92497bd ("fs: keep an index of current mount namespaces")
    Tested-by: Brad Spengler <spender@grsecurity.net>
    Cc: stable@vger.kernel.org # v6.11+
    Reported-by: Brad Spengler <spender@grsecurity.net>
    Suggested-by: Brad Spengler <spender@grsecurity.net>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fs: pass offset and result to backing_file end_write() callback [+ + +]
Author: Amir Goldstein <amir73il@gmail.com>
Date:   Mon Oct 14 21:27:58 2024 +0200

    fs: pass offset and result to backing_file end_write() callback
    
    [ Upstream commit f03b296e8b516dbd63f57fc9056c1b0da1b9a0ff ]
    
    This is needed for extending fuse inode size after fuse passthrough write.
    
    Suggested-by: Miklos Szeredi <miklos@szeredi.hu>
    Link: https://lore.kernel.org/linux-fsdevel/CAJfpegs=cvZ_NYy6Q_D42XhYS=Sjj5poM1b5TzXzOVvX=R36aA@mail.gmail.com/
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Stable-dep-of: 20121d3f58f0 ("fuse: update inode size after extending passthrough write")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fsl/fman: Fix refcount handling of fman-related devices [+ + +]
Author: Aleksandr Mishin <amishin@t-argos.ru>
Date:   Tue Oct 15 09:01:22 2024 +0300

    fsl/fman: Fix refcount handling of fman-related devices
    
    [ Upstream commit 1dec67e0d9fbb087c2ab17bf1bd17208231c3bb1 ]
    
    In mac_probe() there are multiple calls to of_find_device_by_node(),
    fman_bind() and fman_port_bind() which takes references to of_dev->dev.
    Not all references taken by these calls are released later on error path
    in mac_probe() and in mac_remove() which lead to reference leaks.
    
    Add references release.
    
    Fixes: 3933961682a3 ("fsl/fman: Add FMan MAC driver")
    Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fsl/fman: Save device references taken in mac_probe() [+ + +]
Author: Aleksandr Mishin <amishin@t-argos.ru>
Date:   Tue Oct 15 09:01:21 2024 +0300

    fsl/fman: Save device references taken in mac_probe()
    
    [ Upstream commit efeddd552ec6767e4c8884caa516ac80b65f8823 ]
    
    In mac_probe() there are calls to of_find_device_by_node() which takes
    references to of_dev->dev. These references are not saved and not released
    later on error path in mac_probe() and in mac_remove().
    
    Add new fields into mac_device structure to save references taken for
    future use in mac_probe() and mac_remove().
    
    This is a preparation for further reference leaks fix.
    
    Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: 1dec67e0d9fb ("fsl/fman: Fix refcount handling of fman-related devices")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fsnotify: Avoid data race between fsnotify_recalc_mask() and fsnotify_object_watched() [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Wed Jul 17 16:06:23 2024 +0200

    fsnotify: Avoid data race between fsnotify_recalc_mask() and fsnotify_object_watched()
    
    [ Upstream commit 35ceae44742e1101f9d20adadbbbd92c05d7d659 ]
    
    When __fsnotify_recalc_mask() recomputes the mask on the watched object,
    the compiler can "optimize" the code to perform partial updates to the
    mask (including zeroing it at the beginning). Thus places checking
    the object mask without conn->lock such as fsnotify_object_watched()
    could see invalid states of the mask. Make sure the mask update is
    performed by one memory store using WRITE_ONCE().
    
    Reported-by: syzbot+701037856c25b143f1ad@syzkaller.appspotmail.com
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Link: https://lore.kernel.org/all/CACT4Y+Zk0ohwwwHSD63U2-PQ=UuamXczr1mKBD6xtj2dyYKBvA@mail.gmail.com
    Signed-off-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Link: https://patch.msgid.link/20240717140623.27768-1-jack@suse.cz
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fuse: update inode size after extending passthrough write [+ + +]
Author: Amir Goldstein <amir73il@gmail.com>
Date:   Mon Oct 14 21:27:59 2024 +0200

    fuse: update inode size after extending passthrough write
    
    [ Upstream commit 20121d3f58f06e977ca43eb6efe1fb23b1d2f6d9 ]
    
    yangyun reported that libfuse test test_copy_file_range() copies zero
    bytes from a newly written file when fuse passthrough is enabled.
    
    The reason is that extending passthrough write is not updating the fuse
    inode size and when vfs_copy_file_range() observes a zero size inode,
    it returns without calling the filesystem copy_file_range() method.
    
    Fix this by adjusting the fuse inode size after an extending passthrough
    write.
    
    This does not provide cache coherency of fuse inode attributes and
    backing inode attributes, but it should prevent situations where fuse
    inode size is too small, causing read/copy to be wrongly shortened.
    
    Reported-by: yangyun <yangyun50@huawei.com>
    Closes: https://github.com/libfuse/libfuse/issues/1048
    Fixes: 57e1176e6086 ("fuse: implement read/write passthrough")
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
genetlink: hold RCU in genlmsg_mcast() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Oct 11 17:12:17 2024 +0000

    genetlink: hold RCU in genlmsg_mcast()
    
    [ Upstream commit 56440d7ec28d60f8da3bfa09062b3368ff9b16db ]
    
    While running net selftests with CONFIG_PROVE_RCU_LIST=y I saw
    one lockdep splat [1].
    
    genlmsg_mcast() uses for_each_net_rcu(), and must therefore hold RCU.
    
    Instead of letting all callers guard genlmsg_multicast_allns()
    with a rcu_read_lock()/rcu_read_unlock() pair, do it in genlmsg_mcast().
    
    This also means the @flags parameter is useless, we need to always use
    GFP_ATOMIC.
    
    [1]
    [10882.424136] =============================
    [10882.424166] WARNING: suspicious RCU usage
    [10882.424309] 6.12.0-rc2-virtme #1156 Not tainted
    [10882.424400] -----------------------------
    [10882.424423] net/netlink/genetlink.c:1940 RCU-list traversed in non-reader section!!
    [10882.424469]
    other info that might help us debug this:
    
    [10882.424500]
    rcu_scheduler_active = 2, debug_locks = 1
    [10882.424744] 2 locks held by ip/15677:
    [10882.424791] #0: ffffffffb6b491b0 (cb_lock){++++}-{3:3}, at: genl_rcv (net/netlink/genetlink.c:1219)
    [10882.426334] #1: ffffffffb6b49248 (genl_mutex){+.+.}-{3:3}, at: genl_rcv_msg (net/netlink/genetlink.c:61 net/netlink/genetlink.c:57 net/netlink/genetlink.c:1209)
    [10882.426465]
    stack backtrace:
    [10882.426805] CPU: 14 UID: 0 PID: 15677 Comm: ip Not tainted 6.12.0-rc2-virtme #1156
    [10882.426919] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [10882.427046] Call Trace:
    [10882.427131]  <TASK>
    [10882.427244] dump_stack_lvl (lib/dump_stack.c:123)
    [10882.427335] lockdep_rcu_suspicious (kernel/locking/lockdep.c:6822)
    [10882.427387] genlmsg_multicast_allns (net/netlink/genetlink.c:1940 (discriminator 7) net/netlink/genetlink.c:1977 (discriminator 7))
    [10882.427436] l2tp_tunnel_notify.constprop.0 (net/l2tp/l2tp_netlink.c:119) l2tp_netlink
    [10882.427683] l2tp_nl_cmd_tunnel_create (net/l2tp/l2tp_netlink.c:253) l2tp_netlink
    [10882.427748] genl_family_rcv_msg_doit (net/netlink/genetlink.c:1115)
    [10882.427834] genl_rcv_msg (net/netlink/genetlink.c:1195 net/netlink/genetlink.c:1210)
    [10882.427877] ? __pfx_l2tp_nl_cmd_tunnel_create (net/l2tp/l2tp_netlink.c:186) l2tp_netlink
    [10882.427927] ? __pfx_genl_rcv_msg (net/netlink/genetlink.c:1201)
    [10882.427959] netlink_rcv_skb (net/netlink/af_netlink.c:2551)
    [10882.428069] genl_rcv (net/netlink/genetlink.c:1220)
    [10882.428095] netlink_unicast (net/netlink/af_netlink.c:1332 net/netlink/af_netlink.c:1357)
    [10882.428140] netlink_sendmsg (net/netlink/af_netlink.c:1901)
    [10882.428210] ____sys_sendmsg (net/socket.c:729 (discriminator 1) net/socket.c:744 (discriminator 1) net/socket.c:2607 (discriminator 1))
    
    Fixes: 33f72e6f0c67 ("l2tp : multicast notification to the registered listeners")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: James Chapman <jchapman@katalix.com>
    Cc: Tom Parkin <tparkin@katalix.com>
    Cc: Johannes Berg <johannes.berg@intel.com>
    Link: https://patch.msgid.link/20241011171217.3166614-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hv_netvsc: Fix VF namespace also in synthetic NIC NETDEV_REGISTER event [+ + +]
Author: Haiyang Zhang <haiyangz@microsoft.com>
Date:   Fri Oct 18 11:25:22 2024 -0700

    hv_netvsc: Fix VF namespace also in synthetic NIC NETDEV_REGISTER event
    
    commit 4c262801ea60c518b5bebc22a09f5b78b3147da2 upstream.
    
    The existing code moves VF to the same namespace as the synthetic NIC
    during netvsc_register_vf(). But, if the synthetic device is moved to a
    new namespace after the VF registration, the VF won't be moved together.
    
    To make the behavior more consistent, add a namespace check for synthetic
    NIC's NETDEV_REGISTER event (generated during its move), and move the VF
    if it is not in the same namespace.
    
    Cc: stable@vger.kernel.org
    Fixes: c0a41b887ce6 ("hv_netvsc: move VF to same namespace as netvsc device")
    Suggested-by: Stephen Hemminger <stephen@networkplumber.org>
    Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/1729275922-17595-1-git-send-email-haiyangz@microsoft.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
iio: accel: bma400: Fix uninitialized variable field_value in tap event handling. [+ + +]
Author: Mikhail Lobanov <m.lobanov@rosalinux.ru>
Date:   Tue Sep 10 04:36:20 2024 -0400

    iio: accel: bma400: Fix uninitialized variable field_value in tap event handling.
    
    [ Upstream commit db9795a43dc944f048a37b65e06707f60f713e34 ]
    
    In the current implementation, the local variable field_value is used
    without prior initialization, which may lead to reading uninitialized
    memory. Specifically, in the macro set_mask_bits, the initial
    (potentially uninitialized) value of the buffer is copied into old__,
    and a mask is applied to calculate new__. A similar issue was resolved in
    commit 6ee2a7058fea ("iio: accel: bma400: Fix smatch warning based on use
    of unintialized value.").
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 961db2da159d ("iio: accel: bma400: Add support for single and double tap events")
    Signed-off-by: Mikhail Lobanov <m.lobanov@rosalinux.ru>
    Link: https://patch.msgid.link/20240910083624.27224-1-m.lobanov@rosalinux.ru
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: adc: ti-lmp92064: add missing select IIO_(TRIGGERED_)BUFFER in Kconfig [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Thu Oct 3 23:04:52 2024 +0200

    iio: adc: ti-lmp92064: add missing select IIO_(TRIGGERED_)BUFFER in Kconfig
    
    [ Upstream commit a985576af824426e33100554a5958a6beda60a13 ]
    
    This driver makes use of triggered buffers, but does not select the
    required modules.
    
    Add the missing 'select IIO_BUFFER' and 'select IIO_TRIGGERED_BUFFER'.
    
    Fixes: 6c7bc1d27bb2 ("iio: adc: ti-lmp92064: add buffering support")
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Link: https://patch.msgid.link/20241003-iio-select-v1-6-67c0385197cd@gmail.com
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: frequency: admv4420: fix missing select REMAP_SPI in Kconfig [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Mon Oct 7 22:06:39 2024 +0200

    iio: frequency: admv4420: fix missing select REMAP_SPI in Kconfig
    
    [ Upstream commit 6b8e9dbfaed471627f7b863633b9937717df1d4d ]
    
    This driver makes use of regmap_spi, but does not select the required
    module.
    Add the missing 'select REGMAP_SPI'.
    
    Fixes: b59c04155901 ("iio: frequency: admv4420.c: Add support for ADMV4420")
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Link: https://patch.msgid.link/20241007-ad2s1210-select-v2-2-7345d228040f@gmail.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: frequency: {admv4420,adrf6780}: format Kconfig entries [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Mon Oct 7 22:06:38 2024 +0200

    iio: frequency: {admv4420,adrf6780}: format Kconfig entries
    
    [ Upstream commit 5c9644a683e1690387a476a4f5f6bd5cf9a1d695 ]
    
    Format the entries of these drivers in the Kconfig, where spaces
    instead of tabs were used.
    
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Link: https://patch.msgid.link/20241007-ad2s1210-select-v2-1-7345d228040f@gmail.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Stable-dep-of: 6b8e9dbfaed4 ("iio: frequency: admv4420: fix missing select REMAP_SPI in Kconfig")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv4: give an IPv4 dev to blackhole_netdev [+ + +]
Author: Xin Long <lucien.xin@gmail.com>
Date:   Wed Oct 9 14:47:13 2024 -0400

    ipv4: give an IPv4 dev to blackhole_netdev
    
    [ Upstream commit 22600596b6756b166fd052d5facb66287e6f0bad ]
    
    After commit 8d7017fd621d ("blackhole_netdev: use blackhole_netdev to
    invalidate dst entries"), blackhole_netdev was introduced to invalidate
    dst cache entries on the TX path whenever the cache times out or is
    flushed.
    
    When two UDP sockets (sk1 and sk2) send messages to the same destination
    simultaneously, they are using the same dst cache. If the dst cache is
    invalidated on one path (sk2) while the other (sk1) is still transmitting,
    sk1 may try to use the invalid dst entry.
    
             CPU1                   CPU2
    
          udp_sendmsg(sk1)       udp_sendmsg(sk2)
          udp_send_skb()
          ip_output()
                                                 <--- dst timeout or flushed
                                 dst_dev_put()
          ip_finish_output2()
          ip_neigh_for_gw()
    
    This results in a scenario where ip_neigh_for_gw() returns -EINVAL because
    blackhole_dev lacks an in_dev, which is needed to initialize the neigh in
    arp_constructor(). This error is then propagated back to userspace,
    breaking the UDP application.
    
    The patch fixes this issue by assigning an in_dev to blackhole_dev for
    IPv4, similar to what was done for IPv6 in commit e5f80fcf869a ("ipv6:
    give an IPv6 dev to blackhole_netdev"). This ensures that even when the
    dst entry is invalidated with blackhole_dev, it will not fail to create
    the neigh entry.
    
    As devinet_init() is called ealier than blackhole_netdev_init() in system
    booting, it can not assign the in_dev to blackhole_dev in devinet_init().
    As Paolo suggested, add a separate late_initcall() in devinet.c to ensure
    inet_blackhole_dev_init() is called after blackhole_netdev_init().
    
    Fixes: 8d7017fd621d ("blackhole_netdev: use blackhole_netdev to invalidate dst entries")
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/3000792d45ca44e16c785ebe2b092e610e5b3df1.1728499633.git.lucien.xin@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irqchip/renesas-rzg2l: Fix missing put_device [+ + +]
Author: Fabrizio Castro <fabrizio.castro.jz@renesas.com>
Date:   Fri Oct 11 18:20:03 2024 +0100

    irqchip/renesas-rzg2l: Fix missing put_device
    
    [ Upstream commit d038109ac1c6bf619473dda03a16a6de58170f7f ]
    
    rzg2l_irqc_common_init() calls of_find_device_by_node(), but the
    corresponding put_device() call is missing.  This also gets reported by
    make coccicheck.
    
    Make use of the cleanup interfaces from cleanup.h to call into
    __free_put_device(), which in turn calls into put_device when leaving
    function rzg2l_irqc_common_init() and variable "dev" goes out of scope.
    
    To prevent that the device is put on successful completion, assign NULL to
    "dev" to prevent __free_put_device() from calling into put_device() within
    the successful path.
    
    "make coccicheck" will still complain about missing put_device() calls,
    but those are false positives now.
    
    Fixes: 3fed09559cd8 ("irqchip: Add RZ/G2L IA55 Interrupt Controller driver")
    Signed-off-by: Fabrizio Castro <fabrizio.castro.jz@renesas.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/all/20241011172003.1242841-1-fabrizio.castro.jz@renesas.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irqchip/riscv-imsic: Fix output text of base address [+ + +]
Author: Andrew Jones <ajones@ventanamicro.com>
Date:   Mon Sep 9 10:56:11 2024 +0200

    irqchip/riscv-imsic: Fix output text of base address
    
    [ Upstream commit 4a1361e9a5c5dbb5c9f647762ae0cb1a605101fa ]
    
    The "per-CPU IDs ... at base ..." info log is outputting a physical
    address, not a PPN.
    
    Fixes: 027e125acdba ("irqchip/riscv-imsic: Add device MSI domain support for platform devices")
    Signed-off-by: Andrew Jones <ajones@ventanamicro.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Anup Patel <anup@brainfault.org>
    Link: https://lore.kernel.org/all/20240909085610.46625-2-ajones@ventanamicro.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
jfs: Fix sanity check in dbMount [+ + +]
Author: Dave Kleikamp <dave.kleikamp@oracle.com>
Date:   Tue Oct 22 09:40:37 2024 -0500

    jfs: Fix sanity check in dbMount
    
    [ Upstream commit 67373ca8404fe57eb1bb4b57f314cff77ce54932 ]
    
    MAXAG is a legitimate value for bmp->db_numag
    
    Fixes: e63866a47556 ("jfs: fix out-of-bounds in dbNextAG() and diAlloc()")
    
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
KVM: arm64: Don't eagerly teardown the vgic on init error [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Wed Oct 9 19:36:03 2024 +0100

    KVM: arm64: Don't eagerly teardown the vgic on init error
    
    commit df5fd75ee305cb5927e0b1a0b46cc988ad8db2b1 upstream.
    
    As there is very little ordering in the KVM API, userspace can
    instanciate a half-baked GIC (missing its memory map, for example)
    at almost any time.
    
    This means that, with the right timing, a thread running vcpu-0
    can enter the kernel without a GIC configured and get a GIC created
    behind its back by another thread. Amusingly, it will pick up
    that GIC and start messing with the data structures without the
    GIC having been fully initialised.
    
    Similarly, a thread running vcpu-1 can enter the kernel, and try
    to init the GIC that was previously created. Since this GIC isn't
    properly configured (no memory map), it fails to correctly initialise.
    
    And that's the point where we decide to teardown the GIC, freeing all
    its resources. Behind vcpu-0's back. Things stop pretty abruptly,
    with a variety of symptoms.  Clearly, this isn't good, we should be
    a bit more careful about this.
    
    It is obvious that this guest is not viable, as it is missing some
    important part of its configuration. So instead of trying to tear
    bits of it down, let's just mark it as *dead*. It means that any
    further interaction from userspace will result in -EIO. The memory
    will be released on the "normal" path, when userspace gives up.
    
    Cc: stable@vger.kernel.org
    Reported-by: Alexander Potapenko <glider@google.com>
    Reviewed-by: Oliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20241009183603.3221824-1-maz@kernel.org
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: Fix shift-out-of-bounds bug [+ + +]
Author: Ilkka Koskinen <ilkka@os.amperecomputing.com>
Date:   Wed Oct 16 19:57:01 2024 -0700

    KVM: arm64: Fix shift-out-of-bounds bug
    
    commit c6c167afa090ea0451f91814e1318755a8fb8bb9 upstream.
    
    Fix a shift-out-of-bounds bug reported by UBSAN when running
    VM with MTE enabled host kernel.
    
    UBSAN: shift-out-of-bounds in arch/arm64/kvm/sys_regs.c:1988:14
    shift exponent 33 is too large for 32-bit type 'int'
    CPU: 26 UID: 0 PID: 7629 Comm: qemu-kvm Not tainted 6.12.0-rc2 #34
    Hardware name: IEI NF5280R7/Mitchell MB, BIOS 00.00. 2024-10-12 09:28:54 10/14/2024
    Call trace:
     dump_backtrace+0xa0/0x128
     show_stack+0x20/0x38
     dump_stack_lvl+0x74/0x90
     dump_stack+0x18/0x28
     __ubsan_handle_shift_out_of_bounds+0xf8/0x1e0
     reset_clidr+0x10c/0x1c8
     kvm_reset_sys_regs+0x50/0x1c8
     kvm_reset_vcpu+0xec/0x2b0
     __kvm_vcpu_set_target+0x84/0x158
     kvm_vcpu_set_target+0x138/0x168
     kvm_arch_vcpu_ioctl_vcpu_init+0x40/0x2b0
     kvm_arch_vcpu_ioctl+0x28c/0x4b8
     kvm_vcpu_ioctl+0x4bc/0x7a8
     __arm64_sys_ioctl+0xb4/0x100
     invoke_syscall+0x70/0x100
     el0_svc_common.constprop.0+0x48/0xf0
     do_el0_svc+0x24/0x38
     el0_svc+0x3c/0x158
     el0t_64_sync_handler+0x120/0x130
     el0t_64_sync+0x194/0x198
    
    Fixes: 7af0c2534f4c ("KVM: arm64: Normalize cache configuration")
    Cc: stable@vger.kernel.org
    Reviewed-by: Gavin Shan <gshan@redhat.com>
    Signed-off-by: Ilkka Koskinen <ilkka@os.amperecomputing.com>
    Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
    Link: https://lore.kernel.org/r/20241017025701.67936-1-ilkka@os.amperecomputing.com
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: Unregister redistributor for failed vCPU creation [+ + +]
Author: Oliver Upton <oliver.upton@linux.dev>
Date:   Mon Oct 7 22:39:09 2024 +0000

    KVM: arm64: Unregister redistributor for failed vCPU creation
    
    commit ae8f8b37610269009326f4318df161206c59843e upstream.
    
    Alex reports that syzkaller has managed to trigger a use-after-free when
    tearing down a VM:
    
      BUG: KASAN: slab-use-after-free in kvm_put_kvm+0x300/0xe68 virt/kvm/kvm_main.c:5769
      Read of size 8 at addr ffffff801c6890d0 by task syz.3.2219/10758
    
      CPU: 3 UID: 0 PID: 10758 Comm: syz.3.2219 Not tainted 6.11.0-rc6-dirty #64
      Hardware name: linux,dummy-virt (DT)
      Call trace:
       dump_backtrace+0x17c/0x1a8 arch/arm64/kernel/stacktrace.c:317
       show_stack+0x2c/0x3c arch/arm64/kernel/stacktrace.c:324
       __dump_stack lib/dump_stack.c:93 [inline]
       dump_stack_lvl+0x94/0xc0 lib/dump_stack.c:119
       print_report+0x144/0x7a4 mm/kasan/report.c:377
       kasan_report+0xcc/0x128 mm/kasan/report.c:601
       __asan_report_load8_noabort+0x20/0x2c mm/kasan/report_generic.c:381
       kvm_put_kvm+0x300/0xe68 virt/kvm/kvm_main.c:5769
       kvm_vm_release+0x4c/0x60 virt/kvm/kvm_main.c:1409
       __fput+0x198/0x71c fs/file_table.c:422
       ____fput+0x20/0x30 fs/file_table.c:450
       task_work_run+0x1cc/0x23c kernel/task_work.c:228
       do_notify_resume+0x144/0x1a0 include/linux/resume_user_mode.h:50
       el0_svc+0x64/0x68 arch/arm64/kernel/entry-common.c:169
       el0t_64_sync_handler+0x90/0xfc arch/arm64/kernel/entry-common.c:730
       el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:598
    
    Upon closer inspection, it appears that we do not properly tear down the
    MMIO registration for a vCPU that fails creation late in the game, e.g.
    a vCPU w/ the same ID already exists in the VM.
    
    It is important to consider the context of commit that introduced this bug
    by moving the unregistration out of __kvm_vgic_vcpu_destroy(). That
    change correctly sought to avoid an srcu v. config_lock inversion by
    breaking up the vCPU teardown into two parts, one guarded by the
    config_lock.
    
    Fix the use-after-free while avoiding lock inversion by adding a
    special-cased unregistration to __kvm_vgic_vcpu_destroy(). This is safe
    because failed vCPUs are torn down outside of the config_lock.
    
    Cc: stable@vger.kernel.org
    Fixes: f616506754d3 ("KVM: arm64: vgic: Don't hold config_lock while unregistering redistributors")
    Reported-by: Alexander Potapenko <glider@google.com>
    Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20241007223909.2157336-1-oliver.upton@linux.dev
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: nSVM: Ignore nCR3[4:0] when loading PDPTEs from memory [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Wed Oct 9 07:08:38 2024 -0700

    KVM: nSVM: Ignore nCR3[4:0] when loading PDPTEs from memory
    
    commit f559b2e9c5c5308850544ab59396b7d53cfc67bd upstream.
    
    Ignore nCR3[4:0] when loading PDPTEs from memory for nested SVM, as bits
    4:0 of CR3 are ignored when PAE paging is used, and thus VMRUN doesn't
    enforce 32-byte alignment of nCR3.
    
    In the absolute worst case scenario, failure to ignore bits 4:0 can result
    in an out-of-bounds read, e.g. if the target page is at the end of a
    memslot, and the VMM isn't using guard pages.
    
    Per the APM:
    
      The CR3 register points to the base address of the page-directory-pointer
      table. The page-directory-pointer table is aligned on a 32-byte boundary,
      with the low 5 address bits 4:0 assumed to be 0.
    
    And the SDM's much more explicit:
    
      4:0    Ignored
    
    Note, KVM gets this right when loading PDPTRs, it's only the nSVM flow
    that is broken.
    
    Fixes: e4e517b4be01 ("KVM: MMU: Do not unconditionally read PDPTE from guest memory")
    Reported-by: Kirk Swidowski <swidowski@google.com>
    Cc: Andy Nguyen <theflow@google.com>
    Cc: 3pvd <3pvd@google.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Message-ID: <20241009140838.1036226-1-seanjc@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lib/Kconfig.debug: fix grammar in RUST_BUILD_ASSERT_ALLOW [+ + +]
Author: Timo Grautstueck <timo.grautstueck@web.de>
Date:   Sun Oct 6 16:02:44 2024 +0200

    lib/Kconfig.debug: fix grammar in RUST_BUILD_ASSERT_ALLOW
    
    [ Upstream commit ab8851431bef5cc44f0f3f0da112e883fd4d0df5 ]
    
    Just a grammar fix in lib/Kconfig.debug, under the config option
    RUST_BUILD_ASSERT_ALLOW.
    
    Reported-by: Miguel Ojeda <ojeda@kernel.org>
    Closes: https://github.com/Rust-for-Linux/linux/issues/1006
    Fixes: ecaa6ddff2fd ("rust: add `build_error` crate")
    Signed-off-by: Timo Grautstueck <timo.grautstueck@web.de>
    Link: https://lore.kernel.org/r/20241006140244.5509-1-timo.grautstueck@web.de
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 6.11.6 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Nov 1 02:02:44 2024 +0100

    Linux 6.11.6
    
    Link: https://lore.kernel.org/r/20241028062312.001273460@linuxfoundation.org
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: SeongJae Park <sj@kernel.org>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Ronald Warsow <rwarsow@gmx.de>
    Tested-by: Hardik Garg <hargar@linux.microsoft.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: kernelci.org bot <bot@kernelci.org>
    Tested-by: Christian Heusel <christian@heusel.eu>
    Tested-by: Luna Jernberg <droidbittin@gmail.com>
    Tested-by: Markus Reichelt <lkt+2023@mareichelt.com>
    Tested-by: Justin M. Forbes <jforbes@fedoraproject.org>
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>
    Tested-by: Ron Economos <re@w6rz.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
LoongArch: Don't crash in stack_top() for tasks without vDSO [+ + +]
Author: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Date:   Mon Oct 21 22:11:19 2024 +0800

    LoongArch: Don't crash in stack_top() for tasks without vDSO
    
    [ Upstream commit 134475a9ab8487527238d270639a8cb74c10aab2 ]
    
    Not all tasks have a vDSO mapped, for example kthreads never do. If such
    a task ever ends up calling stack_top(), it will derefence the NULL vdso
    pointer and crash.
    
    This can for example happen when using kunit:
    
            [<9000000000203874>] stack_top+0x58/0xa8
            [<90000000002956cc>] arch_pick_mmap_layout+0x164/0x220
            [<90000000003c284c>] kunit_vm_mmap_init+0x108/0x12c
            [<90000000003c1fbc>] __kunit_add_resource+0x38/0x8c
            [<90000000003c2704>] kunit_vm_mmap+0x88/0xc8
            [<9000000000410b14>] usercopy_test_init+0xbc/0x25c
            [<90000000003c1db4>] kunit_try_run_case+0x5c/0x184
            [<90000000003c3d54>] kunit_generic_run_threadfn_adapter+0x24/0x48
            [<900000000022e4bc>] kthread+0xc8/0xd4
            [<9000000000200ce8>] ret_from_kernel_thread+0xc/0xa4
    
    Fixes: 803b0fc5c3f2 ("LoongArch: Add process management")
    Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

LoongArch: Enable IRQ if do_ale() triggered in irq-enabled context [+ + +]
Author: Huacai Chen <chenhuacai@kernel.org>
Date:   Mon Oct 21 22:11:19 2024 +0800

    LoongArch: Enable IRQ if do_ale() triggered in irq-enabled context
    
    commit 69cc6fad5df4ce652d969be69acc60e269e5eea1 upstream.
    
    Unaligned access exception can be triggered in irq-enabled context such
    as user mode, in this case do_ale() may call get_user() which may cause
    sleep. Then we will get:
    
     BUG: sleeping function called from invalid context at arch/loongarch/kernel/access-helper.h:7
     in_atomic(): 0, irqs_disabled(): 1, non_block: 0, pid: 129, name: modprobe
     preempt_count: 0, expected: 0
     RCU nest depth: 0, expected: 0
     CPU: 0 UID: 0 PID: 129 Comm: modprobe Tainted: G        W          6.12.0-rc1+ #1723
     Tainted: [W]=WARN
     Stack : 9000000105e0bd48 0000000000000000 9000000003803944 9000000105e08000
             9000000105e0bc70 9000000105e0bc78 0000000000000000 0000000000000000
             9000000105e0bc78 0000000000000001 9000000185e0ba07 9000000105e0b890
             ffffffffffffffff 9000000105e0bc78 73924b81763be05b 9000000100194500
             000000000000020c 000000000000000a 0000000000000000 0000000000000003
             00000000000023f0 00000000000e1401 00000000072f8000 0000007ffbb0e260
             0000000000000000 0000000000000000 9000000005437650 90000000055d5000
             0000000000000000 0000000000000003 0000007ffbb0e1f0 0000000000000000
             0000005567b00490 0000000000000000 9000000003803964 0000007ffbb0dfec
             00000000000000b0 0000000000000007 0000000000000003 0000000000071c1d
             ...
     Call Trace:
     [<9000000003803964>] show_stack+0x64/0x1a0
     [<9000000004c57464>] dump_stack_lvl+0x74/0xb0
     [<9000000003861ab4>] __might_resched+0x154/0x1a0
     [<900000000380c96c>] emulate_load_store_insn+0x6c/0xf60
     [<9000000004c58118>] do_ale+0x78/0x180
     [<9000000003801bc8>] handle_ale+0x128/0x1e0
    
    So enable IRQ if unaligned access exception is triggered in irq-enabled
    context to fix it.
    
    Cc: stable@vger.kernel.org
    Reported-by: Binbin Zhou <zhoubinbin@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: Get correct cores_per_package for SMT systems [+ + +]
Author: Huacai Chen <chenhuacai@kernel.org>
Date:   Mon Oct 21 22:11:18 2024 +0800

    LoongArch: Get correct cores_per_package for SMT systems
    
    commit b7296f9d5bf99330063d4bbecc43c9b33fed0137 upstream.
    
    In loongson_sysconf, The "core" of cores_per_node and cores_per_package
    stands for a logical core, which means in a SMT system it stands for a
    thread indeed. This information is gotten from SMBIOS Type4 Structure,
    so in order to get a correct cores_per_package for both SMT and non-SMT
    systems in parse_cpu_table() we should use SMBIOS_THREAD_PACKAGE_OFFSET
    instead of SMBIOS_CORE_PACKAGE_OFFSET.
    
    Cc: stable@vger.kernel.org
    Reported-by: Chao Li <lichao@loongson.cn>
    Tested-by: Chao Li <lichao@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: Make KASAN usable for variable cpu_vabits [+ + +]
Author: Huacai Chen <chenhuacai@kernel.org>
Date:   Wed Oct 23 22:15:30 2024 +0800

    LoongArch: Make KASAN usable for variable cpu_vabits
    
    commit 3c252263be801f937f56b4bcd8e8e2b5307c1ce5 upstream.
    
    Currently, KASAN on LoongArch assume the CPU VA bits is 48, which is
    true for Loongson-3 series, but not for Loongson-2 series (only 40 or
    lower), this patch fix that issue and make KASAN usable for variable
    cpu_vabits.
    
    Solution is very simple: Just define XRANGE_SHADOW_SHIFT which means
    valid address length from VA_BITS to min(cpu_vabits, VA_BITS).
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Kanglong Wang <wangkanglong@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
macsec: don't increment counters for an unrelated SA [+ + +]
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Fri Oct 11 17:16:37 2024 +0200

    macsec: don't increment counters for an unrelated SA
    
    [ Upstream commit cf58aefb1332db322060cad4a330d5f9292b0f41 ]
    
    On RX, we shouldn't be incrementing the stats for an arbitrary SA in
    case the actual SA hasn't been set up. Those counters are intended to
    track packets for their respective AN when the SA isn't currently
    configured. Due to the way MACsec is implemented, we don't keep
    counters unless the SA is configured, so we can't track those packets,
    and those counters will remain at 0.
    
    The RXSC's stats keeps track of those packets without telling us which
    AN they belonged to. We could add counters for non-existent SAs, and
    then find a way to integrate them in the dump to userspace, but I
    don't think it's worth the effort.
    
    Fixes: 91ec9bd57f35 ("macsec: Fix traffic counters/statistics")
    Reported-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Link: https://patch.msgid.link/f5ac92aaa5b89343232615f4c03f9f95042c6aa0.1728657709.git.sd@queasysnail.net
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
md/raid10: fix null ptr dereference in raid10_size() [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Wed Oct 9 09:49:14 2024 +0800

    md/raid10: fix null ptr dereference in raid10_size()
    
    commit 825711e00117fc686ab89ac36a9a7b252dc349c6 upstream.
    
    In raid10_run() if raid10_set_queue_limits() succeed, the return value
    is set to zero, and if following procedures failed raid10_run() will
    return zero while mddev->private is still NULL, causing null ptr
    dereference in raid10_size().
    
    Fix the problem by only overwrite the return value if
    raid10_set_queue_limits() failed.
    
    Fixes: 3d8466ba68d4 ("md/raid10: use the atomic queue limit update APIs")
    Cc: stable@vger.kernel.org
    Reported-and-tested-by: ValdikSS <iam@valdikss.org.ru>
    Closes: https://lore.kernel.org/all/0dd96820-fe52-4841-bc58-dbf14d6bfcc8@valdikss.org.ru/
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Link: https://lore.kernel.org/r/20241009014914.1682037-1-yukuai1@huaweicloud.com
    Signed-off-by: Song Liu <song@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mlxsw: spectrum_router: fix xa_store() error checking [+ + +]
Author: Yuan Can <yuancan@huawei.com>
Date:   Thu Oct 17 10:32:23 2024 +0800

    mlxsw: spectrum_router: fix xa_store() error checking
    
    [ Upstream commit f7b4cf0306bbea500a613e4b618576452c1df4ba ]
    
    It is meant to use xa_err() to extract the error encoded in the return
    value of xa_store().
    
    Fixes: 44c2fbebe18a ("mlxsw: spectrum_router: Share nexthop counters in resilient groups")
    Signed-off-by: Yuan Can <yuancan@huawei.com>
    Reviewed-by: Petr Machata <petrm@nvidia.com>
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Tested-by: Petr Machata <petrm@nvidia.com>
    Link: https://patch.msgid.link/20241017023223.74180-1-yuancan@huawei.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm: don't install PMD mappings when THPs are disabled by the hw/process/vma [+ + +]
Author: David Hildenbrand <david@redhat.com>
Date:   Fri Oct 11 12:24:45 2024 +0200

    mm: don't install PMD mappings when THPs are disabled by the hw/process/vma
    
    [ Upstream commit 2b0f922323ccfa76219bcaacd35cd50aeaa13592 ]
    
    We (or rather, readahead logic :) ) might be allocating a THP in the
    pagecache and then try mapping it into a process that explicitly disabled
    THP: we might end up installing PMD mappings.
    
    This is a problem for s390x KVM, which explicitly remaps all PMD-mapped
    THPs to be PTE-mapped in s390_enable_sie()->thp_split_mm(), before
    starting the VM.
    
    For example, starting a VM backed on a file system with large folios
    supported makes the VM crash when the VM tries accessing such a mapping
    using KVM.
    
    Is it also a problem when the HW disabled THP using
    TRANSPARENT_HUGEPAGE_UNSUPPORTED?  At least on x86 this would be the case
    without X86_FEATURE_PSE.
    
    In the future, we might be able to do better on s390x and only disallow
    PMD mappings -- what s390x and likely TRANSPARENT_HUGEPAGE_UNSUPPORTED
    really wants.  For now, fix it by essentially performing the same check as
    would be done in __thp_vma_allowable_orders() or in shmem code, where this
    works as expected, and disallow PMD mappings, making us fallback to PTE
    mappings.
    
    Link: https://lkml.kernel.org/r/20241011102445.934409-3-david@redhat.com
    Fixes: 793917d997df ("mm/readahead: Add large folio readahead")
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Reported-by: Leo Fu <bfu@redhat.com>
    Tested-by: Thomas Huth <thuth@redhat.com>
    Cc: Thomas Huth <thuth@redhat.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Ryan Roberts <ryan.roberts@arm.com>
    Cc: Christian Borntraeger <borntraeger@linux.ibm.com>
    Cc: Janosch Frank <frankja@linux.ibm.com>
    Cc: Claudio Imbrenda <imbrenda@linux.ibm.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mm: huge_memory: add vma_thp_disabled() and thp_disabled_by_hw() [+ + +]
Author: Kefeng Wang <wangkefeng.wang@huawei.com>
Date:   Fri Oct 11 12:24:44 2024 +0200

    mm: huge_memory: add vma_thp_disabled() and thp_disabled_by_hw()
    
    [ Upstream commit 963756aac1f011d904ddd9548ae82286d3a91f96 ]
    
    Patch series "mm: don't install PMD mappings when THPs are disabled by the
    hw/process/vma".
    
    During testing, it was found that we can get PMD mappings in processes
    where THP (and more precisely, PMD mappings) are supposed to be disabled.
    While it works as expected for anon+shmem, the pagecache is the
    problematic bit.
    
    For s390 KVM this currently means that a VM backed by a file located on
    filesystem with large folio support can crash when KVM tries accessing the
    problematic page, because the readahead logic might decide to use a
    PMD-sized THP and faulting it into the page tables will install a PMD
    mapping, something that s390 KVM cannot tolerate.
    
    This might also be a problem with HW that does not support PMD mappings,
    but I did not try reproducing it.
    
    Fix it by respecting the ways to disable THPs when deciding whether we can
    install a PMD mapping.  khugepaged should already be taking care of not
    collapsing if THPs are effectively disabled for the hw/process/vma.
    
    This patch (of 2):
    
    Add vma_thp_disabled() and thp_disabled_by_hw() helpers to be shared by
    shmem_allowable_huge_orders() and __thp_vma_allowable_orders().
    
    [david@redhat.com: rename to vma_thp_disabled(), split out thp_disabled_by_hw() ]
    Link: https://lkml.kernel.org/r/20241011102445.934409-2-david@redhat.com
    Fixes: 793917d997df ("mm/readahead: Add large folio readahead")
    Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Reported-by: Leo Fu <bfu@redhat.com>
    Tested-by: Thomas Huth <thuth@redhat.com>
    Reviewed-by: Ryan Roberts <ryan.roberts@arm.com>
    Cc: Boqiao Fu <bfu@redhat.com>
    Cc: Christian Borntraeger <borntraeger@linux.ibm.com>
    Cc: Claudio Imbrenda <imbrenda@linux.ibm.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Janosch Frank <frankja@linux.ibm.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 2b0f922323cc ("mm: don't install PMD mappings when THPs are disabled by the hw/process/vma")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mm: shmem: move shmem_huge_global_enabled() into shmem_allowable_huge_orders() [+ + +]
Author: Baolin Wang <baolin.wang@linux.alibaba.com>
Date:   Mon Jul 22 13:43:19 2024 +0800

    mm: shmem: move shmem_huge_global_enabled() into shmem_allowable_huge_orders()
    
    [ Upstream commit 6beeab870e70b2d4f49baf6c6be9da1b61c169f8 ]
    
    Move shmem_huge_global_enabled() into shmem_allowable_huge_orders(), so
    that shmem_allowable_huge_orders() can also help to find the allowable
    huge orders for tmpfs.  Moreover the shmem_huge_global_enabled() can
    become static.  While we are at it, passing the vma instead of mm for
    shmem_huge_global_enabled() makes code cleaner.
    
    No functional changes.
    
    Link: https://lkml.kernel.org/r/8e825146bb29ee1a1c7bd64d2968ff3e19be7815.1721626645.git.baolin.wang@linux.alibaba.com
    Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Reviewed-by: Ryan Roberts <ryan.roberts@arm.com>
    Acked-by: David Hildenbrand <david@redhat.com>
    Cc: Barry Song <21cnbao@gmail.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Lance Yang <ioworker0@gmail.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Zi Yan <ziy@nvidia.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 2b0f922323cc ("mm: don't install PMD mappings when THPs are disabled by the hw/process/vma")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mm: shmem: rename shmem_is_huge() to shmem_huge_global_enabled() [+ + +]
Author: Baolin Wang <baolin.wang@linux.alibaba.com>
Date:   Mon Jul 22 13:43:18 2024 +0800

    mm: shmem: rename shmem_is_huge() to shmem_huge_global_enabled()
    
    [ Upstream commit d58a2a581f132529eefac5377676011562b631b8 ]
    
    shmem_is_huge() is now used to check if the top-level huge page is
    enabled, thus rename it to reflect its usage.
    
    Link: https://lkml.kernel.org/r/da53296e0ab6359aa083561d9dc01e4223d60fbe.1721626645.git.baolin.wang@linux.alibaba.com
    Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Reviewed-by: Ryan Roberts <ryan.roberts@arm.com>
    Acked-by: David Hildenbrand <david@redhat.com>
    Cc: Barry Song <21cnbao@gmail.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Lance Yang <ioworker0@gmail.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Zi Yan <ziy@nvidia.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 2b0f922323cc ("mm: don't install PMD mappings when THPs are disabled by the hw/process/vma")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5: Check for invalid vector index on EQ creation [+ + +]
Author: Maher Sanalla <msanalla@nvidia.com>
Date:   Tue Oct 15 12:32:05 2024 +0300

    net/mlx5: Check for invalid vector index on EQ creation
    
    [ Upstream commit d4f25be27e3ef7e23998fbd3dd4bff0602de7ae5 ]
    
    Currently, mlx5 driver does not enforce vector index to be lower than
    the maximum number of supported completion vectors when requesting a
    new completion EQ. Thus, mlx5_comp_eqn_get() fails when trying to
    acquire an IRQ with an improper vector index.
    
    To prevent the case above, enforce that vector index value is
    valid and lower than maximum in mlx5_comp_eqn_get() before handling the
    request.
    
    Fixes: f14c1a14e632 ("net/mlx5: Allocate completion EQs dynamically")
    Signed-off-by: Maher Sanalla <msanalla@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Fix command bitmask initialization [+ + +]
Author: Shay Drory <shayd@nvidia.com>
Date:   Tue Oct 15 12:32:06 2024 +0300

    net/mlx5: Fix command bitmask initialization
    
    [ Upstream commit d62b14045c6511a7b2d4948d1a83a4e592deeb05 ]
    
    Command bitmask have a dedicated bit for MANAGE_PAGES command, this bit
    isn't Initialize during command bitmask Initialization, only during
    MANAGE_PAGES.
    
    In addition, mlx5_cmd_trigger_completions() is trying to trigger
    completion for MANAGE_PAGES command as well.
    
    Hence, in case health error occurred before any MANAGE_PAGES command
    have been invoke (for example, during mlx5_enable_hca()),
    mlx5_cmd_trigger_completions() will try to trigger completion for
    MANAGE_PAGES command, which will result in null-ptr-deref error.[1]
    
    Fix it by Initialize command bitmask correctly.
    
    While at it, re-write the code for better understanding.
    
    [1]
    BUG: KASAN: null-ptr-deref in mlx5_cmd_trigger_completions+0x1db/0x600 [mlx5_core]
    Write of size 4 at addr 0000000000000214 by task kworker/u96:2/12078
    CPU: 10 PID: 12078 Comm: kworker/u96:2 Not tainted 6.9.0-rc2_for_upstream_debug_2024_04_07_19_01 #1
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
    Workqueue: mlx5_health0000:08:00.0 mlx5_fw_fatal_reporter_err_work [mlx5_core]
    Call Trace:
     <TASK>
     dump_stack_lvl+0x7e/0xc0
     kasan_report+0xb9/0xf0
     kasan_check_range+0xec/0x190
     mlx5_cmd_trigger_completions+0x1db/0x600 [mlx5_core]
     mlx5_cmd_flush+0x94/0x240 [mlx5_core]
     enter_error_state+0x6c/0xd0 [mlx5_core]
     mlx5_fw_fatal_reporter_err_work+0xf3/0x480 [mlx5_core]
     process_one_work+0x787/0x1490
     ? lockdep_hardirqs_on_prepare+0x400/0x400
     ? pwq_dec_nr_in_flight+0xda0/0xda0
     ? assign_work+0x168/0x240
     worker_thread+0x586/0xd30
     ? rescuer_thread+0xae0/0xae0
     kthread+0x2df/0x3b0
     ? kthread_complete_and_exit+0x20/0x20
     ret_from_fork+0x2d/0x70
     ? kthread_complete_and_exit+0x20/0x20
     ret_from_fork_asm+0x11/0x20
     </TASK>
    
    Fixes: 9b98d395b85d ("net/mlx5: Start health poll at earlier stage of driver load")
    Signed-off-by: Shay Drory <shayd@nvidia.com>
    Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
    Reviewed-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Unregister notifier on eswitch init failure [+ + +]
Author: Cosmin Ratiu <cratiu@nvidia.com>
Date:   Tue Oct 15 12:32:07 2024 +0300

    net/mlx5: Unregister notifier on eswitch init failure
    
    [ Upstream commit 1da9cfd6c41c2e6bbe624d0568644e1521c33e12 ]
    
    It otherwise remains registered and a subsequent attempt at eswitch
    enabling might trigger warnings of the sort:
    
    [  682.589148] ------------[ cut here ]------------
    [  682.590204] notifier callback eswitch_vport_event [mlx5_core] already registered
    [  682.590256] WARNING: CPU: 13 PID: 2660 at kernel/notifier.c:31 notifier_chain_register+0x3e/0x90
    [...snipped]
    [  682.610052] Call Trace:
    [  682.610369]  <TASK>
    [  682.610663]  ? __warn+0x7c/0x110
    [  682.611050]  ? notifier_chain_register+0x3e/0x90
    [  682.611556]  ? report_bug+0x148/0x170
    [  682.611977]  ? handle_bug+0x36/0x70
    [  682.612384]  ? exc_invalid_op+0x13/0x60
    [  682.612817]  ? asm_exc_invalid_op+0x16/0x20
    [  682.613284]  ? notifier_chain_register+0x3e/0x90
    [  682.613789]  atomic_notifier_chain_register+0x25/0x40
    [  682.614322]  mlx5_eswitch_enable_locked+0x1d4/0x3b0 [mlx5_core]
    [  682.614965]  mlx5_eswitch_enable+0xc9/0x100 [mlx5_core]
    [  682.615551]  mlx5_device_enable_sriov+0x25/0x340 [mlx5_core]
    [  682.616170]  mlx5_core_sriov_configure+0x50/0x170 [mlx5_core]
    [  682.616789]  sriov_numvfs_store+0xb0/0x1b0
    [  682.617248]  kernfs_fop_write_iter+0x117/0x1a0
    [  682.617734]  vfs_write+0x231/0x3f0
    [  682.618138]  ksys_write+0x63/0xe0
    [  682.618536]  do_syscall_64+0x4c/0x100
    [  682.618958]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    Fixes: 7624e58a8b3a ("net/mlx5: E-switch, register event handler before arming the event")
    Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5e: Don't call cleanup on profile rollback failure [+ + +]
Author: Cosmin Ratiu <cratiu@nvidia.com>
Date:   Tue Oct 15 12:32:08 2024 +0300

    net/mlx5e: Don't call cleanup on profile rollback failure
    
    [ Upstream commit 4dbc1d1a9f39c3711ad2a40addca04d07d9ab5d0 ]
    
    When profile rollback fails in mlx5e_netdev_change_profile, the netdev
    profile var is left set to NULL. Avoid a crash when unloading the driver
    by not calling profile->cleanup in such a case.
    
    This was encountered while testing, with the original trigger that
    the wq rescuer thread creation got interrupted (presumably due to
    Ctrl+C-ing modprobe), which gets converted to ENOMEM (-12) by
    mlx5e_priv_init, the profile rollback also fails for the same reason
    (signal still active) so the profile is left as NULL, leading to a crash
    later in _mlx5e_remove.
    
     [  732.473932] mlx5_core 0000:08:00.1: E-Switch: Unload vfs: mode(OFFLOADS), nvfs(2), necvfs(0), active vports(2)
     [  734.525513] workqueue: Failed to create a rescuer kthread for wq "mlx5e": -EINTR
     [  734.557372] mlx5_core 0000:08:00.1: mlx5e_netdev_init_profile:6235:(pid 6086): mlx5e_priv_init failed, err=-12
     [  734.559187] mlx5_core 0000:08:00.1 eth3: mlx5e_netdev_change_profile: new profile init failed, -12
     [  734.560153] workqueue: Failed to create a rescuer kthread for wq "mlx5e": -EINTR
     [  734.589378] mlx5_core 0000:08:00.1: mlx5e_netdev_init_profile:6235:(pid 6086): mlx5e_priv_init failed, err=-12
     [  734.591136] mlx5_core 0000:08:00.1 eth3: mlx5e_netdev_change_profile: failed to rollback to orig profile, -12
     [  745.537492] BUG: kernel NULL pointer dereference, address: 0000000000000008
     [  745.538222] #PF: supervisor read access in kernel mode
    <snipped>
     [  745.551290] Call Trace:
     [  745.551590]  <TASK>
     [  745.551866]  ? __die+0x20/0x60
     [  745.552218]  ? page_fault_oops+0x150/0x400
     [  745.555307]  ? exc_page_fault+0x79/0x240
     [  745.555729]  ? asm_exc_page_fault+0x22/0x30
     [  745.556166]  ? mlx5e_remove+0x6b/0xb0 [mlx5_core]
     [  745.556698]  auxiliary_bus_remove+0x18/0x30
     [  745.557134]  device_release_driver_internal+0x1df/0x240
     [  745.557654]  bus_remove_device+0xd7/0x140
     [  745.558075]  device_del+0x15b/0x3c0
     [  745.558456]  mlx5_rescan_drivers_locked.part.0+0xb1/0x2f0 [mlx5_core]
     [  745.559112]  mlx5_unregister_device+0x34/0x50 [mlx5_core]
     [  745.559686]  mlx5_uninit_one+0x46/0xf0 [mlx5_core]
     [  745.560203]  remove_one+0x4e/0xd0 [mlx5_core]
     [  745.560694]  pci_device_remove+0x39/0xa0
     [  745.561112]  device_release_driver_internal+0x1df/0x240
     [  745.561631]  driver_detach+0x47/0x90
     [  745.562022]  bus_remove_driver+0x84/0x100
     [  745.562444]  pci_unregister_driver+0x3b/0x90
     [  745.562890]  mlx5_cleanup+0xc/0x1b [mlx5_core]
     [  745.563415]  __x64_sys_delete_module+0x14d/0x2f0
     [  745.563886]  ? kmem_cache_free+0x1b0/0x460
     [  745.564313]  ? lockdep_hardirqs_on_prepare+0xe2/0x190
     [  745.564825]  do_syscall_64+0x6d/0x140
     [  745.565223]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
     [  745.565725] RIP: 0033:0x7f1579b1288b
    
    Fixes: 3ef14e463f6e ("net/mlx5e: Separate between netdev objects and mlx5e profiles initialization")
    Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com>
    Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sched: act_api: deny mismatched skip_sw/skip_hw flags for actions created by classifiers [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Thu Oct 17 19:10:48 2024 +0300

    net/sched: act_api: deny mismatched skip_sw/skip_hw flags for actions created by classifiers
    
    [ Upstream commit 34d35b4edbbe890a91bec939bfd29ad92517a52b ]
    
    tcf_action_init() has logic for checking mismatches between action and
    filter offload flags (skip_sw/skip_hw). AFAIU, this is intended to run
    on the transition between the new tc_act_bind(flags) returning true (aka
    now gets bound to classifier) and tc_act_bind(act->tcfa_flags) returning
    false (aka action was not bound to classifier before). Otherwise, the
    check is skipped.
    
    For the case where an action is not standalone, but rather it was
    created by a classifier and is bound to it, tcf_action_init() skips the
    check entirely, and this means it allows mismatched flags to occur.
    
    Taking the matchall classifier code path as an example (with mirred as
    an action), the reason is the following:
    
     1 | mall_change()
     2 | -> mall_replace_hw_filter()
     3 |   -> tcf_exts_validate_ex()
     4 |      -> flags |= TCA_ACT_FLAGS_BIND;
     5 |      -> tcf_action_init()
     6 |         -> tcf_action_init_1()
     7 |            -> a_o->init()
     8 |               -> tcf_mirred_init()
     9 |                  -> tcf_idr_create_from_flags()
    10 |                     -> tcf_idr_create()
    11 |                        -> p->tcfa_flags = flags;
    12 |         -> tc_act_bind(flags))
    13 |         -> tc_act_bind(act->tcfa_flags)
    
    When invoked from tcf_exts_validate_ex() like matchall does (but other
    classifiers validate their extensions as well), tcf_action_init() runs
    in a call path where "flags" always contains TCA_ACT_FLAGS_BIND (set by
    line 4). So line 12 is always true, and line 13 is always true as well.
    No transition ever takes place, and the check is skipped.
    
    The code was added in this form in commit c86e0209dc77 ("flow_offload:
    validate flags of filter and actions"), but I'm attributing the blame
    even earlier in that series, to when TCA_ACT_FLAGS_SKIP_HW and
    TCA_ACT_FLAGS_SKIP_SW were added to the UAPI.
    
    Following the development process of this change, the check did not
    always exist in this form. A change took place between v3 [1] and v4 [2],
    AFAIU due to review feedback that it doesn't make sense for action flags
    to be different than classifier flags. I think I agree with that
    feedback, but it was translated into code that omits enforcing this for
    "classic" actions created at the same time with the filters themselves.
    
    There are 3 more important cases to discuss. First there is this command:
    
    $ tc qdisc add dev eth0 clasct
    $ tc filter add dev eth0 ingress matchall skip_sw \
            action mirred ingress mirror dev eth1
    
    which should be allowed, because prior to the concept of dedicated
    action flags, it used to work and it used to mean the action inherited
    the skip_sw/skip_hw flags from the classifier. It's not a mismatch.
    
    Then we have this command:
    
    $ tc qdisc add dev eth0 clasct
    $ tc filter add dev eth0 ingress matchall skip_sw \
            action mirred ingress mirror dev eth1 skip_hw
    
    where there is a mismatch and it should be rejected.
    
    Finally, we have:
    
    $ tc qdisc add dev eth0 clasct
    $ tc filter add dev eth0 ingress matchall skip_sw \
            action mirred ingress mirror dev eth1 skip_sw
    
    where the offload flags coincide, and this should be treated the same as
    the first command based on inheritance, and accepted.
    
    [1]: https://lore.kernel.org/netdev/20211028110646.13791-9-simon.horman@corigine.com/
    [2]: https://lore.kernel.org/netdev/20211118130805.23897-10-simon.horman@corigine.com/
    Fixes: 7adc57651211 ("flow_offload: add skip_hw and skip_sw to control if offload the action")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Tested-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20241017161049.3570037-1-vladimir.oltean@nxp.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/smc: Fix memory leak when using percpu refs [+ + +]
Author: Kai Shen <KaiShen@linux.alibaba.com>
Date:   Thu Oct 10 11:56:24 2024 +0000

    net/smc: Fix memory leak when using percpu refs
    
    [ Upstream commit 25c12b459db8365fee84b63f3dd7910f70627f29 ]
    
    This patch adds missing percpu_ref_exit when releasing percpu refs.
    When releasing percpu refs, percpu_ref_exit should be called.
    Otherwise, memory leak happens.
    
    Fixes: 79a22238b4f2 ("net/smc: Use percpu ref for wr tx reference")
    Signed-off-by: Kai Shen <KaiShen@linux.alibaba.com>
    Reviewed-by: Dust Li <dust.li@linux.alibaba.com>
    Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
    Link: https://patch.msgid.link/20241010115624.7769-1-KaiShen@linux.alibaba.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: Fix searching in list of known pnetids in smc_pnet_add_pnetid [+ + +]
Author: Li RongQing <lirongqing@baidu.com>
Date:   Mon Oct 14 19:53:21 2024 +0800

    net/smc: Fix searching in list of known pnetids in smc_pnet_add_pnetid
    
    [ Upstream commit 82ac39ebd6db0c9f7a97a934bda1e3e101a9d201 ]
    
    pnetid of pi (not newly allocated pe) should be compared
    
    Fixes: e888a2e8337c ("net/smc: introduce list of pnetids for Ethernet devices")
    Reviewed-by: D. Wythe <alibuda@linux.alibaba.com>
    Reviewed-by: Wen Gu <guwen@linux.alibaba.com>
    Signed-off-by: Li RongQing <lirongqing@baidu.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Gerd Bayer <gbayer@linux.ibm.com>
    Link: https://patch.msgid.link/20241014115321.33234-1-lirongqing@baidu.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sun3_82586: fix potential memory leak in sun3_82586_send_packet() [+ + +]
Author: Wang Hai <wanghai38@huawei.com>
Date:   Tue Oct 15 22:41:48 2024 +0800

    net/sun3_82586: fix potential memory leak in sun3_82586_send_packet()
    
    [ Upstream commit 2cb3f56e827abb22c4168ad0c1bbbf401bb2f3b8 ]
    
    The sun3_82586_send_packet() returns NETDEV_TX_OK without freeing skb
    in case of skb->len being too long, add dev_kfree_skb() to fix it.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Wang Hai <wanghai38@huawei.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Message-ID: <20241015144148.7918-1-wanghai38@huawei.com>
    Signed-off-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: bcmasp: fix potential memory leak in bcmasp_xmit() [+ + +]
Author: Wang Hai <wanghai38@huawei.com>
Date:   Mon Oct 14 22:59:01 2024 +0800

    net: bcmasp: fix potential memory leak in bcmasp_xmit()
    
    [ Upstream commit fed07d3eb8a8d9fcc0e455175a89bc6445d6faed ]
    
    The bcmasp_xmit() returns NETDEV_TX_OK without freeing skb
    in case of mapping fails, add dev_kfree_skb() to fix it.
    
    Fixes: 490cb412007d ("net: bcmasp: Add support for ASP2.0 Ethernet controller")
    Signed-off-by: Wang Hai <wanghai38@huawei.com>
    Acked-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20241014145901.48940-1-wanghai38@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: microchip: disable EEE for KSZ879x/KSZ877x/KSZ876x [+ + +]
Author: Tim Harvey <tharvey@gateworks.com>
Date:   Fri Oct 18 09:06:58 2024 -0700

    net: dsa: microchip: disable EEE for KSZ879x/KSZ877x/KSZ876x
    
    [ Upstream commit ee76eb24343bdd5450eb87572865a4d7fffd335b ]
    
    The well-known errata regarding EEE not being functional on various KSZ
    switches has been refactored a few times. Recently the refactoring has
    excluded several switches that the errata should also apply to.
    
    Disable EEE for additional switches with this errata and provide
    additional comments referring to the public errata document.
    
    The original workaround for the errata was applied with a register
    write to manually disable the EEE feature in MMD 7:60 which was being
    applied for KSZ9477/KSZ9897/KSZ9567 switch ID's.
    
    Then came commit 26dd2974c5b5 ("net: phy: micrel: Move KSZ9477 errata
    fixes to PHY driver") and commit 6068e6d7ba50 ("net: dsa: microchip:
    remove KSZ9477 PHY errata handling") which moved the errata from the
    switch driver to the PHY driver but only for PHY_ID_KSZ9477 (PHY ID)
    however that PHY code was dead code because an entry was never added
    for PHY_ID_KSZ9477 via MODULE_DEVICE_TABLE.
    
    This was apparently realized much later and commit 54a4e5c16382 ("net:
    phy: micrel: add Microchip KSZ 9477 to the device table") added the
    PHY_ID_KSZ9477 to the PHY driver but as the errata was only being
    applied to PHY_ID_KSZ9477 it's not completely clear what switches
    that relates to.
    
    Later commit 6149db4997f5 ("net: phy: micrel: fix KSZ9477 PHY issues
    after suspend/resume") breaks this again for all but KSZ9897 by only
    applying the errata for that PHY ID.
    
    Following that this was affected with commit 08c6d8bae48c("net: phy:
    Provide Module 4 KSZ9477 errata (DS80000754C)") which removes
    the blatant register write to MMD 7:60 and replaces it by
    setting phydev->eee_broken_modes = -1 so that the generic phy-c45 code
    disables EEE but this is only done for the KSZ9477_CHIP_ID (Switch ID).
    
    Lastly commit 0411f73c13af ("net: dsa: microchip: disable EEE for
    KSZ8567/KSZ9567/KSZ9896/KSZ9897.") adds some additional switches
    that were missing to the errata due to the previous changes.
    
    This commit adds an additional set of switches.
    
    Fixes: 0411f73c13af ("net: dsa: microchip: disable EEE for KSZ8567/KSZ9567/KSZ9896/KSZ9897.")
    Signed-off-by: Tim Harvey <tharvey@gateworks.com>
    Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Link: https://patch.msgid.link/20241018160658.781564-1-tharvey@gateworks.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: mv88e6xxx: Fix error when setting port policy on mv88e6393x [+ + +]
Author: Peter Rashleigh <peter@rashleigh.ca>
Date:   Tue Oct 15 21:08:22 2024 -0700

    net: dsa: mv88e6xxx: Fix error when setting port policy on mv88e6393x
    
    [ Upstream commit 12bc14949c4a7272b509af0f1022a0deeb215fd8 ]
    
    mv88e6393x_port_set_policy doesn't correctly shift the ptr value when
    converting the policy format between the old and new styles, so the
    target register ends up with the ptr being written over the data bits.
    
    Shift the pointer to align with the format expected by
    mv88e6393x_port_policy_write().
    
    Fixes: 6584b26020fc ("net: dsa: mv88e6xxx: implement .port_set_policy for Amethyst")
    Signed-off-by: Peter Rashleigh <peter@rashleigh.ca>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Message-ID: <20241016040822.3917-1-peter@rashleigh.ca>
    Signed-off-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: mv88e6xxx: Fix the max_vid definition for the MV88E6361 [+ + +]
Author: Peter Rashleigh <peter@rashleigh.ca>
Date:   Mon Oct 14 13:43:42 2024 -0700

    net: dsa: mv88e6xxx: Fix the max_vid definition for the MV88E6361
    
    [ Upstream commit 1833d8a26f057128fd63e126b4428203ece84684 ]
    
    According to the Marvell datasheet the 88E6361 has two VTU pages
    (4k VIDs per page) so the max_vid should be 8191, not 4095.
    
    In the current implementation mv88e6xxx_vtu_walk() gives unexpected
    results because of this error. I verified that mv88e6xxx_vtu_walk()
    works correctly on the MV88E6361 with this patch in place.
    
    Fixes: 12899f299803 ("net: dsa: mv88e6xxx: enable support for 88E6361 switch")
    Signed-off-by: Peter Rashleigh <peter@rashleigh.ca>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://patch.msgid.link/20241014204342.5852-1-peter@rashleigh.ca
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: mv88e6xxx: group cycle counter coefficients [+ + +]
Author: Shenghao Yang <me@shenghaoyang.info>
Date:   Sun Oct 20 14:38:28 2024 +0800

    net: dsa: mv88e6xxx: group cycle counter coefficients
    
    [ Upstream commit 67af86afff74c914944374a103c04e4d9868dd15 ]
    
    Instead of having them as individual fields in ptp_ops, wrap the
    coefficients in a separate struct so they can be referenced together.
    
    Fixes: de776d0d316f ("net: dsa: mv88e6xxx: add support for mv88e6393x family")
    Signed-off-by: Shenghao Yang <me@shenghaoyang.info>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: mv88e6xxx: read cycle counter period from hardware [+ + +]
Author: Shenghao Yang <me@shenghaoyang.info>
Date:   Sun Oct 20 14:38:29 2024 +0800

    net: dsa: mv88e6xxx: read cycle counter period from hardware
    
    [ Upstream commit 7e3c18097a709e9b958e721066e5fe76e563739b ]
    
    Instead of relying on a fixed mapping of hardware family to cycle
    counter frequency, pull this information from the
    MV88E6XXX_TAI_CLOCK_PERIOD register.
    
    This lets us support switches whose cycle counter frequencies depend on
    board design.
    
    Fixes: de776d0d316f ("net: dsa: mv88e6xxx: add support for mv88e6393x family")
    Suggested-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Shenghao Yang <me@shenghaoyang.info>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: mv88e6xxx: support 4000ps cycle counter period [+ + +]
Author: Shenghao Yang <me@shenghaoyang.info>
Date:   Sun Oct 20 14:38:30 2024 +0800

    net: dsa: mv88e6xxx: support 4000ps cycle counter period
    
    [ Upstream commit 3e65ede526cf4f95636dbc835598d100c7668ab3 ]
    
    The MV88E6393X family of devices can run its cycle counter off
    an internal 250MHz clock instead of an external 125MHz one.
    
    Add support for this cycle counter period by adding another set
    of coefficients and lowering the periodic cycle counter read interval
    to compensate for faster overflows at the increased frequency.
    
    Otherwise, the PHC runs at 2x real time in userspace and cannot be
    synchronized.
    
    Fixes: de776d0d316f ("net: dsa: mv88e6xxx: add support for mv88e6393x family")
    Signed-off-by: Shenghao Yang <me@shenghaoyang.info>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: vsc73xx: fix reception from VLAN-unaware bridges [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Mon Oct 14 18:30:41 2024 +0300

    net: dsa: vsc73xx: fix reception from VLAN-unaware bridges
    
    [ Upstream commit 11d06f0aaef89f4cad68b92510bd9decff2d7b87 ]
    
    Similar to the situation described for sja1105 in commit 1f9fc48fd302
    ("net: dsa: sja1105: fix reception from VLAN-unaware bridges"), the
    vsc73xx driver uses tag_8021q and doesn't need the ds->untag_bridge_pvid
    request. In fact, this option breaks packet reception.
    
    The ds->untag_bridge_pvid option strips VLANs from packets received on
    VLAN-unaware bridge ports. But those VLANs should already be stripped
    by tag_vsc73xx_8021q.c as part of vsc73xx_rcv() - they are not VLANs in
    VLAN-unaware mode, but DSA tags. Thus, dsa_software_vlan_untag() tries
    to untag a VLAN that doesn't exist, corrupting the packet.
    
    Fixes: 93e4649efa96 ("net: dsa: provide a software untagging function on RX for VLAN-aware bridges")
    Tested-by: Pawel Dembicki <paweldembicki@gmail.com>
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Link: https://patch.msgid.link/20241014153041.1110364-1-vladimir.oltean@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: aeroflex: fix potential memory leak in greth_start_xmit_gbit() [+ + +]
Author: Wang Hai <wanghai38@huawei.com>
Date:   Sat Oct 12 19:04:34 2024 +0800

    net: ethernet: aeroflex: fix potential memory leak in greth_start_xmit_gbit()
    
    [ Upstream commit cf57b5d7a2aad456719152ecd12007fe031628a3 ]
    
    The greth_start_xmit_gbit() returns NETDEV_TX_OK without freeing skb
    in case of skb->len being too long, add dev_kfree_skb() to fix it.
    
    Fixes: d4c41139df6e ("net: Add Aeroflex Gaisler 10/100/1G Ethernet MAC driver")
    Signed-off-by: Wang Hai <wanghai38@huawei.com>
    Reviewed-by: Gerhard Engleder <gerhard@engleder-embedded.com>
    Link: https://patch.msgid.link/20241012110434.49265-1-wanghai38@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: mtk_eth_soc: fix memory corruption during fq dma init [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Tue Oct 15 10:17:55 2024 +0200

    net: ethernet: mtk_eth_soc: fix memory corruption during fq dma init
    
    [ Upstream commit 88806efc034a9830f483963326b99930ad519af1 ]
    
    The loop responsible for allocating up to MTK_FQ_DMA_LENGTH buffers must
    only touch as many descriptors, otherwise it ends up corrupting unrelated
    memory. Fix the loop iteration count accordingly.
    
    Fixes: c57e55819443 ("net: ethernet: mtk_eth_soc: handle dma buffer size soc specific")
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20241015081755.31060-1-nbd@nbd.name
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: rtsn: fix potential memory leak in rtsn_start_xmit() [+ + +]
Author: Wang Hai <wanghai38@huawei.com>
Date:   Mon Oct 14 22:42:50 2024 +0800

    net: ethernet: rtsn: fix potential memory leak in rtsn_start_xmit()
    
    [ Upstream commit c186b7a7f2387d9e09ad408420570be025b187c5 ]
    
    The rtsn_start_xmit() returns NETDEV_TX_OK without freeing skb
    in case of skb->len being too long, add dev_kfree_skb_any() to fix it.
    
    Fixes: b0d3969d2b4d ("net: ethernet: rtsn: Add support for Renesas Ethernet-TSN")
    Signed-off-by: Wang Hai <wanghai38@huawei.com>
    Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20241014144250.38802-1-wanghai38@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: fix races in netdev_tx_sent_queue()/dev_watchdog() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Oct 15 19:41:18 2024 +0000

    net: fix races in netdev_tx_sent_queue()/dev_watchdog()
    
    [ Upstream commit 95ecba62e2fd201bcdcca636f5d774f1cd4f1458 ]
    
    Some workloads hit the infamous dev_watchdog() message:
    
    "NETDEV WATCHDOG: eth0 (xxxx): transmit queue XX timed out"
    
    It seems possible to hit this even for perfectly normal
    BQL enabled drivers:
    
    1) Assume a TX queue was idle for more than dev->watchdog_timeo
       (5 seconds unless changed by the driver)
    
    2) Assume a big packet is sent, exceeding current BQL limit.
    
    3) Driver ndo_start_xmit() puts the packet in TX ring,
       and netdev_tx_sent_queue() is called.
    
    4) QUEUE_STATE_STACK_XOFF could be set from netdev_tx_sent_queue()
       before txq->trans_start has been written.
    
    5) txq->trans_start is written later, from netdev_start_xmit()
    
        if (rc == NETDEV_TX_OK)
              txq_trans_update(txq)
    
    dev_watchdog() running on another cpu could read the old
    txq->trans_start, and then see QUEUE_STATE_STACK_XOFF, because 5)
    did not happen yet.
    
    To solve the issue, write txq->trans_start right before one XOFF bit
    is set :
    
    - _QUEUE_STATE_DRV_XOFF from netif_tx_stop_queue()
    - __QUEUE_STATE_STACK_XOFF from netdev_tx_sent_queue()
    
    From dev_watchdog(), we have to read txq->state before txq->trans_start.
    
    Add memory barriers to enforce correct ordering.
    
    In the future, we could avoid writing over txq->trans_start for normal
    operations, and rename this field to txq->xoff_start_time.
    
    Fixes: bec251bc8b6a ("net: no longer stop all TX queues in dev_watchdog()")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Link: https://patch.msgid.link/20241015194118.3951657-1-edumazet@google.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: phy: dp83822: Fix reset pin definitions [+ + +]
Author: Michel Alex <Alex.Michel@wiedemann-group.com>
Date:   Wed Oct 16 12:11:15 2024 +0000

    net: phy: dp83822: Fix reset pin definitions
    
    commit de96f6a3003513c796bbe4e23210a446913f5c00 upstream.
    
    This change fixes a rare issue where the PHY fails to detect a link
    due to incorrect reset behavior.
    
    The SW_RESET definition was incorrectly assigned to bit 14, which is the
    Digital Restart bit according to the datasheet. This commit corrects
    SW_RESET to bit 15 and assigns DIG_RESTART to bit 14 as per the
    datasheet specifications.
    
    The SW_RESET define is only used in the phy_reset function, which fully
    re-initializes the PHY after the reset is performed. The change in the
    bit definitions should not have any negative impact on the functionality
    of the PHY.
    
    v2:
    - added Fixes tag
    - improved commit message
    
    Cc: stable@vger.kernel.org
    Fixes: 5dc39fd5ef35 ("net: phy: DP83822: Add ability to advertise Fiber connection")
    Signed-off-by: Alex Michel <alex.michel@wiedemann-group.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Message-ID: <AS1P250MB0608A798661549BF83C4B43EA9462@AS1P250MB0608.EURP250.PROD.OUTLOOK.COM>
    Signed-off-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: plip: fix break; causing plip to never transmit [+ + +]
Author: Jakub Boehm <boehm.jakub@gmail.com>
Date:   Tue Oct 15 17:16:04 2024 +0200

    net: plip: fix break; causing plip to never transmit
    
    [ Upstream commit f99cf996ba5a315f8b9f13cc21dff0604a0eb749 ]
    
    Since commit
      71ae2cb30531 ("net: plip: Fix fall-through warnings for Clang")
    
    plip was not able to send any packets, this patch replaces one
    unintended break; with fallthrough; which was originally missed by
    commit 9525d69a3667 ("net: plip: mark expected switch fall-throughs").
    
    I have verified with a real hardware PLIP connection that everything
    works once again after applying this patch.
    
    Fixes: 71ae2cb30531 ("net: plip: Fix fall-through warnings for Clang")
    Signed-off-by: Jakub Boehm <boehm.jakub@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Message-ID: <20241015-net-plip-tx-fix-v1-1-32d8be1c7e0b@gmail.com>
    Signed-off-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: pse-pd: Fix out of bound for loop [+ + +]
Author: Kory Maincent <kory.maincent@bootlin.com>
Date:   Tue Oct 15 15:02:54 2024 +0200

    net: pse-pd: Fix out of bound for loop
    
    [ Upstream commit f2767a41959e60763949c73ee180e40c686e807e ]
    
    Adjust the loop limit to prevent out-of-bounds access when iterating over
    PI structures. The loop should not reach the index pcdev->nr_lines since
    we allocate exactly pcdev->nr_lines number of PI structures. This fix
    ensures proper bounds are maintained during iterations.
    
    Fixes: 9be9567a7c59 ("net: pse-pd: Add support for PSE PIs")
    Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Message-ID: <20241015130255.125508-1-kory.maincent@bootlin.com>
    Signed-off-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ravb: Only advertise Rx/Tx timestamps if hardware supports it [+ + +]
Author: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Date:   Mon Oct 14 14:43:43 2024 +0200

    net: ravb: Only advertise Rx/Tx timestamps if hardware supports it
    
    [ Upstream commit 126e799602f45e9ce1ded03ee9eadda68bf470e0 ]
    
    Recent work moving the reporting of Rx software timestamps to the core
    [1] highlighted an issue where hardware time stamping was advertised
    for the platforms where it is not supported.
    
    Fix this by covering advertising support for hardware timestamps only if
    the hardware supports it. Due to the Tx implementation in RAVB software
    Tx timestamping is also only considered if the hardware supports
    hardware timestamps. This should be addressed in future, but this fix
    only reflects what the driver currently implements.
    
    1. Commit 277901ee3a26 ("ravb: Remove setting of RX software timestamp")
    
    Fixes: 7e09a052dc4e ("ravb: Exclude gPTP feature support for RZ/G2L")
    Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
    Reviewed-by: Paul Barker <paul.barker.ct@bp.renesas.com>
    Tested-by: Paul Barker <paul.barker.ct@bp.renesas.com>
    Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Link: https://patch.msgid.link/20241014124343.3875285-1-niklas.soderlund+renesas@ragnatech.se
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sched: fix use-after-free in taprio_change() [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Fri Oct 18 08:13:38 2024 +0300

    net: sched: fix use-after-free in taprio_change()
    
    [ Upstream commit f504465970aebb2467da548f7c1efbbf36d0f44b ]
    
    In 'taprio_change()', 'admin' pointer may become dangling due to sched
    switch / removal caused by 'advance_sched()', and critical section
    protected by 'q->current_entry_lock' is too small to prevent from such
    a scenario (which causes use-after-free detected by KASAN). Fix this
    by prefer 'rcu_replace_pointer()' over 'rcu_assign_pointer()' to update
    'admin' immediately before an attempt to schedule freeing.
    
    Fixes: a3d43c0d56f1 ("taprio: Add support adding an admin schedule")
    Reported-by: syzbot+b65e0af58423fc8a73aa@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=b65e0af58423fc8a73aa
    Acked-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Link: https://patch.msgid.link/20241018051339.418890-1-dmantipov@yandex.ru
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sched: use RCU read-side critical section in taprio_dump() [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Fri Oct 18 08:13:39 2024 +0300

    net: sched: use RCU read-side critical section in taprio_dump()
    
    [ Upstream commit b22db8b8befe90b61c98626ca1a2fbb0505e9fe3 ]
    
    Fix possible use-after-free in 'taprio_dump()' by adding RCU
    read-side critical section there. Never seen on x86 but
    found on a KASAN-enabled arm64 system when investigating
    https://syzkaller.appspot.com/bug?extid=b65e0af58423fc8a73aa:
    
    [T15862] BUG: KASAN: slab-use-after-free in taprio_dump+0xa0c/0xbb0
    [T15862] Read of size 4 at addr ffff0000d4bb88f8 by task repro/15862
    [T15862]
    [T15862] CPU: 0 UID: 0 PID: 15862 Comm: repro Not tainted 6.11.0-rc1-00293-gdefaf1a2113a-dirty #2
    [T15862] Hardware name: QEMU QEMU Virtual Machine, BIOS edk2-20240524-5.fc40 05/24/2024
    [T15862] Call trace:
    [T15862]  dump_backtrace+0x20c/0x220
    [T15862]  show_stack+0x2c/0x40
    [T15862]  dump_stack_lvl+0xf8/0x174
    [T15862]  print_report+0x170/0x4d8
    [T15862]  kasan_report+0xb8/0x1d4
    [T15862]  __asan_report_load4_noabort+0x20/0x2c
    [T15862]  taprio_dump+0xa0c/0xbb0
    [T15862]  tc_fill_qdisc+0x540/0x1020
    [T15862]  qdisc_notify.isra.0+0x330/0x3a0
    [T15862]  tc_modify_qdisc+0x7b8/0x1838
    [T15862]  rtnetlink_rcv_msg+0x3c8/0xc20
    [T15862]  netlink_rcv_skb+0x1f8/0x3d4
    [T15862]  rtnetlink_rcv+0x28/0x40
    [T15862]  netlink_unicast+0x51c/0x790
    [T15862]  netlink_sendmsg+0x79c/0xc20
    [T15862]  __sock_sendmsg+0xe0/0x1a0
    [T15862]  ____sys_sendmsg+0x6c0/0x840
    [T15862]  ___sys_sendmsg+0x1ac/0x1f0
    [T15862]  __sys_sendmsg+0x110/0x1d0
    [T15862]  __arm64_sys_sendmsg+0x74/0xb0
    [T15862]  invoke_syscall+0x88/0x2e0
    [T15862]  el0_svc_common.constprop.0+0xe4/0x2a0
    [T15862]  do_el0_svc+0x44/0x60
    [T15862]  el0_svc+0x50/0x184
    [T15862]  el0t_64_sync_handler+0x120/0x12c
    [T15862]  el0t_64_sync+0x190/0x194
    [T15862]
    [T15862] Allocated by task 15857:
    [T15862]  kasan_save_stack+0x3c/0x70
    [T15862]  kasan_save_track+0x20/0x3c
    [T15862]  kasan_save_alloc_info+0x40/0x60
    [T15862]  __kasan_kmalloc+0xd4/0xe0
    [T15862]  __kmalloc_cache_noprof+0x194/0x334
    [T15862]  taprio_change+0x45c/0x2fe0
    [T15862]  tc_modify_qdisc+0x6a8/0x1838
    [T15862]  rtnetlink_rcv_msg+0x3c8/0xc20
    [T15862]  netlink_rcv_skb+0x1f8/0x3d4
    [T15862]  rtnetlink_rcv+0x28/0x40
    [T15862]  netlink_unicast+0x51c/0x790
    [T15862]  netlink_sendmsg+0x79c/0xc20
    [T15862]  __sock_sendmsg+0xe0/0x1a0
    [T15862]  ____sys_sendmsg+0x6c0/0x840
    [T15862]  ___sys_sendmsg+0x1ac/0x1f0
    [T15862]  __sys_sendmsg+0x110/0x1d0
    [T15862]  __arm64_sys_sendmsg+0x74/0xb0
    [T15862]  invoke_syscall+0x88/0x2e0
    [T15862]  el0_svc_common.constprop.0+0xe4/0x2a0
    [T15862]  do_el0_svc+0x44/0x60
    [T15862]  el0_svc+0x50/0x184
    [T15862]  el0t_64_sync_handler+0x120/0x12c
    [T15862]  el0t_64_sync+0x190/0x194
    [T15862]
    [T15862] Freed by task 6192:
    [T15862]  kasan_save_stack+0x3c/0x70
    [T15862]  kasan_save_track+0x20/0x3c
    [T15862]  kasan_save_free_info+0x4c/0x80
    [T15862]  poison_slab_object+0x110/0x160
    [T15862]  __kasan_slab_free+0x3c/0x74
    [T15862]  kfree+0x134/0x3c0
    [T15862]  taprio_free_sched_cb+0x18c/0x220
    [T15862]  rcu_core+0x920/0x1b7c
    [T15862]  rcu_core_si+0x10/0x1c
    [T15862]  handle_softirqs+0x2e8/0xd64
    [T15862]  __do_softirq+0x14/0x20
    
    Fixes: 18cdd2f0998a ("net/sched: taprio: taprio_dump and taprio_change are protected by rtnl_mutex")
    Acked-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Link: https://patch.msgid.link/20241018051339.418890-2-dmantipov@yandex.ru
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sparx5: fix source port register when mirroring [+ + +]
Author: Daniel Machon <daniel.machon@microchip.com>
Date:   Wed Oct 9 14:49:56 2024 +0200

    net: sparx5: fix source port register when mirroring
    
    [ Upstream commit 8a6be4bd6fb319cee63d228e37c8dda5fd1eb74a ]
    
    When port mirroring is added to a port, the bit position of the source
    port, needs to be written to the register ANA_AC_PROBE_PORT_CFG.  This
    register is replicated for n_ports > 32, and therefore we need to derive
    the correct register from the port number.
    
    Before this patch, we wrongly calculate the register from portno /
    BITS_PER_BYTE, where the divisor ought to be 32, causing any port >=8 to
    be written to the wrong register. We fix this, by using do_div(), where
    the dividend is the register, the remainder is the bit position and the
    divisor is now 32.
    
    Fixes: 4e50d72b3b95 ("net: sparx5: add port mirroring implementation")
    Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20241009-mirroring-fix-v1-1-9ec962301989@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: dwmac-tegra: Fix link bring-up sequence [+ + +]
Author: Paritosh Dixit <paritoshd@nvidia.com>
Date:   Thu Oct 10 10:29:08 2024 -0400

    net: stmmac: dwmac-tegra: Fix link bring-up sequence
    
    [ Upstream commit 1cff6ff302f5703a627f9ee1d99131161ea2683e ]
    
    The Tegra MGBE driver sometimes fails to initialize, reporting the
    following error, and as a result, it is unable to acquire an IP
    address with DHCP:
    
     tegra-mgbe 6800000.ethernet: timeout waiting for link to become ready
    
    As per the recommendation from the Tegra hardware design team, fix this
    issue by:
    - clearing the PHY_RDY bit before setting the CDR_RESET bit and then
    setting PHY_RDY bit before clearing CDR_RESET bit. This ensures valid
    data is present at UPHY RX inputs before starting the CDR lock.
    - adding the required delays when bringing up the UPHY lane. Note we
    need to use delays here because there is no alternative, such as
    polling, for these cases. Using the usleep_range() instead of ndelay()
    as sleeping is preferred over busy wait loop.
    
    Without this change we would see link failures on boot sometimes as
    often as 1 in 5 boots. With this fix we have not observed any failures
    in over 1000 boots.
    
    Fixes: d8ca113724e7 ("net: stmmac: tegra: Add MGBE support")
    Signed-off-by: Paritosh Dixit <paritoshd@nvidia.com>
    Link: https://patch.msgid.link/20241010142908.602712-1-paritoshd@nvidia.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: systemport: fix potential memory leak in bcm_sysport_xmit() [+ + +]
Author: Wang Hai <wanghai38@huawei.com>
Date:   Mon Oct 14 22:51:15 2024 +0800

    net: systemport: fix potential memory leak in bcm_sysport_xmit()
    
    [ Upstream commit c401ed1c709948e57945485088413e1bb5e94bd1 ]
    
    The bcm_sysport_xmit() returns NETDEV_TX_OK without freeing skb
    in case of dma_map_single() fails, add dev_kfree_skb() to fix it.
    
    Fixes: 80105befdb4b ("net: systemport: add Broadcom SYSTEMPORT Ethernet MAC driver")
    Signed-off-by: Wang Hai <wanghai38@huawei.com>
    Link: https://patch.msgid.link/20241014145115.44977-1-wanghai38@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: usbnet: fix name regression [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Thu Oct 17 09:18:37 2024 +0200

    net: usb: usbnet: fix name regression
    
    [ Upstream commit 8a7d12d674ac6f2147c18f36d1e15f1a48060edf ]
    
    The fix for MAC addresses broke detection of the naming convention
    because it gave network devices no random MAC before bind()
    was called. This means that the check for the local assignment bit
    was always negative as the address was zeroed from allocation,
    instead of from overwriting the MAC with a unique hardware address.
    
    The correct check for whether bind() has altered the MAC is
    done with is_zero_ether_addr
    
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Reported-by: Greg Thelen <gthelen@google.com>
    Diagnosed-by: John Sperbeck <jsperbeck@google.com>
    Fixes: bab8eb0dd4cb9 ("usbnet: modern method to get random MAC")
    Link: https://patch.msgid.link/20241017071849.389636-1-oneukum@suse.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: usbnet: fix race in probe failure [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Thu Oct 10 15:19:14 2024 +0200

    net: usb: usbnet: fix race in probe failure
    
    [ Upstream commit b62f4c186c70aa235fef2da68d07325d85ca3ade ]
    
    The same bug as in the disconnect code path also exists
    in the case of a failure late during the probe process.
    The flag must also be set.
    
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Link: https://patch.msgid.link/20241010131934.1499695-1-oneukum@suse.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: wwan: fix global oob in wwan_rtnl_policy [+ + +]
Author: Lin Ma <linma@zju.edu.cn>
Date:   Tue Oct 15 21:16:21 2024 +0800

    net: wwan: fix global oob in wwan_rtnl_policy
    
    [ Upstream commit 47dd5447cab8ce30a847a0337d5341ae4c7476a7 ]
    
    The variable wwan_rtnl_link_ops assign a *bigger* maxtype which leads to
    a global out-of-bounds read when parsing the netlink attributes. Exactly
    same bug cause as the oob fixed in commit b33fb5b801c6 ("net: qualcomm:
    rmnet: fix global oob in rmnet_policy").
    
    ==================================================================
    BUG: KASAN: global-out-of-bounds in validate_nla lib/nlattr.c:388 [inline]
    BUG: KASAN: global-out-of-bounds in __nla_validate_parse+0x19d7/0x29a0 lib/nlattr.c:603
    Read of size 1 at addr ffffffff8b09cb60 by task syz.1.66276/323862
    
    CPU: 0 PID: 323862 Comm: syz.1.66276 Not tainted 6.1.70 #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0x177/0x231 lib/dump_stack.c:106
     print_address_description mm/kasan/report.c:284 [inline]
     print_report+0x14f/0x750 mm/kasan/report.c:395
     kasan_report+0x139/0x170 mm/kasan/report.c:495
     validate_nla lib/nlattr.c:388 [inline]
     __nla_validate_parse+0x19d7/0x29a0 lib/nlattr.c:603
     __nla_parse+0x3c/0x50 lib/nlattr.c:700
     nla_parse_nested_deprecated include/net/netlink.h:1269 [inline]
     __rtnl_newlink net/core/rtnetlink.c:3514 [inline]
     rtnl_newlink+0x7bc/0x1fd0 net/core/rtnetlink.c:3623
     rtnetlink_rcv_msg+0x794/0xef0 net/core/rtnetlink.c:6122
     netlink_rcv_skb+0x1de/0x420 net/netlink/af_netlink.c:2508
     netlink_unicast_kernel net/netlink/af_netlink.c:1326 [inline]
     netlink_unicast+0x74b/0x8c0 net/netlink/af_netlink.c:1352
     netlink_sendmsg+0x882/0xb90 net/netlink/af_netlink.c:1874
     sock_sendmsg_nosec net/socket.c:716 [inline]
     __sock_sendmsg net/socket.c:728 [inline]
     ____sys_sendmsg+0x5cc/0x8f0 net/socket.c:2499
     ___sys_sendmsg+0x21c/0x290 net/socket.c:2553
     __sys_sendmsg net/socket.c:2582 [inline]
     __do_sys_sendmsg net/socket.c:2591 [inline]
     __se_sys_sendmsg+0x19e/0x270 net/socket.c:2589
     do_syscall_x64 arch/x86/entry/common.c:51 [inline]
     do_syscall_64+0x45/0x90 arch/x86/entry/common.c:81
     entry_SYSCALL_64_after_hwframe+0x63/0xcd
    RIP: 0033:0x7f67b19a24ad
    RSP: 002b:00007f67b17febb8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    RAX: ffffffffffffffda RBX: 00007f67b1b45f80 RCX: 00007f67b19a24ad
    RDX: 0000000000000000 RSI: 0000000020005e40 RDI: 0000000000000004
    RBP: 00007f67b1a1e01d R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 00007ffd2513764f R14: 00007ffd251376e0 R15: 00007f67b17fed40
     </TASK>
    
    The buggy address belongs to the variable:
     wwan_rtnl_policy+0x20/0x40
    
    The buggy address belongs to the physical page:
    page:ffffea00002c2700 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0xb09c
    flags: 0xfff00000001000(reserved|node=0|zone=1|lastcpupid=0x7ff)
    raw: 00fff00000001000 ffffea00002c2708 ffffea00002c2708 0000000000000000
    raw: 0000000000000000 0000000000000000 00000001ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    page_owner info is not present (never set?)
    
    Memory state around the buggy address:
     ffffffff8b09ca00: 05 f9 f9 f9 05 f9 f9 f9 00 01 f9 f9 00 01 f9 f9
     ffffffff8b09ca80: 00 00 00 05 f9 f9 f9 f9 00 00 03 f9 f9 f9 f9 f9
    >ffffffff8b09cb00: 00 00 00 00 05 f9 f9 f9 00 00 00 00 f9 f9 f9 f9
                                                           ^
     ffffffff8b09cb80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    ==================================================================
    
    According to the comment of `nla_parse_nested_deprecated`, use correct size
    `IFLA_WWAN_MAX` here to fix this issue.
    
    Fixes: 88b710532e53 ("wwan: add interface creation support")
    Signed-off-by: Lin Ma <linma@zju.edu.cn>
    Reviewed-by: Loic Poulain <loic.poulain@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20241015131621.47503-1-linma@zju.edu.cn
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: xilinx: axienet: fix potential memory leak in axienet_start_xmit() [+ + +]
Author: Wang Hai <wanghai38@huawei.com>
Date:   Mon Oct 14 22:37:04 2024 +0800

    net: xilinx: axienet: fix potential memory leak in axienet_start_xmit()
    
    [ Upstream commit 99714e37e8333bbc22496fe80f241d5b35380e83 ]
    
    The axienet_start_xmit() returns NETDEV_TX_OK without freeing skb
    in case of dma_map_single() fails, add dev_kfree_skb_any() to fix it.
    
    Fixes: 71791dc8bdea ("net: axienet: Check for DMA mapping errors")
    Signed-off-by: Wang Hai <wanghai38@huawei.com>
    Reviewed-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
    Link: https://patch.msgid.link/20241014143704.31938-1-wanghai38@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netdevsim: use cond_resched() in nsim_dev_trap_report_work() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Sat Oct 12 09:42:30 2024 +0000

    netdevsim: use cond_resched() in nsim_dev_trap_report_work()
    
    [ Upstream commit a1494d532e28598bde7a5544892ef9c7dbfafa93 ]
    
    I am still seeing many syzbot reports hinting that syzbot
    might fool nsim_dev_trap_report_work() with hundreds of ports [1]
    
    Lets use cond_resched(), and system_unbound_wq
    instead of implicit system_wq.
    
    [1]
    INFO: task syz-executor:20633 blocked for more than 143 seconds.
          Not tainted 6.12.0-rc2-syzkaller-00205-g1d227fcc7222 #0
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    task:syz-executor    state:D stack:25856 pid:20633 tgid:20633 ppid:1      flags:0x00004006
    ...
    NMI backtrace for cpu 1
    CPU: 1 UID: 0 PID: 16760 Comm: kworker/1:0 Not tainted 6.12.0-rc2-syzkaller-00205-g1d227fcc7222 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
    Workqueue: events nsim_dev_trap_report_work
     RIP: 0010:__sanitizer_cov_trace_pc+0x0/0x70 kernel/kcov.c:210
    Code: 89 fb e8 23 00 00 00 48 8b 3d 04 fb 9c 0c 48 89 de 5b e9 c3 c7 5d 00 0f 1f 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 <f3> 0f 1e fa 48 8b 04 24 65 48 8b 0c 25 c0 d7 03 00 65 8b 15 60 f0
    RSP: 0018:ffffc90000a187e8 EFLAGS: 00000246
    RAX: 0000000000000100 RBX: ffffc90000a188e0 RCX: ffff888027d3bc00
    RDX: ffff888027d3bc00 RSI: 0000000000000000 RDI: 0000000000000000
    RBP: ffff88804a2e6000 R08: ffffffff8a4bc495 R09: ffffffff89da3577
    R10: 0000000000000004 R11: ffffffff8a4bc2b0 R12: dffffc0000000000
    R13: ffff88806573b503 R14: dffffc0000000000 R15: ffff8880663cca00
    FS:  0000000000000000(0000) GS:ffff8880b8700000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007fc90a747f98 CR3: 000000000e734000 CR4: 00000000003526f0
    DR0: 0000000000000000 DR1: 000000000000002b DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Call Trace:
     <NMI>
     </NMI>
     <TASK>
      __local_bh_enable_ip+0x1bb/0x200 kernel/softirq.c:382
      spin_unlock_bh include/linux/spinlock.h:396 [inline]
      nsim_dev_trap_report drivers/net/netdevsim/dev.c:820 [inline]
      nsim_dev_trap_report_work+0x75d/0xaa0 drivers/net/netdevsim/dev.c:850
      process_one_work kernel/workqueue.c:3229 [inline]
      process_scheduled_works+0xa63/0x1850 kernel/workqueue.c:3310
      worker_thread+0x870/0xd30 kernel/workqueue.c:3391
      kthread+0x2f0/0x390 kernel/kthread.c:389
      ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147
      ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
     </TASK>
    
    Fixes: ba5e1272142d ("netdevsim: avoid potential loop in nsim_dev_trap_report_work()")
    Reported-by: syzbot+d383dc9579a76f56c251@syzkaller.appspotmail.com
    Reported-by: syzbot+c596faae21a68bf7afd0@syzkaller.appspotmail.com
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Jiri Pirko <jiri@nvidia.com>
    Link: https://patch.msgid.link/20241012094230.3893510-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: bpf: must hold reference on net namespace [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Oct 10 18:34:05 2024 +0200

    netfilter: bpf: must hold reference on net namespace
    
    [ Upstream commit 1230fe7ad3974f7bf6c78901473e039b34d4fb1f ]
    
    BUG: KASAN: slab-use-after-free in __nf_unregister_net_hook+0x640/0x6b0
    Read of size 8 at addr ffff8880106fe400 by task repro/72=
    bpf_nf_link_release+0xda/0x1e0
    bpf_link_free+0x139/0x2d0
    bpf_link_release+0x68/0x80
    __fput+0x414/0xb60
    
    Eric says:
     It seems that bpf was able to defer the __nf_unregister_net_hook()
     after exit()/close() time.
     Perhaps a netns reference is missing, because the netns has been
     dismantled/freed already.
     bpf_nf_link_attach() does :
     link->net = net;
     But I do not see a reference being taken on net.
    
    Add such a reference and release it after hook unreg.
    Note that I was unable to get syzbot reproducer to work, so I
    do not know if this resolves this splat.
    
    Fixes: 84601d6ee68a ("bpf: add bpf_link support for BPF_NETFILTER programs")
    Diagnosed-by: Eric Dumazet <edumazet@google.com>
    Reported-by: Lai, Yi <yi1.lai@linux.intel.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: xtables: fix typo causing some targets not to load on IPv6 [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Sun Oct 20 14:49:51 2024 +0200

    netfilter: xtables: fix typo causing some targets not to load on IPv6
    
    [ Upstream commit 306ed1728e8438caed30332e1ab46b28c25fe3d8 ]
    
    - There is no NFPROTO_IPV6 family for mark and NFLOG.
    - TRACE is also missing module autoload with NFPROTO_IPV6.
    
    This results in ip6tables failing to restore a ruleset. This issue has been
    reported by several users providing incomplete patches.
    
    Very similar to Ilya Katsnelson's patch including a missing chunk in the
    TRACE extension.
    
    Fixes: 0bfcb7b71e73 ("netfilter: xtables: avoid NFPROTO_UNSPEC where needed")
    Reported-by: Ignat Korchagin <ignat@cloudflare.com>
    Reported-by: Ilya Katsnelson <me@0upti.me>
    Reported-by: Krzysztof Olędzki <ole@ans.pl>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfsd: cancel nfsd_shrinker_work using sync mode in nfs4_state_shutdown_net [+ + +]
Author: Yang Erkun <yangerkun@huaweicloud.com>
Date:   Mon Oct 21 16:25:40 2024 +0800

    nfsd: cancel nfsd_shrinker_work using sync mode in nfs4_state_shutdown_net
    
    [ Upstream commit d5ff2fb2e7167e9483846e34148e60c0c016a1f6 ]
    
    In the normal case, when we excute `echo 0 > /proc/fs/nfsd/threads`, the
    function `nfs4_state_destroy_net` in `nfs4_state_shutdown_net` will
    release all resources related to the hashed `nfs4_client`. If the
    `nfsd_client_shrinker` is running concurrently, the `expire_client`
    function will first unhash this client and then destroy it. This can
    lead to the following warning. Additionally, numerous use-after-free
    errors may occur as well.
    
    nfsd_client_shrinker         echo 0 > /proc/fs/nfsd/threads
    
    expire_client                nfsd_shutdown_net
      unhash_client                ...
                                   nfs4_state_shutdown_net
                                     /* won't wait shrinker exit */
      /*                             cancel_work(&nn->nfsd_shrinker_work)
       * nfsd_file for this          /* won't destroy unhashed client1 */
       * client1 still alive         nfs4_state_destroy_net
       */
    
                                   nfsd_file_cache_shutdown
                                     /* trigger warning */
                                     kmem_cache_destroy(nfsd_file_slab)
                                     kmem_cache_destroy(nfsd_file_mark_slab)
      /* release nfsd_file and mark */
      __destroy_client
    
    ====================================================================
    BUG nfsd_file (Not tainted): Objects remaining in nfsd_file on
    __kmem_cache_shutdown()
    --------------------------------------------------------------------
    CPU: 4 UID: 0 PID: 764 Comm: sh Not tainted 6.12.0-rc3+ #1
    
     dump_stack_lvl+0x53/0x70
     slab_err+0xb0/0xf0
     __kmem_cache_shutdown+0x15c/0x310
     kmem_cache_destroy+0x66/0x160
     nfsd_file_cache_shutdown+0xac/0x210 [nfsd]
     nfsd_destroy_serv+0x251/0x2a0 [nfsd]
     nfsd_svc+0x125/0x1e0 [nfsd]
     write_threads+0x16a/0x2a0 [nfsd]
     nfsctl_transaction_write+0x74/0xa0 [nfsd]
     vfs_write+0x1a5/0x6d0
     ksys_write+0xc1/0x160
     do_syscall_64+0x5f/0x170
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    ====================================================================
    BUG nfsd_file_mark (Tainted: G    B   W         ): Objects remaining
    nfsd_file_mark on __kmem_cache_shutdown()
    --------------------------------------------------------------------
    
     dump_stack_lvl+0x53/0x70
     slab_err+0xb0/0xf0
     __kmem_cache_shutdown+0x15c/0x310
     kmem_cache_destroy+0x66/0x160
     nfsd_file_cache_shutdown+0xc8/0x210 [nfsd]
     nfsd_destroy_serv+0x251/0x2a0 [nfsd]
     nfsd_svc+0x125/0x1e0 [nfsd]
     write_threads+0x16a/0x2a0 [nfsd]
     nfsctl_transaction_write+0x74/0xa0 [nfsd]
     vfs_write+0x1a5/0x6d0
     ksys_write+0xc1/0x160
     do_syscall_64+0x5f/0x170
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    To resolve this issue, cancel `nfsd_shrinker_work` using synchronous
    mode in nfs4_state_shutdown_net.
    
    Fixes: 7c24fa225081 ("NFSD: replace delayed_work with work_struct for nfsd_client_shrinker")
    Signed-off-by: Yang Erkun <yangerkun@huaweicloud.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfsd: fix race between laundromat and free_stateid [+ + +]
Author: Olga Kornievskaia <okorniev@redhat.com>
Date:   Fri Oct 18 15:24:58 2024 -0400

    nfsd: fix race between laundromat and free_stateid
    
    commit 8dd91e8d31febf4d9cca3ae1bb4771d33ae7ee5a upstream.
    
    There is a race between laundromat handling of revoked delegations
    and a client sending free_stateid operation. Laundromat thread
    finds that delegation has expired and needs to be revoked so it
    marks the delegation stid revoked and it puts it on a reaper list
    but then it unlock the state lock and the actual delegation revocation
    happens without the lock. Once the stid is marked revoked a racing
    free_stateid processing thread does the following (1) it calls
    list_del_init() which removes it from the reaper list and (2) frees
    the delegation stid structure. The laundromat thread ends up not
    calling the revoke_delegation() function for this particular delegation
    but that means it will no release the lock lease that exists on
    the file.
    
    Now, a new open for this file comes in and ends up finding that
    lease list isn't empty and calls nfsd_breaker_owns_lease() which ends
    up trying to derefence a freed delegation stateid. Leading to the
    followint use-after-free KASAN warning:
    
    kernel: ==================================================================
    kernel: BUG: KASAN: slab-use-after-free in nfsd_breaker_owns_lease+0x140/0x160 [nfsd]
    kernel: Read of size 8 at addr ffff0000e73cd0c8 by task nfsd/6205
    kernel:
    kernel: CPU: 2 UID: 0 PID: 6205 Comm: nfsd Kdump: loaded Not tainted 6.11.0-rc7+ #9
    kernel: Hardware name: Apple Inc. Apple Virtualization Generic Platform, BIOS 2069.0.0.0.0 08/03/2024
    kernel: Call trace:
    kernel: dump_backtrace+0x98/0x120
    kernel: show_stack+0x1c/0x30
    kernel: dump_stack_lvl+0x80/0xe8
    kernel: print_address_description.constprop.0+0x84/0x390
    kernel: print_report+0xa4/0x268
    kernel: kasan_report+0xb4/0xf8
    kernel: __asan_report_load8_noabort+0x1c/0x28
    kernel: nfsd_breaker_owns_lease+0x140/0x160 [nfsd]
    kernel: nfsd_file_do_acquire+0xb3c/0x11d0 [nfsd]
    kernel: nfsd_file_acquire_opened+0x84/0x110 [nfsd]
    kernel: nfs4_get_vfs_file+0x634/0x958 [nfsd]
    kernel: nfsd4_process_open2+0xa40/0x1a40 [nfsd]
    kernel: nfsd4_open+0xa08/0xe80 [nfsd]
    kernel: nfsd4_proc_compound+0xb8c/0x2130 [nfsd]
    kernel: nfsd_dispatch+0x22c/0x718 [nfsd]
    kernel: svc_process_common+0x8e8/0x1960 [sunrpc]
    kernel: svc_process+0x3d4/0x7e0 [sunrpc]
    kernel: svc_handle_xprt+0x828/0xe10 [sunrpc]
    kernel: svc_recv+0x2cc/0x6a8 [sunrpc]
    kernel: nfsd+0x270/0x400 [nfsd]
    kernel: kthread+0x288/0x310
    kernel: ret_from_fork+0x10/0x20
    
    This patch proposes a fixed that's based on adding 2 new additional
    stid's sc_status values that help coordinate between the laundromat
    and other operations (nfsd4_free_stateid() and nfsd4_delegreturn()).
    
    First to make sure, that once the stid is marked revoked, it is not
    removed by the nfsd4_free_stateid(), the laundromat take a reference
    on the stateid. Then, coordinating whether the stid has been put
    on the cl_revoked list or we are processing FREE_STATEID and need to
    make sure to remove it from the list, each check that state and act
    accordingly. If laundromat has added to the cl_revoke list before
    the arrival of FREE_STATEID, then nfsd4_free_stateid() knows to remove
    it from the list. If nfsd4_free_stateid() finds that operations arrived
    before laundromat has placed it on cl_revoke list, it marks the state
    freed and then laundromat will no longer add it to the list.
    
    Also, for nfsd4_delegreturn() when looking for the specified stid,
    we need to access stid that are marked removed or freeable, it means
    the laundromat has started processing it but hasn't finished and this
    delegreturn needs to return nfserr_deleg_revoked and not
    nfserr_bad_stateid. The latter will not trigger a FREE_STATEID and the
    lack of it will leave this stid on the cl_revoked list indefinitely.
    
    Fixes: 2d4a532d385f ("nfsd: ensure that clp->cl_revoked list is protected by clp->cl_lock")
    CC: stable@vger.kernel.org
    Signed-off-by: Olga Kornievskaia <okorniev@redhat.com>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nilfs2: fix kernel bug due to missing clearing of buffer delay flag [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Wed Oct 16 06:32:07 2024 +0900

    nilfs2: fix kernel bug due to missing clearing of buffer delay flag
    
    commit 6ed469df0bfbef3e4b44fca954a781919db9f7ab upstream.
    
    Syzbot reported that after nilfs2 reads a corrupted file system image
    and degrades to read-only, the BUG_ON check for the buffer delay flag
    in submit_bh_wbc() may fail, causing a kernel bug.
    
    This is because the buffer delay flag is not cleared when clearing the
    buffer state flags to discard a page/folio or a buffer head. So, fix
    this.
    
    This became necessary when the use of nilfs2's own page clear routine
    was expanded.  This state inconsistency does not occur if the buffer
    is written normally by log writing.
    
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Link: https://lore.kernel.org/r/20241015213300.7114-1-konishi.ryusuke@gmail.com
    Fixes: 8c26c4e2694a ("nilfs2: fix issue with flush kernel thread after remount in RO mode because of driver's internal error or metadata corruption")
    Reported-by: syzbot+985ada84bf055a575c07@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=985ada84bf055a575c07
    Cc: stable@vger.kernel.org
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nvme-pci: fix race condition between reset and nvme_dev_disable() [+ + +]
Author: Maurizio Lombardi <mlombard@redhat.com>
Date:   Tue Oct 15 13:21:00 2024 +0200

    nvme-pci: fix race condition between reset and nvme_dev_disable()
    
    [ Upstream commit 26bc0a81f64ce00fc4342c38eeb2eddaad084dd2 ]
    
    nvme_dev_disable() modifies the dev->online_queues field, therefore
    nvme_pci_update_nr_queues() should avoid racing against it, otherwise
    we could end up passing invalid values to blk_mq_update_nr_hw_queues().
    
     WARNING: CPU: 39 PID: 61303 at drivers/pci/msi/api.c:347
              pci_irq_get_affinity+0x187/0x210
     Workqueue: nvme-reset-wq nvme_reset_work [nvme]
     RIP: 0010:pci_irq_get_affinity+0x187/0x210
     Call Trace:
      <TASK>
      ? blk_mq_pci_map_queues+0x87/0x3c0
      ? pci_irq_get_affinity+0x187/0x210
      blk_mq_pci_map_queues+0x87/0x3c0
      nvme_pci_map_queues+0x189/0x460 [nvme]
      blk_mq_update_nr_hw_queues+0x2a/0x40
      nvme_reset_work+0x1be/0x2a0 [nvme]
    
    Fix the bug by locking the shutdown_lock mutex before using
    dev->online_queues. Give up if nvme_dev_disable() is running or if
    it has been executed already.
    
    Fixes: 949928c1c731 ("NVMe: Fix possible queue use after freed")
    Tested-by: Yi Zhang <yi.zhang@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
objpool: fix choosing allocation for percpu slots [+ + +]
Author: Viktor Malik <vmalik@redhat.com>
Date:   Mon Aug 26 08:07:18 2024 +0200

    objpool: fix choosing allocation for percpu slots
    
    [ Upstream commit aff1871bfc81e9dffa7d2a77e67cc5441cc37f81 ]
    
    objpool intends to use vmalloc for default (non-atomic) allocations of
    percpu slots and objects. However, the condition checking if GFP flags
    set any bit of GFP_ATOMIC is wrong b/c GFP_ATOMIC is a combination of bits
    (__GFP_HIGH|__GFP_KSWAPD_RECLAIM) and so `pool->gfp & GFP_ATOMIC` will
    be true if either bit is set. Since GFP_ATOMIC and GFP_KERNEL share the
    ___GFP_KSWAPD_RECLAIM bit, kmalloc will be used in cases when GFP_KERNEL
    is specified, i.e. in all current usages of objpool.
    
    This may lead to unexpected OOM errors since kmalloc cannot allocate
    large amounts of memory.
    
    For instance, objpool is used by fprobe rethook which in turn is used by
    BPF kretprobe.multi and kprobe.session probe types. Trying to attach
    these to all kernel functions with libbpf using
    
        SEC("kprobe.session/*")
        int kprobe(struct pt_regs *ctx)
        {
            [...]
        }
    
    fails on objpool slot allocation with ENOMEM.
    
    Fix the condition to truly use vmalloc by default.
    
    Link: https://lore.kernel.org/all/20240826060718.267261-1-vmalik@redhat.com/
    
    Fixes: b4edb8d2d464 ("lib: objpool added: ring-array based lockless MPMC")
    Signed-off-by: Viktor Malik <vmalik@redhat.com>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Reviewed-by: Matt Wu <wuqiang.matt@bytedance.com>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
octeon_ep: Add SKB allocation failures handling in __octep_oq_process_rx() [+ + +]
Author: Aleksandr Mishin <amishin@t-argos.ru>
Date:   Thu Oct 17 13:06:51 2024 +0300

    octeon_ep: Add SKB allocation failures handling in __octep_oq_process_rx()
    
    [ Upstream commit eb592008f79be52ccef88cd9a5249b3fc0367278 ]
    
    build_skb() returns NULL in case of a memory allocation failure so handle
    it inside __octep_oq_process_rx() to avoid NULL pointer dereference.
    
    __octep_oq_process_rx() is called during NAPI polling by the driver. If
    skb allocation fails, keep on pulling packets out of the Rx DMA queue: we
    shouldn't break the polling immediately and thus falsely indicate to the
    octep_napi_poll() that the Rx pressure is going down. As there is no
    associated skb in this case, don't process the packets and don't push them
    up the network stack - they are skipped.
    
    Helper function is implemented to unmmap/flush all the fragment buffers
    used by the dropped packet. 'alloc_failures' counter is incremented to
    mark the skb allocation error in driver statistics.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 37d79d059606 ("octeon_ep: add Tx/Rx processing and interrupt support")
    Suggested-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

octeon_ep: Implement helper for iterating packets in Rx queue [+ + +]
Author: Aleksandr Mishin <amishin@t-argos.ru>
Date:   Thu Oct 17 13:06:50 2024 +0300

    octeon_ep: Implement helper for iterating packets in Rx queue
    
    [ Upstream commit bd28df26197b2bd0913bf1b36770836481975143 ]
    
    The common code with some packet and index manipulations is extracted and
    moved to newly implemented helper to make the code more readable and avoid
    duplication. This is a preparation for skb allocation failure handling.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Suggested-by: Simon Horman <horms@kernel.org>
    Suggested-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: Andrew Lunn <andrew@lunn.ch>
    Stable-dep-of: eb592008f79b ("octeon_ep: Add SKB allocation failures handling in __octep_oq_process_rx()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
octeontx2-af: Fix potential integer overflows on integer shifts [+ + +]
Author: Colin Ian King <colin.i.king@gmail.com>
Date:   Thu Oct 10 16:45:19 2024 +0100

    octeontx2-af: Fix potential integer overflows on integer shifts
    
    [ Upstream commit 637c4f6fe40befa04f19c38b5d15429cbb9191d9 ]
    
    The left shift int 32 bit integer constants 1 is evaluated using 32 bit
    arithmetic and then assigned to a 64 bit unsigned integer. In the case
    where the shift is 32 or more this can lead to an overflow. Avoid this
    by shifting using the BIT_ULL macro instead.
    
    Fixes: 019aba04f08c ("octeontx2-af: Modify SMQ flush sequence to drop packets")
    Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://patch.msgid.link/20241010154519.768785-1-colin.i.king@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
openat2: explicitly return -E2BIG for (usize > PAGE_SIZE) [+ + +]
Author: Aleksa Sarai <cyphar@cyphar.com>
Date:   Thu Oct 10 07:40:36 2024 +1100

    openat2: explicitly return -E2BIG for (usize > PAGE_SIZE)
    
    commit f92f0a1b05698340836229d791b3ffecc71b265a upstream.
    
    While we do currently return -EFAULT in this case, it seems prudent to
    follow the behaviour of other syscalls like clone3. It seems quite
    unlikely that anyone depends on this error code being EFAULT, but we can
    always revert this if it turns out to be an issue.
    
    Cc: stable@vger.kernel.org # v5.6+
    Fixes: fddb5d430ad9 ("open: introduce openat2(2) syscall")
    Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
    Link: https://lore.kernel.org/r/20241010-extensible-structs-check_fields-v3-3-d2833dfe6edd@cyphar.com
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI/pwrctl: Abandon QCom WCN probe on pre-pwrseq device-trees [+ + +]
Author: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Date:   Mon Oct 7 11:24:46 2024 +0200

    PCI/pwrctl: Abandon QCom WCN probe on pre-pwrseq device-trees
    
    [ Upstream commit ad783b9f8e78572fff3b04b6caee7bea3821eea8 ]
    
    Old device trees for some platforms already define wifi nodes for the WCN
    family of chips since before power sequencing was added upstream.
    
    These nodes don't consume the regulator outputs from the PMU, and if we
    allow this driver to bind to one of such "incomplete" nodes, we'll see a
    kernel log error about the infinite probe deferral.
    
    Extend the driver by adding a platform data struct matched against the
    compatible. This struct contains the pwrseq target string as well as a
    validation function called right after entering probe().
    
    For Qualcomm WCN models, check the existence of the regulator supply
    property that indicates the DT is already using power sequencing and return
    -ENODEV if it's not there, indicating to the driver model that the device
    should not be bound to the pwrctl driver.
    
    Link: https://lore.kernel.org/r/20241007092447.18616-1-brgl@bgdev.pl
    Fixes: 6140d185a43d ("PCI/pwrctl: Add a PCI power control driver for power sequenced devices")
    Reported-by: Johan Hovold <johan@kernel.org>
    Closes: https://lore.kernel.org/all/Zv565olMDDGHyYVt@hovoldconsulting.com/
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI/pwrctl: Add WCN6855 support [+ + +]
Author: Konrad Dybcio <konradybcio@kernel.org>
Date:   Tue Aug 13 21:12:00 2024 +0200

    PCI/pwrctl: Add WCN6855 support
    
    [ Upstream commit 0da59840f10141988e949d8519ed9182991caf17 ]
    
    Add support for ATH11K inside the WCN6855 package to the power sequencing
    PCI power control driver.
    
    Link: https://lore.kernel.org/r/20240813191201.155123-1-brgl@bgdev.pl
    [Bartosz: split Konrad's bigger patch, write the commit message]
    Co-developed-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Konrad Dybcio <konradybcio@kernel.org>
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Konrad Dybcio <konradybcio@kernel.org>
    Stable-dep-of: ad783b9f8e78 ("PCI/pwrctl: Abandon QCom WCN probe on pre-pwrseq device-trees")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PCI: Hold rescan lock while adding devices during host probe [+ + +]
Author: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Date:   Thu Oct 3 10:43:41 2024 +0200

    PCI: Hold rescan lock while adding devices during host probe
    
    [ Upstream commit 1d59d474e1cb7d4fdf87dfaf96f44647f13ea590 ]
    
    Since adding the PCI power control code, we may end up with a race between
    the pwrctl platform device rescanning the bus and host controller probe
    functions. The latter need to take the rescan lock when adding devices or
    we may end up in an undefined state having two incompletely added devices
    and hit the following crash when trying to remove the device over sysfs:
    
      Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
      Internal error: Oops: 0000000096000004 [#1] SMP
      Call trace:
        __pi_strlen+0x14/0x150
        kernfs_find_ns+0x80/0x13c
        kernfs_remove_by_name_ns+0x54/0xf0
        sysfs_remove_bin_file+0x24/0x34
        pci_remove_resource_files+0x3c/0x84
        pci_remove_sysfs_dev_files+0x28/0x38
        pci_stop_bus_device+0x8c/0xd8
        pci_stop_bus_device+0x40/0xd8
        pci_stop_and_remove_bus_device_locked+0x28/0x48
        remove_store+0x70/0xb0
        dev_attr_store+0x20/0x38
        sysfs_kf_write+0x58/0x78
        kernfs_fop_write_iter+0xe8/0x184
        vfs_write+0x2dc/0x308
        ksys_write+0x7c/0xec
    
    Fixes: 4565d2652a37 ("PCI/pwrctl: Add PCI power control core code")
    Link: https://lore.kernel.org/r/20241003084342.27501-1-brgl@bgdev.pl
    Reported-by: Konrad Dybcio <konradybcio@kernel.org>
    Tested-by: Konrad Dybcio <konradybcio@kernel.org>
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf/x86/rapl: Fix the energy-pkg event for AMD CPUs [+ + +]
Author: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
Date:   Tue Jul 30 04:49:18 2024 +0000

    perf/x86/rapl: Fix the energy-pkg event for AMD CPUs
    
    commit 8d72eba1cf8cecd76a2b4c1dd7673c2dc775f514 upstream.
    
    After commit:
    
      63edbaa48a57 ("x86/cpu/topology: Add support for the AMD 0x80000026 leaf")
    
    ... on AMD processors that support extended CPUID leaf 0x80000026, the
    topology_die_cpumask() and topology_logical_die_id() macros no longer
    return the package cpumask and package ID, instead they return the CCD
    (Core Complex Die) mask and ID respectively.
    
    This leads to the energy-pkg event scope to be modified to CCD instead of package.
    
    So, change the PMU scope for AMD and Hygon back to package.
    
    On a 12 CCD 1 Package AMD Zen4 Genoa machine:
    
      Before:
    
      $ cat /sys/devices/power/cpumask
      0,8,16,24,32,40,48,56,64,72,80,88.
    
    The expected cpumask here is supposed to be just "0", as it is a package
    scope event, only one CPU will be collecting the event for all the CPUs in
    the package.
    
      After:
    
      $ cat /sys/devices/power/cpumask
      0
    
    [ mingo: Cleaned up the changelog ]
    
    Signed-off-by: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Reviewed-by: Kan Liang <kan.liang@linux.intel.com>
    Link: https://lore.kernel.org/r/20240904100934.3260-1-Dhananjay.Ugwekar@amd.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
platform/x86/intel/pmc: Fix pmc_core_iounmap to call iounmap for valid addresses [+ + +]
Author: Vamsi Krishna Brahmajosyula <vamsikrishna.brahmajosyula@gmail.com>
Date:   Fri Oct 18 16:19:58 2024 +0530

    platform/x86/intel/pmc: Fix pmc_core_iounmap to call iounmap for valid addresses
    
    [ Upstream commit 48771da48072823956b271dddd568492c13d8170 ]
    
    Commit 50c6dbdfd16e ("x86/ioremap: Improve iounmap() address range checks")
    introduces a WARN when adrress ranges of iounmap are invalid. On Thinkpad
    P1 Gen 7 (Meteor Lake-P) this caused the following warning to appear:
    
    WARNING: CPU: 7 PID: 713 at arch/x86/mm/ioremap.c:461 iounmap+0x58/0x1f0
    Modules linked in: rfkill(+) snd_timer(+) fjes(+) snd soundcore intel_pmc_core(+)
    int3403_thermal(+) int340x_thermal_zone intel_vsec pmt_telemetry acpi_pad pmt_class
    acpi_tad int3400_thermal acpi_thermal_rel joydev loop nfnetlink zram xe drm_suballoc_helper
    nouveau i915 mxm_wmi drm_ttm_helper gpu_sched drm_gpuvm drm_exec drm_buddy i2c_algo_bit
    crct10dif_pclmul crc32_pclmul ttm crc32c_intel polyval_clmulni rtsx_pci_sdmmc ucsi_acpi
    polyval_generic mmc_core hid_multitouch drm_display_helper ghash_clmulni_intel typec_ucsi
    nvme sha512_ssse3 video sha256_ssse3 nvme_core intel_vpu sha1_ssse3 rtsx_pci cec typec
    nvme_auth i2c_hid_acpi i2c_hid wmi pinctrl_meteorlake serio_raw ip6_tables ip_tables fuse
    CPU: 7 UID: 0 PID: 713 Comm: (udev-worker) Not tainted 6.12.0-rc2iounmap+ #42
    Hardware name: LENOVO 21KWCTO1WW/21KWCTO1WW, BIOS N48ET19W (1.06 ) 07/18/2024
    RIP: 0010:iounmap+0x58/0x1f0
    Code: 85 6a 01 00 00 48 8b 05 e6 e2 28 04 48 39 c5 72 19 eb 26 cc cc cc 48 ba 00 00 00 00 00 00 32 00 48 8d 44 02 ff 48 39 c5 72 23 <0f> 0b 48 83 c4 08 5b 5d 41 5c c3 cc cc cc cc 48 ba 00 00 00 00 00
    RSP: 0018:ffff888131eff038 EFLAGS: 00010207
    RAX: ffffc90000000000 RBX: 0000000000000000 RCX: ffff888e33b80000
    RDX: dffffc0000000000 RSI: ffff888e33bc29c0 RDI: 0000000000000000
    RBP: 0000000000000000 R08: ffff8881598a8000 R09: ffff888e2ccedc10
    R10: 0000000000000003 R11: ffffffffb3367634 R12: 00000000fe000000
    R13: ffff888101d0da28 R14: ffffffffc2e437e0 R15: ffff888110b03b28
    FS:  00007f3c1d4b3980(0000) GS:ffff888e33b80000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00005651cfc93578 CR3: 0000000124e4c002 CR4: 0000000000f70ef0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff07f0 DR7: 0000000000000400
    PKRU: 55555554
    Call Trace:
    <TASK>
    ? __warn.cold+0xb6/0x176
    ? iounmap+0x58/0x1f0
    ? report_bug+0x1f4/0x2b0
    ? handle_bug+0x58/0x90
    ? exc_invalid_op+0x17/0x40
    ? asm_exc_invalid_op+0x1a/0x20
    ? iounmap+0x58/0x1f0
    pmc_core_ssram_get_pmc+0x477/0x6c0 [intel_pmc_core]
    ? __pfx_pmc_core_ssram_get_pmc+0x10/0x10 [intel_pmc_core]
    ? __pfx_do_pci_enable_device+0x10/0x10
    ? pci_wait_for_pending+0x60/0x110
    ? pci_enable_device_flags+0x1e3/0x2e0
    ? __pfx_mtl_core_init+0x10/0x10 [intel_pmc_core]
    pmc_core_ssram_init+0x7f/0x110 [intel_pmc_core]
    mtl_core_init+0xda/0x130 [intel_pmc_core]
    ? __mutex_init+0xb9/0x130
    pmc_core_probe+0x27e/0x10b0 [intel_pmc_core]
    ? _raw_spin_lock_irqsave+0x96/0xf0
    ? __pfx_pmc_core_probe+0x10/0x10 [intel_pmc_core]
    ? __pfx_mutex_unlock+0x10/0x10
    ? __pfx_mutex_lock+0x10/0x10
    ? device_pm_check_callbacks+0x82/0x370
    ? acpi_dev_pm_attach+0x234/0x2b0
    platform_probe+0x9f/0x150
    really_probe+0x1e0/0x8a0
    __driver_probe_device+0x18c/0x370
    ? __pfx___driver_attach+0x10/0x10
    driver_probe_device+0x4a/0x120
    __driver_attach+0x190/0x4a0
    ? __pfx___driver_attach+0x10/0x10
    bus_for_each_dev+0x103/0x180
    ? __pfx_bus_for_each_dev+0x10/0x10
    ? klist_add_tail+0x136/0x270
    bus_add_driver+0x2fc/0x540
    driver_register+0x1a5/0x360
    ? __pfx_pmc_core_driver_init+0x10/0x10 [intel_pmc_core]
    do_one_initcall+0xa4/0x380
    ? __pfx_do_one_initcall+0x10/0x10
    ? kasan_unpoison+0x44/0x70
    do_init_module+0x296/0x800
    load_module+0x5090/0x6ce0
    ? __pfx_load_module+0x10/0x10
    ? ima_post_read_file+0x193/0x200
    ? __pfx_ima_post_read_file+0x10/0x10
    ? rw_verify_area+0x152/0x4c0
    ? kernel_read_file+0x257/0x750
    ? __pfx_kernel_read_file+0x10/0x10
    ? __pfx_filemap_get_read_batch+0x10/0x10
    ? init_module_from_file+0xd1/0x130
    init_module_from_file+0xd1/0x130
    ? __pfx_init_module_from_file+0x10/0x10
    ? __pfx__raw_spin_lock+0x10/0x10
    ? __pfx_cred_has_capability.isra.0+0x10/0x10
    idempotent_init_module+0x236/0x770
    ? __pfx_idempotent_init_module+0x10/0x10
    ? fdget+0x58/0x3f0
    ? security_capable+0x7d/0x110
    __x64_sys_finit_module+0xbe/0x130
    do_syscall_64+0x82/0x160
    ? __pfx_filemap_read+0x10/0x10
    ? __pfx___fsnotify_parent+0x10/0x10
    ? vfs_read+0x3a6/0xa30
    ? vfs_read+0x3a6/0xa30
    ? __seccomp_filter+0x175/0xc60
    ? __pfx___seccomp_filter+0x10/0x10
    ? fdget_pos+0x1ce/0x500
    ? syscall_exit_to_user_mode_prepare+0x149/0x170
    ? syscall_exit_to_user_mode+0x10/0x210
    ? do_syscall_64+0x8e/0x160
    ? switch_fpu_return+0xe3/0x1f0
    ? syscall_exit_to_user_mode+0x1d5/0x210
    ? do_syscall_64+0x8e/0x160
    ? exc_page_fault+0x76/0xf0
    entry_SYSCALL_64_after_hwframe+0x76/0x7e
    RIP: 0033:0x7f3c1d6d155d
    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 83 58 0f 00 f7 d8 64 89 01 48
    RSP: 002b:00007ffe6309db38 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
    RAX: ffffffffffffffda RBX: 0000557c212550a0 RCX: 00007f3c1d6d155d
    RDX: 0000000000000000 RSI: 00007f3c1cd943bd RDI: 0000000000000025
    RBP: 00007ffe6309dbf0 R08: 00007f3c1d7c7b20 R09: 00007ffe6309db80
    R10: 0000557c21255270 R11: 0000000000000246 R12: 00007f3c1cd943bd
    R13: 0000000000020000 R14: 0000557c21255c80 R15: 0000557c21255240
    </TASK>
    
    no_free_ptr(tmp_ssram) sets tmp_ssram NULL while assigning ssram.
    pmc_core_iounmap calls iounmap unconditionally causing the above
    warning to appear during boot.
    
    Fix it by checking for a valid address before calling iounmap.
    
    Also in the function pmc_core_ssram_get_pmc return -ENOMEM when
    ioremap fails similar to other instances in the file.
    
    Fixes: a01486dc4bb1 ("platform/x86/intel/pmc: Cleanup SSRAM discovery")
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Reviewed-by: David E. Box <david.e.box@linux.intel.com>
    Signed-off-by: Vamsi Krishna Brahmajosyula <vamsikrishna.brahmajosyula@gmail.com>
    Link: https://lore.kernel.org/r/20241018104958.14195-1-vamsikrishna.brahmajosyula@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>

 
platform/x86: dell-sysman: add support for alienware products [+ + +]
Author: Crag Wang <crag_wang@dell.com>
Date:   Fri Oct 4 23:27:58 2024 +0800

    platform/x86: dell-sysman: add support for alienware products
    
    [ Upstream commit a561509b4187a8908eb7fbb2d1bf35bbc20ec74b ]
    
    Alienware supports firmware-attributes and has its own OEM string.
    
    Signed-off-by: Crag Wang <crag_wang@dell.com>
    Link: https://lore.kernel.org/r/20241004152826.93992-1-crag_wang@dell.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>

platform/x86: dell-wmi: Ignore suspend notifications [+ + +]
Author: Armin Wolf <W_Armin@gmx.de>
Date:   Tue Oct 15 00:05:29 2024 +0200

    platform/x86: dell-wmi: Ignore suspend notifications
    
    commit a7990957fa53326fe9b47f0349373ed99bb69aaa upstream.
    
    Some machines like the Dell G15 5155 emit WMI events when
    suspending/resuming. Ignore those WMI events.
    
    Tested-by: siddharth.manthan@gmail.com
    Signed-off-by: Armin Wolf <W_Armin@gmx.de>
    Acked-by: Pali Rohár <pali@kernel.org>
    Link: https://lore.kernel.org/r/20241014220529.397390-1-W_Armin@gmx.de
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
posix-clock: posix-clock: Fix unbalanced locking in pc_clock_settime() [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Fri Oct 18 18:07:48 2024 +0800

    posix-clock: posix-clock: Fix unbalanced locking in pc_clock_settime()
    
    [ Upstream commit 6e62807c7fbb3c758d233018caf94dfea9c65dbd ]
    
    If get_clock_desc() succeeds, it calls fget() for the clockid's fd,
    and get the clk->rwsem read lock, so the error path should release
    the lock to make the lock balance and fput the clockid's fd to make
    the refcount balance and release the fd related resource.
    
    However the below commit left the error path locked behind resulting in
    unbalanced locking. Check timespec64_valid_strict() before
    get_clock_desc() to fix it, because the "ts" is not changed
    after that.
    
    Fixes: d8794ac20a29 ("posix-clock: Fix missing timespec64 check in pc_clock_settime()")
    Acked-by: Richard Cochran <richardcochran@gmail.com>
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Acked-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
    [pabeni@redhat.com: fixed commit message typo]
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powercap: dtpm_devfreq: Fix error check against dev_pm_qos_add_request() [+ + +]
Author: Yuan Can <yuancan@huawei.com>
Date:   Fri Oct 18 10:12:05 2024 +0800

    powercap: dtpm_devfreq: Fix error check against dev_pm_qos_add_request()
    
    [ Upstream commit 5209d1b654f1db80509040cc694c7814a1b547e3 ]
    
    The caller of the function dev_pm_qos_add_request() checks again a non
    zero value but dev_pm_qos_add_request() can return '1' if the request
    already exists. Therefore, the setup function fails while the QoS
    request actually did not failed.
    
    Fix that by changing the check against a negative value like all the
    other callers of the function.
    
    Fixes: e44655617317 ("powercap/drivers/dtpm: Add dtpm devfreq with energy model support")
    Signed-off-by: Yuan Can <yuancan@huawei.com>
    Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
    Link: https://patch.msgid.link/20241018021205.46460-1-yuancan@huawei.com
    [ rjw: Subject edit ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
r8169: avoid unsolicited interrupts [+ + +]
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Fri Oct 18 11:08:16 2024 +0200

    r8169: avoid unsolicited interrupts
    
    [ Upstream commit 10ce0db787004875f4dba068ea952207d1d8abeb ]
    
    It was reported that after resume from suspend a PCI error is logged
    and connectivity is broken. Error message is:
    PCI error (cmd = 0x0407, status_errs = 0x0000)
    The message seems to be a red herring as none of the error bits is set,
    and the PCI command register value also is normal. Exception handling
    for a PCI error includes a chip reset what apparently brakes connectivity
    here. The interrupt status bit triggering the PCI error handling isn't
    actually used on PCIe chip versions, so it's not clear why this bit is
    set by the chip. Fix this by ignoring this bit on PCIe chip versions.
    
    Fixes: 0e4851502f84 ("r8169: merge with version 8.001.00 of Realtek's r8168 driver")
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219388
    Tested-by: Atlas Yu <atlas.yu@canonical.com>
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/78e2f535-438f-4212-ad94-a77637ac6c9c@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ravb: Remove setting of RX software timestamp [+ + +]
Author: Gal Pressman <gal@nvidia.com>
Date:   Sun Sep 1 14:27:55 2024 +0300

    ravb: Remove setting of RX software timestamp
    
    [ Upstream commit 277901ee3a2620679e2c8797377d2a72f4358068 ]
    
    The responsibility for reporting of RX software timestamp has moved to
    the core layer (see __ethtool_get_ts_info()), remove usage from the
    device drivers.
    
    Reviewed-by: Carolina Jubran <cjubran@nvidia.com>
    Reviewed-by: Rahul Rameshbabu <rrameshbabu@nvidia.com>
    Signed-off-by: Gal Pressman <gal@nvidia.com>
    Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
    Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Link: https://patch.msgid.link/20240901112803.212753-8-gal@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 126e799602f4 ("net: ravb: Only advertise Rx/Tx timestamps if hardware supports it")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/bnxt_re: Add a check for memory allocation [+ + +]
Author: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Date:   Wed Sep 18 20:05:58 2024 -0700

    RDMA/bnxt_re: Add a check for memory allocation
    
    [ Upstream commit c5c1ae73b7741fa3b58e6e001b407825bb971225 ]
    
    __alloc_pbl() can return error when memory allocation fails.
    Driver is not checking the status on one of the instances.
    
    Fixes: 0c4dcd602817 ("RDMA/bnxt_re: Refactor hardware queue memory allocation")
    Link: https://patch.msgid.link/r/1726715161-18941-4-git-send-email-selvin.xavier@broadcom.com
    Reviewed-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Avoid CPU lockups due fifo occupancy check loop [+ + +]
Author: Selvin Xavier <selvin.xavier@broadcom.com>
Date:   Tue Oct 8 00:41:38 2024 -0700

    RDMA/bnxt_re: Avoid CPU lockups due fifo occupancy check loop
    
    [ Upstream commit 8be3e5b0c96beeefe9d5486b96575d104d3e7d17 ]
    
    Driver waits indefinitely for the fifo occupancy to go below a threshold
    as soon as the pacing interrupt is received. This can cause soft lockup on
    one of the processors, if the rate of DB is very high.
    
    Add a loop count for FPGA and exit the __wait_for_fifo_occupancy_below_th
    if the loop is taking more time. Pacing will be continuing until the
    occupancy is below the threshold. This is ensured by the checks in
    bnxt_re_pacing_timer_exp and further scheduling the work for pacing based
    on the fifo occupancy.
    
    Fixes: 2ad4e6303a6d ("RDMA/bnxt_re: Implement doorbell pacing algorithm")
    Link: https://patch.msgid.link/r/1728373302-19530-7-git-send-email-selvin.xavier@broadcom.com
    Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Reviewed-by: Chandramohan Akula <chandramohan.akula@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Change the sequence of updating the CQ toggle value [+ + +]
Author: Chandramohan Akula <chandramohan.akula@broadcom.com>
Date:   Tue Oct 8 00:41:40 2024 -0700

    RDMA/bnxt_re: Change the sequence of updating the CQ toggle value
    
    [ Upstream commit 2df411353dacc4b0c911f8c4944f8ffab955391c ]
    
    Currently the CQ toggle value in the shared page (read by the userlib) is
    updated as part of the cqn_handler. There is a potential race of
    application calling the CQ ARM doorbell immediately and using the old
    toggle value.
    
    Change the sequence of updating CQ toggle value to update in the
    bnxt_qplib_service_nq function immediately after reading the toggle value
    to be in sync with the HW updated value.
    
    Fixes: e275919d9669 ("RDMA/bnxt_re: Share a page to expose per CQ info with userspace")
    Link: https://patch.msgid.link/r/1728373302-19530-9-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Chandramohan Akula <chandramohan.akula@broadcom.com>
    Reviewed-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix a bug while setting up Level-2 PBL pages [+ + +]
Author: Bhargava Chenna Marreddy <bhargava.marreddy@broadcom.com>
Date:   Tue Oct 8 00:41:41 2024 -0700

    RDMA/bnxt_re: Fix a bug while setting up Level-2 PBL pages
    
    [ Upstream commit 7988bdbbb85ac85a847baf09879edcd0f70521dc ]
    
    Avoid memory corruption while setting up Level-2 PBL pages for the non MR
    resources when num_pages > 256K.
    
    There will be a single PDE page address (contiguous pages in the case of >
    PAGE_SIZE), but, current logic assumes multiple pages, leading to invalid
    memory access after 256K PBL entries in the PDE.
    
    Fixes: 0c4dcd602817 ("RDMA/bnxt_re: Refactor hardware queue memory allocation")
    Link: https://patch.msgid.link/r/1728373302-19530-10-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Bhargava Chenna Marreddy <bhargava.marreddy@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix a possible memory leak [+ + +]
Author: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Date:   Wed Sep 18 20:05:56 2024 -0700

    RDMA/bnxt_re: Fix a possible memory leak
    
    [ Upstream commit 3fc5410f225d1651580a4aeb7c72f55e28673b53 ]
    
    In bnxt_re_setup_chip_ctx() when bnxt_qplib_map_db_bar() fails
    driver is not freeing the memory allocated for "rdev->chip_ctx".
    
    Fixes: 0ac20faf5d83 ("RDMA/bnxt_re: Reorg the bar mapping")
    Link: https://patch.msgid.link/r/1726715161-18941-2-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix incorrect AVID type in WQE structure [+ + +]
Author: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Date:   Wed Sep 18 20:05:57 2024 -0700

    RDMA/bnxt_re: Fix incorrect AVID type in WQE structure
    
    [ Upstream commit 9ab20f76ae9fad55ebaf36bdff04aea1c2552374 ]
    
    Driver uses internal data structure to construct WQE frame.
    It used avid type as u16 which can accommodate up to 64K AVs.
    When outstanding AVID crosses 64K, driver truncates AVID and
    hence it uses incorrect AVID to WR. This leads to WR failure
    due to invalid AV ID and QP is moved to error state with reason
    set to 19 (INVALID AVID). When RDMA CM path is used, this issue
    hits QP1 and it is moved to error state
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Link: https://patch.msgid.link/r/1726715161-18941-3-git-send-email-selvin.xavier@broadcom.com
    Reviewed-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Reviewed-by: Chandramohan Akula <chandramohan.akula@broadcom.com>
    Signed-off-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix incorrect dereference of srq in async event [+ + +]
Author: Kashyap Desai <kashyap.desai@broadcom.com>
Date:   Tue Oct 8 00:41:35 2024 -0700

    RDMA/bnxt_re: Fix incorrect dereference of srq in async event
    
    [ Upstream commit 87b4d8d28f6af8fc62766a8af7a5467b37053dfa ]
    
    Currently driver is not getting correct srq. Dereference only if qplib has
    a valid srq.
    
    Fixes: b02fd3f79ec3 ("RDMA/bnxt_re: Report async events and errors")
    Link: https://patch.msgid.link/r/1728373302-19530-4-git-send-email-selvin.xavier@broadcom.com
    Reviewed-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
    Reviewed-by: Chandramohan Akula <chandramohan.akula@broadcom.com>
    Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix out of bound check [+ + +]
Author: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Date:   Tue Oct 8 00:41:34 2024 -0700

    RDMA/bnxt_re: Fix out of bound check
    
    [ Upstream commit a9e6e7443922ac0a48243c35d03834c96926bff1 ]
    
    Driver exports pacing stats only on GenP5 and P7 adapters. But while
    parsing the pacing stats, driver has a check for "rdev->dbr_pacing".  This
    caused a trace when KASAN is enabled.
    
    BUG: KASAN: slab-out-of-bounds in bnxt_re_get_hw_stats+0x2b6a/0x2e00 [bnxt_re]
    Write of size 8 at addr ffff8885942a6340 by task modprobe/4809
    
    Fixes: 8b6573ff3420 ("bnxt_re: Update the debug counters for doorbell pacing")
    Link: https://patch.msgid.link/r/1728373302-19530-3-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix the GID table length [+ + +]
Author: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Date:   Tue Oct 8 00:41:42 2024 -0700

    RDMA/bnxt_re: Fix the GID table length
    
    [ Upstream commit dc5006cfcf62bea88076a587344ba5e00e66d1c6 ]
    
    GID table length is reported by FW. The gid index which is passed to the
    driver during modify_qp/create_ah is restricted by the sgid_index field of
    struct ib_global_route.  sgid_index is u8 and the max sgid possible is
    256.
    
    Each GID entry in HW will have 2 GID entries in the kernel gid table.  So
    we can support twice the gid table size reported by FW. Also, restrict the
    max GID to 256 also.
    
    Fixes: 847b97887ed4 ("RDMA/bnxt_re: Restrict the max_gids to 256")
    Link: https://patch.msgid.link/r/1728373302-19530-11-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix the max CQ WQEs for older adapters [+ + +]
Author: Abhishek Mohapatra <abhishek.mohapatra@broadcom.com>
Date:   Tue Oct 8 00:41:33 2024 -0700

    RDMA/bnxt_re: Fix the max CQ WQEs for older adapters
    
    [ Upstream commit ac6df53738b465053d38d491fff87bd7d37fdc07 ]
    
    Older adapters doesn't support the MAX CQ WQEs reported by older FW. So
    restrict the value reported to 1M always for older adapters.
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Link: https://patch.msgid.link/r/1728373302-19530-2-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Abhishek Mohapatra<abhishek.mohapatra@broadcom.com>
    Reviewed-by: Chandramohan Akula <chandramohan.akula@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Get the toggle bits from SRQ events [+ + +]
Author: Hongguang Gao <hongguang.gao@broadcom.com>
Date:   Thu Aug 29 08:34:03 2024 -0700

    RDMA/bnxt_re: Get the toggle bits from SRQ events
    
    [ Upstream commit 640c2cf84e1de62e6bb0738dc2128d5506e7e5bc ]
    
    SRQ arming requires the toggle bits received from hardware.
    Get the toggle bits from SRQ notification for the
    gen p7 adapters. This value will be zero for the older adapters.
    
    Signed-off-by: Hongguang Gao <hongguang.gao@broadcom.com>
    Signed-off-by: Chandramohan Akula <chandramohan.akula@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Link: https://patch.msgid.link/1724945645-14989-2-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Stable-dep-of: 2df411353dac ("RDMA/bnxt_re: Change the sequence of updating the CQ toggle value")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Return more meaningful error [+ + +]
Author: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Date:   Tue Oct 8 00:41:36 2024 -0700

    RDMA/bnxt_re: Return more meaningful error
    
    [ Upstream commit 98647df0178df215b8239c5c365537283b2852a6 ]
    
    When the HWRM command fails, driver currently returns -EFAULT(Bad
    address). This does not look correct.
    
    Modified to return -EIO(I/O error).
    
    Fixes: cc1ec769b87c ("RDMA/bnxt_re: Fixing the Control path command and response handling")
    Fixes: 65288a22ddd8 ("RDMA/bnxt_re: use shadow qd while posting non blocking rcfw command")
    Link: https://patch.msgid.link/r/1728373302-19530-5-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/core: Fix ENODEV error for iWARP test over vlan [+ + +]
Author: Anumula Murali Mohan Reddy <anumula@chelsio.com>
Date:   Tue Oct 8 17:13:34 2024 +0530

    RDMA/core: Fix ENODEV error for iWARP test over vlan
    
    [ Upstream commit 5069d7e202f640a36cf213a432296c85113a52f7 ]
    
    If traffic is over vlan, cma_validate_port() fails to match vlan
    net_device ifindex with bound_if_index and results in ENODEV error.
    It is because rdma_copy_src_l2_addr() always assigns bound_if_index with
    real net_device ifindex.
    This patch fixes the issue by assigning bound_if_index with vlan
    net_device index if traffic is over vlan.
    
    Fixes: f8ef1be816bf ("RDMA/cma: Avoid GID lookups on iWARP devices")
    Signed-off-by: Anumula Murali Mohan Reddy <anumula@chelsio.com>
    Signed-off-by: Potnuri Bharat Teja <bharat@chelsio.com>
    Link: https://patch.msgid.link/20241008114334.146702-1-anumula@chelsio.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/cxgb4: Fix RDMA_CM_EVENT_UNREACHABLE error for iWARP [+ + +]
Author: Anumula Murali Mohan Reddy <anumula@chelsio.com>
Date:   Mon Oct 7 18:53:11 2024 +0530

    RDMA/cxgb4: Fix RDMA_CM_EVENT_UNREACHABLE error for iWARP
    
    [ Upstream commit c659b405b82ead335bee6eb33f9691bf718e21e8 ]
    
    ip_dev_find() always returns real net_device address, whether traffic is
    running on a vlan or real device, if traffic is over vlan, filling
    endpoint struture with real ndev and an attempt to send a connect request
    will results in RDMA_CM_EVENT_UNREACHABLE error.  This patch fixes the
    issue by using vlan_dev_real_dev().
    
    Fixes: 830662f6f032 ("RDMA/cxgb4: Add support for active and passive open connection with IPv6 address")
    Link: https://patch.msgid.link/r/20241007132311.70593-1-anumula@chelsio.com
    Signed-off-by: Anumula Murali Mohan Reddy <anumula@chelsio.com>
    Signed-off-by: Potnuri Bharat Teja <bharat@chelsio.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/irdma: Fix misspelling of "accept*" [+ + +]
Author: Alexander Zubkov <green@qrator.net>
Date:   Tue Oct 8 18:19:13 2024 +0200

    RDMA/irdma: Fix misspelling of "accept*"
    
    [ Upstream commit 8cddfa535c931b8d8110c73bfed7354a94cbf891 ]
    
    There is "accept*" misspelled as "accpet*" in the comments.  Fix the
    spelling.
    
    Fixes: 146b9756f14c ("RDMA/irdma: Add connection manager")
    Link: https://patch.msgid.link/r/20241008161913.19965-1-green@qrator.net
    Signed-off-by: Alexander Zubkov <green@qrator.net>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/srpt: Make slab cache names unique [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Wed Oct 9 14:00:48 2024 -0700

    RDMA/srpt: Make slab cache names unique
    
    [ Upstream commit 4d784c042d164f10fc809e2338457036cd7c653d ]
    
    Since commit 4c39529663b9 ("slab: Warn on duplicate cache names when
    DEBUG_VM=y"), slab complains about duplicate cache names. Hence this
    patch. The approach is as follows:
    - Maintain an xarray with the slab size as index and a reference count
      and a kmem_cache pointer as contents. Use srpt-${slab_size} as kmem
      cache name.
    - Use 512-byte alignment for all slabs instead of only for some of the
      slabs.
    - Increment the reference count instead of calling kmem_cache_create().
    - Decrement the reference count instead of calling kmem_cache_destroy().
    
    Fixes: 5dabcd0456d7 ("RDMA/srpt: Add support for immediate data")
    Link: https://patch.msgid.link/r/20241009210048.4122518-1-bvanassche@acm.org
    Reported-by: Shinichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Closes: https://lore.kernel.org/linux-block/xpe6bea7rakpyoyfvspvin2dsozjmjtjktpph7rep3h25tv7fb@ooz4cu5z6bq6/
    Suggested-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Tested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
reset: starfive: jh71x0: Fix accessing the empty member on JH7110 SoC [+ + +]
Author: Changhuang Liang <changhuang.liang@starfivetech.com>
Date:   Wed Sep 25 04:24:42 2024 -0700

    reset: starfive: jh71x0: Fix accessing the empty member on JH7110 SoC
    
    [ Upstream commit 2cf59663660799ce16f4dfbed97cdceac7a7fa11 ]
    
    data->asserted will be NULL on JH7110 SoC since commit 82327b127d41
    ("reset: starfive: Add StarFive JH7110 reset driver") was added. Add
    the judgment condition to avoid errors when calling reset_control_status
    on JH7110 SoC.
    
    Fixes: 82327b127d41 ("reset: starfive: Add StarFive JH7110 reset driver")
    Signed-off-by: Changhuang Liang <changhuang.liang@starfivetech.com>
    Acked-by: Hal Feng <hal.feng@starfivetech.com>
    Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
    Link: https://lore.kernel.org/r/20240925112442.1732416-1-changhuang.liang@starfivetech.com
    Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert " fs/9p: mitigate inode collisions" [+ + +]
Author: Dominique Martinet <asmadeus@codewreck.org>
Date:   Thu Oct 24 08:52:10 2024 +0900

    Revert " fs/9p: mitigate inode collisions"
    
    commit f69999b5f9b444a2443ca2b9e5976e78bb5b7c69 upstream.
    
    This reverts commit d05dcfdf5e1659b2949d13060284eff3888b644e.
    
    This is a requirement to revert commit 724a08450f74 ("fs/9p: simplify
    iget to remove unnecessary paths"), see that revert for details.
    
    Fixes: 724a08450f74 ("fs/9p: simplify iget to remove unnecessary paths")
    Reported-by: Will Deacon <will@kernel.org>
    Link: https://lkml.kernel.org/r/20240923100508.GA32066@willie-the-truck
    Cc: stable@vger.kernel.org # v6.9+
    Message-ID: <20241024-revert_iget-v1-1-4cac63d25f72@codewreck.org>
    Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "fs/9p: fix uaf in in v9fs_stat2inode_dotl" [+ + +]
Author: Dominique Martinet <asmadeus@codewreck.org>
Date:   Thu Oct 24 08:52:12 2024 +0900

    Revert "fs/9p: fix uaf in in v9fs_stat2inode_dotl"
    
    commit 26f8dd2dde6864558782d91542f89483bd59a3c2 upstream.
    
    This reverts commit 11763a8598f888dec631a8a903f7ada32181001f.
    
    This is a requirement to revert commit 724a08450f74 ("fs/9p: simplify
    iget to remove unnecessary paths"), see that revert for details.
    
    Fixes: 724a08450f74 ("fs/9p: simplify iget to remove unnecessary paths")
    Reported-by: Will Deacon <will@kernel.org>
    Link: https://lkml.kernel.org/r/20240923100508.GA32066@willie-the-truck
    Cc: stable@vger.kernel.org # v6.9+
    Message-ID: <20241024-revert_iget-v1-3-4cac63d25f72@codewreck.org>
    Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Revert "fs/9p: remove redundant pointer v9ses" [+ + +]
Author: Dominique Martinet <asmadeus@codewreck.org>
Date:   Thu Oct 24 08:52:11 2024 +0900

    Revert "fs/9p: remove redundant pointer v9ses"
    
    commit fedd06210b14febfa69e09d0721746749ea9ea20 upstream.
    
    This reverts commit 10211b4a23cf4a3df5c11a10e5b3d371f16a906f.
    
    This is a requirement to revert commit 724a08450f74 ("fs/9p: simplify
    iget to remove unnecessary paths"), see that revert for details.
    
    Fixes: 724a08450f74 ("fs/9p: simplify iget to remove unnecessary paths")
    Reported-by: Will Deacon <will@kernel.org>
    Link: https://lkml.kernel.org/r/20240923100508.GA32066@willie-the-truck
    Cc: stable@vger.kernel.org # v6.9+
    Message-ID: <20241024-revert_iget-v1-2-4cac63d25f72@codewreck.org>
    Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Revert "fs/9p: simplify iget to remove unnecessary paths" [+ + +]
Author: Dominique Martinet <asmadeus@codewreck.org>
Date:   Thu Oct 24 08:52:13 2024 +0900

    Revert "fs/9p: simplify iget to remove unnecessary paths"
    
    commit be2ca3825372085d669d322dccd0542a90e5b434 upstream.
    
    This reverts commit 724a08450f74b02bd89078a596fd24857827c012.
    
    This code simplification introduced significant regressions on servers
    that do not remap inode numbers when exporting multiple underlying
    filesystems with colliding inodes, as can be illustrated with simple
    tmpfs exports in qemu with remapping disabled:
    ```
    # host side
    cd /tmp/linux-test
    mkdir m1 m2
    mount -t tmpfs tmpfs m1
    mount -t tmpfs tmpfs m2
    mkdir m1/dir m2/dir
    echo foo > m1/dir/foo
    echo bar > m2/dir/bar
    
    # guest side
    # started with -virtfs local,path=/tmp/linux-test,mount_tag=tmp,security_model=mapped-file
    mount -t 9p -o trans=virtio,debug=1 tmp /mnt/t
    
    ls /mnt/t/m1/dir
    # foo
    ls /mnt/t/m2/dir
    # bar (works ok if directry isn't open)
    
    # cd to keep first dir's inode alive
    cd /mnt/t/m1/dir
    ls /mnt/t/m2/dir
    # foo (should be bar)
    ```
    Other examples can be crafted with regular files with fscache enabled,
    in which case I/Os just happen to the wrong file leading to
    corruptions, or guest failing to boot with:
      | VFS: Lookup of 'com.android.runtime' in 9p 9p would have caused loop
    
    In theory, we'd want the servers to be smart enough and ensure they
    never send us two different files with the same 'qid.path', but while
    qemu has an option to remap that is recommended (and qemu prints a
    warning if this case happens), there are many other servers which do
    not (kvmtool, nfs-ganesha, probably diod...), we should at least ensure
    we don't cause regressions on this:
    - assume servers can't be trusted and operations that should get a 'new'
    inode properly do so. commit d05dcfdf5e16 (" fs/9p: mitigate inode
    collisions") attempted to do this, but v9fs_fid_iget_dotl() was not
    called so some higher level of caching got in the way; this needs to be
    fixed properly before we can re-apply the patches.
    - if we ever want to really simplify this code, we will need to add some
    negotiation with the server at mount time where the server could claim
    they handle this properly, at which point we could optimize this out.
    (but that might not be needed at all if we properly handle the 'new'
    check?)
    
    Fixes: 724a08450f74 ("fs/9p: simplify iget to remove unnecessary paths")
    Reported-by: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/all/20240408141436.GA17022@redhat.com/
    Link: https://lkml.kernel.org/r/20240923100508.GA32066@willie-the-truck
    Cc: stable@vger.kernel.org # v6.9+
    Message-ID: <20241024-revert_iget-v1-4-4cac63d25f72@codewreck.org>
    Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ring-buffer: Fix reader locking when changing the sub buffer order [+ + +]
Author: Petr Pavlu <petr.pavlu@suse.com>
Date:   Tue Oct 15 13:24:29 2024 +0200

    ring-buffer: Fix reader locking when changing the sub buffer order
    
    [ Upstream commit 09661f75e75cb6c1d2d8326a70c311d46729235f ]
    
    The function ring_buffer_subbuf_order_set() updates each
    ring_buffer_per_cpu and installs new sub buffers that match the requested
    page order. This operation may be invoked concurrently with readers that
    rely on some of the modified data, such as the head bit (RB_PAGE_HEAD), or
    the ring_buffer_per_cpu.pages and reader_page pointers. However, no
    exclusive access is acquired by ring_buffer_subbuf_order_set(). Modifying
    the mentioned data while a reader also operates on them can then result in
    incorrect memory access and various crashes.
    
    Fix the problem by taking the reader_lock when updating a specific
    ring_buffer_per_cpu in ring_buffer_subbuf_order_set().
    
    Link: https://lore.kernel.org/linux-trace-kernel/20240715145141.5528-1-petr.pavlu@suse.com/
    Link: https://lore.kernel.org/linux-trace-kernel/20241010195849.2f77cc3f@gandalf.local.home/
    Link: https://lore.kernel.org/linux-trace-kernel/20241011112850.17212b25@gandalf.local.home/
    
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://lore.kernel.org/20241015112440.26987-1-petr.pavlu@suse.com
    Fixes: 8e7b58c27b3c ("ring-buffer: Just update the subbuffers when changing their allocation order")
    Signed-off-by: Petr Pavlu <petr.pavlu@suse.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
riscv, bpf: Fix possible infinite tailcall when CONFIG_CFI_CLANG is enabled [+ + +]
Author: Pu Lehui <pulehui@huawei.com>
Date:   Tue Oct 8 12:45:44 2024 +0000

    riscv, bpf: Fix possible infinite tailcall when CONFIG_CFI_CLANG is enabled
    
    [ Upstream commit 30a59cc79754fd9ff3f41b7ee2eb21da85988548 ]
    
    When CONFIG_CFI_CLANG is enabled, the number of prologue instructions
    skipped by tailcall needs to include the kcfi instruction, otherwise the
    TCC will be initialized every tailcall is called, which may result in
    infinite tailcalls.
    
    Fixes: e63985ecd226 ("bpf, riscv64/cfi: Support kCFI + BPF on riscv64")
    Signed-off-by: Pu Lehui <pulehui@huawei.com>
    Acked-by: Björn Töpel <bjorn@kernel.org>
    Link: https://lore.kernel.org/r/20241008124544.171161-1-pulehui@huaweicloud.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

riscv, bpf: Make BPF_CMPXCHG fully ordered [+ + +]
Author: Andrea Parri <parri.andrea@gmail.com>
Date:   Thu Oct 17 17:36:28 2024 +0300

    riscv, bpf: Make BPF_CMPXCHG fully ordered
    
    [ Upstream commit e59db0623f6955986d1be0880b351a1f56e7fd6d ]
    
    According to the prototype formal BPF memory consistency model
    discussed e.g. in [1] and following the ordering properties of
    the C/in-kernel macro atomic_cmpxchg(), a BPF atomic operation
    with the BPF_CMPXCHG modifier is fully ordered.  However, the
    current RISC-V JIT lowerings fail to meet such memory ordering
    property.  This is illustrated by the following litmus test:
    
    BPF BPF__MP+success_cmpxchg+fence
    {
     0:r1=x; 0:r3=y; 0:r5=1;
     1:r2=y; 1:r4=f; 1:r7=x;
    }
     P0                               | P1                                         ;
     *(u64 *)(r1 + 0) = 1             | r1 = *(u64 *)(r2 + 0)                      ;
     r2 = cmpxchg_64 (r3 + 0, r4, r5) | r3 = atomic_fetch_add((u64 *)(r4 + 0), r5) ;
                                      | r6 = *(u64 *)(r7 + 0)                      ;
    exists (1:r1=1 /\ 1:r6=0)
    
    whose "exists" clause is not satisfiable according to the BPF
    memory model.  Using the current RISC-V JIT lowerings, the test
    can be mapped to the following RISC-V litmus test:
    
    RISCV RISCV__MP+success_cmpxchg+fence
    {
     0:x1=x; 0:x3=y; 0:x5=1;
     1:x2=y; 1:x4=f; 1:x7=x;
    }
     P0                 | P1                          ;
     sd x5, 0(x1)       | ld x1, 0(x2)                ;
     L00:               | amoadd.d.aqrl x3, x5, 0(x4) ;
     lr.d x2, 0(x3)     | ld x6, 0(x7)                ;
     bne x2, x4, L01    |                             ;
     sc.d x6, x5, 0(x3) |                             ;
     bne x6, x4, L00    |                             ;
     fence rw, rw       |                             ;
     L01:               |                             ;
    exists (1:x1=1 /\ 1:x6=0)
    
    where the two stores in P0 can be reordered.  Update the RISC-V
    JIT lowerings/implementation of BPF_CMPXCHG to emit an SC with
    RELEASE ("rl") annotation in order to meet the expected memory
    ordering guarantees.  The resulting RISC-V JIT lowerings of
    BPF_CMPXCHG match the RISC-V lowerings of the C atomic_cmpxchg().
    
    Other lowerings were fixed via 20a759df3bba ("riscv, bpf: make
    some atomic operations fully ordered").
    
    Fixes: dd642ccb45ec ("riscv, bpf: Implement more atomic operations for RV64")
    Signed-off-by: Andrea Parri <parri.andrea@gmail.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Puranjay Mohan <puranjay@kernel.org>
    Acked-by: Björn Töpel <bjorn@kernel.org>
    Link: https://lpc.events/event/18/contributions/1949/attachments/1665/3441/bpfmemmodel.2024.09.19p.pdf [1]
    Link: https://lore.kernel.org/bpf/20241017143628.2673894-1-parri.andrea@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/pci: Handle PCI error codes other than 0x3a [+ + +]
Author: Niklas Schnelle <schnelle@linux.ibm.com>
Date:   Thu Apr 11 14:01:39 2024 +0200

    s390/pci: Handle PCI error codes other than 0x3a
    
    [ Upstream commit 3cd03ea57e8e16cc78cc357d5e9f26078426f236 ]
    
    The Linux implementation of PCI error recovery for s390 was based on the
    understanding that firmware error recovery is a two step process with an
    optional initial error event to indicate the cause of the error if known
    followed by either error event 0x3A (Success) or 0x3B (Failure) to
    indicate whether firmware was able to recover. While this has been the
    case in testing and the error cases seen in the wild it turns out this
    is not correct. Instead firmware only generates 0x3A for some error and
    service scenarios and expects the OS to perform recovery for all PCI
    events codes except for those indicating permanent error (0x3B, 0x40)
    and those indicating errors on the function measurement block (0x2A,
    0x2B, 0x2C). Align Linux behavior with these expectations.
    
    Fixes: 4cdf2f4e24ff ("s390/pci: implement minimal PCI error recovery")
    Reviewed-by: Gerd Bayer <gbayer@linux.ibm.com>
    Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390: Initialize psw mask in perf_arch_fetch_caller_regs() [+ + +]
Author: Heiko Carstens <hca@linux.ibm.com>
Date:   Thu Oct 10 17:52:39 2024 +0200

    s390: Initialize psw mask in perf_arch_fetch_caller_regs()
    
    [ Upstream commit 223e7fb979fa06934f1595b6ad0ae1d4ead1147f ]
    
    Also initialize regs->psw.mask in perf_arch_fetch_caller_regs().
    This way user_mode(regs) will return false, like it should.
    
    It looks like all current users initialize regs to zero, so that this
    doesn't fix a bug currently. However it is better to not rely on callers
    to do this.
    
    Fixes: 914d52e46490 ("s390: implement perf_arch_fetch_caller_regs")
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/core: Disable page allocation in task_tick_mm_cid() [+ + +]
Author: Waiman Long <longman@redhat.com>
Date:   Wed Oct 9 21:44:32 2024 -0400

    sched/core: Disable page allocation in task_tick_mm_cid()
    
    [ Upstream commit 73ab05aa46b02d96509cb029a8d04fca7bbde8c7 ]
    
    With KASAN and PREEMPT_RT enabled, calling task_work_add() in
    task_tick_mm_cid() may cause the following splat.
    
    [   63.696416] BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
    [   63.696416] in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 610, name: modprobe
    [   63.696416] preempt_count: 10001, expected: 0
    [   63.696416] RCU nest depth: 1, expected: 1
    
    This problem is caused by the following call trace.
    
      sched_tick() [ acquire rq->__lock ]
       -> task_tick_mm_cid()
        -> task_work_add()
         -> __kasan_record_aux_stack()
          -> kasan_save_stack()
           -> stack_depot_save_flags()
            -> alloc_pages_mpol_noprof()
             -> __alloc_pages_noprof()
              -> get_page_from_freelist()
               -> rmqueue()
                -> rmqueue_pcplist()
                 -> __rmqueue_pcplist()
                  -> rmqueue_bulk()
                   -> rt_spin_lock()
    
    The rq lock is a raw_spinlock_t. We can't sleep while holding
    it. IOW, we can't call alloc_pages() in stack_depot_save_flags().
    
    The task_tick_mm_cid() function with its task_work_add() call was
    introduced by commit 223baf9d17f2 ("sched: Fix performance regression
    introduced by mm_cid") in v6.4 kernel.
    
    Fortunately, there is a kasan_record_aux_stack_noalloc() variant that
    calls stack_depot_save_flags() while not allowing it to allocate
    new pages.  To allow task_tick_mm_cid() to use task_work without
    page allocation, a new TWAF_NO_ALLOC flag is added to enable calling
    kasan_record_aux_stack_noalloc() instead of kasan_record_aux_stack()
    if set. The task_tick_mm_cid() function is modified to add this new flag.
    
    The possible downside is the missing stack trace in a KASAN report due
    to new page allocation required when task_work_add_noallloc() is called
    which should be rare.
    
    Fixes: 223baf9d17f2 ("sched: Fix performance regression introduced by mm_cid")
    Signed-off-by: Waiman Long <longman@redhat.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20241010014432.194742-1-longman@redhat.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scsi: target: core: Fix null-ptr-deref in target_alloc_device() [+ + +]
Author: Wang Hai <wanghai38@huawei.com>
Date:   Fri Oct 11 19:34:44 2024 +0800

    scsi: target: core: Fix null-ptr-deref in target_alloc_device()
    
    [ Upstream commit fca6caeb4a61d240f031914413fcc69534f6dc03 ]
    
    There is a null-ptr-deref issue reported by KASAN:
    
    BUG: KASAN: null-ptr-deref in target_alloc_device+0xbc4/0xbe0 [target_core_mod]
    ...
     kasan_report+0xb9/0xf0
     target_alloc_device+0xbc4/0xbe0 [target_core_mod]
     core_dev_setup_virtual_lun0+0xef/0x1f0 [target_core_mod]
     target_core_init_configfs+0x205/0x420 [target_core_mod]
     do_one_initcall+0xdd/0x4e0
    ...
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    In target_alloc_device(), if allocing memory for dev queues fails, then
    dev will be freed by dev->transport->free_device(), but dev->transport
    is not initialized at that time, which will lead to a null pointer
    reference problem.
    
    Fixing this bug by freeing dev with hba->backend->ops->free_device().
    
    Fixes: 1526d9f10c61 ("scsi: target: Make state_list per CPU")
    Signed-off-by: Wang Hai <wanghai38@huawei.com>
    Link: https://lore.kernel.org/r/20241011113444.40749-1-wanghai38@huawei.com
    Reviewed-by: Mike Christie <michael.christie@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/bpf: Fix cross-compiling urandom_read [+ + +]
Author: Tony Ambardar <tony.ambardar@gmail.com>
Date:   Tue Oct 8 21:07:20 2024 -0700

    selftests/bpf: Fix cross-compiling urandom_read
    
    [ Upstream commit fd526e121c4d6f71aed82d21a8b8277b03e60b43 ]
    
    Linking of urandom_read and liburandom_read.so prefers LLVM's 'ld.lld' but
    falls back to using 'ld' if unsupported. However, this fallback discards
    any existing makefile macro for LD and can break cross-compilation.
    
    Fix by changing the fallback to use the target linker $(LD), passed via
    '-fuse-ld=' using an absolute path rather than a linker "flavour".
    
    Fixes: 08c79c9cd67f ("selftests/bpf: Don't force lld on non-x86 architectures")
    Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20241009040720.635260-1-tony.ambardar@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: fix perf_event link info name_len assertion [+ + +]
Author: Tyrone Wu <wudevelops@gmail.com>
Date:   Tue Oct 8 16:43:12 2024 +0000

    selftests/bpf: fix perf_event link info name_len assertion
    
    [ Upstream commit 4538a38f654a1c292fe489a9b66179262bfed088 ]
    
    Fix `name_len` field assertions in `bpf_link_info.perf_event` for
    kprobe/uprobe/tracepoint to validate correct name size instead of 0.
    
    Fixes: 23cf7aa539dc ("selftests/bpf: Add selftest for fill_link_info")
    Signed-off-by: Tyrone Wu <wudevelops@gmail.com>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Acked-by: Yafang Shao <laoar.shao@gmail.com>
    Link: https://lore.kernel.org/r/20241008164312.46269-2-wudevelops@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
smb: client: fix OOBs when building SMB2_IOCTL request [+ + +]
Author: Paulo Alcantara <pc@manguebit.com>
Date:   Tue Oct 15 19:04:04 2024 -0300

    smb: client: fix OOBs when building SMB2_IOCTL request
    
    [ Upstream commit 1ab60323c5201bef25f2a3dc0ccc404d9aca77f1 ]
    
    When using encryption, either enforced by the server or when using
    'seal' mount option, the client will squash all compound request buffers
    down for encryption into a single iov in smb2_set_next_command().
    
    SMB2_ioctl_init() allocates a small buffer (448 bytes) to hold the
    SMB2_IOCTL request in the first iov, and if the user passes an input
    buffer that is greater than 328 bytes, smb2_set_next_command() will
    end up writing off the end of @rqst->iov[0].iov_base as shown below:
    
      mount.cifs //srv/share /mnt -o ...,seal
      ln -s $(perl -e "print('a')for 1..1024") /mnt/link
    
      BUG: KASAN: slab-out-of-bounds in
      smb2_set_next_command.cold+0x1d6/0x24c [cifs]
      Write of size 4116 at addr ffff8881148fcab8 by task ln/859
    
      CPU: 1 UID: 0 PID: 859 Comm: ln Not tainted 6.12.0-rc3 #1
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
      1.16.3-2.fc40 04/01/2014
      Call Trace:
       <TASK>
       dump_stack_lvl+0x5d/0x80
       ? smb2_set_next_command.cold+0x1d6/0x24c [cifs]
       print_report+0x156/0x4d9
       ? smb2_set_next_command.cold+0x1d6/0x24c [cifs]
       ? __virt_addr_valid+0x145/0x310
       ? __phys_addr+0x46/0x90
       ? smb2_set_next_command.cold+0x1d6/0x24c [cifs]
       kasan_report+0xda/0x110
       ? smb2_set_next_command.cold+0x1d6/0x24c [cifs]
       kasan_check_range+0x10f/0x1f0
       __asan_memcpy+0x3c/0x60
       smb2_set_next_command.cold+0x1d6/0x24c [cifs]
       smb2_compound_op+0x238c/0x3840 [cifs]
       ? kasan_save_track+0x14/0x30
       ? kasan_save_free_info+0x3b/0x70
       ? vfs_symlink+0x1a1/0x2c0
       ? do_symlinkat+0x108/0x1c0
       ? __pfx_smb2_compound_op+0x10/0x10 [cifs]
       ? kmem_cache_free+0x118/0x3e0
       ? cifs_get_writable_path+0xeb/0x1a0 [cifs]
       smb2_get_reparse_inode+0x423/0x540 [cifs]
       ? __pfx_smb2_get_reparse_inode+0x10/0x10 [cifs]
       ? rcu_is_watching+0x20/0x50
       ? __kmalloc_noprof+0x37c/0x480
       ? smb2_create_reparse_symlink+0x257/0x490 [cifs]
       ? smb2_create_reparse_symlink+0x38f/0x490 [cifs]
       smb2_create_reparse_symlink+0x38f/0x490 [cifs]
       ? __pfx_smb2_create_reparse_symlink+0x10/0x10 [cifs]
       ? find_held_lock+0x8a/0xa0
       ? hlock_class+0x32/0xb0
       ? __build_path_from_dentry_optional_prefix+0x19d/0x2e0 [cifs]
       cifs_symlink+0x24f/0x960 [cifs]
       ? __pfx_make_vfsuid+0x10/0x10
       ? __pfx_cifs_symlink+0x10/0x10 [cifs]
       ? make_vfsgid+0x6b/0xc0
       ? generic_permission+0x96/0x2d0
       vfs_symlink+0x1a1/0x2c0
       do_symlinkat+0x108/0x1c0
       ? __pfx_do_symlinkat+0x10/0x10
       ? strncpy_from_user+0xaa/0x160
       __x64_sys_symlinkat+0xb9/0xf0
       do_syscall_64+0xbb/0x1d0
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
      RIP: 0033:0x7f08d75c13bb
    
    Reported-by: David Howells <dhowells@redhat.com>
    Fixes: e77fe73c7e38 ("cifs: we can not use small padding iovs together with encryption")
    Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

smb: client: fix possible double free in smb2_set_ea() [+ + +]
Author: Su Hui <suhui@nfschina.com>
Date:   Tue Oct 15 18:20:37 2024 +0800

    smb: client: fix possible double free in smb2_set_ea()
    
    [ Upstream commit 19ebc1e6cab334a8193398d4152deb76019b5d34 ]
    
    Clang static checker(scan-build) warning:
    fs/smb/client/smb2ops.c:1304:2: Attempt to free released memory.
     1304 |         kfree(ea);
          |         ^~~~~~~~~
    
    There is a double free in such case:
    'ea is initialized to NULL' -> 'first successful memory allocation for
    ea' -> 'something failed, goto sea_exit' -> 'first memory release for ea'
    -> 'goto replay_again' -> 'second goto sea_exit before allocate memory
    for ea' -> 'second memory release for ea resulted in double free'.
    
    Re-initialie 'ea' to NULL near to the replay_again label, it can fix this
    double free problem.
    
    Fixes: 4f1fffa23769 ("cifs: commands that are retried should have replay flag set")
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Su Hui <suhui@nfschina.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

smb: client: Handle kstrdup failures for passwords [+ + +]
Author: Henrique Carvalho <henrique.carvalho@suse.com>
Date:   Tue Oct 22 15:21:26 2024 -0300

    smb: client: Handle kstrdup failures for passwords
    
    [ Upstream commit 9a5dd61151399ad5a5d69aad28ab164734c1e3bc ]
    
    In smb3_reconfigure(), after duplicating ctx->password and
    ctx->password2 with kstrdup(), we need to check for allocation
    failures.
    
    If ses->password allocation fails, return -ENOMEM.
    If ses->password2 allocation fails, free ses->password, set it
    to NULL, and return -ENOMEM.
    
    Fixes: c1eb537bf456 ("cifs: allow changing password during remount")
    Reviewed-by: David Howells <dhowells@redhat.com
    Signed-off-by: Haoxiang Li <make24@iscas.ac.cn>
    Signed-off-by: Henrique Carvalho <henrique.carvalho@suse.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
soundwire: intel_ace2x: Send PDI stream number during prepare [+ + +]
Author: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Date:   Wed Oct 16 11:29:09 2024 +0800

    soundwire: intel_ace2x: Send PDI stream number during prepare
    
    commit c78f1e15e46ac82607eed593b22992fd08644d96 upstream.
    
    In the case of a prepare callback after an xrun or when the PCM is
    restarted after a call to snd_pcm_drain/snd_pcm_drop, avoid
    reprogramming the SHIM registers but send the PDI stream number so that
    the link DMA data can be set. This is needed for the case that the DMA
    data is cleared when the PCM is stopped and restarted without being
    closed.
    
    Link: https://github.com/thesofproject/sof/issues/9502
    Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
    Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
    Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
    Acked-by: Vinod Koul <vkoul@kernel.org>
    All: stable@vger.kernel.org # 6.10.x 6.11.x
    Link: https://patch.msgid.link/20241016032910.14601-4-yung-chuan.liao@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tcp/dccp: Don't use timer_pending() in reqsk_queue_unlink(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Mon Oct 14 15:33:12 2024 -0700

    tcp/dccp: Don't use timer_pending() in reqsk_queue_unlink().
    
    [ Upstream commit e8c526f2bdf1845bedaf6a478816a3d06fa78b8f ]
    
    Martin KaFai Lau reported use-after-free [0] in reqsk_timer_handler().
    
      """
      We are seeing a use-after-free from a bpf prog attached to
      trace_tcp_retransmit_synack. The program passes the req->sk to the
      bpf_sk_storage_get_tracing kernel helper which does check for null
      before using it.
      """
    
    The commit 83fccfc3940c ("inet: fix potential deadlock in
    reqsk_queue_unlink()") added timer_pending() in reqsk_queue_unlink() not
    to call del_timer_sync() from reqsk_timer_handler(), but it introduced a
    small race window.
    
    Before the timer is called, expire_timers() calls detach_timer(timer, true)
    to clear timer->entry.pprev and marks it as not pending.
    
    If reqsk_queue_unlink() checks timer_pending() just after expire_timers()
    calls detach_timer(), TCP will miss del_timer_sync(); the reqsk timer will
    continue running and send multiple SYN+ACKs until it expires.
    
    The reported UAF could happen if req->sk is close()d earlier than the timer
    expiration, which is 63s by default.
    
    The scenario would be
    
      1. inet_csk_complete_hashdance() calls inet_csk_reqsk_queue_drop(),
         but del_timer_sync() is missed
    
      2. reqsk timer is executed and scheduled again
    
      3. req->sk is accept()ed and reqsk_put() decrements rsk_refcnt, but
         reqsk timer still has another one, and inet_csk_accept() does not
         clear req->sk for non-TFO sockets
    
      4. sk is close()d
    
      5. reqsk timer is executed again, and BPF touches req->sk
    
    Let's not use timer_pending() by passing the caller context to
    __inet_csk_reqsk_queue_drop().
    
    Note that reqsk timer is pinned, so the issue does not happen in most
    use cases. [1]
    
    [0]
    BUG: KFENCE: use-after-free read in bpf_sk_storage_get_tracing+0x2e/0x1b0
    
    Use-after-free read at 0x00000000a891fb3a (in kfence-#1):
    bpf_sk_storage_get_tracing+0x2e/0x1b0
    bpf_prog_5ea3e95db6da0438_tcp_retransmit_synack+0x1d20/0x1dda
    bpf_trace_run2+0x4c/0xc0
    tcp_rtx_synack+0xf9/0x100
    reqsk_timer_handler+0xda/0x3d0
    run_timer_softirq+0x292/0x8a0
    irq_exit_rcu+0xf5/0x320
    sysvec_apic_timer_interrupt+0x6d/0x80
    asm_sysvec_apic_timer_interrupt+0x16/0x20
    intel_idle_irq+0x5a/0xa0
    cpuidle_enter_state+0x94/0x273
    cpu_startup_entry+0x15e/0x260
    start_secondary+0x8a/0x90
    secondary_startup_64_no_verify+0xfa/0xfb
    
    kfence-#1: 0x00000000a72cc7b6-0x00000000d97616d9, size=2376, cache=TCPv6
    
    allocated by task 0 on cpu 9 at 260507.901592s:
    sk_prot_alloc+0x35/0x140
    sk_clone_lock+0x1f/0x3f0
    inet_csk_clone_lock+0x15/0x160
    tcp_create_openreq_child+0x1f/0x410
    tcp_v6_syn_recv_sock+0x1da/0x700
    tcp_check_req+0x1fb/0x510
    tcp_v6_rcv+0x98b/0x1420
    ipv6_list_rcv+0x2258/0x26e0
    napi_complete_done+0x5b1/0x2990
    mlx5e_napi_poll+0x2ae/0x8d0
    net_rx_action+0x13e/0x590
    irq_exit_rcu+0xf5/0x320
    common_interrupt+0x80/0x90
    asm_common_interrupt+0x22/0x40
    cpuidle_enter_state+0xfb/0x273
    cpu_startup_entry+0x15e/0x260
    start_secondary+0x8a/0x90
    secondary_startup_64_no_verify+0xfa/0xfb
    
    freed by task 0 on cpu 9 at 260507.927527s:
    rcu_core_si+0x4ff/0xf10
    irq_exit_rcu+0xf5/0x320
    sysvec_apic_timer_interrupt+0x6d/0x80
    asm_sysvec_apic_timer_interrupt+0x16/0x20
    cpuidle_enter_state+0xfb/0x273
    cpu_startup_entry+0x15e/0x260
    start_secondary+0x8a/0x90
    secondary_startup_64_no_verify+0xfa/0xfb
    
    Fixes: 83fccfc3940c ("inet: fix potential deadlock in reqsk_queue_unlink()")
    Reported-by: Martin KaFai Lau <martin.lau@kernel.org>
    Closes: https://lore.kernel.org/netdev/eb6684d0-ffd9-4bdc-9196-33f690c25824@linux.dev/
    Link: https://lore.kernel.org/netdev/b55e2ca0-42f2-4b7c-b445-6ffd87ca74a0@linux.dev/ [1]
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Martin KaFai Lau <martin.lau@kernel.org>
    Link: https://patch.msgid.link/20241014223312.4254-1-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing/probes: Fix MAX_TRACE_ARGS limit handling [+ + +]
Author: Mikel Rychliski <mikel@mikelr.com>
Date:   Mon Sep 30 16:26:54 2024 -0400

    tracing/probes: Fix MAX_TRACE_ARGS limit handling
    
    [ Upstream commit 73f35080477e893aa6f4c8d388352b871b288fbc ]
    
    When creating a trace_probe we would set nr_args prior to truncating the
    arguments to MAX_TRACE_ARGS. However, we would only initialize arguments
    up to the limit.
    
    This caused invalid memory access when attempting to set up probes with
    more than 128 fetchargs.
    
      BUG: kernel NULL pointer dereference, address: 0000000000000020
      #PF: supervisor read access in kernel mode
      #PF: error_code(0x0000) - not-present page
      PGD 0 P4D 0
      Oops: Oops: 0000 [#1] PREEMPT SMP PTI
      CPU: 0 UID: 0 PID: 1769 Comm: cat Not tainted 6.11.0-rc7+ #8
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-1.fc39 04/01/2014
      RIP: 0010:__set_print_fmt+0x134/0x330
    
    Resolve the issue by applying the MAX_TRACE_ARGS limit earlier. Return
    an error when there are too many arguments instead of silently
    truncating.
    
    Link: https://lore.kernel.org/all/20240930202656.292869-1-mikel@mikelr.com/
    
    Fixes: 035ba76014c0 ("tracing/probes: cleanup: Set trace_probe::nr_args at trace_probe_init")
    Signed-off-by: Mikel Rychliski <mikel@mikelr.com>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing: Consider the NULL character when validating the event length [+ + +]
Author: Leo Yan <leo.yan@arm.com>
Date:   Mon Oct 7 15:47:24 2024 +0100

    tracing: Consider the NULL character when validating the event length
    
    [ Upstream commit 0b6e2e22cb23105fcb171ab92f0f7516c69c8471 ]
    
    strlen() returns a string length excluding the null byte. If the string
    length equals to the maximum buffer length, the buffer will have no
    space for the NULL terminating character.
    
    This commit checks this condition and returns failure for it.
    
    Link: https://lore.kernel.org/all/20241007144724.920954-1-leo.yan@arm.com/
    
    Fixes: dec65d79fd26 ("tracing/probe: Check event name length correctly")
    Signed-off-by: Leo Yan <leo.yan@arm.com>
    Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
udf: fix uninit-value use in udf_get_fileshortad [+ + +]
Author: Gianfranco Trad <gianf.trad@gmail.com>
Date:   Wed Sep 25 09:46:15 2024 +0200

    udf: fix uninit-value use in udf_get_fileshortad
    
    [ Upstream commit 264db9d666ad9a35075cc9ed9ec09d021580fbb1 ]
    
    Check for overflow when computing alen in udf_current_aext to mitigate
    later uninit-value use in udf_get_fileshortad KMSAN bug[1].
    After applying the patch reproducer did not trigger any issue[2].
    
    [1] https://syzkaller.appspot.com/bug?extid=8901c4560b7ab5c2f9df
    [2] https://syzkaller.appspot.com/x/log.txt?x=10242227980000
    
    Reported-by: syzbot+8901c4560b7ab5c2f9df@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=8901c4560b7ab5c2f9df
    Tested-by: syzbot+8901c4560b7ab5c2f9df@syzkaller.appspotmail.com
    Suggested-by: Jan Kara <jack@suse.com>
    Signed-off-by: Gianfranco Trad <gianf.trad@gmail.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240925074613.8475-3-gianf.trad@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

udf: refactor inode_bmap() to handle error [+ + +]
Author: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
Date:   Tue Oct 1 19:54:25 2024 +0800

    udf: refactor inode_bmap() to handle error
    
    [ Upstream commit c226964ec786f3797ed389a16392ce4357697d24 ]
    
    Refactor inode_bmap() to handle error since udf_next_aext() can return
    error now. On situations like ftruncate, udf_extend_file() can now
    detect errors and bail out early without resorting to checking for
    particular offsets and assuming internal behavior of these functions.
    
    Reported-by: syzbot+7a4842f0b1801230a989@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=7a4842f0b1801230a989
    Tested-by: syzbot+7a4842f0b1801230a989@syzkaller.appspotmail.com
    Signed-off-by: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
    Suggested-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20241001115425.266556-4-zhaomzhao@126.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

udf: refactor udf_current_aext() to handle error [+ + +]
Author: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
Date:   Tue Oct 1 19:54:23 2024 +0800

    udf: refactor udf_current_aext() to handle error
    
    [ Upstream commit ee703a7068f95764cfb62b57db1d36e465cb9b26 ]
    
    As Jan suggested in links below, refactor udf_current_aext() to
    differentiate between error, hit EOF and success, it now takes pointer to
    etype to store the extent type, return 1 when getting etype success,
    return 0 when hitting EOF and return -errno when err.
    
    Link: https://lore.kernel.org/all/20240912111235.6nr3wuqvktecy3vh@quack3/
    Signed-off-by: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
    Suggested-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20241001115425.266556-2-zhaomzhao@126.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

udf: refactor udf_next_aext() to handle error [+ + +]
Author: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
Date:   Tue Oct 1 19:54:24 2024 +0800

    udf: refactor udf_next_aext() to handle error
    
    [ Upstream commit b405c1e58b73981da0f8df03b00666b22b9397ae ]
    
    Since udf_current_aext() has error handling, udf_next_aext() should have
    error handling too. Besides, when too many indirect extents found in one
    inode, return -EFSCORRUPTED; when reading block failed, return -EIO.
    
    Signed-off-by: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
    Suggested-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20241001115425.266556-3-zhaomzhao@126.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
uprobe: avoid out-of-bounds memory access of fetching args [+ + +]
Author: Qiao Ma <mqaio@linux.alibaba.com>
Date:   Tue Oct 15 14:01:48 2024 +0800

    uprobe: avoid out-of-bounds memory access of fetching args
    
    [ Upstream commit 373b9338c9722a368925d83bc622c596896b328e ]
    
    Uprobe needs to fetch args into a percpu buffer, and then copy to ring
    buffer to avoid non-atomic context problem.
    
    Sometimes user-space strings, arrays can be very large, but the size of
    percpu buffer is only page size. And store_trace_args() won't check
    whether these data exceeds a single page or not, caused out-of-bounds
    memory access.
    
    It could be reproduced by following steps:
    1. build kernel with CONFIG_KASAN enabled
    2. save follow program as test.c
    
    ```
    \#include <stdio.h>
    \#include <stdlib.h>
    \#include <string.h>
    
    // If string length large than MAX_STRING_SIZE, the fetch_store_strlen()
    // will return 0, cause __get_data_size() return shorter size, and
    // store_trace_args() will not trigger out-of-bounds access.
    // So make string length less than 4096.
    \#define STRLEN 4093
    
    void generate_string(char *str, int n)
    {
        int i;
        for (i = 0; i < n; ++i)
        {
            char c = i % 26 + 'a';
            str[i] = c;
        }
        str[n-1] = '\0';
    }
    
    void print_string(char *str)
    {
        printf("%s\n", str);
    }
    
    int main()
    {
        char tmp[STRLEN];
    
        generate_string(tmp, STRLEN);
        print_string(tmp);
    
        return 0;
    }
    ```
    3. compile program
    `gcc -o test test.c`
    
    4. get the offset of `print_string()`
    ```
    objdump -t test | grep -w print_string
    0000000000401199 g     F .text  000000000000001b              print_string
    ```
    
    5. configure uprobe with offset 0x1199
    ```
    off=0x1199
    
    cd /sys/kernel/debug/tracing/
    echo "p /root/test:${off} arg1=+0(%di):ustring arg2=\$comm arg3=+0(%di):ustring"
     > uprobe_events
    echo 1 > events/uprobes/enable
    echo 1 > tracing_on
    ```
    
    6. run `test`, and kasan will report error.
    ==================================================================
    BUG: KASAN: use-after-free in strncpy_from_user+0x1d6/0x1f0
    Write of size 8 at addr ffff88812311c004 by task test/499CPU: 0 UID: 0 PID: 499 Comm: test Not tainted 6.12.0-rc3+ #18
    Hardware name: Red Hat KVM, BIOS 1.16.0-4.al8 04/01/2014
    Call Trace:
     <TASK>
     dump_stack_lvl+0x55/0x70
     print_address_description.constprop.0+0x27/0x310
     kasan_report+0x10f/0x120
     ? strncpy_from_user+0x1d6/0x1f0
     strncpy_from_user+0x1d6/0x1f0
     ? rmqueue.constprop.0+0x70d/0x2ad0
     process_fetch_insn+0xb26/0x1470
     ? __pfx_process_fetch_insn+0x10/0x10
     ? _raw_spin_lock+0x85/0xe0
     ? __pfx__raw_spin_lock+0x10/0x10
     ? __pte_offset_map+0x1f/0x2d0
     ? unwind_next_frame+0xc5f/0x1f80
     ? arch_stack_walk+0x68/0xf0
     ? is_bpf_text_address+0x23/0x30
     ? kernel_text_address.part.0+0xbb/0xd0
     ? __kernel_text_address+0x66/0xb0
     ? unwind_get_return_address+0x5e/0xa0
     ? __pfx_stack_trace_consume_entry+0x10/0x10
     ? arch_stack_walk+0xa2/0xf0
     ? _raw_spin_lock_irqsave+0x8b/0xf0
     ? __pfx__raw_spin_lock_irqsave+0x10/0x10
     ? depot_alloc_stack+0x4c/0x1f0
     ? _raw_spin_unlock_irqrestore+0xe/0x30
     ? stack_depot_save_flags+0x35d/0x4f0
     ? kasan_save_stack+0x34/0x50
     ? kasan_save_stack+0x24/0x50
     ? mutex_lock+0x91/0xe0
     ? __pfx_mutex_lock+0x10/0x10
     prepare_uprobe_buffer.part.0+0x2cd/0x500
     uprobe_dispatcher+0x2c3/0x6a0
     ? __pfx_uprobe_dispatcher+0x10/0x10
     ? __kasan_slab_alloc+0x4d/0x90
     handler_chain+0xdd/0x3e0
     handle_swbp+0x26e/0x3d0
     ? __pfx_handle_swbp+0x10/0x10
     ? uprobe_pre_sstep_notifier+0x151/0x1b0
     irqentry_exit_to_user_mode+0xe2/0x1b0
     asm_exc_int3+0x39/0x40
    RIP: 0033:0x401199
    Code: 01 c2 0f b6 45 fb 88 02 83 45 fc 01 8b 45 fc 3b 45 e4 7c b7 8b 45 e4 48 98 48 8d 50 ff 48 8b 45 e8 48 01 d0 ce
    RSP: 002b:00007ffdf00576a8 EFLAGS: 00000206
    RAX: 00007ffdf00576b0 RBX: 0000000000000000 RCX: 0000000000000ff2
    RDX: 0000000000000ffc RSI: 0000000000000ffd RDI: 00007ffdf00576b0
    RBP: 00007ffdf00586b0 R08: 00007feb2f9c0d20 R09: 00007feb2f9c0d20
    R10: 0000000000000001 R11: 0000000000000202 R12: 0000000000401040
    R13: 00007ffdf0058780 R14: 0000000000000000 R15: 0000000000000000
     </TASK>
    
    This commit enforces the buffer's maxlen less than a page-size to avoid
    store_trace_args() out-of-memory access.
    
    Link: https://lore.kernel.org/all/20241015060148.1108331-1-mqaio@linux.alibaba.com/
    
    Fixes: dcad1a204f72 ("tracing/uprobes: Fetch args before reserving a ring buffer")
    Signed-off-by: Qiao Ma <mqaio@linux.alibaba.com>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
usb: typec: altmode should keep reference to parent [+ + +]
Author: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Date:   Fri Oct 4 09:37:38 2024 -0300

    usb: typec: altmode should keep reference to parent
    
    [ Upstream commit befab3a278c59db0cc88c8799638064f6d3fd6f8 ]
    
    The altmode device release refers to its parent device, but without keeping
    a reference to it.
    
    When registering the altmode, get a reference to the parent and put it in
    the release function.
    
    Before this fix, when using CONFIG_DEBUG_KOBJECT_RELEASE, we see issues
    like this:
    
    [   43.572860] kobject: 'port0.0' (ffff8880057ba008): kobject_release, parent 0000000000000000 (delayed 3000)
    [   43.573532] kobject: 'port0.1' (ffff8880057bd008): kobject_release, parent 0000000000000000 (delayed 1000)
    [   43.574407] kobject: 'port0' (ffff8880057b9008): kobject_release, parent 0000000000000000 (delayed 3000)
    [   43.575059] kobject: 'port1.0' (ffff8880057ca008): kobject_release, parent 0000000000000000 (delayed 4000)
    [   43.575908] kobject: 'port1.1' (ffff8880057c9008): kobject_release, parent 0000000000000000 (delayed 4000)
    [   43.576908] kobject: 'typec' (ffff8880062dbc00): kobject_release, parent 0000000000000000 (delayed 4000)
    [   43.577769] kobject: 'port1' (ffff8880057bf008): kobject_release, parent 0000000000000000 (delayed 3000)
    [   46.612867] ==================================================================
    [   46.613402] BUG: KASAN: slab-use-after-free in typec_altmode_release+0x38/0x129
    [   46.614003] Read of size 8 at addr ffff8880057b9118 by task kworker/2:1/48
    [   46.614538]
    [   46.614668] CPU: 2 UID: 0 PID: 48 Comm: kworker/2:1 Not tainted 6.12.0-rc1-00138-gedbae730ad31 #535
    [   46.615391] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014
    [   46.616042] Workqueue: events kobject_delayed_cleanup
    [   46.616446] Call Trace:
    [   46.616648]  <TASK>
    [   46.616820]  dump_stack_lvl+0x5b/0x7c
    [   46.617112]  ? typec_altmode_release+0x38/0x129
    [   46.617470]  print_report+0x14c/0x49e
    [   46.617769]  ? rcu_read_unlock_sched+0x56/0x69
    [   46.618117]  ? __virt_addr_valid+0x19a/0x1ab
    [   46.618456]  ? kmem_cache_debug_flags+0xc/0x1d
    [   46.618807]  ? typec_altmode_release+0x38/0x129
    [   46.619161]  kasan_report+0x8d/0xb4
    [   46.619447]  ? typec_altmode_release+0x38/0x129
    [   46.619809]  ? process_scheduled_works+0x3cb/0x85f
    [   46.620185]  typec_altmode_release+0x38/0x129
    [   46.620537]  ? process_scheduled_works+0x3cb/0x85f
    [   46.620907]  device_release+0xaf/0xf2
    [   46.621206]  kobject_delayed_cleanup+0x13b/0x17a
    [   46.621584]  process_scheduled_works+0x4f6/0x85f
    [   46.621955]  ? __pfx_process_scheduled_works+0x10/0x10
    [   46.622353]  ? hlock_class+0x31/0x9a
    [   46.622647]  ? lock_acquired+0x361/0x3c3
    [   46.622956]  ? move_linked_works+0x46/0x7d
    [   46.623277]  worker_thread+0x1ce/0x291
    [   46.623582]  ? __kthread_parkme+0xc8/0xdf
    [   46.623900]  ? __pfx_worker_thread+0x10/0x10
    [   46.624236]  kthread+0x17e/0x190
    [   46.624501]  ? kthread+0xfb/0x190
    [   46.624756]  ? __pfx_kthread+0x10/0x10
    [   46.625015]  ret_from_fork+0x20/0x40
    [   46.625268]  ? __pfx_kthread+0x10/0x10
    [   46.625532]  ret_from_fork_asm+0x1a/0x30
    [   46.625805]  </TASK>
    [   46.625953]
    [   46.626056] Allocated by task 678:
    [   46.626287]  kasan_save_stack+0x24/0x44
    [   46.626555]  kasan_save_track+0x14/0x2d
    [   46.626811]  __kasan_kmalloc+0x3f/0x4d
    [   46.627049]  __kmalloc_noprof+0x1bf/0x1f0
    [   46.627362]  typec_register_port+0x23/0x491
    [   46.627698]  cros_typec_probe+0x634/0xbb6
    [   46.628026]  platform_probe+0x47/0x8c
    [   46.628311]  really_probe+0x20a/0x47d
    [   46.628605]  device_driver_attach+0x39/0x72
    [   46.628940]  bind_store+0x87/0xd7
    [   46.629213]  kernfs_fop_write_iter+0x1aa/0x218
    [   46.629574]  vfs_write+0x1d6/0x29b
    [   46.629856]  ksys_write+0xcd/0x13b
    [   46.630128]  do_syscall_64+0xd4/0x139
    [   46.630420]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    [   46.630820]
    [   46.630946] Freed by task 48:
    [   46.631182]  kasan_save_stack+0x24/0x44
    [   46.631493]  kasan_save_track+0x14/0x2d
    [   46.631799]  kasan_save_free_info+0x3f/0x4d
    [   46.632144]  __kasan_slab_free+0x37/0x45
    [   46.632474]  kfree+0x1d4/0x252
    [   46.632725]  device_release+0xaf/0xf2
    [   46.633017]  kobject_delayed_cleanup+0x13b/0x17a
    [   46.633388]  process_scheduled_works+0x4f6/0x85f
    [   46.633764]  worker_thread+0x1ce/0x291
    [   46.634065]  kthread+0x17e/0x190
    [   46.634324]  ret_from_fork+0x20/0x40
    [   46.634621]  ret_from_fork_asm+0x1a/0x30
    
    Fixes: 8a37d87d72f0 ("usb: typec: Bus type for alternate modes")
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://lore.kernel.org/r/20241004123738.2964524-1-cascardo@igalia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
virtio_net: fix integer overflow in stats [+ + +]
Author: Michael S. Tsirkin <mst@redhat.com>
Date:   Wed Oct 16 13:27:07 2024 -0400

    virtio_net: fix integer overflow in stats
    
    [ Upstream commit d95d9a31aceb2021084bc9b94647bc5b175e05e7 ]
    
    Static analysis on linux-next has detected the following issue
    in function virtnet_stats_ctx_init, in drivers/net/virtio_net.c :
    
            if (vi->device_stats_cap & VIRTIO_NET_STATS_TYPE_CVQ) {
                    queue_type = VIRTNET_Q_TYPE_CQ;
                    ctx->bitmap[queue_type]   |= VIRTIO_NET_STATS_TYPE_CVQ;
                    ctx->desc_num[queue_type] += ARRAY_SIZE(virtnet_stats_cvq_desc);
                    ctx->size[queue_type]     += sizeof(struct virtio_net_stats_cvq);
            }
    
    ctx->bitmap is declared as a u32 however it is being bit-wise or'd with
    VIRTIO_NET_STATS_TYPE_CVQ and this is defined as 1 << 32:
    
    include/uapi/linux/virtio_net.h:#define VIRTIO_NET_STATS_TYPE_CVQ (1ULL << 32)
    
    ..and hence the bit-wise or operation won't set any bits in ctx->bitmap
    because 1ULL < 32 is too wide for a u32.
    
    In fact, the field is read into a u64:
    
           u64 offset, bitmap;
    ....
           bitmap = ctx->bitmap[queue_type];
    
    so to fix, it is enough to make bitmap an array of u64.
    
    Fixes: 941168f8b40e5 ("virtio_net: support device stats")
    Reported-by: "Colin King (gmail)" <colin.i.king@gmail.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
    Link: https://patch.msgid.link/53e2bd6728136d5916e384a7840e5dc7eebff832.1729099611.git.mst@redhat.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vmxnet3: Fix packet corruption in vmxnet3_xdp_xmit_frame [+ + +]
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Mon Oct 14 21:03:11 2024 +0200

    vmxnet3: Fix packet corruption in vmxnet3_xdp_xmit_frame
    
    [ Upstream commit 4678adf94da4a9e9683817b246b58ce15fb81782 ]
    
    Andrew and Nikolay reported connectivity issues with Cilium's service
    load-balancing in case of vmxnet3.
    
    If a BPF program for native XDP adds an encapsulation header such as
    IPIP and transmits the packet out the same interface, then in case
    of vmxnet3 a corrupted packet is being sent and subsequently dropped
    on the path.
    
    vmxnet3_xdp_xmit_frame() which is called e.g. via vmxnet3_run_xdp()
    through vmxnet3_xdp_xmit_back() calculates an incorrect DMA address:
    
      page = virt_to_page(xdpf->data);
      tbi->dma_addr = page_pool_get_dma_addr(page) +
                      VMXNET3_XDP_HEADROOM;
      dma_sync_single_for_device(&adapter->pdev->dev,
                                 tbi->dma_addr, buf_size,
                                 DMA_TO_DEVICE);
    
    The above assumes a fixed offset (VMXNET3_XDP_HEADROOM), but the XDP
    BPF program could have moved xdp->data. While the passed buf_size is
    correct (xdpf->len), the dma_addr needs to have a dynamic offset which
    can be calculated as xdpf->data - (void *)xdpf, that is, xdp->data -
    xdp->data_hard_start.
    
    Fixes: 54f00cce1178 ("vmxnet3: Add XDP support.")
    Reported-by: Andrew Sauber <andrew.sauber@isovalent.com>
    Reported-by: Nikolay Nikolaev <nikolay.nikolaev@isovalent.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Tested-by: Nikolay Nikolaev <nikolay.nikolaev@isovalent.com>
    Acked-by: Anton Protopopov <aspsk@isovalent.com>
    Cc: William Tu <witu@nvidia.com>
    Cc: Ronak Doshi <ronak.doshi@broadcom.com>
    Link: https://patch.msgid.link/a0888656d7f09028f9984498cc698bb5364d89fc.1728931137.git.daniel@iogearbox.net
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vsock: Update msg_count on read_skb() [+ + +]
Author: Michal Luczaj <mhal@rbox.co>
Date:   Sun Oct 13 18:26:41 2024 +0200

    vsock: Update msg_count on read_skb()
    
    [ Upstream commit 6dafde852df8de3617d4b9f835b629aaeaccd01d ]
    
    Dequeuing via vsock_transport::read_skb() left msg_count outdated, which
    then confused SOCK_SEQPACKET recv(). Decrease the counter.
    
    Fixes: 634f1a7110b4 ("vsock: support sockmap")
    Signed-off-by: Michal Luczaj <mhal@rbox.co>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/20241013-vsock-fixes-for-redir-v2-3-d6577bbfe742@rbox.co
    Signed-off-by: Sasha Levin <sashal@kernel.org>

vsock: Update rx_bytes on read_skb() [+ + +]
Author: Michal Luczaj <mhal@rbox.co>
Date:   Sun Oct 13 18:26:40 2024 +0200

    vsock: Update rx_bytes on read_skb()
    
    [ Upstream commit 3543152f2d330141d9394d28855cb90b860091d2 ]
    
    Make sure virtio_transport_inc_rx_pkt() and virtio_transport_dec_rx_pkt()
    calls are balanced (i.e. virtio_vsock_sock::rx_bytes doesn't lie) after
    vsock_transport::read_skb().
    
    While here, also inform the peer that we've freed up space and it has more
    credit.
    
    Failing to update rx_bytes after packet is dequeued leads to a warning on
    SOCK_STREAM recv():
    
    [  233.396654] rx_queue is empty, but rx_bytes is non-zero
    [  233.396702] WARNING: CPU: 11 PID: 40601 at net/vmw_vsock/virtio_transport_common.c:589
    
    Fixes: 634f1a7110b4 ("vsock: support sockmap")
    Suggested-by: Stefano Garzarella <sgarzare@redhat.com>
    Signed-off-by: Michal Luczaj <mhal@rbox.co>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/20241013-vsock-fixes-for-redir-v2-2-d6577bbfe742@rbox.co
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/amd_nb: Add new PCI ID for AMD family 1Ah model 20h [+ + +]
Author: Richard Gong <richard.gong@amd.com>
Date:   Fri Sep 13 11:29:03 2024 -0500

    x86/amd_nb: Add new PCI ID for AMD family 1Ah model 20h
    
    commit f8bc84b6096f1ffa67252f0f88d86e77f6bbe348 upstream.
    
    Add new PCI ID for Device 18h and Function 4.
    
    Signed-off-by: Richard Gong <richard.gong@amd.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Yazen Ghannam <yazen.ghannam@amd.com>
    Link: https://lore.kernel.org/r/20240913162903.649519-1-richard.gong@amd.com
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/amd_nb: Add new PCI IDs for AMD family 1Ah model 60h-70h [+ + +]
Author: Richard Gong <richard.gong@amd.com>
Date:   Mon Aug 19 07:30:41 2024 -0500

    x86/amd_nb: Add new PCI IDs for AMD family 1Ah model 60h-70h
    
    commit 0f70fdd42559b4eed8f74bf7389656a8ae3eb5c3 upstream.
    
    Add new PCI IDs for Device 18h and Function 4 to enable the amd_atl driver
    on those systems.
    
    Signed-off-by: Richard Gong <richard.gong@amd.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Yazen Ghannam <yazen.ghannam@amd.com>
    Link: https://lore.kernel.org/all/20240819123041.915734-1-richard.gong@amd.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/lam: Disable ADDRESS_MASKING in most cases [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Tue Jan 23 19:55:21 2024 -0800

    x86/lam: Disable ADDRESS_MASKING in most cases
    
    commit 3267cb6d3a174ff83d6287dcd5b0047bbd912452 upstream.
    
    Linear Address Masking (LAM) has a weakness related to transient
    execution as described in the SLAM paper[1]. Unless Linear Address
    Space Separation (LASS) is enabled this weakness may be exploitable.
    
    Until kernel adds support for LASS[2], only allow LAM for COMPILE_TEST,
    or when speculation mitigations have been disabled at compile time,
    otherwise keep LAM disabled.
    
    There are no processors in market that support LAM yet, so currently
    nobody is affected by this issue.
    
    [1] SLAM: https://download.vusec.net/papers/slam_sp24.pdf
    [2] LASS: https://lore.kernel.org/lkml/20230609183632.48706-1-alexander.shishkin@linux.intel.com/
    
    [ dhansen: update SPECULATION_MITIGATIONS -> CPU_MITIGATIONS ]
    
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Sohil Mehta <sohil.mehta@intel.com>
    Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc:stable@vger.kernel.org
    Link: https://lore.kernel.org/all/5373262886f2783f054256babdf5a98545dc986b.1706068222.git.pawan.kumar.gupta%40linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/resctrl: Avoid overflow in MB settings in bw_validate() [+ + +]
Author: Martin Kletzander <nert.pinx@gmail.com>
Date:   Tue Oct 1 13:43:56 2024 +0200

    x86/resctrl: Avoid overflow in MB settings in bw_validate()
    
    [ Upstream commit 2b5648416e47933939dc310c4ea1e29404f35630 ]
    
    The resctrl schemata file supports specifying memory bandwidth associated with
    the Memory Bandwidth Allocation (MBA) feature via a percentage (this is the
    default) or bandwidth in MiBps (when resctrl is mounted with the "mba_MBps"
    option).
    
    The allowed range for the bandwidth percentage is from
    /sys/fs/resctrl/info/MB/min_bandwidth to 100, using a granularity of
    /sys/fs/resctrl/info/MB/bandwidth_gran. The supported range for the MiBps
    bandwidth is 0 to U32_MAX.
    
    There are two issues with parsing of MiBps memory bandwidth:
    
    * The user provided MiBps is mistakenly rounded up to the granularity
      that is unique to percentage input.
    
    * The user provided MiBps is parsed using unsigned long (thus accepting
      values up to ULONG_MAX), and then assigned to u32 that could result in
      overflow.
    
    Do not round up the MiBps value and parse user provided bandwidth as the u32
    it is intended to be. Use the appropriate kstrtou32() that can detect out of
    range values.
    
    Fixes: 8205a078ba78 ("x86/intel_rdt/mba_sc: Add schemata support")
    Fixes: 6ce1560d35f6 ("x86/resctrl: Switch over to the resctrl mbps_val list")
    Co-developed-by: Reinette Chatre <reinette.chatre@intel.com>
    Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
    Signed-off-by: Martin Kletzander <nert.pinx@gmail.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
    Reviewed-by: Tony Luck <tony.luck@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/sev: Ensure that RMP table fixups are reserved [+ + +]
Author: Ashish Kalra <ashish.kalra@amd.com>
Date:   Thu Aug 15 22:16:30 2024 +0000

    x86/sev: Ensure that RMP table fixups are reserved
    
    commit 88a921aa3c6b006160d6a46a231b8b32227e8196 upstream.
    
    The BIOS reserves RMP table memory via e820 reservations. This can still lead
    to RMP page faults during kexec if the host tries to access memory within the
    same 2MB region.
    
    Commit
    
      400fea4b9651 ("x86/sev: Add callback to apply RMP table fixups for kexec"
    
    adjusts the e820 reservations for the RMP table so that the entire 2MB range
    at the start/end of the RMP table is marked reserved.
    
    The e820 reservations are then passed to firmware via SNP_INIT where they get
    marked HV-Fixed.
    
    The RMP table fixups are done after the e820 ranges have been added to
    memblock, allowing the fixup ranges to still be allocated and used by the
    system.
    
    The problem is that this memory range is now marked reserved in the e820
    tables and during SNP initialization these reserved ranges are marked as
    HV-Fixed.  This means that the pages cannot be used by an SNP guest, only by
    the hypervisor.
    
    However, the memory management subsystem does not make this distinction and
    can allocate one of those pages to an SNP guest. This will ultimately result
    in RMPUPDATE failures associated with the guest, causing it to fail to start
    or terminate when accessing the HV-Fixed page.
    
    The issue is captured below with memblock=debug:
    
      [    0.000000] SEV-SNP: *** DEBUG: snp_probe_rmptable_info:352 - rmp_base=0x280d4800000, rmp_end=0x28357efffff
      ...
      [    0.000000] BIOS-provided physical RAM map:
      ...
      [    0.000000] BIOS-e820: [mem 0x00000280d4800000-0x0000028357efffff] reserved
      [    0.000000] BIOS-e820: [mem 0x0000028357f00000-0x0000028357ffffff] usable
      ...
      ...
      [    0.183593] memblock add: [0x0000028357f00000-0x0000028357ffffff] e820__memblock_setup+0x74/0xb0
      ...
      [    0.203179] MEMBLOCK configuration:
      [    0.207057]  memory size = 0x0000027d0d194000 reserved size = 0x0000000009ed2c00
      [    0.215299]  memory.cnt  = 0xb
      ...
      [    0.311192]  memory[0x9]     [0x0000028357f00000-0x0000028357ffffff], 0x0000000000100000 bytes flags: 0x0
      ...
      ...
      [    0.419110] SEV-SNP: Reserving start/end of RMP table on a 2MB boundary [0x0000028357e00000]
      [    0.428514] e820: update [mem 0x28357e00000-0x28357ffffff] usable ==> reserved
      [    0.428517] e820: update [mem 0x28357e00000-0x28357ffffff] usable ==> reserved
      [    0.428520] e820: update [mem 0x28357e00000-0x28357ffffff] usable ==> reserved
      ...
      ...
      [    5.604051] MEMBLOCK configuration:
      [    5.607922]  memory size = 0x0000027d0d194000 reserved size = 0x0000000011faae02
      [    5.616163]  memory.cnt  = 0xe
      ...
      [    5.754525]  memory[0xc]     [0x0000028357f00000-0x0000028357ffffff], 0x0000000000100000 bytes on node 0 flags: 0x0
      ...
      ...
      [   10.080295] Early memory node ranges[   10.168065]
      ...
      node   0: [mem 0x0000028357f00000-0x0000028357ffffff]
      ...
      ...
      [ 8149.348948] SEV-SNP: RMPUPDATE failed for PFN 28357f7c, pg_level: 1, ret: 2
    
    As shown above, the memblock allocations show 1MB after the end of the RMP as
    available for allocation, which is what the RMP table fixups have reserved.
    This memory range subsequently gets allocated as SNP guest memory, resulting
    in an RMPUPDATE failure.
    
    This can potentially be fixed by not reserving the memory range in the e820
    table, but that causes kexec failures when using the KEXEC_FILE_LOAD syscall.
    
    The solution is to use memblock_reserve() to mark the memory reserved for the
    system, ensuring that it cannot be allocated to an SNP guest.
    
    Since HV-Fixed memory is still readable/writable by the host, this only ends
    up being a problem if the memory in this range requires a page state change,
    which generally will only happen when allocating memory in this range to be
    used for running SNP guests, which is now possible with the SNP hypervisor
    support in kernel 6.11.
    
    Backporter note:
    
    Fixes tag points to a 6.9 change but as the last paragraph above explains,
    this whole thing can happen after 6.11 received SNP HV support, therefore
    backporting to 6.9 is not really necessary.
    
      [ bp: Massage commit message. ]
    
    Fixes: 400fea4b9651 ("x86/sev: Add callback to apply RMP table fixups for kexec")
    Suggested-by: Thomas Lendacky <thomas.lendacky@amd.com>
    Signed-off-by: Ashish Kalra <ashish.kalra@amd.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
    Cc: <stable@kernel.org> # 6.11, see Backporter note above.
    Link: https://lore.kernel.org/r/20240815221630.131133-1-Ashish.Kalra@amd.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86: fix user address masking non-canonical speculation issue [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Wed Oct 23 18:17:46 2024 -0700

    x86: fix user address masking non-canonical speculation issue
    
    commit 86e6b1547b3d013bc392adf775b89318441403c2 upstream.
    
    It turns out that AMD has a "Meltdown Lite(tm)" issue with non-canonical
    accesses in kernel space.  And so using just the high bit to decide
    whether an access is in user space or kernel space ends up with the good
    old "leak speculative data" if you have the right gadget using the
    result:
    
      CVE-2020-12965 “Transient Execution of Non-Canonical Accesses“
    
    Now, the kernel surrounds the access with a STAC/CLAC pair, and those
    instructions end up serializing execution on older Zen architectures,
    which closes the speculation window.
    
    But that was true only up until Zen 5, which renames the AC bit [1].
    That improves performance of STAC/CLAC a lot, but also means that the
    speculation window is now open.
    
    Note that this affects not just the new address masking, but also the
    regular valid_user_address() check used by access_ok(), and the asm
    version of the sign bit check in the get_user() helpers.
    
    It does not affect put_user() or clear_user() variants, since there's no
    speculative result to be used in a gadget for those operations.
    
    Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Link: https://lore.kernel.org/all/80d94591-1297-4afb-b510-c665efd37f10@citrix.com/
    Link: https://lore.kernel.org/all/20241023094448.GAZxjFkEOOF_DM83TQ@fat_crate.local/ [1]
    Link: https://www.amd.com/en/resources/product-security/bulletin/amd-sb-1010.html
    Link: https://arxiv.org/pdf/2108.10771
    Cc: Josh Poimboeuf <jpoimboe@kernel.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Tested-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com> # LAM case
    Fixes: 2865baf54077 ("x86: support user address masking instead of non-speculative conditional")
    Fixes: 6014bc27561f ("x86-64: make access_ok() independent of LAM")
    Fixes: b19b74bc99b1 ("x86/mm: Rework address range check in get_user() and put_user()")
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86: fix whitespace in runtime-const assembler output [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Thu Oct 24 13:23:56 2024 -0700

    x86: fix whitespace in runtime-const assembler output
    
    commit 4dc1f31ec3f13a065c7ae2ccdec562b0123e21bb upstream.
    
    The x86 user pointer validation changes made me look at compiler output
    a lot, and the wrong indentation for the ".popsection" in the generated
    assembler triggered me.
    
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86: support user address masking instead of non-speculative conditional [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Mon Apr 8 20:04:58 2024 -0700

    x86: support user address masking instead of non-speculative conditional
    
    commit 2865baf54077aa98fcdb478cefe6a42c417b9374 upstream.
    
    The Spectre-v1 mitigations made "access_ok()" much more expensive, since
    it has to serialize execution with the test for a valid user address.
    
    All the normal user copy routines avoid this by just masking the user
    address with a data-dependent mask instead, but the fast
    "unsafe_user_read()" kind of patterms that were supposed to be a fast
    case got slowed down.
    
    This introduces a notion of using
    
            src = masked_user_access_begin(src);
    
    to do the user address sanity using a data-dependent mask instead of the
    more traditional conditional
    
            if (user_read_access_begin(src, len)) {
    
    model.
    
    This model only works for dense accesses that start at 'src' and on
    architectures that have a guard region that is guaranteed to fault in
    between the user space and the kernel space area.
    
    With this, the user access doesn't need to be manually checked, because
    a bad address is guaranteed to fault (by some architecture masking
    trick: on x86-64 this involves just turning an invalid user address into
    all ones, since we don't map the top of address space).
    
    This only converts a couple of examples for now.  Example x86-64 code
    generation for loading two words from user space:
    
            stac
            mov    %rax,%rcx
            sar    $0x3f,%rcx
            or     %rax,%rcx
            mov    (%rcx),%r13
            mov    0x8(%rcx),%r14
            clac
    
    where all the error handling and -EFAULT is now purely handled out of
    line by the exception path.
    
    Of course, if the micro-architecture does badly at 'clac' and 'stac',
    the above is still pitifully slow.  But at least we did as well as we
    could.
    
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xfrm: extract dst lookup parameters into a struct [+ + +]
Author: Eyal Birger <eyal.birger@gmail.com>
Date:   Mon Sep 2 17:07:09 2024 -0700

    xfrm: extract dst lookup parameters into a struct
    
    [ Upstream commit e509996b16728e37d5a909a5c63c1bd64f23b306 ]
    
    Preparation for adding more fields to dst lookup functions without
    changing their signatures.
    
    Signed-off-by: Eyal Birger <eyal.birger@gmail.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Stable-dep-of: b84697210343 ("xfrm: respect ip protocols rules criteria when performing dst lookups")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xfrm: fix one more kernel-infoleak in algo dumping [+ + +]
Author: Petr Vaganov <p.vaganov@ideco.ru>
Date:   Tue Oct 8 14:02:58 2024 +0500

    xfrm: fix one more kernel-infoleak in algo dumping
    
    commit 6889cd2a93e1e3606b3f6e958aa0924e836de4d2 upstream.
    
    During fuzz testing, the following issue was discovered:
    
    BUG: KMSAN: kernel-infoleak in _copy_to_iter+0x598/0x2a30
     _copy_to_iter+0x598/0x2a30
     __skb_datagram_iter+0x168/0x1060
     skb_copy_datagram_iter+0x5b/0x220
     netlink_recvmsg+0x362/0x1700
     sock_recvmsg+0x2dc/0x390
     __sys_recvfrom+0x381/0x6d0
     __x64_sys_recvfrom+0x130/0x200
     x64_sys_call+0x32c8/0x3cc0
     do_syscall_64+0xd8/0x1c0
     entry_SYSCALL_64_after_hwframe+0x79/0x81
    
    Uninit was stored to memory at:
     copy_to_user_state_extra+0xcc1/0x1e00
     dump_one_state+0x28c/0x5f0
     xfrm_state_walk+0x548/0x11e0
     xfrm_dump_sa+0x1e0/0x840
     netlink_dump+0x943/0x1c40
     __netlink_dump_start+0x746/0xdb0
     xfrm_user_rcv_msg+0x429/0xc00
     netlink_rcv_skb+0x613/0x780
     xfrm_netlink_rcv+0x77/0xc0
     netlink_unicast+0xe90/0x1280
     netlink_sendmsg+0x126d/0x1490
     __sock_sendmsg+0x332/0x3d0
     ____sys_sendmsg+0x863/0xc30
     ___sys_sendmsg+0x285/0x3e0
     __x64_sys_sendmsg+0x2d6/0x560
     x64_sys_call+0x1316/0x3cc0
     do_syscall_64+0xd8/0x1c0
     entry_SYSCALL_64_after_hwframe+0x79/0x81
    
    Uninit was created at:
     __kmalloc+0x571/0xd30
     attach_auth+0x106/0x3e0
     xfrm_add_sa+0x2aa0/0x4230
     xfrm_user_rcv_msg+0x832/0xc00
     netlink_rcv_skb+0x613/0x780
     xfrm_netlink_rcv+0x77/0xc0
     netlink_unicast+0xe90/0x1280
     netlink_sendmsg+0x126d/0x1490
     __sock_sendmsg+0x332/0x3d0
     ____sys_sendmsg+0x863/0xc30
     ___sys_sendmsg+0x285/0x3e0
     __x64_sys_sendmsg+0x2d6/0x560
     x64_sys_call+0x1316/0x3cc0
     do_syscall_64+0xd8/0x1c0
     entry_SYSCALL_64_after_hwframe+0x79/0x81
    
    Bytes 328-379 of 732 are uninitialized
    Memory access of size 732 starts at ffff88800e18e000
    Data copied to user address 00007ff30f48aff0
    
    CPU: 2 PID: 18167 Comm: syz-executor.0 Not tainted 6.8.11 #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
    
    Fixes copying of xfrm algorithms where some random
    data of the structure fields can end up in userspace.
    Padding in structures may be filled with random (possibly sensitve)
    data and should never be given directly to user-space.
    
    A similar issue was resolved in the commit
    8222d5910dae ("xfrm: Zero padding when dumping algos and encap")
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: c7a5899eb26e ("xfrm: redact SA secret with lockdown confidentiality")
    Cc: stable@vger.kernel.org
    Co-developed-by: Boris Tonofa <b.tonofa@ideco.ru>
    Signed-off-by: Boris Tonofa <b.tonofa@ideco.ru>
    Signed-off-by: Petr Vaganov <p.vaganov@ideco.ru>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfrm: respect ip protocols rules criteria when performing dst lookups [+ + +]
Author: Eyal Birger <eyal.birger@gmail.com>
Date:   Mon Sep 2 17:07:10 2024 -0700

    xfrm: respect ip protocols rules criteria when performing dst lookups
    
    [ Upstream commit b8469721034300bbb6dec5b4bf32492c95e16a0c ]
    
    The series in the "fixes" tag added the ability to consider L4 attributes
    in routing rules.
    
    The dst lookup on the outer packet of encapsulated traffic in the xfrm
    code was not adapted to this change, thus routing behavior that relies
    on L4 information is not respected.
    
    Pass the ip protocol information when performing dst lookups.
    
    Fixes: a25724b05af0 ("Merge branch 'fib_rules-support-sport-dport-and-proto-match'")
    Signed-off-by: Eyal Birger <eyal.birger@gmail.com>
    Tested-by: Antony Antony <antony.antony@secunet.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xfrm: validate new SA's prefixlen using SA family when sel.family is unset [+ + +]
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Tue Oct 1 18:48:14 2024 +0200

    xfrm: validate new SA's prefixlen using SA family when sel.family is unset
    
    [ Upstream commit 3f0ab59e6537c6a8f9e1b355b48f9c05a76e8563 ]
    
    This expands the validation introduced in commit 07bf7908950a ("xfrm:
    Validate address prefix lengths in the xfrm selector.")
    
    syzbot created an SA with
        usersa.sel.family = AF_UNSPEC
        usersa.sel.prefixlen_s = 128
        usersa.family = AF_INET
    
    Because of the AF_UNSPEC selector, verify_newsa_info doesn't put
    limits on prefixlen_{s,d}. But then copy_from_user_state sets
    x->sel.family to usersa.family (AF_INET). Do the same conversion in
    verify_newsa_info before validating prefixlen_{s,d}, since that's how
    prefixlen is going to be used later on.
    
    Reported-by: syzbot+cc39f136925517aed571@syzkaller.appspotmail.com
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xfs: don't fail repairs on metadata files with no attr fork [+ + +]
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Thu Oct 17 11:58:10 2024 -0700

    xfs: don't fail repairs on metadata files with no attr fork
    
    commit af8512c5277d17aae09be5305daa9118d2fa8881 upstream.
    
    Fix a minor bug where we fail repairs on metadata files that do not have
    attr forks because xrep_metadata_inode_subtype doesn't filter ENOENT.
    
    Cc: stable@vger.kernel.org # v6.8
    Fixes: 5a8e07e799721b ("xfs: repair the inode core and forks of a metadata inode")
    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xhci: dbc: honor usb transfer size boundaries. [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Wed Oct 16 17:00:00 2024 +0300

    xhci: dbc: honor usb transfer size boundaries.
    
    [ Upstream commit 30c9ae5ece8ecd69d36e6912c2c0896418f2468c ]
    
    Treat each completed full size write to /dev/ttyDBC0 as a separate usb
    transfer. Make sure the size of the TRBs matches the size of the tty
    write by first queuing as many max packet size TRBs as possible up to
    the last TRB which will be cut short to match the size of the tty write.
    
    This solves an issue where userspace writes several transfers back to
    back via /dev/ttyDBC0 into a kfifo before dbgtty can find available
    request to turn that kfifo data into TRBs on the transfer ring.
    
    The boundary between transfer was lost as xhci-dbgtty then turned
    everyting in the kfifo into as many 'max packet size' TRBs as possible.
    
    DbC would then send more data to the host than intended for that
    transfer, causing host to issue a babble error.
    
    Refuse to write more data to kfifo until previous tty write data is
    turned into properly sized TRBs with data size boundaries matching tty
    write size
    
    Tested-by: Uday M Bhat <uday.m.bhat@intel.com>
    Tested-by: Łukasz Bartosik <ukaszb@chromium.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20241016140000.783905-5-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xhci: dbgtty: remove kfifo_out() wrapper [+ + +]
Author: Jiri Slaby (SUSE) <jirislaby@kernel.org>
Date:   Thu Aug 8 12:35:40 2024 +0200

    xhci: dbgtty: remove kfifo_out() wrapper
    
    [ Upstream commit 2b217514436744dd98c4d9fa48d60610f9f67d61 ]
    
    There is no need to check against kfifo_len() before kfifo_out(). Just
    ask the latter for data and it tells how much it retrieved. Or returns 0
    in case there are no more.
    
    Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org>
    Cc: Mathias Nyman <mathias.nyman@intel.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: linux-usb@vger.kernel.org
    Link: https://lore.kernel.org/r/20240808103549.429349-5-jirislaby@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 30c9ae5ece8e ("xhci: dbc: honor usb transfer size boundaries.")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xhci: dbgtty: use kfifo from tty_port struct [+ + +]
Author: Jiri Slaby (SUSE) <jirislaby@kernel.org>
Date:   Thu Aug 8 12:35:41 2024 +0200

    xhci: dbgtty: use kfifo from tty_port struct
    
    [ Upstream commit 866025f0237609532bc8e4af5ef4d7252d3b55b6 ]
    
    There is no need to define one in a custom structure. The tty_port one
    is free to use.
    
    Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org>
    Cc: Mathias Nyman <mathias.nyman@intel.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: linux-usb@vger.kernel.org
    Link: https://lore.kernel.org/r/20240808103549.429349-6-jirislaby@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 30c9ae5ece8e ("xhci: dbc: honor usb transfer size boundaries.")
    Signed-off-by: Sasha Levin <sashal@kernel.org>