Changelog in Linux kernel 6.11.6

 
[PATCH} hwmon: (jc42) Properly detect TSE2004-compliant devices again [+ + +]
Author: Jean Delvare <[email protected]>
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 <[email protected]>
    Message-ID: <[email protected]>
    Fixes: b3e992f69c23 ("hwmon: (jc42)  Strengthen detect function")
    Message-ID: <[email protected]>
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
accel/qaic: Fix the for loop used to walk SG table [+ + +]
Author: Pranjal Ramajor Asha Kanojiya <[email protected]>
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 <[email protected]>
    Reviewed-by: Jeffrey Hugo <[email protected]>
    Signed-off-by: Jeffrey Hugo <[email protected]>
    Reviewed-by: Jacek Lawrynowicz <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
ACPI: button: Add DMI quirk for Samsung Galaxy Book2 to fix initial lid detection issue [+ + +]
Author: Shubham Panwar <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ rjw: Changelog edits ]
    Cc: All applicable <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ACPI: PRM: Clean up guid type in struct prm_handler_info [+ + +]
Author: Dan Carpenter <[email protected]>
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 <[email protected]>
    Suggested-by: Ard Biesheuvel <[email protected]>
    Signed-off-by: Dan Carpenter <[email protected]>
    Tested-by: Paul E. McKenney <[email protected]>
    Acked-by: Ard Biesheuvel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ rjw: Subject edit ]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ACPI: PRM: Find EFI_MEMORY_RUNTIME block for PRM handler and context [+ + +]
Author: Koba Ko <[email protected]>
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 <[email protected]>
    Signed-off-by: Koba Ko <[email protected]>
    Reviewed-by: Matthew R. Ochs <[email protected]>
    Reviewed-by: Zhang Rui <[email protected]>
    Reviewed-by: Ard Biesheuvel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ rjw: Subject and changelog edits ]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ACPI: resource: Add LG 16T90SP to irq1_level_low_skip_override[] [+ + +]
Author: Christian Heusel <[email protected]>
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 <[email protected]>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219382
    Cc: All applicable <[email protected]>
    Suggested-by: Dirk Holten <[email protected]>
    Signed-off-by: Christian Heusel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ALSA: firewire-lib: Avoid division by zero in apply_constraint_to_size() [+ + +]
Author: Andrey Shumilin <[email protected]>
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 <[email protected]>
    Reviewed-by: Takashi Sakamoto <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/cs8409: Fix possible NULL dereference [+ + +]
Author: Murad Masimov <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: Add subwoofer quirk for Acer Predator G9-593 [+ + +]
Author: José Relvas <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: hda/realtek: Update default depop procedure [+ + +]
Author: Kailang Yang <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/tas2781: select CRC32 instead of CRC32_SARWATE [+ + +]
Author: Eric Biggers <[email protected]>
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: [email protected]
    Signed-off-by: Eric Biggers <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
arm64: Force position-independent veneers [+ + +]
Author: Mark Rutland <[email protected]>
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/[email protected]/
    
    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 <[email protected]>
    Reported-by: Marc Zyngier <[email protected]>
    Cc: Ard Biesheuvel <[email protected]>
    Cc: Nathan Chancellor <[email protected]>
    Cc: Nick Desaulniers <[email protected]>
    Cc: Will Deacon <[email protected]>
    Acked-by: Ard Biesheuvel <[email protected]>
    Reviewed-by: Nathan Chancellor <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Catalin Marinas <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ARM: dts: bcm2837-rpi-cm3-io3: Fix HDMI hpd-gpio pin [+ + +]
Author: Florian Klink <[email protected]>
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 <[email protected]>
    Reviewed-by: Stefan Wahren <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Stefan Wahren <[email protected]>
    Fixes: a54fe8a6cf66 ("ARM: dts: add Raspberry Pi Compute Module 3 and IO board")
    Signed-off-by: Florian Fainelli <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ASoC: amd: yc: Add quirk for HP Dragonfly pro one [+ + +]
Author: David Lawrence Glanzman <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: codecs: lpass-rx-macro: add missing CDC_RX_BCL_VBAT_RF_PROC2 to default regs values [+ + +]
Author: Alexey Klimov <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: dapm: avoid container_of() to get component [+ + +]
Author: Benjamin Bara <[email protected]>
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: [email protected] # v6.7+
    Signed-off-by: Benjamin Bara <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: dt-bindings: davinci-mcasp: Fix interrupt properties [+ + +]
Author: Miquel Raynal <[email protected]>
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 <[email protected]>
    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 <[email protected]>
    Acked-by: Krzysztof Kozlowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: dt-bindings: davinci-mcasp: Fix interrupts property [+ + +]
Author: Miquel Raynal <[email protected]>
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 <[email protected]>
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 8380dbf1b9ef ("ASoC: dt-bindings: davinci-mcasp: Fix interrupt properties")
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_micfil: Add a flag to distinguish with different volume control types [+ + +]
Author: Chancel Liu <[email protected]>
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 <[email protected]>
    Reviewed-by: Daniel Baluta <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_sai: Enable 'FIFO continue on error' FCONT bit [+ + +]
Author: Shengjiu Wang <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: loongson: Fix component check failed on FDT systems [+ + +]
Author: Binbin Zhou <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/6645888f2f9e8a1d8d799109f867d0f97fd78c58.1728459624.git.zhoubinbin@loongson.cn
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: max98388: Fix missing increment of variable slot_found [+ + +]
Author: Colin Ian King <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: qcom: Fix NULL Dereference in asoc_qcom_lpass_cpu_platform_probe() [+ + +]
Author: Zichen Xie <[email protected]>
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: [email protected]
    Signed-off-by: Zichen Xie <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: qcom: sc7280: Fix missing Soundwire runtime stream alloc [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
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: [email protected]
    Cc: Alexey Klimov <[email protected]>
    Cc: Steev Klimaszewski <[email protected]>
    Fixes: 15c7fab0e047 ("ASoC: qcom: Move Soundwire runtime stream alloc to soundcards")
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: qcom: sdm845: add missing soundwire runtime stream alloc [+ + +]
Author: Alexey Klimov <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Fixes: 15c7fab0e047 ("ASoC: qcom: Move Soundwire runtime stream alloc to soundcards")
    Cc: Srinivas Kandagatla <[email protected]>
    Cc: Dmitry Baryshkov <[email protected]>
    Cc: Krzysztof Kozlowski <[email protected]>
    Cc: Pierre-Louis Bossart <[email protected]>
    Signed-off-by: Alexey Klimov <[email protected]>
    Tested-by: Steev Klimaszewski <[email protected]> # Lenovo Yoga C630
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Reviewed-by: Srinivas Kandagatla <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: qcom: Select missing common Soundwire module code on SDM845 [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: qcom: sm8250: add qrb4210-rb2-sndcard compatible string [+ + +]
Author: Alexey Klimov <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: rsnd: Fix probe failure on HiHope boards due to endpoint parsing [+ + +]
Author: Lad Prabhakar <[email protected]>
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 <[email protected]>
    Acked-by: Kuninori Morimoto <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: SOF: Intel: hda-loader: do not wait for HDaudio IOC [+ + +]
Author: Kai Vehmanen <[email protected]>
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: [email protected]
    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 <[email protected]>
    Signed-off-by: Kai Vehmanen <[email protected]>
    Reviewed-by: Péter Ujfalusi <[email protected]>
    Reviewed-by: Pierre-Louis Bossart <[email protected]>
    Reviewed-by: Ranjani Sridharan <[email protected]>
    Signed-off-by: Peter Ujfalusi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: SOF: Intel: hda: Always clean up link DMA during stop [+ + +]
Author: Ranjani Sridharan <[email protected]>
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 <[email protected]>
    Reviewed-by: Péter Ujfalusi <[email protected]>
    Reviewed-by: Kai Vehmanen <[email protected]>
    Signed-off-by: Bard Liao <[email protected]>
    All: [email protected] # 6.10.x 6.11.x
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: SOF: Intel: hda: Handle prepare without close for non-HDA DAI's [+ + +]
Author: Ranjani Sridharan <[email protected]>
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 <[email protected]>
    Reviewed-by: Péter Ujfalusi <[email protected]>
    Reviewed-by: Kai Vehmanen <[email protected]>
    Signed-off-by: Bard Liao <[email protected]>
    All: [email protected] # 6.10.x 6.11.x
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: SOF: ipc4-topology: Do not set ALH node_id for aggregated DAIs [+ + +]
Author: Ranjani Sridharan <[email protected]>
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 <[email protected]>
    Reviewed-by: Péter Ujfalusi <[email protected]>
    Reviewed-by: Kai Vehmanen <[email protected]>
    Signed-off-by: Bard Liao <[email protected]>
    All: [email protected] # 6.10.x 6.11.x
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: topology: Bump minimal topology ABI version [+ + +]
Author: Amadeusz Sławiński <[email protected]>
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 <[email protected]>
    Signed-off-by: Amadeusz Sławiński <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ata: libata: Set DID_TIME_OUT for commands that actually timed out [+ + +]
Author: Niklas Cassel <[email protected]>
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: [email protected]
    Fixes: e5dd410acb34 ("ata: libata: Clear DID_TIME_OUT for ATA PT commands with sense data")
    Reported-by: Lai, Yi <[email protected]>
    Closes: https://lore.kernel.org/linux-ide/ZxYz871I3Blsi30F@ly-workstation/
    Reviewed-by: Damien Le Moal <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Niklas Cassel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
be2net: fix potential memory leak in be_xmit() [+ + +]
Author: Wang Hai <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Kalesh AP <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Andrew Lunn <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Bluetooth: bnep: fix wild-memory-access in proto_unregister [+ + +]
Author: Ye Bin <[email protected]>
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 <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: hci_core: Disable works on hci_unregister_dev [+ + +]
Author: Luiz Augusto von Dentz <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: ISO: Fix UAF on iso_sock_timeout [+ + +]
Author: Luiz Augusto von Dentz <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: SCO: Fix UAF on sco_sock_timeout [+ + +]
Author: Luiz Augusto von Dentz <[email protected]>
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: [email protected]
    Tested-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=4c0d0c4cde787116d465
    Fixes: ba316be1b6a0 ("Bluetooth: schedule SCO timeouts with delayed_work")
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bnxt_en: replace ptp_lock with irqsave variant [+ + +]
Author: Vadim Fedorenko <[email protected]>
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 <[email protected]>
    Signed-off-by: Vadim Fedorenko <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Andrew Lunn <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf, arm64: Fix address emission with tag-based KASAN enabled [+ + +]
Author: Peter Collingbourne <[email protected]>
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 <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: Xu Kuohai <[email protected]>
    Link: https://linux-review.googlesource.com/id/I1496f2bc24fba7a1d492e16e2b94cf43714f2d3c
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf, sockmap: SK_DROP on attempted redirects of unsupported af_vsock [+ + +]
Author: Michal Luczaj <[email protected]>
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 <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: John Fastabend <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf, vsock: Drop static vsock_bpf_prot initialization [+ + +]
Author: Michal Luczaj <[email protected]>
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 <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: John Fastabend <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf,perf: Fix perf_event_detach_bpf_prog error handling [+ + +]
Author: Jiri Olsa <[email protected]>
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 <[email protected]>
    Signed-off-by: Jiri Olsa <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    
    Closes: https://lore.kernel.org/lkml/[email protected]/
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf: Add MEM_WRITE attribute [+ + +]
Author: Daniel Borkmann <[email protected]>
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 <[email protected]>
    Acked-by: Kumar Kartikeya Dwivedi <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Stable-dep-of: 8ea607330a39 ("bpf: Fix overloading of MEM_UNINIT's meaning")
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Add the missing BPF_LINK_TYPE invocation for sockmap [+ + +]
Author: Hou Tao <[email protected]>
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 <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Check the remaining info_cnt before repeating btf fields [+ + +]
Author: Hou Tao <[email protected]>
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 <[email protected]>
    Acked-by: Eduard Zingerman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: devmap: provide rxq after redirect [+ + +]
Author: Florian Kauer <[email protected]>
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 <[email protected]>
    Signed-off-by: Florian Kauer <[email protected]>
    Acked-by: Jakub Kicinski <[email protected]>
    Link: https://lore.kernel.org/r/20240911-devel-koalo-fix-ingress-ifindex-v4-1-5c643ae10258@linutronix.de
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: fix do_misc_fixups() for bpf_get_branch_snapshot() [+ + +]
Author: Andrii Nakryiko <[email protected]>
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 <[email protected]>
    Fixes: 314a53623cd4 ("bpf: inline bpf_get_branch_snapshot() helper")
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Acked-by: Yonghong Song <[email protected]>
    Acked-by: Shung-Hsi Yu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix incorrect delta propagation between linked registers [+ + +]
Author: Daniel Borkmann <[email protected]>
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 <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Reviewed-by: Eduard Zingerman <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix iter/task tid filtering [+ + +]
Author: Jordan Rome <[email protected]>
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 <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: fix kfunc btf caching for modules [+ + +]
Author: Toke Høiland-Jørgensen <[email protected]>
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 <[email protected]>
    Acked-by: Jiri Olsa <[email protected]>
    Acked-by: Kumar Kartikeya Dwivedi <[email protected]>
    Signed-off-by: Toke Høiland-Jørgensen <[email protected]>
    Link: https://lore.kernel.org/r/20241010-fix-kfunc-btf-caching-for-modules-v2-1-745af6c1af98@redhat.com
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix link info netfilter flags to populate defrag flag [+ + +]
Author: Tyrone Wu <[email protected]>
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 <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: Florian Westphal <[email protected]>
    Cc: Daniel Xu <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix memory leak in bpf_core_apply [+ + +]
Author: Jiri Olsa <[email protected]>
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 <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Acked-by: Eduard Zingerman <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix overloading of MEM_UNINIT's meaning [+ + +]
Author: Daniel Borkmann <[email protected]>
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 <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: Kumar Kartikeya Dwivedi <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix print_reg_state's constant scalar dump [+ + +]
Author: Daniel Borkmann <[email protected]>
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 <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Acked-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix truncation bug in coerce_reg_to_size_sx() [+ + +]
Author: Dimitar Kanaliev <[email protected]>
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 <[email protected]>
    Reported-by: Zac Ecob <[email protected]>
    Signed-off-by: Dimitar Kanaliev <[email protected]>
    Acked-by: Yonghong Song <[email protected]>
    Reviewed-by: Shung-Hsi Yu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: fix unpopulated name_len field in perf_event link info [+ + +]
Author: Tyrone Wu <[email protected]>
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 <[email protected]>
    Acked-by: Jiri Olsa <[email protected]>
    Acked-by: Yafang Shao <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix unpopulated path_size when uprobe_multi fields unset [+ + +]
Author: Tyrone Wu <[email protected]>
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 <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Make sure internal and UAPI bpf_redirect flags don't overlap [+ + +]
Author: Toke Høiland-Jørgensen <[email protected]>
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: [email protected]
    Signed-off-by: Toke Høiland-Jørgensen <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: Daniel Borkmann <[email protected]>
    Closes: https://syzkaller.appspot.com/bug?extid=cca39e6e84a367a7e6f6
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Preserve param->string when parsing mount options [+ + +]
Author: Hou Tao <[email protected]>
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 <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Acked-by: Jiri Olsa <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Remove MEM_UNINIT from skb/xdp MTU helpers [+ + +]
Author: Daniel Borkmann <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected] [0]
    Acked-by: Kumar Kartikeya Dwivedi <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: sync_linked_regs() must preserve subreg_def [+ + +]
Author: Eduard Zingerman <[email protected]>
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 <[email protected]>
    Signed-off-by: Lonial Con <[email protected]>
    Signed-off-by: Eduard Zingerman <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: Daniel Borkmann <[email protected]>
    Closes: https://lore.kernel.org/bpf/[email protected]
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Use raw_spinlock_t in ringbuf [+ + +]
Author: Wander Lairson Costa <[email protected]>
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 <[email protected]>
    Signed-off-by: Wander Lairson Costa <[email protected]>
    Signed-off-by: Wander Lairson Costa <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: Daniel Borkmann <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
 
btrfs: clear force-compress on remount when compress mount option is given [+ + +]
Author: Filipe Manana <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/linux-btrfs/20241014182416.13d0f8b0@nvm/
    CC: [email protected] # 6.8+
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: fix passing 0 to ERR_PTR in btrfs_search_dir_index_item() [+ + +]
Author: Yue Haibing <[email protected]>
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: [email protected] # 6.1+
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Yue Haibing <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: fix read corruption due to race with extent map merging [+ + +]
Author: Boris Burkov <[email protected]>
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: [email protected] # 6.11+
    Reviewed-by: Qu Wenruo <[email protected]>
    Reviewed-by: Filipe Manana <[email protected]>
    Signed-off-by: Omar Sandoval <[email protected]>
    Signed-off-by: Boris Burkov <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: qgroup: set a more sane default value for subtree drop threshold [+ + +]
Author: Qu Wenruo <[email protected]>
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: [email protected] # 6.1
    Signed-off-by: Qu Wenruo <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: reject ro->rw reconfiguration if there are hard ro requirements [+ + +]
Author: Qu Wenruo <[email protected]>
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: [email protected]
    Link: https://lore.kernel.org/linux-btrfs/[email protected]/
    Fixes: f044b318675f ("btrfs: handle the ro->rw transition for mounting different subvolumes")
    CC: [email protected] # 6.8+
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Qu Wenruo <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: zoned: fix zone unusable accounting for freed reserved extent [+ + +]
Author: Naohiro Aota <[email protected]>
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: [email protected] # 5.15+
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Naohiro Aota <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cdrom: Avoid barrier_nospec() in cdrom_ioctl_media_changed() [+ + +]
Author: Josh Poimboeuf <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/1d86f4d9d8fba68e5ca64cdeac2451b95a8bf872.1729202937.git.jpoimboe@kernel.org
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
cifs: fix warning when destroy 'cifs_io_request_pool' [+ + +]
Author: Ye Bin <[email protected]>
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 <[email protected]>
    Acked-by: David Howells <[email protected]
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

cifs: Validate content of NFS reparse point buffer [+ + +]
Author: Pali Rohár <[email protected]>
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 <[email protected]>
    Reviewed-by: Paulo Alcantara (Red Hat) <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
clk: rockchip: fix finding of maximum clock ID [+ + +]
Author: Yao Zi <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Sebastian Reichel <[email protected]>
    Reviewed-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Stephen Boyd <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
cpufreq/amd-pstate: Fix amd_pstate mode switch on shared memory systems [+ + +]
Author: Dhananjay Ugwekar <[email protected]>
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 <[email protected]>
    Reviewed-by: Mario Limonciello <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
cpufreq: CPPC: fix perf_to_khz/khz_to_perf conversion exception [+ + +]
Author: liwei <[email protected]>
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 <[email protected]>
    Acked-by: Viresh Kumar <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ rjw: Subject and changelog edits ]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/amdgpu: Fix double unlock in amdgpu_mes_add_ring [+ + +]
Author: Srinivasan Shanmugam <[email protected]>
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 <[email protected]>
    Cc: Alex Deucher <[email protected]>
    Cc: Hawking Zhang <[email protected]>
    Suggested-by: Jack Xiao <[email protected]>
    Reported by: Dan Carpenter <[email protected]>
    Signed-off-by: Srinivasan Shanmugam <[email protected]>
    Reviewed-by: Jack Xiao <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit bfaf1883605fd0c0dbabacd67ed49708470d5ea4)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/display: Disable PSR-SU on Parade 08-01 TCON too [+ + +]
Author: Mario Limonciello <[email protected]>
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 <[email protected]>
    Cc: Hamza Mahfooz <[email protected]>
    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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit afb634a6823d8d9db23c5fb04f79c5549349628b)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: temp w/a for DP Link Layer compliance [+ + +]
Author: Aurabindo Pillai <[email protected]>
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 <[email protected]>
    Cc: Alex Deucher <[email protected]>
    Reviewed-by: Dillon Varone <[email protected]>
    Signed-off-by: Aurabindo Pillai <[email protected]>
    Signed-off-by: Wayne Lin <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 8a79f7cdbb41bb0ddfd4d7662b4428d4a9d5306d)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amd: Guard against bad data for ATIF ACPI method [+ + +]
Author: Mario Limonciello <[email protected]>
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 <[email protected]>
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit c9b7c809b89f24e9372a4e7f02d64c950b07fdee)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/bridge: Fix assignment of the of_node of the parent to aux bridge [+ + +]
Author: Abel Vesa <[email protected]>
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: [email protected]      # 6.8
    Cc: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Abel Vesa <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Link: https://lore.kernel.org/r/20241018-drm-aux-bridge-mark-of-node-reused-v2-1-aeed1b445c7d@linaro.org
    Signed-off-by: Neil Armstrong <[email protected]>
    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 <[email protected]>

 
drm/msm/a6xx+: Insert a fence wait before SMMU table update [+ + +]
Author: Rob Clark <[email protected]>
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 <[email protected]>
    Reviewed-by: Akhil P Oommen <[email protected]>
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/dpu: check for overflow in _dpu_crtc_setup_lm_bounds() [+ + +]
Author: Dmitry Baryshkov <[email protected]>
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 <[email protected]>
    Tested-by: Abhinav Kumar <[email protected]> # sc7280
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/612237/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dpu: don't always program merge_3d block [+ + +]
Author: Jessica Zhang <[email protected]>
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 <[email protected]>
    Signed-off-by: Jessica Zhang <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/619095/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dpu: Don't always set merge_3d pending flush [+ + +]
Author: Jessica Zhang <[email protected]>
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 <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/619092/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dpu: make sure phys resources are properly initialized [+ + +]
Author: Dmitry Baryshkov <[email protected]>
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 <[email protected]>
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/612233/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dpu: move CRTC resource assignment to dpu_encoder_virt_atomic_check [+ + +]
Author: Dmitry Baryshkov <[email protected]>
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 <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/612235/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/dsi: fix 32-bit signed integer extension in pclk_rate calculation [+ + +]
Author: Jonathan Marek <[email protected]>
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 <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/618434/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dsi: improve/fix dsc pclk calculation [+ + +]
Author: Jonathan Marek <[email protected]>
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 <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/618432/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm: Allocate memory for disp snapshot with kvzalloc() [+ + +]
Author: Douglas Anderson <[email protected]>
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/[email protected]/
    
    Fixes: 98659487b845 ("drm/msm: add support to take dpu snapshot")
    Signed-off-by: Douglas Anderson <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/619658/
    Link: https://lore.kernel.org/r/20241014093605.2.I72441365ffe91f3dceb17db0a8ec976af8139590@changeid
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm: Avoid NULL dereference in msm_disp_state_print_regs() [+ + +]
Author: Douglas Anderson <[email protected]>
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 <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/619657/
    Link: https://lore.kernel.org/r/20241014093605.1.Ia1217cecec9ef09eb3c6d125360cc6c8574b0e73@changeid
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/panel: himax-hx83102: Adjust power and gamma to optimize brightness [+ + +]
Author: Cong Yang <[email protected]>
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 <[email protected]>
    Reviewed-by: Douglas Anderson <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Signed-off-by: Douglas Anderson <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241011020819.1254157-1-yangcong5@huaqin.corp-partner.google.com
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/vboxvideo: Replace fake VLA at end of vbva_mouse_pointer_shape with real VLA [+ + +]
Author: Hans de Goede <[email protected]>
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 <[email protected]>
    Reviewed-by: Jani Nikula <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/vmwgfx: Handle possible ENOMEM in vmw_stdu_connector_atomic_check [+ + +]
Author: Ian Forbes <[email protected]>
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 <[email protected]>
    Reported-by: Dan Carpenter <[email protected]>
    Fixes: 75c3e8a26a35 ("drm/vmwgfx: Trigger a modeset when the screen moves")
    Reviewed-by: Zack Rusin <[email protected]>
    Reviewed-by: Martin Krastev <[email protected]>
    Signed-off-by: Zack Rusin <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/xe/mcr: Use Xe2_LPM steering tables for Xe2_HPM [+ + +]
Author: Gustavo Sousa <[email protected]>
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 <[email protected]>
    Signed-off-by: Gustavo Sousa <[email protected]>
    Reviewed-by: Tejas Upadhyay <[email protected]>
    Signed-off-by: Matt Roper <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    (cherry picked from commit 21ae035ae5c33ef176f4062bd9d4aa973dde240b)
    Signed-off-by: Lucas De Marchi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/xe: Don't free job in TDR [+ + +]
Author: Matthew Brost <[email protected]>
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 <[email protected]>
    Fixes: e275d61c5f3f ("drm/xe/guc: Handle timing out of signaled jobs gracefully")
    Signed-off-by: Matthew Brost <[email protected]>
    Reviewed-by: Matthew Auld <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    (cherry picked from commit ea2f6a77d0c40d97f4a4dc93fee4afe15d94926d)
    Signed-off-by: Lucas De Marchi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/xe: fix unbalanced rpm put() with declare_wedged() [+ + +]
Author: Matthew Auld <[email protected]>
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 <[email protected]>
    Cc: Matthew Brost <[email protected]>
    Cc: Nirmoy Das <[email protected]>
    Reviewed-by: Matthew Brost <[email protected]>
    Reviewed-by: Nirmoy Das <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    (cherry picked from commit a187c1b0a800565a4db6372268692aff99df7f53)
    Signed-off-by: Lucas De Marchi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/xe: fix unbalanced rpm put() with fence_fini() [+ + +]
Author: Matthew Auld <[email protected]>
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 <[email protected]>
    Cc: Matthew Brost <[email protected]>
    Cc: Nirmoy Das <[email protected]>
    Reviewed-by: Matthew Brost <[email protected]>
    Reviewed-by: Nirmoy Das <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    (cherry picked from commit cfcbc0520d5055825f0647ab922b655688605183)
    Signed-off-by: Lucas De Marchi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/xe: Take job list lock in xe_sched_add_pending_job [+ + +]
Author: Matthew Brost <[email protected]>
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 <[email protected]>
    Reviewed-by: Matthew Auld <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    (cherry picked from commit 90521df5fc43980e4575bd8c5b1cb62afe1a9f5f)
    Signed-off-by: Lucas De Marchi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/xe: Use bookkeep slots for external BO's in exec IOCTL [+ + +]
Author: Matthew Brost <[email protected]>
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 <[email protected]>
    Cc: Kenneth Graunke <[email protected]>
    Cc: Paulo Zanoni <[email protected]>
    Reported-by: Simona Vetter <[email protected]>
    Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2673
    Signed-off-by: Matthew Brost <[email protected]>
    Reviewed-by: José Roberto de Souza <[email protected]>
    Reviewed-by: Kenneth Graunke <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    (cherry picked from commit b8b1163248759ba18509f7443a2d19b15b4c1df8)
    Signed-off-by: Lucas De Marchi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
elevator: do not request_module if elevator exists [+ + +]
Author: Breno Leitao <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

elevator: Remove argument from elevator_find_get [+ + +]
Author: Breno Leitao <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fbdev: wm8505fb: select CONFIG_FB_IOMEM_FOPS [+ + +]
Author: Arnd Bergmann <[email protected]>
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 <[email protected]>
    Reviewed-by: Thomas Zimmermann <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fgraph: Allocate ret_stack_list with proper size [+ + +]
Author: Steven Rostedt <[email protected]>
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 <[email protected]>
    Cc: Mark Rutland <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    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) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

fgraph: Change the name of cpuhp state to "fgraph:online" [+ + +]
Author: Steven Rostedt <[email protected]>
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 <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Thomas Gleixner <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Suggested-by: Masami Hiramatsu <[email protected]>
    Fixes: 2c02f7375e658 ("fgraph: Use CPU hotplug mechanism to initialize idle shadow stacks")
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

fgraph: Fix missing unlock in register_ftrace_graph() [+ + +]
Author: Li Huafei <[email protected]>
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/[email protected]
    Fixes: 2c02f7375e65 ("fgraph: Use CPU hotplug mechanism to initialize idle shadow stacks")
    Reported-by: kernel test robot <[email protected]>
    Reported-by: Dan Carpenter <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]/
    Suggested-by: Steven Rostedt <[email protected]>
    Signed-off-by: Li Huafei <[email protected]>
    Acked-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
firewire: core: fix invalid port index for parent device [+ + +]
Author: Takashi Sakamoto <[email protected]>
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: [email protected]
    Reported-by: Edmund Raile <[email protected]>
    Closes: https://lore.kernel.org/lkml/[email protected]/
    Fixes: 24b7f8e5cd65 ("firewire: core: use helper functions for self ID sequence")
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Takashi Sakamoto <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
firmware: arm_scmi: Fix the double free in scmi_debugfs_common_setup() [+ + +]
Author: Su Hui <[email protected]>
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 <[email protected]>
    Reviewed-by: Cristian Marussi <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Sudeep Holla <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

firmware: arm_scmi: Queue in scmi layer for mailbox implementation [+ + +]
Author: Justin Chen <[email protected]>
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 <[email protected]>
    Message-Id: <[email protected]>
    Reviewed-by: Cristian Marussi <[email protected]>
    Tested-by: Cristian Marussi <[email protected]>
    Signed-off-by: Sudeep Holla <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fs: don't try and remove empty rbtree node [+ + +]
Author: Christian Brauner <[email protected]>
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 <[email protected]>
    Cc: [email protected] # v6.11+
    Reported-by: Brad Spengler <[email protected]>
    Suggested-by: Brad Spengler <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fs: pass offset and result to backing_file end_write() callback [+ + +]
Author: Amir Goldstein <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/linux-fsdevel/CAJfpegs=cvZ_NYy6Q_D42XhYS=Sjj5poM1b5TzXzOVvX=R36aA@mail.gmail.com/
    Signed-off-by: Amir Goldstein <[email protected]>
    Signed-off-by: Miklos Szeredi <[email protected]>
    Stable-dep-of: 20121d3f58f0 ("fuse: update inode size after extending passthrough write")
    Signed-off-by: Sasha Levin <[email protected]>

 
fsl/fman: Fix refcount handling of fman-related devices [+ + +]
Author: Aleksandr Mishin <[email protected]>
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 <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

fsl/fman: Save device references taken in mac_probe() [+ + +]
Author: Aleksandr Mishin <[email protected]>
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 <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: 1dec67e0d9fb ("fsl/fman: Fix refcount handling of fman-related devices")
    Signed-off-by: Sasha Levin <[email protected]>

 
fsnotify: Avoid data race between fsnotify_recalc_mask() and fsnotify_object_watched() [+ + +]
Author: Jan Kara <[email protected]>
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: [email protected]
    Reported-by: Dmitry Vyukov <[email protected]>
    Link: https://lore.kernel.org/all/CACT4Y+Zk0ohwwwHSD63U2-PQ=UuamXczr1mKBD6xtj2dyYKBvA@mail.gmail.com
    Signed-off-by: Jan Kara <[email protected]>
    Reviewed-by: Josef Bacik <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
fuse: update inode size after extending passthrough write [+ + +]
Author: Amir Goldstein <[email protected]>
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 <[email protected]>
    Closes: https://github.com/libfuse/libfuse/issues/1048
    Fixes: 57e1176e6086 ("fuse: implement read/write passthrough")
    Signed-off-by: Amir Goldstein <[email protected]>
    Signed-off-by: Miklos Szeredi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
genetlink: hold RCU in genlmsg_mcast() [+ + +]
Author: Eric Dumazet <[email protected]>
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 <[email protected]>
    Cc: James Chapman <[email protected]>
    Cc: Tom Parkin <[email protected]>
    Cc: Johannes Berg <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
hv_netvsc: Fix VF namespace also in synthetic NIC NETDEV_REGISTER event [+ + +]
Author: Haiyang Zhang <[email protected]>
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: [email protected]
    Fixes: c0a41b887ce6 ("hv_netvsc: move VF to same namespace as netvsc device")
    Suggested-by: Stephen Hemminger <[email protected]>
    Signed-off-by: Haiyang Zhang <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iio: accel: bma400: Fix uninitialized variable field_value in tap event handling. [+ + +]
Author: Mikhail Lobanov <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iio: adc: ti-lmp92064: add missing select IIO_(TRIGGERED_)BUFFER in Kconfig [+ + +]
Author: Javier Carrasco <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iio: frequency: admv4420: fix missing select REMAP_SPI in Kconfig [+ + +]
Author: Javier Carrasco <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iio: frequency: {admv4420,adrf6780}: format Kconfig entries [+ + +]
Author: Javier Carrasco <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Stable-dep-of: 6b8e9dbfaed4 ("iio: frequency: admv4420: fix missing select REMAP_SPI in Kconfig")
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv4: give an IPv4 dev to blackhole_netdev [+ + +]
Author: Xin Long <[email protected]>
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 <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/3000792d45ca44e16c785ebe2b092e610e5b3df1.1728499633.git.lucien.xin@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/renesas-rzg2l: Fix missing put_device [+ + +]
Author: Fabrizio Castro <[email protected]>
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 <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/riscv-imsic: Fix output text of base address [+ + +]
Author: Andrew Jones <[email protected]>
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 <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Anup Patel <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
jfs: Fix sanity check in dbMount [+ + +]
Author: Dave Kleikamp <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
KVM: arm64: Don't eagerly teardown the vgic on init error [+ + +]
Author: Marc Zyngier <[email protected]>
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: [email protected]
    Reported-by: Alexander Potapenko <[email protected]>
    Reviewed-by: Oliver Upton <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Marc Zyngier <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: arm64: Fix shift-out-of-bounds bug [+ + +]
Author: Ilkka Koskinen <[email protected]>
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: [email protected]
    Reviewed-by: Gavin Shan <[email protected]>
    Signed-off-by: Ilkka Koskinen <[email protected]>
    Reviewed-by: Anshuman Khandual <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Marc Zyngier <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: arm64: Unregister redistributor for failed vCPU creation [+ + +]
Author: Oliver Upton <[email protected]>
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: [email protected]
    Fixes: f616506754d3 ("KVM: arm64: vgic: Don't hold config_lock while unregistering redistributors")
    Reported-by: Alexander Potapenko <[email protected]>
    Signed-off-by: Oliver Upton <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Marc Zyngier <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: nSVM: Ignore nCR3[4:0] when loading PDPTEs from memory [+ + +]
Author: Sean Christopherson <[email protected]>
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 <[email protected]>
    Cc: Andy Nguyen <[email protected]>
    Cc: 3pvd <[email protected]>
    Cc: [email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Paolo Bonzini <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
lib/Kconfig.debug: fix grammar in RUST_BUILD_ASSERT_ALLOW [+ + +]
Author: Timo Grautstueck <[email protected]>
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 <[email protected]>
    Closes: https://github.com/Rust-for-Linux/linux/issues/1006
    Fixes: ecaa6ddff2fd ("rust: add `build_error` crate")
    Signed-off-by: Timo Grautstueck <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Linux: Linux 6.11.6 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Fri Nov 1 02:02:44 2024 +0100

    Linux 6.11.6
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Miguel Ojeda <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: SeongJae Park <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Ronald Warsow <[email protected]>
    Tested-by: Hardik Garg <[email protected]>
    Tested-by: Salvatore Bonaccorso <[email protected]>
    Tested-by: kernelci.org bot <[email protected]>
    Tested-by: Christian Heusel <[email protected]>
    Tested-by: Luna Jernberg <[email protected]>
    Tested-by: Markus Reichelt <[email protected]>
    Tested-by: Justin M. Forbes <[email protected]>
    Tested-by: Pavel Machek (CIP) <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
LoongArch: Don't crash in stack_top() for tasks without vDSO [+ + +]
Author: Thomas Weißschuh <[email protected]>
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 <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

LoongArch: Enable IRQ if do_ale() triggered in irq-enabled context [+ + +]
Author: Huacai Chen <[email protected]>
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: [email protected]
    Reported-by: Binbin Zhou <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: Get correct cores_per_package for SMT systems [+ + +]
Author: Huacai Chen <[email protected]>
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: [email protected]
    Reported-by: Chao Li <[email protected]>
    Tested-by: Chao Li <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: Make KASAN usable for variable cpu_vabits [+ + +]
Author: Huacai Chen <[email protected]>
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: [email protected]
    Signed-off-by: Kanglong Wang <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
macsec: don't increment counters for an unrelated SA [+ + +]
Author: Sabrina Dubroca <[email protected]>
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 <[email protected]>
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Link: https://patch.msgid.link/f5ac92aaa5b89343232615f4c03f9f95042c6aa0.1728657709.git.sd@queasysnail.net
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
md/raid10: fix null ptr dereference in raid10_size() [+ + +]
Author: Yu Kuai <[email protected]>
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: [email protected]
    Reported-and-tested-by: ValdikSS <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Yu Kuai <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Song Liu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mlxsw: spectrum_router: fix xa_store() error checking [+ + +]
Author: Yuan Can <[email protected]>
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 <[email protected]>
    Reviewed-by: Petr Machata <[email protected]>
    Reviewed-by: Przemek Kitszel <[email protected]>
    Tested-by: Petr Machata <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mm: don't install PMD mappings when THPs are disabled by the hw/process/vma [+ + +]
Author: David Hildenbrand <[email protected]>
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/[email protected]
    Fixes: 793917d997df ("mm/readahead: Add large folio readahead")
    Signed-off-by: David Hildenbrand <[email protected]>
    Reported-by: Leo Fu <[email protected]>
    Tested-by: Thomas Huth <[email protected]>
    Cc: Thomas Huth <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Ryan Roberts <[email protected]>
    Cc: Christian Borntraeger <[email protected]>
    Cc: Janosch Frank <[email protected]>
    Cc: Claudio Imbrenda <[email protected]>
    Cc: Hugh Dickins <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mm: huge_memory: add vma_thp_disabled() and thp_disabled_by_hw() [+ + +]
Author: Kefeng Wang <[email protected]>
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().
    
    [[email protected]: rename to vma_thp_disabled(), split out thp_disabled_by_hw() ]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 793917d997df ("mm/readahead: Add large folio readahead")
    Signed-off-by: Kefeng Wang <[email protected]>
    Signed-off-by: David Hildenbrand <[email protected]>
    Reported-by: Leo Fu <[email protected]>
    Tested-by: Thomas Huth <[email protected]>
    Reviewed-by: Ryan Roberts <[email protected]>
    Cc: Boqiao Fu <[email protected]>
    Cc: Christian Borntraeger <[email protected]>
    Cc: Claudio Imbrenda <[email protected]>
    Cc: Hugh Dickins <[email protected]>
    Cc: Janosch Frank <[email protected]>
    Cc: Matthew Wilcox <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 2b0f922323cc ("mm: don't install PMD mappings when THPs are disabled by the hw/process/vma")
    Signed-off-by: Sasha Levin <[email protected]>

mm: shmem: move shmem_huge_global_enabled() into shmem_allowable_huge_orders() [+ + +]
Author: Baolin Wang <[email protected]>
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 <[email protected]>
    Reviewed-by: Ryan Roberts <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Cc: Barry Song <[email protected]>
    Cc: Hugh Dickins <[email protected]>
    Cc: Lance Yang <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Zi Yan <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 2b0f922323cc ("mm: don't install PMD mappings when THPs are disabled by the hw/process/vma")
    Signed-off-by: Sasha Levin <[email protected]>

mm: shmem: rename shmem_is_huge() to shmem_huge_global_enabled() [+ + +]
Author: Baolin Wang <[email protected]>
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 <[email protected]>
    Reviewed-by: Ryan Roberts <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Cc: Barry Song <[email protected]>
    Cc: Hugh Dickins <[email protected]>
    Cc: Lance Yang <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Zi Yan <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 2b0f922323cc ("mm: don't install PMD mappings when THPs are disabled by the hw/process/vma")
    Signed-off-by: Sasha Levin <[email protected]>

 
net/mlx5: Check for invalid vector index on EQ creation [+ + +]
Author: Maher Sanalla <[email protected]>
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 <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5: Fix command bitmask initialization [+ + +]
Author: Shay Drory <[email protected]>
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 <[email protected]>
    Reviewed-by: Moshe Shemesh <[email protected]>
    Reviewed-by: Saeed Mahameed <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5: Unregister notifier on eswitch init failure [+ + +]
Author: Cosmin Ratiu <[email protected]>
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 <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/mlx5e: Don't call cleanup on profile rollback failure [+ + +]
Author: Cosmin Ratiu <[email protected]>
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 <[email protected]>
    Reviewed-by: Dragos Tatulea <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/sched: act_api: deny mismatched skip_sw/skip_hw flags for actions created by classifiers [+ + +]
Author: Vladimir Oltean <[email protected]>
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/[email protected]/
    [2]: https://lore.kernel.org/netdev/[email protected]/
    Fixes: 7adc57651211 ("flow_offload: add skip_hw and skip_sw to control if offload the action")
    Signed-off-by: Vladimir Oltean <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Tested-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/smc: Fix memory leak when using percpu refs [+ + +]
Author: Kai Shen <[email protected]>
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 <[email protected]>
    Reviewed-by: Dust Li <[email protected]>
    Reviewed-by: Wenjia Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/smc: Fix searching in list of known pnetids in smc_pnet_add_pnetid [+ + +]
Author: Li RongQing <[email protected]>
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 <[email protected]>
    Reviewed-by: Wen Gu <[email protected]>
    Signed-off-by: Li RongQing <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Gerd Bayer <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/sun3_82586: fix potential memory leak in sun3_82586_send_packet() [+ + +]
Author: Wang Hai <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Andrew Lunn <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: bcmasp: fix potential memory leak in bcmasp_xmit() [+ + +]
Author: Wang Hai <[email protected]>
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 <[email protected]>
    Acked-by: Florian Fainelli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: microchip: disable EEE for KSZ879x/KSZ877x/KSZ876x [+ + +]
Author: Tim Harvey <[email protected]>
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 <[email protected]>
    Reviewed-by: Oleksij Rempel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: mv88e6xxx: Fix error when setting port policy on mv88e6393x [+ + +]
Author: Peter Rashleigh <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Andrew Lunn <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: mv88e6xxx: Fix the max_vid definition for the MV88E6361 [+ + +]
Author: Peter Rashleigh <[email protected]>
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 <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: mv88e6xxx: group cycle counter coefficients [+ + +]
Author: Shenghao Yang <[email protected]>
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 <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: mv88e6xxx: read cycle counter period from hardware [+ + +]
Author: Shenghao Yang <[email protected]>
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 <[email protected]>
    Signed-off-by: Shenghao Yang <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: mv88e6xxx: support 4000ps cycle counter period [+ + +]
Author: Shenghao Yang <[email protected]>
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 <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: vsc73xx: fix reception from VLAN-unaware bridges [+ + +]
Author: Vladimir Oltean <[email protected]>
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 <[email protected]>
    Signed-off-by: Vladimir Oltean <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ethernet: aeroflex: fix potential memory leak in greth_start_xmit_gbit() [+ + +]
Author: Wang Hai <[email protected]>
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 <[email protected]>
    Reviewed-by: Gerhard Engleder <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ethernet: mtk_eth_soc: fix memory corruption during fq dma init [+ + +]
Author: Felix Fietkau <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ethernet: rtsn: fix potential memory leak in rtsn_start_xmit() [+ + +]
Author: Wang Hai <[email protected]>
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 <[email protected]>
    Reviewed-by: Niklas Söderlund <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: fix races in netdev_tx_sent_queue()/dev_watchdog() [+ + +]
Author: Eric Dumazet <[email protected]>
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 <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Reviewed-by: Toke Høiland-Jørgensen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: dp83822: Fix reset pin definitions [+ + +]
Author: Michel Alex <[email protected]>
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: [email protected]
    Fixes: 5dc39fd5ef35 ("net: phy: DP83822: Add ability to advertise Fiber connection")
    Signed-off-by: Alex Michel <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Message-ID: <AS1P250MB0608A798661549BF83C4B43EA9462@AS1P250MB0608.EURP250.PROD.OUTLOOK.COM>
    Signed-off-by: Andrew Lunn <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: plip: fix break; causing plip to never transmit [+ + +]
Author: Jakub Boehm <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Andrew Lunn <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: pse-pd: Fix out of bound for loop [+ + +]
Author: Kory Maincent <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Acked-by: Oleksij Rempel <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Andrew Lunn <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ravb: Only advertise Rx/Tx timestamps if hardware supports it [+ + +]
Author: Niklas Söderlund <[email protected]>
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 <[email protected]>
    Reviewed-by: Paul Barker <[email protected]>
    Tested-by: Paul Barker <[email protected]>
    Reviewed-by: Sergey Shtylyov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: sched: fix use-after-free in taprio_change() [+ + +]
Author: Dmitry Antipov <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=b65e0af58423fc8a73aa
    Acked-by: Vinicius Costa Gomes <[email protected]>
    Signed-off-by: Dmitry Antipov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: sched: use RCU read-side critical section in taprio_dump() [+ + +]
Author: Dmitry Antipov <[email protected]>
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 <[email protected]>
    Signed-off-by: Dmitry Antipov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: sparx5: fix source port register when mirroring [+ + +]
Author: Daniel Machon <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: stmmac: dwmac-tegra: Fix link bring-up sequence [+ + +]
Author: Paritosh Dixit <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: systemport: fix potential memory leak in bcm_sysport_xmit() [+ + +]
Author: Wang Hai <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: usbnet: fix name regression [+ + +]
Author: Oliver Neukum <[email protected]>
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 <[email protected]>
    Reported-by: Greg Thelen <[email protected]>
    Diagnosed-by: John Sperbeck <[email protected]>
    Fixes: bab8eb0dd4cb9 ("usbnet: modern method to get random MAC")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: usbnet: fix race in probe failure [+ + +]
Author: Oliver Neukum <[email protected]>
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 <[email protected]>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: wwan: fix global oob in wwan_rtnl_policy [+ + +]
Author: Lin Ma <[email protected]>
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 <[email protected]>
    Reviewed-by: Loic Poulain <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: xilinx: axienet: fix potential memory leak in axienet_start_xmit() [+ + +]
Author: Wang Hai <[email protected]>
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 <[email protected]>
    Reviewed-by: Radhey Shyam Pandey <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netdevsim: use cond_resched() in nsim_dev_trap_report_work() [+ + +]
Author: Eric Dumazet <[email protected]>
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: [email protected]
    Reported-by: [email protected]
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Jiri Pirko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netfilter: bpf: must hold reference on net namespace [+ + +]
Author: Florian Westphal <[email protected]>
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 <[email protected]>
    Reported-by: Lai, Yi <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: xtables: fix typo causing some targets not to load on IPv6 [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
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 <[email protected]>
    Reported-by: Ilya Katsnelson <[email protected]>
    Reported-by: Krzysztof Olędzki <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nfsd: cancel nfsd_shrinker_work using sync mode in nfs4_state_shutdown_net [+ + +]
Author: Yang Erkun <[email protected]>
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 <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

nfsd: fix race between laundromat and free_stateid [+ + +]
Author: Olga Kornievskaia <[email protected]>
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: [email protected]
    Signed-off-by: Olga Kornievskaia <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nilfs2: fix kernel bug due to missing clearing of buffer delay flag [+ + +]
Author: Ryusuke Konishi <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=985ada84bf055a575c07
    Cc: [email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvme-pci: fix race condition between reset and nvme_dev_disable() [+ + +]
Author: Maurizio Lombardi <[email protected]>
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 <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Maurizio Lombardi <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
objpool: fix choosing allocation for percpu slots [+ + +]
Author: Viktor Malik <[email protected]>
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/[email protected]/
    
    Fixes: b4edb8d2d464 ("lib: objpool added: ring-array based lockless MPMC")
    Signed-off-by: Viktor Malik <[email protected]>
    Acked-by: Andrii Nakryiko <[email protected]>
    Reviewed-by: Matt Wu <[email protected]>
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
octeon_ep: Add SKB allocation failures handling in __octep_oq_process_rx() [+ + +]
Author: Aleksandr Mishin <[email protected]>
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 <[email protected]>
    Signed-off-by: Aleksandr Mishin <[email protected]>
    Reviewed-by: Jacob Keller <[email protected]>
    Signed-off-by: Andrew Lunn <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

octeon_ep: Implement helper for iterating packets in Rx queue [+ + +]
Author: Aleksandr Mishin <[email protected]>
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 <[email protected]>
    Suggested-by: Paolo Abeni <[email protected]>
    Signed-off-by: Aleksandr Mishin <[email protected]>
    Reviewed-by: Jacob Keller <[email protected]>
    Signed-off-by: Andrew Lunn <[email protected]>
    Stable-dep-of: eb592008f79b ("octeon_ep: Add SKB allocation failures handling in __octep_oq_process_rx()")
    Signed-off-by: Sasha Levin <[email protected]>

 
octeontx2-af: Fix potential integer overflows on integer shifts [+ + +]
Author: Colin Ian King <[email protected]>
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 <[email protected]>
    Reviewed-by: Dan Carpenter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
openat2: explicitly return -E2BIG for (usize > PAGE_SIZE) [+ + +]
Author: Aleksa Sarai <[email protected]>
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: [email protected] # v5.6+
    Fixes: fddb5d430ad9 ("open: introduce openat2(2) syscall")
    Signed-off-by: Aleksa Sarai <[email protected]>
    Link: https://lore.kernel.org/r/20241010-extensible-structs-check_fields-v3-3-d2833dfe6edd@cyphar.com
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI/pwrctl: Abandon QCom WCN probe on pre-pwrseq device-trees [+ + +]
Author: Bartosz Golaszewski <[email protected]>
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/[email protected]
    Fixes: 6140d185a43d ("PCI/pwrctl: Add a PCI power control driver for power sequenced devices")
    Reported-by: Johan Hovold <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

PCI/pwrctl: Add WCN6855 support [+ + +]
Author: Konrad Dybcio <[email protected]>
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/[email protected]
    [Bartosz: split Konrad's bigger patch, write the commit message]
    Co-developed-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Konrad Dybcio <[email protected]>
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Stable-dep-of: ad783b9f8e78 ("PCI/pwrctl: Abandon QCom WCN probe on pre-pwrseq device-trees")
    Signed-off-by: Sasha Levin <[email protected]>

 
PCI: Hold rescan lock while adding devices during host probe [+ + +]
Author: Bartosz Golaszewski <[email protected]>
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/[email protected]
    Reported-by: Konrad Dybcio <[email protected]>
    Tested-by: Konrad Dybcio <[email protected]>
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
perf/x86/rapl: Fix the energy-pkg event for AMD CPUs [+ + +]
Author: Dhananjay Ugwekar <[email protected]>
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 <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Reviewed-by: Kan Liang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
platform/x86/intel/pmc: Fix pmc_core_iounmap to call iounmap for valid addresses [+ + +]
Author: Vamsi Krishna Brahmajosyula <[email protected]>
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 <[email protected]>
    Reviewed-by: David E. Box <[email protected]>
    Signed-off-by: Vamsi Krishna Brahmajosyula <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Hans de Goede <[email protected]>
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/x86: dell-sysman: add support for alienware products [+ + +]
Author: Crag Wang <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Hans de Goede <[email protected]>
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

platform/x86: dell-wmi: Ignore suspend notifications [+ + +]
Author: Armin Wolf <[email protected]>
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: [email protected]
    Signed-off-by: Armin Wolf <[email protected]>
    Acked-by: Pali Rohár <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Hans de Goede <[email protected]>
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
posix-clock: posix-clock: Fix unbalanced locking in pc_clock_settime() [+ + +]
Author: Jinjie Ruan <[email protected]>
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 <[email protected]>
    Signed-off-by: Jinjie Ruan <[email protected]>
    Acked-by: Anna-Maria Behnsen <[email protected]>
    [[email protected]: fixed commit message typo]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
powercap: dtpm_devfreq: Fix error check against dev_pm_qos_add_request() [+ + +]
Author: Yuan Can <[email protected]>
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 <[email protected]>
    Reviewed-by: Lukasz Luba <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ rjw: Subject edit ]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
r8169: avoid unsolicited interrupts [+ + +]
Author: Heiner Kallweit <[email protected]>
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 <[email protected]>
    Signed-off-by: Heiner Kallweit <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ravb: Remove setting of RX software timestamp [+ + +]
Author: Gal Pressman <[email protected]>
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 <[email protected]>
    Reviewed-by: Rahul Rameshbabu <[email protected]>
    Signed-off-by: Gal Pressman <[email protected]>
    Reviewed-by: Niklas Söderlund <[email protected]>
    Reviewed-by: Sergey Shtylyov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 126e799602f4 ("net: ravb: Only advertise Rx/Tx timestamps if hardware supports it")
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/bnxt_re: Add a check for memory allocation [+ + +]
Author: Kalesh AP <[email protected]>
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/[email protected]
    Reviewed-by: Selvin Xavier <[email protected]>
    Signed-off-by: Kalesh AP <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Avoid CPU lockups due fifo occupancy check loop [+ + +]
Author: Selvin Xavier <[email protected]>
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/[email protected]
    Reviewed-by: Kalesh AP <[email protected]>
    Reviewed-by: Chandramohan Akula <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Change the sequence of updating the CQ toggle value [+ + +]
Author: Chandramohan Akula <[email protected]>
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/[email protected]
    Signed-off-by: Chandramohan Akula <[email protected]>
    Reviewed-by: Selvin Xavier <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Fix a bug while setting up Level-2 PBL pages [+ + +]
Author: Bhargava Chenna Marreddy <[email protected]>
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/[email protected]
    Signed-off-by: Bhargava Chenna Marreddy <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Fix a possible memory leak [+ + +]
Author: Kalesh AP <[email protected]>
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/[email protected]
    Signed-off-by: Selvin Xavier <[email protected]>
    Signed-off-by: Kalesh AP <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Fix incorrect AVID type in WQE structure [+ + +]
Author: Saravanan Vajravel <[email protected]>
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/[email protected]
    Reviewed-by: Selvin Xavier <[email protected]>
    Reviewed-by: Chandramohan Akula <[email protected]>
    Signed-off-by: Saravanan Vajravel <[email protected]>
    Signed-off-by: Kalesh AP <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Fix incorrect dereference of srq in async event [+ + +]
Author: Kashyap Desai <[email protected]>
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/[email protected]
    Reviewed-by: Saravanan Vajravel <[email protected]>
    Reviewed-by: Chandramohan Akula <[email protected]>
    Signed-off-by: Kashyap Desai <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Fix out of bound check [+ + +]
Author: Kalesh AP <[email protected]>
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/[email protected]
    Signed-off-by: Kalesh AP <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Fix the GID table length [+ + +]
Author: Kalesh AP <[email protected]>
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/[email protected]
    Signed-off-by: Kalesh AP <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Fix the max CQ WQEs for older adapters [+ + +]
Author: Abhishek Mohapatra <[email protected]>
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/[email protected]
    Signed-off-by: Abhishek Mohapatra<[email protected]>
    Reviewed-by: Chandramohan Akula <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Get the toggle bits from SRQ events [+ + +]
Author: Hongguang Gao <[email protected]>
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 <[email protected]>
    Signed-off-by: Chandramohan Akula <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Stable-dep-of: 2df411353dac ("RDMA/bnxt_re: Change the sequence of updating the CQ toggle value")
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Return more meaningful error [+ + +]
Author: Kalesh AP <[email protected]>
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/[email protected]
    Signed-off-by: Kalesh AP <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/core: Fix ENODEV error for iWARP test over vlan [+ + +]
Author: Anumula Murali Mohan Reddy <[email protected]>
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 <[email protected]>
    Signed-off-by: Potnuri Bharat Teja <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/cxgb4: Fix RDMA_CM_EVENT_UNREACHABLE error for iWARP [+ + +]
Author: Anumula Murali Mohan Reddy <[email protected]>
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/[email protected]
    Signed-off-by: Anumula Murali Mohan Reddy <[email protected]>
    Signed-off-by: Potnuri Bharat Teja <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/irdma: Fix misspelling of "accept*" [+ + +]
Author: Alexander Zubkov <[email protected]>
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/[email protected]
    Signed-off-by: Alexander Zubkov <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/srpt: Make slab cache names unique [+ + +]
Author: Bart Van Assche <[email protected]>
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/[email protected]
    Reported-by: Shinichiro Kawasaki <[email protected]>
    Closes: https://lore.kernel.org/linux-block/xpe6bea7rakpyoyfvspvin2dsozjmjtjktpph7rep3h25tv7fb@ooz4cu5z6bq6/
    Suggested-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Bart Van Assche <[email protected]>
    Tested-by: Shin'ichiro Kawasaki <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
reset: starfive: jh71x0: Fix accessing the empty member on JH7110 SoC [+ + +]
Author: Changhuang Liang <[email protected]>
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 <[email protected]>
    Acked-by: Hal Feng <[email protected]>
    Reviewed-by: Philipp Zabel <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Philipp Zabel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert " fs/9p: mitigate inode collisions" [+ + +]
Author: Dominique Martinet <[email protected]>
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 <[email protected]>
    Link: https://lkml.kernel.org/r/20240923100508.GA32066@willie-the-truck
    Cc: [email protected] # v6.9+
    Message-ID: <[email protected]>
    Signed-off-by: Dominique Martinet <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "fs/9p: fix uaf in in v9fs_stat2inode_dotl" [+ + +]
Author: Dominique Martinet <[email protected]>
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 <[email protected]>
    Link: https://lkml.kernel.org/r/20240923100508.GA32066@willie-the-truck
    Cc: [email protected] # v6.9+
    Message-ID: <[email protected]>
    Signed-off-by: Dominique Martinet <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Revert "fs/9p: remove redundant pointer v9ses" [+ + +]
Author: Dominique Martinet <[email protected]>
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 <[email protected]>
    Link: https://lkml.kernel.org/r/20240923100508.GA32066@willie-the-truck
    Cc: [email protected] # v6.9+
    Message-ID: <[email protected]>
    Signed-off-by: Dominique Martinet <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Revert "fs/9p: simplify iget to remove unnecessary paths" [+ + +]
Author: Dominique Martinet <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]/
    Link: https://lkml.kernel.org/r/20240923100508.GA32066@willie-the-truck
    Cc: [email protected] # v6.9+
    Message-ID: <[email protected]>
    Signed-off-by: Dominique Martinet <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ring-buffer: Fix reader locking when changing the sub buffer order [+ + +]
Author: Petr Pavlu <[email protected]>
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/[email protected]/
    Link: https://lore.kernel.org/linux-trace-kernel/[email protected]/
    Link: https://lore.kernel.org/linux-trace-kernel/[email protected]/
    
    Cc: Masami Hiramatsu <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Fixes: 8e7b58c27b3c ("ring-buffer: Just update the subbuffers when changing their allocation order")
    Signed-off-by: Petr Pavlu <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
riscv, bpf: Fix possible infinite tailcall when CONFIG_CFI_CLANG is enabled [+ + +]
Author: Pu Lehui <[email protected]>
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 <[email protected]>
    Acked-by: Björn Töpel <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

riscv, bpf: Make BPF_CMPXCHG fully ordered [+ + +]
Author: Andrea Parri <[email protected]>
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 <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Reviewed-by: Puranjay Mohan <[email protected]>
    Acked-by: Björn Töpel <[email protected]>
    Link: https://lpc.events/event/18/contributions/1949/attachments/1665/3441/bpfmemmodel.2024.09.19p.pdf [1]
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/pci: Handle PCI error codes other than 0x3a [+ + +]
Author: Niklas Schnelle <[email protected]>
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 <[email protected]>
    Signed-off-by: Niklas Schnelle <[email protected]>
    Signed-off-by: Heiko Carstens <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390: Initialize psw mask in perf_arch_fetch_caller_regs() [+ + +]
Author: Heiko Carstens <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
sched/core: Disable page allocation in task_tick_mm_cid() [+ + +]
Author: Waiman Long <[email protected]>
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 <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
scsi: target: core: Fix null-ptr-deref in target_alloc_device() [+ + +]
Author: Wang Hai <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Mike Christie <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests/bpf: Fix cross-compiling urandom_read [+ + +]
Author: Tony Ambardar <[email protected]>
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 <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

selftests/bpf: fix perf_event link info name_len assertion [+ + +]
Author: Tyrone Wu <[email protected]>
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 <[email protected]>
    Acked-by: Jiri Olsa <[email protected]>
    Acked-by: Yafang Shao <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
smb: client: fix OOBs when building SMB2_IOCTL request [+ + +]
Author: Paulo Alcantara <[email protected]>
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 <[email protected]>
    Fixes: e77fe73c7e38 ("cifs: we can not use small padding iovs together with encryption")
    Signed-off-by: Paulo Alcantara (Red Hat) <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

smb: client: fix possible double free in smb2_set_ea() [+ + +]
Author: Su Hui <[email protected]>
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 <[email protected]>
    Signed-off-by: Su Hui <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

smb: client: Handle kstrdup failures for passwords [+ + +]
Author: Henrique Carvalho <[email protected]>
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 <[email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Henrique Carvalho <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
soundwire: intel_ace2x: Send PDI stream number during prepare [+ + +]
Author: Ranjani Sridharan <[email protected]>
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 <[email protected]>
    Reviewed-by: Péter Ujfalusi <[email protected]>
    Reviewed-by: Kai Vehmanen <[email protected]>
    Signed-off-by: Bard Liao <[email protected]>
    Acked-by: Vinod Koul <[email protected]>
    All: [email protected] # 6.10.x 6.11.x
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tcp/dccp: Don't use timer_pending() in reqsk_queue_unlink(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
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 <[email protected]>
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Link: https://lore.kernel.org/netdev/[email protected]/ [1]
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Reviewed-by: Martin KaFai Lau <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tracing/probes: Fix MAX_TRACE_ARGS limit handling [+ + +]
Author: Mikel Rychliski <[email protected]>
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/[email protected]/
    
    Fixes: 035ba76014c0 ("tracing/probes: cleanup: Set trace_probe::nr_args at trace_probe_init")
    Signed-off-by: Mikel Rychliski <[email protected]>
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tracing: Consider the NULL character when validating the event length [+ + +]
Author: Leo Yan <[email protected]>
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/[email protected]/
    
    Fixes: dec65d79fd26 ("tracing/probe: Check event name length correctly")
    Signed-off-by: Leo Yan <[email protected]>
    Reviewed-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
udf: fix uninit-value use in udf_get_fileshortad [+ + +]
Author: Gianfranco Trad <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=8901c4560b7ab5c2f9df
    Tested-by: [email protected]
    Suggested-by: Jan Kara <[email protected]>
    Signed-off-by: Gianfranco Trad <[email protected]>
    Signed-off-by: Jan Kara <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

udf: refactor inode_bmap() to handle error [+ + +]
Author: Zhao Mengmeng <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=7a4842f0b1801230a989
    Tested-by: [email protected]
    Signed-off-by: Zhao Mengmeng <[email protected]>
    Suggested-by: Jan Kara <[email protected]>
    Signed-off-by: Jan Kara <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

udf: refactor udf_current_aext() to handle error [+ + +]
Author: Zhao Mengmeng <[email protected]>
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 <[email protected]>
    Suggested-by: Jan Kara <[email protected]>
    Signed-off-by: Jan Kara <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

udf: refactor udf_next_aext() to handle error [+ + +]
Author: Zhao Mengmeng <[email protected]>
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 <[email protected]>
    Suggested-by: Jan Kara <[email protected]>
    Signed-off-by: Jan Kara <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
uprobe: avoid out-of-bounds memory access of fetching args [+ + +]
Author: Qiao Ma <[email protected]>
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/[email protected]/
    
    Fixes: dcad1a204f72 ("tracing/uprobes: Fetch args before reserving a ring buffer")
    Signed-off-by: Qiao Ma <[email protected]>
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
usb: typec: altmode should keep reference to parent [+ + +]
Author: Thadeu Lima de Souza Cascardo <[email protected]>
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 <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
virtio_net: fix integer overflow in stats [+ + +]
Author: Michael S. Tsirkin <[email protected]>
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)" <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Acked-by: Jason Wang <[email protected]>
    Reviewed-by: Stefano Garzarella <[email protected]>
    Link: https://patch.msgid.link/53e2bd6728136d5916e384a7840e5dc7eebff832.1729099611.git.mst@redhat.com
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vmxnet3: Fix packet corruption in vmxnet3_xdp_xmit_frame [+ + +]
Author: Daniel Borkmann <[email protected]>
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 <[email protected]>
    Reported-by: Nikolay Nikolaev <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Tested-by: Nikolay Nikolaev <[email protected]>
    Acked-by: Anton Protopopov <[email protected]>
    Cc: William Tu <[email protected]>
    Cc: Ronak Doshi <[email protected]>
    Link: https://patch.msgid.link/a0888656d7f09028f9984498cc698bb5364d89fc.1728931137.git.daniel@iogearbox.net
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vsock: Update msg_count on read_skb() [+ + +]
Author: Michal Luczaj <[email protected]>
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 <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Reviewed-by: Stefano Garzarella <[email protected]>
    Acked-by: John Fastabend <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

vsock: Update rx_bytes on read_skb() [+ + +]
Author: Michal Luczaj <[email protected]>
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 <[email protected]>
    Signed-off-by: Michal Luczaj <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Reviewed-by: Stefano Garzarella <[email protected]>
    Acked-by: John Fastabend <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/amd_nb: Add new PCI ID for AMD family 1Ah model 20h [+ + +]
Author: Richard Gong <[email protected]>
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 <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Yazen Ghannam <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/amd_nb: Add new PCI IDs for AMD family 1Ah model 60h-70h [+ + +]
Author: Richard Gong <[email protected]>
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 <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Yazen Ghannam <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/lam: Disable ADDRESS_MASKING in most cases [+ + +]
Author: Pawan Gupta <[email protected]>
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/[email protected]/
    
    [ dhansen: update SPECULATION_MITIGATIONS -> CPU_MITIGATIONS ]
    
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Dave Hansen <[email protected]>
    Reviewed-by: Sohil Mehta <[email protected]>
    Acked-by: Kirill A. Shutemov <[email protected]>
    Cc:[email protected]
    Link: https://lore.kernel.org/all/5373262886f2783f054256babdf5a98545dc986b.1706068222.git.pawan.kumar.gupta%40linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/resctrl: Avoid overflow in MB settings in bw_validate() [+ + +]
Author: Martin Kletzander <[email protected]>
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 <[email protected]>
    Signed-off-by: Reinette Chatre <[email protected]>
    Signed-off-by: Martin Kletzander <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Reinette Chatre <[email protected]>
    Reviewed-by: Tony Luck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/sev: Ensure that RMP table fixups are reserved [+ + +]
Author: Ashish Kalra <[email protected]>
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 <[email protected]>
    Signed-off-by: Ashish Kalra <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Tom Lendacky <[email protected]>
    Cc: <[email protected]> # 6.11, see Backporter note above.
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86: fix user address masking non-canonical speculation issue [+ + +]
Author: Linus Torvalds <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]/
    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 <[email protected]>
    Cc: Borislav Petkov <[email protected]>
    Tested-by: Maciej Wieczor-Retman <[email protected]> # 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 <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86: fix whitespace in runtime-const assembler output [+ + +]
Author: Linus Torvalds <[email protected]>
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 <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86: support user address masking instead of non-speculative conditional [+ + +]
Author: Linus Torvalds <[email protected]>
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 <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xfrm: extract dst lookup parameters into a struct [+ + +]
Author: Eyal Birger <[email protected]>
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 <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Stable-dep-of: b84697210343 ("xfrm: respect ip protocols rules criteria when performing dst lookups")
    Signed-off-by: Sasha Levin <[email protected]>

xfrm: fix one more kernel-infoleak in algo dumping [+ + +]
Author: Petr Vaganov <[email protected]>
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: [email protected]
    Co-developed-by: Boris Tonofa <[email protected]>
    Signed-off-by: Boris Tonofa <[email protected]>
    Signed-off-by: Petr Vaganov <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

xfrm: respect ip protocols rules criteria when performing dst lookups [+ + +]
Author: Eyal Birger <[email protected]>
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 <[email protected]>
    Tested-by: Antony Antony <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

xfrm: validate new SA's prefixlen using SA family when sel.family is unset [+ + +]
Author: Sabrina Dubroca <[email protected]>
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: [email protected]
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
xfs: don't fail repairs on metadata files with no attr fork [+ + +]
Author: Darrick J. Wong <[email protected]>
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: [email protected] # v6.8
    Fixes: 5a8e07e799721b ("xfs: repair the inode core and forks of a metadata inode")
    Signed-off-by: Darrick J. Wong <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xhci: dbc: honor usb transfer size boundaries. [+ + +]
Author: Mathias Nyman <[email protected]>
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 <[email protected]>
    Tested-by: Łukasz Bartosik <[email protected]>
    Cc: [email protected]
    Signed-off-by: Mathias Nyman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

xhci: dbgtty: remove kfifo_out() wrapper [+ + +]
Author: Jiri Slaby (SUSE) <[email protected]>
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) <[email protected]>
    Cc: Mathias Nyman <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 30c9ae5ece8e ("xhci: dbc: honor usb transfer size boundaries.")
    Signed-off-by: Sasha Levin <[email protected]>

xhci: dbgtty: use kfifo from tty_port struct [+ + +]
Author: Jiri Slaby (SUSE) <[email protected]>
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) <[email protected]>
    Cc: Mathias Nyman <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 30c9ae5ece8e ("xhci: dbc: honor usb transfer size boundaries.")
    Signed-off-by: Sasha Levin <[email protected]>