Changelog in Linux kernel 5.15.180

 
acpi: nfit: fix narrowing conversion in acpi_nfit_ctl [+ + +]
Author: Murad Masimov <m.masimov@mt-integration.ru>
Date:   Thu Jan 23 19:39:45 2025 +0300

    acpi: nfit: fix narrowing conversion in acpi_nfit_ctl
    
    commit 2ff0e408db36c21ed3fa5e3c1e0e687c82cf132f upstream.
    
    Syzkaller has reported a warning in to_nfit_bus_uuid(): "only secondary
    bus families can be translated". This warning is emited if the argument
    is equal to NVDIMM_BUS_FAMILY_NFIT == 0. Function acpi_nfit_ctl() first
    verifies that a user-provided value call_pkg->nd_family of type u64 is
    not equal to 0. Then the value is converted to int, and only after that
    is compared to NVDIMM_BUS_FAMILY_MAX. This can lead to passing an invalid
    argument to acpi_nfit_ctl(), if call_pkg->nd_family is non-zero, while
    the lower 32 bits are zero.
    
    Furthermore, it is best to return EINVAL immediately upon seeing the
    invalid user input.  The WARNING is insufficient to prevent further
    undefined behavior based on other invalid user input.
    
    All checks of the input value should be applied to the original variable
    call_pkg->nd_family.
    
    [iweiny: update commit message]
    
    Fixes: 6450ddbd5d8e ("ACPI: NFIT: Define runtime firmware activation commands")
    Cc: stable@vger.kernel.org
    Reported-by: syzbot+c80d8dc0d9fa81a3cd8c@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=c80d8dc0d9fa81a3cd8c
    Signed-off-by: Murad Masimov <m.masimov@mt-integration.ru>
    Link: https://patch.msgid.link/20250123163945.251-1-m.masimov@mt-integration.ru
    Signed-off-by: Ira Weiny <ira.weiny@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ACPI: processor: idle: Return an error if both P_LVL{2,3} idle states are invalid [+ + +]
Author: Giovanni Gherdovich <ggherdovich@suse.cz>
Date:   Fri Mar 28 15:30:39 2025 +0100

    ACPI: processor: idle: Return an error if both P_LVL{2,3} idle states are invalid
    
    [ Upstream commit 9e9b893404d43894d69a18dd2fc8fcf1c36abb7e ]
    
    Prior to commit 496121c02127 ("ACPI: processor: idle: Allow probing on
    platforms with one ACPI C-state"), the acpi_idle driver wouldn't load on
    systems without a valid C-State at least as deep as C2.
    
    The behavior was desirable for guests on hypervisors such as VMWare
    ESXi, which by default don't have the _CST ACPI method, and set the C2
    and C3 latencies to 101 and 1001 microseconds respectively via the FADT,
    to signify they're unsupported.
    
    Since the above change though, these virtualized deployments end up
    loading acpi_idle, and thus entering the default C1 C-State set by
    acpi_processor_get_power_info_default(); this is undesirable for a
    system that's communicating to the OS it doesn't want C-States (missing
    _CST, and invalid C2/C3 in FADT).
    
    Make acpi_processor_get_power_info_fadt() return -ENODEV in that case,
    so that acpi_processor_get_cstate_info() exits early and doesn't set
    pr->flags.power = 1.
    
    Fixes: 496121c02127 ("ACPI: processor: idle: Allow probing on platforms with one ACPI C-state")
    Signed-off-by: Giovanni Gherdovich <ggherdovich@suse.cz>
    Reviewed-by: Zhang Rui <rui.zhang@intel.com>
    Link: https://patch.msgid.link/20250328143040.9348-1-ggherdovich@suse.cz
    [ rjw: Changelog edits ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: resource: IRQ override for Eluktronics MECH-17 [+ + +]
Author: Gannon Kolding <gannon.kolding@gmail.com>
Date:   Mon Jan 27 02:39:02 2025 -0700

    ACPI: resource: IRQ override for Eluktronics MECH-17
    
    [ Upstream commit 607ab6f85f4194b644ea95ac5fe660ef575db3b4 ]
    
    The Eluktronics MECH-17 (GM7RG7N) needs IRQ overriding for the
    keyboard to work.
    
    Adding a DMI_MATCH entry for this laptop model makes the internal
    keyboard function normally.
    
    Signed-off-by: Gannon Kolding <gannon.kolding@gmail.com>
    Link: https://patch.msgid.link/20250127093902.328361-1-gannon.kolding@gmail.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: resource: Skip IRQ override on ASUS Vivobook 14 X1404VAP [+ + +]
Author: Paul Menzel <pmenzel@molgen.mpg.de>
Date:   Tue Mar 18 17:09:02 2025 +0100

    ACPI: resource: Skip IRQ override on ASUS Vivobook 14 X1404VAP
    
    commit 2da31ea2a085cd189857f2db0f7b78d0162db87a upstream.
    
    Like the ASUS Vivobook X1504VAP and Vivobook X1704VAP, the ASUS Vivobook 14
    X1404VAP has its keyboard IRQ (1) described as ActiveLow in the DSDT, which
    the kernel overrides to EdgeHigh breaking the keyboard.
    
        $ sudo dmidecode
        […]
        System Information
                Manufacturer: ASUSTeK COMPUTER INC.
                Product Name: ASUS Vivobook 14 X1404VAP_X1404VA
        […]
        $ grep -A 30 PS2K dsdt.dsl | grep IRQ -A 1
                     IRQ (Level, ActiveLow, Exclusive, )
                         {1}
    
    Add the X1404VAP to the irq1_level_low_skip_override[] quirk table to fix
    this.
    
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219224
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Tested-by: Anton Shyndin <mrcold.il@gmail.com>
    Link: https://patch.msgid.link/20250318160903.77107-1-pmenzel@molgen.mpg.de
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
affs: don't write overlarge OFS data block size fields [+ + +]
Author: Simon Tatham <anakin@pobox.com>
Date:   Thu Feb 20 08:14:44 2025 +0000

    affs: don't write overlarge OFS data block size fields
    
    [ Upstream commit 011ea742a25a77bac3d995f457886a67d178c6f0 ]
    
    If a data sector on an OFS floppy contains a value > 0x1e8 (the
    largest amount of data that fits in the sector after its header), then
    an Amiga reading the file can return corrupt data, by taking the
    overlarge size at its word and reading past the end of the buffer it
    read the disk sector into!
    
    The cause: when affs_write_end_ofs() writes data to an OFS filesystem,
    the new size field for a data block was computed by adding the amount
    of data currently being written (into the block) to the existing value
    of the size field. This is correct if you're extending the file at the
    end, but if you seek backwards in the file and overwrite _existing_
    data, it can lead to the size field being larger than the maximum
    legal value.
    
    This commit changes the calculation so that it sets the size field to
    the max of its previous size and the position within the block that we
    just wrote up to.
    
    Signed-off-by: Simon Tatham <anakin@pobox.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

affs: generate OFS sequence numbers starting at 1 [+ + +]
Author: Simon Tatham <anakin@pobox.com>
Date:   Thu Feb 20 08:14:43 2025 +0000

    affs: generate OFS sequence numbers starting at 1
    
    [ Upstream commit e4cf8ec4de4e13f156c1d61977d282d90c221085 ]
    
    If I write a file to an OFS floppy image, and try to read it back on
    an emulated Amiga running Workbench 1.3, the Amiga reports a disk
    error trying to read the file. (That is, it's unable to read it _at
    all_, even to copy it to the NIL: device. It isn't a matter of getting
    the wrong data and being unable to parse the file format.)
    
    This is because the 'sequence number' field in the OFS data block
    header is supposed to be based at 1, but affs writes it based at 0.
    All three locations changed by this patch were setting the sequence
    number to a variable 'bidx' which was previously obtained by dividing
    a file position by bsize, so bidx will naturally use 0 for the first
    block. Therefore all three should add 1 to that value before writing
    it into the sequence number field.
    
    With this change, the Amiga successfully reads the file.
    
    For data block reference: https://wiki.osdev.org/FFS_(Amiga)
    
    Signed-off-by: Simon Tatham <anakin@pobox.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
alpha/elf: Fix misc/setarch test of util-linux by removing 32bit support [+ + +]
Author: Eric W. Biederman <ebiederm@xmission.com>
Date:   Sun Jan 12 23:39:01 2025 -0600

    alpha/elf: Fix misc/setarch test of util-linux by removing 32bit support
    
    [ Upstream commit b029628be267cba3c7684ec684749fe3e4372398 ]
    
    Richard Henderson <richard.henderson@linaro.org> writes[1]:
    
    > There was a Spec benchmark (I forget which) which was memory bound and ran
    > twice as fast with 32-bit pointers.
    >
    > I copied the idea from DEC to the ELF abi, but never did all the other work
    > to allow the toolchain to take advantage.
    >
    > Amusingly, a later Spec changed the benchmark data sets to not fit into a
    > 32-bit address space, specifically because of this.
    >
    > I expect one could delete the ELF bit and personality and no one would
    > notice. Not even the 10 remaining Alpha users.
    
    In [2] it was pointed out that parts of setarch weren't working
    properly on alpha because it has it's own SET_PERSONALITY
    implementation.  In the discussion that followed Richard Henderson
    pointed out that the 32bit pointer support for alpha was never
    completed.
    
    Fix this by removing alpha's 32bit pointer support.
    
    As a bit of paranoia refuse to execute any alpha binaries that have
    the EF_ALPHA_32BIT flag set.  Just in case someone somewhere has
    binaries that try to use alpha's 32bit pointer support.
    
    Link: https://lkml.kernel.org/r/CAFXwXrkgu=4Qn-v1PjnOR4SG0oUb9LSa0g6QXpBq4ttm52pJOQ@mail.gmail.com [1]
    Link: https://lkml.kernel.org/r/20250103140148.370368-1-glaubitz@physik.fu-berlin.de [2]
    Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
    Reviewed-by: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Tested-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Link: https://lore.kernel.org/r/87y0zfs26i.fsf_-_@email.froward.int.ebiederm.org
    Signed-off-by: Kees Cook <kees@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: hda/realtek: Add mute LED quirk for HP Pavilion x360 14-dy1xxx [+ + +]
Author: Navon John Lukose <navonjohnlukose@gmail.com>
Date:   Sat Mar 8 03:03:19 2025 +0530

    ALSA: hda/realtek: Add mute LED quirk for HP Pavilion x360 14-dy1xxx
    
    [ Upstream commit b11a74ac4f545626d0dc95a8ca8c41df90532bf3 ]
    
    Add a fixup to enable the mute LED on HP Pavilion x360 Convertible
    14-dy1xxx with ALC295 codec. The appropriate coefficient index and bits
    were identified through a brute-force method, as detailed in
    https://bbs.archlinux.org/viewtopic.php?pid=2079504#p2079504.
    
    Signed-off-by: Navon John Lukose <navonjohnlukose@gmail.com>
    Link: https://patch.msgid.link/20250307213319.35507-1-navonjohnlukose@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek: Always honor no_shutup_pins [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sat Mar 15 15:30:19 2025 +0100

    ALSA: hda/realtek: Always honor no_shutup_pins
    
    [ Upstream commit 5a0c72c1da3cbc0cd4940a95d1be2830104c6edf ]
    
    The workaround for Dell machines to skip the pin-shutup for mic pins
    introduced alc_headset_mic_no_shutup() that is replaced from the
    generic snd_hda_shutup_pins() for certain codecs.  The problem is that
    the call is done unconditionally even if spec->no_shutup_pins is set.
    This seems causing problems on other platforms like Lenovo.
    
    This patch corrects the behavior and the driver honors always
    spec->no_shutup_pins flag and skips alc_headset_mic_no_shutup() if
    it's set.
    
    Fixes: dad3197da7a3 ("ALSA: hda/realtek - Fixup headphone noise via runtime suspend")
    Reported-and-tested-by: Oleg Gorobets <oleg.goro@gmail.com>
    Link: https://patch.msgid.link/20250315143020.27184-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek: Support mute LED on HP Laptop 15s-du3xxx [+ + +]
Author: Dhruv Deshpande <dhrv.d@proton.me>
Date:   Mon Mar 17 08:56:53 2025 +0000

    ALSA: hda/realtek: Support mute LED on HP Laptop 15s-du3xxx
    
    commit 35ef1c79d2e09e9e5a66e28a66fe0df4368b0f3d upstream.
    
    The mute LED on this HP laptop uses ALC236 and requires a quirk to function.
    This patch enables the existing quirk for the device.
    
    Tested on my laptop and the LED behaviour works as intended.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Dhruv Deshpande <dhrv.d@proton.me>
    Link: https://patch.msgid.link/20250317085621.45056-1-dhrv.d@proton.me
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Add quirk for Plantronics headsets to fix control names [+ + +]
Author: Terry Junge <linuxhid@cosmicgizmosystems.com>
Date:   Fri Jan 17 16:58:39 2025 -0800

    ALSA: usb-audio: Add quirk for Plantronics headsets to fix control names
    
    commit 486f6205c233da1baa309bde5f634eb1f8319a33 upstream.
    
    Many Poly/Plantronics headset families name the feature, input,
    and/or output units in a such a way to produce control names
    that are not recognized by user space. As such, the volume and
    mute events do not get routed to the headset's audio controls.
    
    As an example from a product family:
    
    The microphone mute control is named
    Headset Microphone Capture Switch
    and the headset volume control is named
    Headset Earphone Playback Volume
    
    The quirk fixes these to become
    Headset Capture Switch
    Headset Playback Volume
    
    Signed-off-by: Terry Junge <linuxhid@cosmicgizmosystems.com>
    Reviewed-by: Takashi Iwai <tiwai@suse.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arcnet: Add NULL check in com20020pci_probe() [+ + +]
Author: Henry Martin <bsdhenrymartin@gmail.com>
Date:   Wed Apr 2 21:50:36 2025 +0800

    arcnet: Add NULL check in com20020pci_probe()
    
    [ Upstream commit fda8c491db2a90ff3e6fbbae58e495b4ddddeca3 ]
    
    devm_kasprintf() returns NULL when memory allocation fails. Currently,
    com20020pci_probe() does not check for this case, which results in a
    NULL pointer dereference.
    
    Add NULL check after devm_kasprintf() to prevent this issue and ensure
    no resources are left allocated.
    
    Fixes: 6b17a597fc2f ("arcnet: restoring support for multiple Sohard Arcnet cards")
    Signed-off-by: Henry Martin <bsdhenrymartin@gmail.com>
    Link: https://patch.msgid.link/20250402135036.44697-1-bsdhenrymartin@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64: dts: rockchip: fix u2phy1_host status for NanoPi R4S [+ + +]
Author: Justin Klaassen <justin@tidylabs.net>
Date:   Tue Feb 25 17:03:58 2025 +0000

    arm64: dts: rockchip: fix u2phy1_host status for NanoPi R4S
    
    commit 38f4aa34a5f737ea8588dac320d884cc2e762c03 upstream.
    
    The u2phy1_host should always have the same status as usb_host1_ehci
    and usb_host1_ohci, otherwise the EHCI and OHCI drivers may be
    initialized for a disabled usb port.
    
    Per the NanoPi R4S schematic, the phy-supply for u2phy1_host is set to
    the vdd_5v regulator.
    
    Fixes: db792e9adbf8 ("rockchip: rk3399: Add support for FriendlyARM NanoPi R4S")
    Cc: stable@vger.kernel.org
    Signed-off-by: Justin Klaassen <justin@tidylabs.net>
    Reviewed-by: Dragan Simic <dsimic@manjaro.org>
    Link: https://lore.kernel.org/r/20250225170420.3898-1-justin@tidylabs.net
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ARM: 9350/1: fault: Implement copy_from_kernel_nofault_allowed() [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Thu Feb 1 18:32:58 2024 +0100

    ARM: 9350/1: fault: Implement copy_from_kernel_nofault_allowed()
    
    commit 169f9102f9198b04afffa6164372a4ba4070f412 upstream.
    
    Under PAN emulation when dumping backtraces from things like the
    LKDTM EXEC_USERSPACE test[1], a double fault (which would hang a CPU)
    would happen because of dump_instr() attempting to read a userspace
    address. Make sure copy_from_kernel_nofault() does not attempt this
    any more.
    
    Closes: https://lava.sirena.org.uk/scheduler/job/497571
    Link: https://lore.kernel.org/all/202401181125.D48DCB4C@keescook/ [1]
    
    Reported-by: Mark Brown <broonie@kernel.org>
    Suggested-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
    Tested-by: Mark Brown <broonie@kernel.org>
    Cc: Wang Kefeng <wangkefeng.wang@huawei.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Ben Hutchings <ben@decadent.org.uk>
    Cc: linux-arm-kernel@lists.infradead.org
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ARM: 9351/1: fault: Add "cut here" line for prefetch aborts [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Thu Feb 1 18:32:23 2024 +0100

    ARM: 9351/1: fault: Add "cut here" line for prefetch aborts
    
    commit 8f09b8b4fa58e99cbfd9a650b31d65cdbd8e4276 upstream.
    
    The common pattern in arm is to emit a "8<--- cut here ---" line for
    faults, but it was missing for do_PrefetchAbort(). Add it.
    
    Cc: Wang Kefeng <wangkefeng.wang@huawei.com>
    Cc: Ben Hutchings <ben@decadent.org.uk>
    Cc: linux-arm-kernel@lists.infradead.org
    Acked-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ARM: dts: bcm2711: Don't mark timer regs unconfigured [+ + +]
Author: Phil Elwell <phil@raspberrypi.com>
Date:   Sat Feb 22 10:41:13 2025 +0100

    ARM: dts: bcm2711: Don't mark timer regs unconfigured
    
    [ Upstream commit c24f272ae751a9f54f8816430e7f2d56031892cc ]
    
    During upstream process of Raspberry Pi 4 back in 2019 the ARMv7 stubs
    didn't configured the ARM architectural timer. This firmware issue has
    been fixed in 2020, which gave users enough time to update their system.
    
    So drop this property to allow the use of the vDSO version of
    clock_gettime.
    
    Link: https://github.com/raspberrypi/tools/pull/113
    Fixes: 7dbe8c62ceeb ("ARM: dts: Add minimal Raspberry Pi 4 support")
    Signed-off-by: Phil Elwell <phil@raspberrypi.com>
    Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20250222094113.48198-1-wahrenst@gmx.net
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: bcm2711: PL011 UARTs are actually r1p5 [+ + +]
Author: Phil Elwell <phil@raspberrypi.com>
Date:   Sun Feb 23 13:56:13 2025 +0100

    ARM: dts: bcm2711: PL011 UARTs are actually r1p5
    
    [ Upstream commit 0de09025f161f67c07978c4742e221243d070d41 ]
    
    The ARM PL011 UART instances in BCM2711 are r1p5 spec, which means they
    have 32-entry FIFOs. The correct periphid value for this is 0x00341011.
    Thanks to N Buchwitz for pointing this out.
    
    Signed-off-by: Phil Elwell <phil@raspberrypi.com>
    Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
    Link: https://lore.kernel.org/r/20250223125614.3592-2-wahrenst@gmx.net
    Fixes: 7dbe8c62ceeb ("ARM: dts: Add minimal Raspberry Pi 4 support")
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: Remove address checking for MMUless devices [+ + +]
Author: Yanjun Yang <yangyj.ee@gmail.com>
Date:   Tue Jun 11 18:09:47 2024 +0800

    ARM: Remove address checking for MMUless devices
    
    commit 3ccea4784fddd96fbd6c4497eb28b45dab638c2a upstream.
    
    Commit 169f9102f9198b ("ARM: 9350/1: fault: Implement
    copy_from_kernel_nofault_allowed()") added the function to check address
    before use. However, for devices without MMU, addr > TASK_SIZE will
    always fail.  This patch move this function after the #ifdef CONFIG_MMU
    statement.
    
    Signed-off-by: Yanjun Yang <yangyj.ee@gmail.com>
    Acked-by: Ard Biesheuvel <ardb@kernel.org>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218953
    Fixes: 169f9102f9198b ("ARM: 9350/1: fault: Implement copy_from_kernel_nofault_allowed()")
    Link: https://lore.kernel.org/r/20240611100947.32241-1-yangyj.ee@gmail.com
    Signed-off-by: Kees Cook <kees@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ARM: shmobile: smp: Enforce shmobile_smp_* alignment [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Mon Mar 10 14:12:20 2025 +0100

    ARM: shmobile: smp: Enforce shmobile_smp_* alignment
    
    commit 379c590113ce46f605439d4887996c60ab8820cc upstream.
    
    When the addresses of the shmobile_smp_mpidr, shmobile_smp_fn, and
    shmobile_smp_arg variables are not multiples of 4 bytes, secondary CPU
    bring-up fails:
    
        smp: Bringing up secondary CPUs ...
        CPU1: failed to come online
        CPU2: failed to come online
        CPU3: failed to come online
        smp: Brought up 1 node, 1 CPU
    
    Fix this by adding the missing alignment directive.
    
    Fixes: 4e960f52fce16a3b ("ARM: shmobile: Move shmobile_smp_{mpidr, fn, arg}[] from .text to .bss")
    Closes: https://lore.kernel.org/r/CAMuHMdU=QR-JLgEHKWpsr6SbaZRc-Hz9r91JfpP8c3n2G-OjqA@mail.gmail.com
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
    Link: https://lore.kernel.org/c499234d559a0d95ad9472883e46077311051cd8.1741612208.git.geert+renesas@glider.be
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: arizona/madera: use fsleep() in up/down DAPM event delays. [+ + +]
Author: Vitaly Rodionov <vitalyr@opensource.cirrus.com>
Date:   Wed Feb 5 16:08:46 2025 +0000

    ASoC: arizona/madera: use fsleep() in up/down DAPM event delays.
    
    [ Upstream commit 679074942c2502a95842a80471d8fb718165ac77 ]
    
    Using `fsleep` instead of `msleep` resolves some customer complaints
    regarding the precision of up/down DAPM event timing. `fsleep()`
    automatically selects the appropriate sleep function, making the delay
    time more predictable.
    
    Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com>
    Link: https://patch.msgid.link/20250205160849.500306-1-vitalyr@opensource.cirrus.com
    Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: codecs: wm0010: Fix error handling path in wm0010_spi_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Mon Mar 10 18:45:36 2025 +0100

    ASoC: codecs: wm0010: Fix error handling path in wm0010_spi_probe()
    
    [ Upstream commit ed92bc5264c4357d4fca292c769ea9967cd3d3b6 ]
    
    Free some resources in the error handling path of the probe, as already
    done in the remove function.
    
    Fixes: e3523e01869d ("ASoC: wm0010: Add initial wm0010 DSP driver")
    Fixes: fd8b96574456 ("ASoC: wm0010: Clear IRQ as wake source and include missing header")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Link: https://patch.msgid.link/5139ba1ab8c4c157ce04e56096a0f54a1683195c.1741549792.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: imx-card: Add NULL check in imx_card_probe() [+ + +]
Author: Henry Martin <bsdhenrymartin@gmail.com>
Date:   Tue Apr 1 22:25:10 2025 +0800

    ASoC: imx-card: Add NULL check in imx_card_probe()
    
    [ Upstream commit 93d34608fd162f725172e780b1c60cc93a920719 ]
    
    devm_kasprintf() returns NULL when memory allocation fails. Currently,
    imx_card_probe() does not check for this case, which results in a NULL
    pointer dereference.
    
    Add NULL check after devm_kasprintf() to prevent this issue.
    
    Fixes: aa736700f42f ("ASoC: imx-card: Add imx-card machine driver")
    Signed-off-by: Henry Martin <bsdhenrymartin@gmail.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20250401142510.29900-1-bsdhenrymartin@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: ops: Consistently treat platform_max as control value [+ + +]
Author: Charles Keepax <ckeepax@opensource.cirrus.com>
Date:   Fri Feb 28 15:14:56 2025 +0000

    ASoC: ops: Consistently treat platform_max as control value
    
    [ Upstream commit 0eba2a7e858907a746ba69cd002eb9eb4dbd7bf3 ]
    
    This reverts commit 9bdd10d57a88 ("ASoC: ops: Shift tested values in
    snd_soc_put_volsw() by +min"), and makes some additional related
    updates.
    
    There are two ways the platform_max could be interpreted; the maximum
    register value, or the maximum value the control can be set to. The
    patch moved from treating the value as a control value to a register
    one. When the patch was applied it was technically correct as
    snd_soc_limit_volume() also used the register interpretation. However,
    even then most of the other usages treated platform_max as a
    control value, and snd_soc_limit_volume() has since been updated to
    also do so in commit fb9ad24485087 ("ASoC: ops: add correct range
    check for limiting volume"). That patch however, missed updating
    snd_soc_put_volsw() back to the control interpretation, and fixing
    snd_soc_info_volsw_range(). The control interpretation makes more
    sense as limiting is typically done from the machine driver, so it is
    appropriate to use the customer facing representation rather than the
    internal codec representation. Update all the code to consistently use
    this interpretation of platform_max.
    
    Finally, also add some comments to the soc_mixer_control struct to
    hopefully avoid further patches switching between the two approaches.
    
    Fixes: fb9ad24485087 ("ASoC: ops: add correct range check for limiting volume")
    Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Link: https://patch.msgid.link/20250228151456.3703342-1-ckeepax@opensource.cirrus.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: rsnd: don't indicate warning on rsnd_kctrl_accept_runtime() [+ + +]
Author: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Date:   Wed Feb 5 00:20:42 2025 +0000

    ASoC: rsnd: don't indicate warning on rsnd_kctrl_accept_runtime()
    
    [ Upstream commit c3fc002b206c6c83d1e3702b979733002ba6fb2c ]
    
    rsnd_kctrl_accept_runtime() (1) is used for runtime convert rate
    (= Synchronous SRC Mode). Now, rsnd driver has 2 kctrls for it
    
    (A):    "SRC Out Rate Switch"
    (B):    "SRC Out Rate"          // it calls (1)
    
    (A): can be called anytime
    (B): can be called only runtime, and will indicate warning if it was used
       at non-runtime.
    
    To use runtime convert rate (= Synchronous SRC Mode), user might uses
    command in below order.
    
    (X):    > amixer set "SRC Out Rate" on
            > aplay xxx.wav &
    (Y):    > amixer set "SRC Out Rate" 48010 // convert rate to 48010Hz
    
    (Y): calls B
    (X): calls both A and B.
    
    In this case, when user calls (X), it calls both (A) and (B), but it is not
    yet start running. So, (B) will indicate warning.
    
    This warning was added by commit b5c088689847 ("ASoC: rsnd: add warning
    message to rsnd_kctrl_accept_runtime()"), but the message sounds like the
    operation was not correct. Let's update warning message.
    
    The message is very SRC specific, implement it in src.c
    
    Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
    Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
    Link: https://patch.msgid.link/8734gt2qed.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: SOF: Intel: hda: add softdep pre to snd-hda-codec-hdmi module [+ + +]
Author: Terry Cheong <htcheong@chromium.org>
Date:   Thu Feb 6 11:47:23 2025 +0200

    ASoC: SOF: Intel: hda: add softdep pre to snd-hda-codec-hdmi module
    
    [ Upstream commit 33b7dc7843dbdc9b90c91d11ba30b107f9138ffd ]
    
    In enviornment without KMOD requesting module may fail to load
    snd-hda-codec-hdmi, resulting in HDMI audio not usable.
    Add softdep to loading HDMI codec module first to ensure we can load it
    correctly.
    
    Signed-off-by: Terry Cheong <htcheong@chromium.org>
    Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
    Reviewed-by: Johny Lin <lpg76627@gmail.com>
    Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Link: https://patch.msgid.link/20250206094723.18013-1-peter.ujfalusi@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: tas2764: Fix power control mask [+ + +]
Author: Hector Martin <marcan@marcan.st>
Date:   Tue Feb 18 18:35:35 2025 +1000

    ASoC: tas2764: Fix power control mask
    
    [ Upstream commit a3f172359e22b2c11b750d23560481a55bf86af1 ]
    
    Reviewed-by: Neal Gompa <neal@gompa.dev>
    Signed-off-by: Hector Martin <marcan@marcan.st>
    Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
    Link: https://patch.msgid.link/20250218-apple-codec-changes-v2-1-932760fd7e07@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: tas2764: Set the SDOUT polarity correctly [+ + +]
Author: Hector Martin <marcan@marcan.st>
Date:   Tue Feb 18 18:36:02 2025 +1000

    ASoC: tas2764: Set the SDOUT polarity correctly
    
    [ Upstream commit f5468beeab1b1adfc63c2717b1f29ef3f49a5fab ]
    
    TX launch polarity needs to be the opposite of RX capture polarity, to
    generate the right bit slot alignment.
    
    Reviewed-by: Neal Gompa <neal@gompa.dev>
    Signed-off-by: Hector Martin <marcan@marcan.st>
    Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
    Link: https://patch.msgid.link/20250218-apple-codec-changes-v2-28-932760fd7e07@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: tas2770: Fix volume scale [+ + +]
Author: Hector Martin <marcan@marcan.st>
Date:   Sat Feb 8 00:54:35 2025 +0000

    ASoC: tas2770: Fix volume scale
    
    [ Upstream commit 579cd64b9df8a60284ec3422be919c362de40e41 ]
    
    The scale starts at -100dB, not -128dB.
    
    Signed-off-by: Hector Martin <marcan@marcan.st>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Link: https://patch.msgid.link/20250208-asoc-tas2770-v1-1-cf50ff1d59a3@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: ti: j721e-evm: Fix clock configuration for ti,j7200-cpb-audio compatible [+ + +]
Author: Jayesh Choudhary <j-choudhary@ti.com>
Date:   Tue Mar 18 17:05:24 2025 +0530

    ASoC: ti: j721e-evm: Fix clock configuration for ti,j7200-cpb-audio compatible
    
    [ Upstream commit 45ff65e30deb919604e68faed156ad96ce7474d9 ]
    
    For 'ti,j7200-cpb-audio' compatible, there is support for only one PLL for
    48k. For 11025, 22050, 44100 and 88200 sampling rates, due to absence of
    J721E_CLK_PARENT_44100, we get EINVAL while running any audio application.
    Add support for these rates by using the 48k parent clock and adjusting
    the clock for these rates later in j721e_configure_refclk.
    
    Fixes: 6748d0559059 ("ASoC: ti: Add custom machine driver for j721e EVM (CPB and IVI)")
    Signed-off-by: Jayesh Choudhary <j-choudhary@ti.com>
    Link: https://patch.msgid.link/20250318113524.57100-1-j-choudhary@ti.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
atm: Fix NULL pointer dereference [+ + +]
Author: Minjoong Kim <pwn9uin@gmail.com>
Date:   Sat Mar 22 10:52:00 2025 +0000

    atm: Fix NULL pointer dereference
    
    commit bf2986fcf82a449441f9ee4335df19be19e83970 upstream.
    
    When MPOA_cache_impos_rcvd() receives the msg, it can trigger
    Null Pointer Dereference Vulnerability if both entry and
    holding_time are NULL. Because there is only for the situation
    where entry is NULL and holding_time exists, it can be passed
    when both entry and holding_time are NULL. If these are NULL,
    the entry will be passd to eg_cache_put() as parameter and
    it is referenced by entry->use code in it.
    
    kasan log:
    
    [    3.316691] Oops: general protection fault, probably for non-canonical address 0xdffffc0000000006:I
    [    3.317568] KASAN: null-ptr-deref in range [0x0000000000000030-0x0000000000000037]
    [    3.318188] CPU: 3 UID: 0 PID: 79 Comm: ex Not tainted 6.14.0-rc2 #102
    [    3.318601] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
    [    3.319298] RIP: 0010:eg_cache_remove_entry+0xa5/0x470
    [    3.319677] Code: c1 f7 6e fd 48 c7 c7 00 7e 38 b2 e8 95 64 54 fd 48 c7 c7 40 7e 38 b2 48 89 ee e80
    [    3.321220] RSP: 0018:ffff88800583f8a8 EFLAGS: 00010006
    [    3.321596] RAX: 0000000000000006 RBX: ffff888005989000 RCX: ffffffffaecc2d8e
    [    3.322112] RDX: 0000000000000000 RSI: 0000000000000004 RDI: 0000000000000030
    [    3.322643] RBP: 0000000000000000 R08: 0000000000000000 R09: fffffbfff6558b88
    [    3.323181] R10: 0000000000000003 R11: 203a207972746e65 R12: 1ffff11000b07f15
    [    3.323707] R13: dffffc0000000000 R14: ffff888005989000 R15: ffff888005989068
    [    3.324185] FS:  000000001b6313c0(0000) GS:ffff88806d380000(0000) knlGS:0000000000000000
    [    3.325042] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [    3.325545] CR2: 00000000004b4b40 CR3: 000000000248e000 CR4: 00000000000006f0
    [    3.326430] Call Trace:
    [    3.326725]  <TASK>
    [    3.326927]  ? die_addr+0x3c/0xa0
    [    3.327330]  ? exc_general_protection+0x161/0x2a0
    [    3.327662]  ? asm_exc_general_protection+0x26/0x30
    [    3.328214]  ? vprintk_emit+0x15e/0x420
    [    3.328543]  ? eg_cache_remove_entry+0xa5/0x470
    [    3.328910]  ? eg_cache_remove_entry+0x9a/0x470
    [    3.329294]  ? __pfx_eg_cache_remove_entry+0x10/0x10
    [    3.329664]  ? console_unlock+0x107/0x1d0
    [    3.329946]  ? __pfx_console_unlock+0x10/0x10
    [    3.330283]  ? do_syscall_64+0xa6/0x1a0
    [    3.330584]  ? entry_SYSCALL_64_after_hwframe+0x47/0x7f
    [    3.331090]  ? __pfx_prb_read_valid+0x10/0x10
    [    3.331395]  ? down_trylock+0x52/0x80
    [    3.331703]  ? vprintk_emit+0x15e/0x420
    [    3.331986]  ? __pfx_vprintk_emit+0x10/0x10
    [    3.332279]  ? down_trylock+0x52/0x80
    [    3.332527]  ? _printk+0xbf/0x100
    [    3.332762]  ? __pfx__printk+0x10/0x10
    [    3.333007]  ? _raw_write_lock_irq+0x81/0xe0
    [    3.333284]  ? __pfx__raw_write_lock_irq+0x10/0x10
    [    3.333614]  msg_from_mpoad+0x1185/0x2750
    [    3.333893]  ? __build_skb_around+0x27b/0x3a0
    [    3.334183]  ? __pfx_msg_from_mpoad+0x10/0x10
    [    3.334501]  ? __alloc_skb+0x1c0/0x310
    [    3.334809]  ? __pfx___alloc_skb+0x10/0x10
    [    3.335283]  ? _raw_spin_lock+0xe0/0xe0
    [    3.335632]  ? finish_wait+0x8d/0x1e0
    [    3.335975]  vcc_sendmsg+0x684/0xba0
    [    3.336250]  ? __pfx_vcc_sendmsg+0x10/0x10
    [    3.336587]  ? __pfx_autoremove_wake_function+0x10/0x10
    [    3.337056]  ? fdget+0x176/0x3e0
    [    3.337348]  __sys_sendto+0x4a2/0x510
    [    3.337663]  ? __pfx___sys_sendto+0x10/0x10
    [    3.337969]  ? ioctl_has_perm.constprop.0.isra.0+0x284/0x400
    [    3.338364]  ? sock_ioctl+0x1bb/0x5a0
    [    3.338653]  ? __rseq_handle_notify_resume+0x825/0xd20
    [    3.339017]  ? __pfx_sock_ioctl+0x10/0x10
    [    3.339316]  ? __pfx___rseq_handle_notify_resume+0x10/0x10
    [    3.339727]  ? selinux_file_ioctl+0xa4/0x260
    [    3.340166]  __x64_sys_sendto+0xe0/0x1c0
    [    3.340526]  ? syscall_exit_to_user_mode+0x123/0x140
    [    3.340898]  do_syscall_64+0xa6/0x1a0
    [    3.341170]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [    3.341533] RIP: 0033:0x44a380
    [    3.341757] Code: 0f 1f 84 00 00 00 00 00 66 90 f3 0f 1e fa 41 89 ca 64 8b 04 25 18 00 00 00 85 c00
    [    3.343078] RSP: 002b:00007ffc1d404098 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
    [    3.343631] RAX: ffffffffffffffda RBX: 00007ffc1d404458 RCX: 000000000044a380
    [    3.344306] RDX: 000000000000019c RSI: 00007ffc1d4040b0 RDI: 0000000000000003
    [    3.344833] RBP: 00007ffc1d404260 R08: 0000000000000000 R09: 0000000000000000
    [    3.345381] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000001
    [    3.346015] R13: 00007ffc1d404448 R14: 00000000004c17d0 R15: 0000000000000001
    [    3.346503]  </TASK>
    [    3.346679] Modules linked in:
    [    3.346956] ---[ end trace 0000000000000000 ]---
    [    3.347315] RIP: 0010:eg_cache_remove_entry+0xa5/0x470
    [    3.347737] Code: c1 f7 6e fd 48 c7 c7 00 7e 38 b2 e8 95 64 54 fd 48 c7 c7 40 7e 38 b2 48 89 ee e80
    [    3.349157] RSP: 0018:ffff88800583f8a8 EFLAGS: 00010006
    [    3.349517] RAX: 0000000000000006 RBX: ffff888005989000 RCX: ffffffffaecc2d8e
    [    3.350103] RDX: 0000000000000000 RSI: 0000000000000004 RDI: 0000000000000030
    [    3.350610] RBP: 0000000000000000 R08: 0000000000000000 R09: fffffbfff6558b88
    [    3.351246] R10: 0000000000000003 R11: 203a207972746e65 R12: 1ffff11000b07f15
    [    3.351785] R13: dffffc0000000000 R14: ffff888005989000 R15: ffff888005989068
    [    3.352404] FS:  000000001b6313c0(0000) GS:ffff88806d380000(0000) knlGS:0000000000000000
    [    3.353099] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [    3.353544] CR2: 00000000004b4b40 CR3: 000000000248e000 CR4: 00000000000006f0
    [    3.354072] note: ex[79] exited with irqs disabled
    [    3.354458] note: ex[79] exited with preempt_count 1
    
    Signed-off-by: Minjoong Kim <pwn9uin@gmail.com>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20250322105200.14981-1-pwn9uin@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
batman-adv: Ignore own maximum aggregation size during RX [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Sun Feb 2 17:04:13 2025 +0100

    batman-adv: Ignore own maximum aggregation size during RX
    
    commit 548b0c5de7619ef53bbde5590700693f2f6d2a56 upstream.
    
    An OGMv1 and OGMv2 packet receive processing were not only limited by the
    number of bytes in the received packet but also by the nodes maximum
    aggregation packet size limit. But this limit is relevant for TX and not
    for RX. It must not be enforced by batadv_(i)v_ogm_aggr_packet to avoid
    loss of information in case of a different limit for sender and receiver.
    
    This has a minor side effect for B.A.T.M.A.N. IV because the
    batadv_iv_ogm_aggr_packet is also used for the preprocessing for the TX.
    But since the aggregation code itself will not allow more than
    BATADV_MAX_AGGREGATION_BYTES bytes, this check was never triggering (in
    this context) prior of removing it.
    
    Cc: stable@vger.kernel.org
    Fixes: c6c8fea29769 ("net: Add batman-adv meshing protocol")
    Fixes: 9323158ef9f4 ("batman-adv: OGMv2 - implement originators logic")
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
block: fix 'kmem_cache of name 'bio-108' already exists' [+ + +]
Author: Ming Lei <ming.lei@redhat.com>
Date:   Fri Feb 28 21:26:56 2025 +0800

    block: fix 'kmem_cache of name 'bio-108' already exists'
    
    [ Upstream commit b654f7a51ffb386131de42aa98ed831f8c126546 ]
    
    Device mapper bioset often has big bio_slab size, which can be more than
    1000, then 8byte can't hold the slab name any more, cause the kmem_cache
    allocation warning of 'kmem_cache of name 'bio-108' already exists'.
    
    Fix the warning by extending bio_slab->name to 12 bytes, but fix output
    of /proc/slabinfo
    
    Reported-by: Guangwu Zhang <guazhang@redhat.com>
    Signed-off-by: Ming Lei <ming.lei@redhat.com>
    Link: https://lore.kernel.org/r/20250228132656.2838008-1-ming.lei@redhat.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Bluetooth: Fix error code in chan_alloc_skb_cb() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Mon Mar 10 22:46:56 2025 +0300

    Bluetooth: Fix error code in chan_alloc_skb_cb()
    
    [ Upstream commit 72d061ee630d0dbb45c2920d8d19b3861c413e54 ]
    
    The chan_alloc_skb_cb() function is supposed to return error pointers on
    error.  Returning NULL will lead to a NULL dereference.
    
    Fixes: 6b8d4a6a0314 ("Bluetooth: 6LoWPAN: Use connected oriented channel instead of fixed one")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: hci_event: Align BR/EDR JUST_WORKS paring with LE [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Thu Sep 12 12:17:00 2024 -0400

    Bluetooth: hci_event: Align BR/EDR JUST_WORKS paring with LE
    
    commit b25e11f978b63cb7857890edb3a698599cddb10e upstream.
    
    This aligned BR/EDR JUST_WORKS method with LE which since 92516cd97fd4
    ("Bluetooth: Always request for user confirmation for Just Works")
    always request user confirmation with confirm_hint set since the
    likes of bluetoothd have dedicated policy around JUST_WORKS method
    (e.g. main.conf:JustWorksRepairing).
    
    CVE: CVE-2024-8805
    Cc: stable@vger.kernel.org
    Fixes: ba15a58b179e ("Bluetooth: Fix SSP acceptor just-works confirmation without MITM")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Tested-by: Kiran K <kiran.k@intel.com>
    Signed-off-by: Bin Lan <bin.lan.cn@windriver.com>
    Signed-off-by: He Zhe <zhe.he@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bpf, sockmap: Fix race between element replace and close() [+ + +]
Author: Michal Luczaj <mhal@rbox.co>
Date:   Mon Dec 2 12:29:25 2024 +0100

    bpf, sockmap: Fix race between element replace and close()
    
    commit ed1fc5d76b81a4d681211333c026202cad4d5649 upstream.
    
    Element replace (with a socket different from the one stored) may race
    with socket's close() link popping & unlinking. __sock_map_delete()
    unconditionally unrefs the (wrong) element:
    
    // set map[0] = s0
    map_update_elem(map, 0, s0)
    
    // drop fd of s0
    close(s0)
      sock_map_close()
        lock_sock(sk)               (s0!)
        sock_map_remove_links(sk)
          link = sk_psock_link_pop()
          sock_map_unlink(sk, link)
            sock_map_delete_from_link
                                            // replace map[0] with s1
                                            map_update_elem(map, 0, s1)
                                              sock_map_update_elem
                                    (s1!)       lock_sock(sk)
                                                sock_map_update_common
                                                  psock = sk_psock(sk)
                                                  spin_lock(&stab->lock)
                                                  osk = stab->sks[idx]
                                                  sock_map_add_link(..., &stab->sks[idx])
                                                  sock_map_unref(osk, &stab->sks[idx])
                                                    psock = sk_psock(osk)
                                                    sk_psock_put(sk, psock)
                                                      if (refcount_dec_and_test(&psock))
                                                        sk_psock_drop(sk, psock)
                                                  spin_unlock(&stab->lock)
                                                unlock_sock(sk)
              __sock_map_delete
                spin_lock(&stab->lock)
                sk = *psk                        // s1 replaced s0; sk == s1
                if (!sk_test || sk_test == sk)   // sk_test (s0) != sk (s1); no branch
                  sk = xchg(psk, NULL)
                if (sk)
                  sock_map_unref(sk, psk)        // unref s1; sks[idx] will dangle
                    psock = sk_psock(sk)
                    sk_psock_put(sk, psock)
                      if (refcount_dec_and_test())
                        sk_psock_drop(sk, psock)
                spin_unlock(&stab->lock)
        release_sock(sk)
    
    Then close(map) enqueues bpf_map_free_deferred, which finally calls
    sock_map_free(). This results in some refcount_t warnings along with
    a KASAN splat [1].
    
    Fix __sock_map_delete(), do not allow sock_map_unref() on elements that
    may have been replaced.
    
    [1]:
    BUG: KASAN: slab-use-after-free in sock_map_free+0x10e/0x330
    Write of size 4 at addr ffff88811f5b9100 by task kworker/u64:12/1063
    
    CPU: 14 UID: 0 PID: 1063 Comm: kworker/u64:12 Not tainted 6.12.0+ #125
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Arch Linux 1.16.3-1-1 04/01/2014
    Workqueue: events_unbound bpf_map_free_deferred
    Call Trace:
     <TASK>
     dump_stack_lvl+0x68/0x90
     print_report+0x174/0x4f6
     kasan_report+0xb9/0x190
     kasan_check_range+0x10f/0x1e0
     sock_map_free+0x10e/0x330
     bpf_map_free_deferred+0x173/0x320
     process_one_work+0x846/0x1420
     worker_thread+0x5b3/0xf80
     kthread+0x29e/0x360
     ret_from_fork+0x2d/0x70
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    
    Allocated by task 1202:
     kasan_save_stack+0x1e/0x40
     kasan_save_track+0x10/0x30
     __kasan_slab_alloc+0x85/0x90
     kmem_cache_alloc_noprof+0x131/0x450
     sk_prot_alloc+0x5b/0x220
     sk_alloc+0x2c/0x870
     unix_create1+0x88/0x8a0
     unix_create+0xc5/0x180
     __sock_create+0x241/0x650
     __sys_socketpair+0x1ce/0x420
     __x64_sys_socketpair+0x92/0x100
     do_syscall_64+0x93/0x180
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Freed by task 46:
     kasan_save_stack+0x1e/0x40
     kasan_save_track+0x10/0x30
     kasan_save_free_info+0x37/0x60
     __kasan_slab_free+0x4b/0x70
     kmem_cache_free+0x1a1/0x590
     __sk_destruct+0x388/0x5a0
     sk_psock_destroy+0x73e/0xa50
     process_one_work+0x846/0x1420
     worker_thread+0x5b3/0xf80
     kthread+0x29e/0x360
     ret_from_fork+0x2d/0x70
     ret_from_fork_asm+0x1a/0x30
    
    The buggy address belongs to the object at ffff88811f5b9080
     which belongs to the cache UNIX-STREAM of size 1984
    The buggy address is located 128 bytes inside of
     freed 1984-byte region [ffff88811f5b9080, ffff88811f5b9840)
    
    The buggy address belongs to the physical page:
    page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x11f5b8
    head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    memcg:ffff888127d49401
    flags: 0x17ffffc0000040(head|node=0|zone=2|lastcpupid=0x1fffff)
    page_type: f5(slab)
    raw: 0017ffffc0000040 ffff8881042e4500 dead000000000122 0000000000000000
    raw: 0000000000000000 00000000800f000f 00000001f5000000 ffff888127d49401
    head: 0017ffffc0000040 ffff8881042e4500 dead000000000122 0000000000000000
    head: 0000000000000000 00000000800f000f 00000001f5000000 ffff888127d49401
    head: 0017ffffc0000003 ffffea00047d6e01 ffffffffffffffff 0000000000000000
    head: 0000000000000008 0000000000000000 00000000ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff88811f5b9000: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
     ffff88811f5b9080: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                       ^
     ffff88811f5b9180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff88811f5b9200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    Disabling lock debugging due to kernel taint
    
    refcount_t: addition on 0; use-after-free.
    WARNING: CPU: 14 PID: 1063 at lib/refcount.c:25 refcount_warn_saturate+0xce/0x150
    CPU: 14 UID: 0 PID: 1063 Comm: kworker/u64:12 Tainted: G    B              6.12.0+ #125
    Tainted: [B]=BAD_PAGE
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Arch Linux 1.16.3-1-1 04/01/2014
    Workqueue: events_unbound bpf_map_free_deferred
    RIP: 0010:refcount_warn_saturate+0xce/0x150
    Code: 34 73 eb 03 01 e8 82 53 ad fe 0f 0b eb b1 80 3d 27 73 eb 03 00 75 a8 48 c7 c7 80 bd 95 84 c6 05 17 73 eb 03 01 e8 62 53 ad fe <0f> 0b eb 91 80 3d 06 73 eb 03 00 75 88 48 c7 c7 e0 bd 95 84 c6 05
    RSP: 0018:ffff88815c49fc70 EFLAGS: 00010282
    RAX: 0000000000000000 RBX: ffff88811f5b9100 RCX: 0000000000000000
    RDX: 0000000000000000 RSI: 0000000000000004 RDI: 0000000000000001
    RBP: 0000000000000002 R08: 0000000000000001 R09: ffffed10bcde6349
    R10: ffff8885e6f31a4b R11: 0000000000000000 R12: ffff88813be0b000
    R13: ffff88811f5b9100 R14: ffff88811f5b9080 R15: ffff88813be0b024
    FS:  0000000000000000(0000) GS:ffff8885e6f00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 000055dda99b0250 CR3: 000000015dbac000 CR4: 0000000000752ef0
    PKRU: 55555554
    Call Trace:
     <TASK>
     ? __warn.cold+0x5f/0x1ff
     ? refcount_warn_saturate+0xce/0x150
     ? report_bug+0x1ec/0x390
     ? handle_bug+0x58/0x90
     ? exc_invalid_op+0x13/0x40
     ? asm_exc_invalid_op+0x16/0x20
     ? refcount_warn_saturate+0xce/0x150
     sock_map_free+0x2e5/0x330
     bpf_map_free_deferred+0x173/0x320
     process_one_work+0x846/0x1420
     worker_thread+0x5b3/0xf80
     kthread+0x29e/0x360
     ret_from_fork+0x2d/0x70
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    irq event stamp: 10741
    hardirqs last  enabled at (10741): [<ffffffff84400ec6>] asm_sysvec_apic_timer_interrupt+0x16/0x20
    hardirqs last disabled at (10740): [<ffffffff811e532d>] handle_softirqs+0x60d/0x770
    softirqs last  enabled at (10506): [<ffffffff811e55a9>] __irq_exit_rcu+0x109/0x210
    softirqs last disabled at (10301): [<ffffffff811e55a9>] __irq_exit_rcu+0x109/0x210
    
    refcount_t: underflow; use-after-free.
    WARNING: CPU: 14 PID: 1063 at lib/refcount.c:28 refcount_warn_saturate+0xee/0x150
    CPU: 14 UID: 0 PID: 1063 Comm: kworker/u64:12 Tainted: G    B   W          6.12.0+ #125
    Tainted: [B]=BAD_PAGE, [W]=WARN
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Arch Linux 1.16.3-1-1 04/01/2014
    Workqueue: events_unbound bpf_map_free_deferred
    RIP: 0010:refcount_warn_saturate+0xee/0x150
    Code: 17 73 eb 03 01 e8 62 53 ad fe 0f 0b eb 91 80 3d 06 73 eb 03 00 75 88 48 c7 c7 e0 bd 95 84 c6 05 f6 72 eb 03 01 e8 42 53 ad fe <0f> 0b e9 6e ff ff ff 80 3d e6 72 eb 03 00 0f 85 61 ff ff ff 48 c7
    RSP: 0018:ffff88815c49fc70 EFLAGS: 00010282
    RAX: 0000000000000000 RBX: ffff88811f5b9100 RCX: 0000000000000000
    RDX: 0000000000000000 RSI: 0000000000000004 RDI: 0000000000000001
    RBP: 0000000000000003 R08: 0000000000000001 R09: ffffed10bcde6349
    R10: ffff8885e6f31a4b R11: 0000000000000000 R12: ffff88813be0b000
    R13: ffff88811f5b9100 R14: ffff88811f5b9080 R15: ffff88813be0b024
    FS:  0000000000000000(0000) GS:ffff8885e6f00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 000055dda99b0250 CR3: 000000015dbac000 CR4: 0000000000752ef0
    PKRU: 55555554
    Call Trace:
     <TASK>
     ? __warn.cold+0x5f/0x1ff
     ? refcount_warn_saturate+0xee/0x150
     ? report_bug+0x1ec/0x390
     ? handle_bug+0x58/0x90
     ? exc_invalid_op+0x13/0x40
     ? asm_exc_invalid_op+0x16/0x20
     ? refcount_warn_saturate+0xee/0x150
     sock_map_free+0x2d3/0x330
     bpf_map_free_deferred+0x173/0x320
     process_one_work+0x846/0x1420
     worker_thread+0x5b3/0xf80
     kthread+0x29e/0x360
     ret_from_fork+0x2d/0x70
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    irq event stamp: 10741
    hardirqs last  enabled at (10741): [<ffffffff84400ec6>] asm_sysvec_apic_timer_interrupt+0x16/0x20
    hardirqs last disabled at (10740): [<ffffffff811e532d>] handle_softirqs+0x60d/0x770
    softirqs last  enabled at (10506): [<ffffffff811e55a9>] __irq_exit_rcu+0x109/0x210
    softirqs last disabled at (10301): [<ffffffff811e55a9>] __irq_exit_rcu+0x109/0x210
    
    Fixes: 604326b41a6f ("bpf, sockmap: convert to generic sk_msg interface")
    Signed-off-by: Michal Luczaj <mhal@rbox.co>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/20241202-sockmap-replace-v1-3-1e88579e7bd5@rbox.co
    Signed-off-by: Bin Lan <bin.lan.cn@windriver.com>
    Signed-off-by: He Zhe <zhe.he@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bpf: Use preempt_count() directly in bpf_send_signal_common() [+ + +]
Author: Hou Tao <houtao1@huawei.com>
Date:   Thu Feb 20 12:22:59 2025 +0800

    bpf: Use preempt_count() directly in bpf_send_signal_common()
    
    [ Upstream commit b4a8b5bba712a711d8ca1f7d04646db63f9c88f5 ]
    
    bpf_send_signal_common() uses preemptible() to check whether or not the
    current context is preemptible. If it is preemptible, it will use
    irq_work to send the signal asynchronously instead of trying to hold a
    spin-lock, because spin-lock is sleepable under PREEMPT_RT.
    
    However, preemptible() depends on CONFIG_PREEMPT_COUNT. When
    CONFIG_PREEMPT_COUNT is turned off (e.g., CONFIG_PREEMPT_VOLUNTARY=y),
    !preemptible() will be evaluated as 1 and bpf_send_signal_common() will
    use irq_work unconditionally.
    
    Fix it by unfolding "!preemptible()" and using "preempt_count() != 0 ||
    irqs_disabled()" instead.
    
    Fixes: 87c544108b61 ("bpf: Send signals asynchronously if !preemptible")
    Signed-off-by: Hou Tao <houtao1@huawei.com>
    Link: https://lore.kernel.org/r/20250220042259.1583319-1-houtao@huaweicloud.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: handle errors from btrfs_dec_ref() properly [+ + +]
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Tue May 7 14:12:15 2024 -0400

    btrfs: handle errors from btrfs_dec_ref() properly
    
    commit 5eb178f373b4f16f3b42d55ff88fc94dd95b93b1 upstream.
    
    In walk_up_proc() we BUG_ON(ret) from btrfs_dec_ref().  This is
    incorrect, we have proper error handling here, return the error.
    
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Jianqi Ren <jianqi.ren.cn@windriver.com>
    Signed-off-by: He Zhe <zhe.he@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
can: flexcan: disable transceiver during system PM [+ + +]
Author: Haibo Chen <haibo.chen@nxp.com>
Date:   Fri Mar 14 19:01:45 2025 +0800

    can: flexcan: disable transceiver during system PM
    
    [ Upstream commit 5a19143124be42900b3fbc9ada3c919632eb45eb ]
    
    During system PM, if no wakeup requirement, disable transceiver to
    save power.
    
    Fixes: 4de349e786a3 ("can: flexcan: fix resume function")
    Cc: stable@vger.kernel.org
    Reviewed-by: Frank Li <frank.li@nxp.com>
    Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
    Link: https://patch.msgid.link/20250314110145.899179-2-haibo.chen@nxp.com
    [mkl: add newlines]
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: flexcan: only change CAN state when link up in system PM [+ + +]
Author: Haibo Chen <haibo.chen@nxp.com>
Date:   Fri Mar 14 19:01:44 2025 +0800

    can: flexcan: only change CAN state when link up in system PM
    
    [ Upstream commit fd99d6ed20234b83d65b9c5417794343577cf3e5 ]
    
    After a suspend/resume cycle on a down interface, it will come up as
    ERROR-ACTIVE.
    
    $ ip -details -s -s a s dev flexcan0
    3: flexcan0: <NOARP,ECHO> mtu 16 qdisc pfifo_fast state DOWN group default qlen 10
        link/can  promiscuity 0 allmulti 0 minmtu 0 maxmtu 0
        can state STOPPED (berr-counter tx 0 rx 0) restart-ms 1000
    
    $ sudo systemctl suspend
    
    $ ip -details -s -s a s dev flexcan0
    3: flexcan0: <NOARP,ECHO> mtu 16 qdisc pfifo_fast state DOWN group default qlen 10
        link/can  promiscuity 0 allmulti 0 minmtu 0 maxmtu 0
        can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 1000
    
    And only set CAN state to CAN_STATE_ERROR_ACTIVE when resume process
    has no issue, otherwise keep in CAN_STATE_SLEEPING as suspend did.
    
    Fixes: 4de349e786a3 ("can: flexcan: fix resume function")
    Cc: stable@vger.kernel.org
    Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
    Link: https://patch.msgid.link/20250314110145.899179-1-haibo.chen@nxp.com
    Reported-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Closes: https://lore.kernel.org/all/20250314-married-polar-elephant-b15594-mkl@pengutronix.de
    [mkl: add newlines]
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: statistics: use atomic access in hot path [+ + +]
Author: Oliver Hartkopp <socketcan@hartkopp.net>
Date:   Mon Mar 10 15:33:53 2025 +0100

    can: statistics: use atomic access in hot path
    
    [ Upstream commit 80b5f90158d1364cbd80ad82852a757fc0692bf2 ]
    
    In can_send() and can_receive() CAN messages and CAN filter matches are
    counted to be visible in the CAN procfs files.
    
    KCSAN detected a data race within can_send() when two CAN frames have
    been generated by a timer event writing to the same CAN netdevice at the
    same time. Use atomic operations to access the statistics in the hot path
    to fix the KCSAN complaint.
    
    Reported-by: syzbot+78ce4489b812515d5e4d@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/67cd717d.050a0220.e1a89.0006.GAE@google.com
    Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
    Link: https://patch.msgid.link/20250310143353.3242-1-socketcan@hartkopp.net
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cifs: Fix integer overflow while processing acdirmax mount option [+ + +]
Author: Murad Masimov <m.masimov@mt-integration.ru>
Date:   Tue Mar 11 17:22:04 2025 +0300

    cifs: Fix integer overflow while processing acdirmax mount option
    
    [ Upstream commit 5b29891f91dfb8758baf1e2217bef4b16b2b165b ]
    
    User-provided mount parameter acdirmax of type u32 is intended to have
    an upper limit, but before it is validated, the value is converted from
    seconds to jiffies which can lead to an integer overflow.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 4c9f948142a5 ("cifs: Add new mount parameter "acdirmax" to allow caching directory metadata")
    Signed-off-by: Murad Masimov <m.masimov@mt-integration.ru>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

cifs: Fix integer overflow while processing acregmax mount option [+ + +]
Author: Murad Masimov <m.masimov@mt-integration.ru>
Date:   Tue Mar 11 17:22:03 2025 +0300

    cifs: Fix integer overflow while processing acregmax mount option
    
    [ Upstream commit 7489161b1852390b4413d57f2457cd40b34da6cc ]
    
    User-provided mount parameter acregmax of type u32 is intended to have
    an upper limit, but before it is validated, the value is converted from
    seconds to jiffies which can lead to an integer overflow.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 5780464614f6 ("cifs: Add new parameter "acregmax" for distinct file and directory metadata timeout")
    Signed-off-by: Murad Masimov <m.masimov@mt-integration.ru>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

cifs: Fix integer overflow while processing actimeo mount option [+ + +]
Author: Murad Masimov <m.masimov@mt-integration.ru>
Date:   Tue Mar 11 17:22:05 2025 +0300

    cifs: Fix integer overflow while processing actimeo mount option
    
    [ Upstream commit 64f690ee22c99e16084e0e45181b2a1eed2fa149 ]
    
    User-provided mount parameter actimeo of type u32 is intended to have
    an upper limit, but before it is validated, the value is converted from
    seconds to jiffies which can lead to an integer overflow.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 6d20e8406f09 ("cifs: add attribute cache timeout (actimeo) tunable")
    Signed-off-by: Murad Masimov <m.masimov@mt-integration.ru>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

cifs: Fix integer overflow while processing closetimeo mount option [+ + +]
Author: Murad Masimov <m.masimov@mt-integration.ru>
Date:   Tue Mar 11 17:22:06 2025 +0300

    cifs: Fix integer overflow while processing closetimeo mount option
    
    [ Upstream commit d5a30fddfe2f2e540f6c43b59cf701809995faef ]
    
    User-provided mount parameter closetimeo of type u32 is intended to have
    an upper limit, but before it is validated, the value is converted from
    seconds to jiffies which can lead to an integer overflow.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 5efdd9122eff ("smb3: allow deferred close timeout to be configurable")
    Signed-off-by: Murad Masimov <m.masimov@mt-integration.ru>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clk: amlogic: g12a: fix mmc A peripheral clock [+ + +]
Author: Jerome Brunet <jbrunet@baylibre.com>
Date:   Fri Dec 13 11:03:23 2024 +0100

    clk: amlogic: g12a: fix mmc A peripheral clock
    
    [ Upstream commit 0079e77c08de692cb20b38e408365c830a44b1ef ]
    
    The bit index of the peripheral clock for mmc A is wrong
    This was probably not a problem for mmc A as the peripheral is likely left
    enabled by the bootloader.
    
    No issues has been reported so far but it could be a problem, most likely
    some form of conflict between the ethernet and mmc A clock, breaking
    ethernet on init.
    
    Use the value provided by the documentation for mmc A before this
    becomes an actual problem.
    
    Fixes: 085a4ea93d54 ("clk: meson: g12a: add peripheral clock controller")
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20241213-amlogic-clk-g12a-mmca-fix-v1-1-5af421f58b64@baylibre.com
    Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: amlogic: g12b: fix cluster A parent data [+ + +]
Author: Jerome Brunet <jbrunet@baylibre.com>
Date:   Fri Dec 13 15:30:17 2024 +0100

    clk: amlogic: g12b: fix cluster A parent data
    
    [ Upstream commit 8995f8f108c3ac5ad52b12a6cfbbc7b3b32e9a58 ]
    
    Several clocks used by both g12a and g12b use the g12a cpu A clock hw
    pointer as clock parent. This is incorrect on g12b since the parents of
    cluster A cpu clock are different. Also the hw clock provided as parent to
    these children is not even registered clock on g12b.
    
    Fix the problem by reverting to the global namespace and let CCF pick
    the appropriate, as it is already done for other clocks, such as
    cpu_clk_trace_div.
    
    Fixes: 25e682a02d91 ("clk: meson: g12a: migrate to the new parent description method")
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20241213-amlogic-clk-g12a-cpua-parent-fix-v1-1-d8c0f41865fe@baylibre.com
    Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: amlogic: gxbb: drop incorrect flag on 32k clock [+ + +]
Author: Jerome Brunet <jbrunet@baylibre.com>
Date:   Fri Dec 20 11:25:36 2024 +0100

    clk: amlogic: gxbb: drop incorrect flag on 32k clock
    
    [ Upstream commit f38f7fe4830c5cb4eac138249225f119e7939965 ]
    
    gxbb_32k_clk_div sets CLK_DIVIDER_ROUND_CLOSEST in the init_data flag which
    is incorrect. This is field is not where the divider flags belong.
    
    Thankfully, CLK_DIVIDER_ROUND_CLOSEST maps to bit 4 which is an unused
    clock flag, so there is no unintended consequence to this error.
    
    Effectively, the clock has been used without CLK_DIVIDER_ROUND_CLOSEST
    so far, so just drop it.
    
    Fixes: 14c735c8e308 ("clk: meson-gxbb: Add EE 32K Clock for CEC")
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20241220-amlogic-clk-gxbb-32k-fixes-v1-1-baca56ecf2db@baylibre.com
    Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: amlogic: gxbb: drop non existing 32k clock parent [+ + +]
Author: Jerome Brunet <jbrunet@baylibre.com>
Date:   Fri Dec 20 11:25:37 2024 +0100

    clk: amlogic: gxbb: drop non existing 32k clock parent
    
    [ Upstream commit 7915d7d5407c026fa9343befb4d3343f7a345f97 ]
    
    The 32k clock reference a parent 'cts_slow_oscin' with a fixme note saying
    that this clock should be provided by AO controller.
    
    The HW probably has this clock but it does not exist at the moment in
    any controller implementation. Furthermore, referencing clock by the global
    name should be avoided whenever possible.
    
    There is no reason to keep this hack around, at least for now.
    
    Fixes: 14c735c8e308 ("clk: meson-gxbb: Add EE 32K Clock for CEC")
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20241220-amlogic-clk-gxbb-32k-fixes-v1-2-baca56ecf2db@baylibre.com
    Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: qcom: gcc-msm8953: fix stuck venus0_core0 clock [+ + +]
Author: Vladimir Lypak <vladimir.lypak@gmail.com>
Date:   Sat Mar 15 16:26:18 2025 +0100

    clk: qcom: gcc-msm8953: fix stuck venus0_core0 clock
    
    [ Upstream commit cdc59600bccf2cb4c483645438a97d4ec55f326b ]
    
    This clock can't be enable with VENUS_CORE0 GDSC turned off. But that
    GDSC is under HW control so it can be turned off at any moment.
    Instead of checking the dependent clock we can just vote for it to
    enable later when GDSC gets turned on.
    
    Fixes: 9bb6cfc3c77e6 ("clk: qcom: Add Global Clock Controller driver for MSM8953")
    Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com>
    Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org>
    Link: https://lore.kernel.org/r/20250315-clock-fix-v1-2-2efdc4920dda@mainlining.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: qcom: mmcc-sdm660: fix stuck video_subcore0 clock [+ + +]
Author: Barnabás Czémán <barnabas.czeman@mainlining.org>
Date:   Sat Mar 15 16:26:17 2025 +0100

    clk: qcom: mmcc-sdm660: fix stuck video_subcore0 clock
    
    [ Upstream commit 000cbe3896c56bf5c625e286ff096533a6b27657 ]
    
    This clock can't be enable with VENUS_CORE0 GDSC turned off. But that
    GDSC is under HW control so it can be turned off at any moment.
    Instead of checking the dependent clock we can just vote for it to
    enable later when GDSC gets turned on.
    
    Fixes: 5db3ae8b33de6 ("clk: qcom: Add SDM660 Multimedia Clock Controller (MMCC) driver")
    Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org>
    Link: https://lore.kernel.org/r/20250315-clock-fix-v1-1-2efdc4920dda@mainlining.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: rockchip: rk3328: fix wrong clk_ref_usb3otg parent [+ + +]
Author: Peter Geis <pgwipeout@gmail.com>
Date:   Wed Jan 15 01:26:22 2025 +0000

    clk: rockchip: rk3328: fix wrong clk_ref_usb3otg parent
    
    [ Upstream commit a9e60f1ffe1ca57d6af6a2573e2f950e76efbf5b ]
    
    Correct the clk_ref_usb3otg parent to fix clock control for the usb3
    controller on rk3328. Verified against the rk3328 trm, the rk3228h trm,
    and the rk3328 usb3 phy clock map.
    
    Fixes: fe3511ad8a1c ("clk: rockchip: add clock controller for rk3328")
    Signed-off-by: Peter Geis <pgwipeout@gmail.com>
    Reviewed-by: Dragan Simic <dsimic@manjaro.org>
    Link: https://lore.kernel.org/r/20250115012628.1035928-2-pgwipeout@gmail.com
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: samsung: Fix UBSAN panic in samsung_clk_init() [+ + +]
Author: Will McVicker <willmcvicker@google.com>
Date:   Wed Feb 12 10:32:52 2025 -0800

    clk: samsung: Fix UBSAN panic in samsung_clk_init()
    
    [ Upstream commit d19d7345a7bcdb083b65568a11b11adffe0687af ]
    
    With UBSAN_ARRAY_BOUNDS=y, I'm hitting the below panic due to
    dereferencing `ctx->clk_data.hws` before setting
    `ctx->clk_data.num = nr_clks`. Move that up to fix the crash.
    
      UBSAN: array index out of bounds: 00000000f2005512 [#1] PREEMPT SMP
      <snip>
      Call trace:
       samsung_clk_init+0x110/0x124 (P)
       samsung_clk_init+0x48/0x124 (L)
       samsung_cmu_register_one+0x3c/0xa0
       exynos_arm64_register_cmu+0x54/0x64
       __gs101_cmu_top_of_clk_init_declare+0x28/0x60
       ...
    
    Fixes: e620a1e061c4 ("drivers/clk: convert VL struct to struct_size")
    Signed-off-by: Will McVicker <willmcvicker@google.com>
    Link: https://lore.kernel.org/r/20250212183253.509771-1-willmcvicker@google.com
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clockevents/drivers/i8253: Fix stop sequence for timer 0 [+ + +]
Author: David Woodhouse <dwmw@amazon.co.uk>
Date:   Fri Aug 2 14:55:55 2024 +0100

    clockevents/drivers/i8253: Fix stop sequence for timer 0
    
    commit 531b2ca0a940ac9db03f246c8b77c4201de72b00 upstream.
    
    According to the data sheet, writing the MODE register should stop the
    counter (and thus the interrupts). This appears to work on real hardware,
    at least modern Intel and AMD systems. It should also work on Hyper-V.
    
    However, on some buggy virtual machines the mode change doesn't have any
    effect until the counter is subsequently loaded (or perhaps when the IRQ
    next fires).
    
    So, set MODE 0 and then load the counter, to ensure that those buggy VMs
    do the right thing and the interrupts stop. And then write MODE 0 *again*
    to stop the counter on compliant implementations too.
    
    Apparently, Hyper-V keeps firing the IRQ *repeatedly* even in mode zero
    when it should only happen once, but the second MODE write stops that too.
    
    Userspace test program (mostly written by tglx):
    =====
     #include <stdio.h>
     #include <unistd.h>
     #include <stdlib.h>
     #include <stdint.h>
     #include <sys/io.h>
    
    static __always_inline void __out##bwl(type value, uint16_t port)       \
    {                                                                       \
            asm volatile("out" #bwl " %" #bw "0, %w1"                       \
                         : : "a"(value), "Nd"(port));                       \
    }                                                                       \
                                                                            \
    static __always_inline type __in##bwl(uint16_t port)                    \
    {                                                                       \
            type value;                                                     \
            asm volatile("in" #bwl " %w1, %" #bw "0"                        \
                         : "=a"(value) : "Nd"(port));                       \
            return value;                                                   \
    }
    
    BUILDIO(b, b, uint8_t)
    
     #define inb __inb
     #define outb __outb
    
     #define PIT_MODE       0x43
     #define PIT_CH0        0x40
     #define PIT_CH2        0x42
    
    static int is8254;
    
    static void dump_pit(void)
    {
            if (is8254) {
                    // Latch and output counter and status
                    outb(0xC2, PIT_MODE);
                    printf("%02x %02x %02x\n", inb(PIT_CH0), inb(PIT_CH0), inb(PIT_CH0));
            } else {
                    // Latch and output counter
                    outb(0x0, PIT_MODE);
                    printf("%02x %02x\n", inb(PIT_CH0), inb(PIT_CH0));
            }
    }
    
    int main(int argc, char* argv[])
    {
            int nr_counts = 2;
    
            if (argc > 1)
                    nr_counts = atoi(argv[1]);
    
            if (argc > 2)
                    is8254 = 1;
    
            if (ioperm(0x40, 4, 1) != 0)
                    return 1;
    
            dump_pit();
    
            printf("Set oneshot\n");
            outb(0x38, PIT_MODE);
            outb(0x00, PIT_CH0);
            outb(0x0F, PIT_CH0);
    
            dump_pit();
            usleep(1000);
            dump_pit();
    
            printf("Set periodic\n");
            outb(0x34, PIT_MODE);
            outb(0x00, PIT_CH0);
            outb(0x0F, PIT_CH0);
    
            dump_pit();
            usleep(1000);
            dump_pit();
            dump_pit();
            usleep(100000);
            dump_pit();
            usleep(100000);
            dump_pit();
    
            printf("Set stop (%d counter writes)\n", nr_counts);
            outb(0x30, PIT_MODE);
            while (nr_counts--)
                    outb(0xFF, PIT_CH0);
    
            dump_pit();
            usleep(100000);
            dump_pit();
            usleep(100000);
            dump_pit();
    
            printf("Set MODE 0\n");
            outb(0x30, PIT_MODE);
    
            dump_pit();
            usleep(100000);
            dump_pit();
            usleep(100000);
            dump_pit();
    
            return 0;
    }
    =====
    
    Suggested-by: Sean Christopherson <seanjc@google.com>
    Co-developed-by: Li RongQing <lirongqing@baidu.com>
    Signed-off-by: Li RongQing <lirongqing@baidu.com>
    Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Tested-by: Michael Kelley <mhkelley@outlook.com>
    Link: https://lore.kernel.org/all/20240802135555.564941-2-dwmw2@infradead.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
coresight: catu: Fix number of pages while using 64k pages [+ + +]
Author: Ilkka Koskinen <ilkka@os.amperecomputing.com>
Date:   Thu Jan 9 21:53:48 2025 +0000

    coresight: catu: Fix number of pages while using 64k pages
    
    [ Upstream commit 0e14e062f5ff98aa15264dfa87c5f5e924028561 ]
    
    Trying to record a trace on kernel with 64k pages resulted in -ENOMEM.
    This happens due to a bug in calculating the number of table pages, which
    returns zero. Fix the issue by rounding up.
    
    $ perf record --kcore -e cs_etm/@tmc_etr55,cycacc,branch_broadcast/k --per-thread taskset --cpu-list 1 dd if=/dev/zero of=/dev/null
    failed to mmap with 12 (Cannot allocate memory)
    
    Fixes: 8ed536b1e283 ("coresight: catu: Add support for scatter gather tables")
    Signed-off-by: Ilkka Koskinen <ilkka@os.amperecomputing.com>
    Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Link: https://lore.kernel.org/r/20250109215348.5483-1-ilkka@os.amperecomputing.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
counter: microchip-tcb-capture: Fix undefined counter channel state on probe [+ + +]
Author: William Breathitt Gray <wbg@kernel.org>
Date:   Wed Mar 5 19:01:19 2025 +0900

    counter: microchip-tcb-capture: Fix undefined counter channel state on probe
    
    commit c0c9c73434666dc99ee156b25e7e722150bee001 upstream.
    
    Hardware initialize of the timer counter channel does not occur on probe
    thus leaving the Count in an undefined state until the first
    function_write() callback is executed. Fix this by performing the proper
    hardware initialization during probe.
    
    Fixes: 106b104137fd ("counter: Add microchip TCB capture counter")
    Reported-by: Csókás Bence <csokas.bence@prolan.hu>
    Closes: https://lore.kernel.org/all/bfa70e78-3cc3-4295-820b-3925c26135cb@prolan.hu/
    Link: https://lore.kernel.org/r/20250305-preset-capture-mode-microchip-tcb-capture-v1-1-632c95c6421e@kernel.org
    Signed-off-by: William Breathitt Gray <wbg@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

counter: stm32-lptimer-cnt: fix error handling when enabling [+ + +]
Author: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Date:   Mon Feb 24 18:06:57 2025 +0100

    counter: stm32-lptimer-cnt: fix error handling when enabling
    
    commit 8744dcd4fc7800de2eb9369410470bb2930d4c14 upstream.
    
    In case the stm32_lptim_set_enable_state() fails to update CMP and ARR,
    a timeout error is raised, by regmap_read_poll_timeout. It may happen,
    when the lptimer runs on a slow clock, and the clock is gated only
    few times during the polling.
    
    Badly, when this happen, STM32_LPTIM_ENABLE in CR register has been set.
    So the 'enable' state in sysfs wrongly lies on the counter being
    correctly enabled, due to CR is read as one in stm32_lptim_is_enabled().
    
    To fix both issues:
    - enable the clock before writing CMP, ARR and polling ISR bits. It will
    avoid the possible timeout error.
    - clear the ENABLE bit in CR and disable the clock in the error path.
    
    Fixes: d8958824cf07 ("iio: counter: Add support for STM32 LPTimer")
    Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
    Link: https://lore.kernel.org/r/20250224170657.3368236-1-fabrice.gasnier@foss.st.com
    Signed-off-by: William Breathitt Gray <wbg@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
cpufreq: governor: Fix negative 'idle_time' handling in dbs_update() [+ + +]
Author: Jie Zhan <zhanjie9@hisilicon.com>
Date:   Thu Feb 13 11:55:10 2025 +0800

    cpufreq: governor: Fix negative 'idle_time' handling in dbs_update()
    
    [ Upstream commit 3698dd6b139dc37b35a9ad83d9330c1f99666c02 ]
    
    We observed an issue that the CPU frequency can't raise up with a 100% CPU
    load when NOHZ is off and the 'conservative' governor is selected.
    
    'idle_time' can be negative if it's obtained from get_cpu_idle_time_jiffy()
    when NOHZ is off.  This was found and explained in commit 9485e4ca0b48
    ("cpufreq: governor: Fix handling of special cases in dbs_update()").
    
    However, commit 7592019634f8 ("cpufreq: governors: Fix long idle detection
    logic in load calculation") introduced a comparison between 'idle_time' and
    'samling_rate' to detect a long idle interval.  While 'idle_time' is
    converted to int before comparison, it's actually promoted to unsigned
    again when compared with an unsigned 'sampling_rate'.  Hence, this leads to
    wrong idle interval detection when it's in fact 100% busy and sets
    policy_dbs->idle_periods to a very large value.  'conservative' adjusts the
    frequency to minimum because of the large 'idle_periods', such that the
    frequency can't raise up.  'Ondemand' doesn't use policy_dbs->idle_periods
    so it fortunately avoids the issue.
    
    Correct negative 'idle_time' to 0 before any use of it in dbs_update().
    
    Fixes: 7592019634f8 ("cpufreq: governors: Fix long idle detection logic in load calculation")
    Signed-off-by: Jie Zhan <zhanjie9@hisilicon.com>
    Reviewed-by: Chen Yu <yu.c.chen@intel.com>
    Link: https://patch.msgid.link/20250213035510.2402076-1-zhanjie9@hisilicon.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

cpufreq: scpi: compare kHz instead of Hz [+ + +]
Author: zuoqian <zuoqian113@gmail.com>
Date:   Sat Jan 25 08:49:49 2025 +0000

    cpufreq: scpi: compare kHz instead of Hz
    
    [ Upstream commit 4742da9774a416908ef8e3916164192c15c0e2d1 ]
    
    The CPU rate from clk_get_rate() may not be divisible by 1000
    (e.g., 133333333). But the rate calculated from frequency(kHz) is
    always divisible by 1000 (e.g., 133333000).
    Comparing the rate causes a warning during CPU scaling:
    "cpufreq: __target_index: Failed to change cpu frequency: -5".
    When we choose to compare kHz here, the issue does not occur.
    
    Fixes: 343a8d17fa8d ("cpufreq: scpi: remove arm_big_little dependency")
    Signed-off-by: zuoqian <zuoqian113@gmail.com>
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
crypto: hisilicon/sec2 - fix for aead auth key length [+ + +]
Author: Wenkai Lin <linwenkai6@hisilicon.com>
Date:   Wed Feb 5 11:56:26 2025 +0800

    crypto: hisilicon/sec2 - fix for aead auth key length
    
    [ Upstream commit 1b284ffc30b02808a0de698667cbcf5ce5f9144e ]
    
    According to the HMAC RFC, the authentication key
    can be 0 bytes, and the hardware can handle this
    scenario. Therefore, remove the incorrect validation
    for this case.
    
    Fixes: 2f072d75d1ab ("crypto: hisilicon - Add aead support on SEC2")
    Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com>
    Signed-off-by: Chenghai Huang <huangchenghai2@huawei.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

crypto: hisilicon/sec2 - fix for aead authsize alignment [+ + +]
Author: Wenkai Lin <linwenkai6@hisilicon.com>
Date:   Wed Feb 5 11:56:27 2025 +0800

    crypto: hisilicon/sec2 - fix for aead authsize alignment
    
    [ Upstream commit a49cc71e219040d771a8c1254879984f98192811 ]
    
    The hardware only supports authentication sizes
    that are 4-byte aligned. Therefore, the driver
    switches to software computation in this case.
    
    Fixes: 2f072d75d1ab ("crypto: hisilicon - Add aead support on SEC2")
    Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com>
    Signed-off-by: Chenghai Huang <huangchenghai2@huawei.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

crypto: nx - Fix uninitialised hv_nxc on error [+ + +]
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Sat Mar 15 16:50:42 2025 +0800

    crypto: nx - Fix uninitialised hv_nxc on error
    
    [ Upstream commit 9b00eb923f3e60ca76cbc8b31123716f3a87ac6a ]
    
    The compiler correctly warns that hv_nxc may be used uninitialised
    as that will occur when NX-GZIP is unavailable.
    
    Fix it by rearranging the code and delay setting caps_feat until
    the final query succeeds.
    
    Fixes: b4ba22114c78 ("crypto/nx: Get NX capabilities for GZIP coprocessor type")
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Drivers: hv: vmbus: Don't release fb_mmio resource in vmbus_free_mmio() [+ + +]
Author: Michael Kelley <mhklinux@outlook.com>
Date:   Sun Mar 9 20:52:08 2025 -0700

    Drivers: hv: vmbus: Don't release fb_mmio resource in vmbus_free_mmio()
    
    [ Upstream commit 73fe9073c0cc28056cb9de0c8a516dac070f1d1f ]
    
    The VMBus driver manages the MMIO space it owns via the hyperv_mmio
    resource tree. Because the synthetic video framebuffer portion of the
    MMIO space is initially setup by the Hyper-V host for each guest, the
    VMBus driver does an early reserve of that portion of MMIO space in the
    hyperv_mmio resource tree. It saves a pointer to that resource in
    fb_mmio. When a VMBus driver requests MMIO space and passes "true"
    for the "fb_overlap_ok" argument, the reserved framebuffer space is
    used if possible. In that case it's not necessary to do another request
    against the "shadow" hyperv_mmio resource tree because that resource
    was already requested in the early reserve steps.
    
    However, the vmbus_free_mmio() function currently does no special
    handling for the fb_mmio resource. When a framebuffer device is
    removed, or the driver is unbound, the current code for
    vmbus_free_mmio() releases the reserved resource, leaving fb_mmio
    pointing to memory that has been freed. If the same or another
    driver is subsequently bound to the device, vmbus_allocate_mmio()
    checks against fb_mmio, and potentially gets garbage. Furthermore
    a second unbind operation produces this "nonexistent resource" error
    because of the unbalanced behavior between vmbus_allocate_mmio() and
    vmbus_free_mmio():
    
    [   55.499643] resource: Trying to free nonexistent
                            resource <0x00000000f0000000-0x00000000f07fffff>
    
    Fix this by adding logic to vmbus_free_mmio() to recognize when
    MMIO space in the fb_mmio reserved area would be released, and don't
    release it. This filtering ensures the fb_mmio resource always exists,
    and makes vmbus_free_mmio() more parallel with vmbus_allocate_mmio().
    
    Fixes: be000f93e5d7 ("drivers:hv: Track allocations of children of hv_vmbus in private resource tree")
    Signed-off-by: Michael Kelley <mhklinux@outlook.com>
    Tested-by: Saurabh Sengar <ssengar@linux.microsoft.com>
    Reviewed-by: Saurabh Sengar <ssengar@linux.microsoft.com>
    Link: https://lore.kernel.org/r/20250310035208.275764-1-mhklinux@outlook.com
    Signed-off-by: Wei Liu <wei.liu@kernel.org>
    Message-ID: <20250310035208.275764-1-mhklinux@outlook.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/display: Assign normalized_pix_clk when color depth = 14 [+ + +]
Author: Alex Hung <alex.hung@amd.com>
Date:   Thu Feb 27 16:36:25 2025 -0700

    drm/amd/display: Assign normalized_pix_clk when color depth = 14
    
    commit 79e31396fdd7037c503e6add15af7cb00633ea92 upstream.
    
    [WHY & HOW]
    A warning message "WARNING: CPU: 4 PID: 459 at ... /dc_resource.c:3397
    calculate_phy_pix_clks+0xef/0x100 [amdgpu]" occurs because the
    display_color_depth == COLOR_DEPTH_141414 is not handled. This is
    observed in Radeon RX 6600 XT.
    
    It is fixed by assigning pix_clk * (14 * 3) / 24 - same as the rests.
    
    Also fixes the indentation in get_norm_pix_clk.
    
    Reviewed-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 274a87eb389f58eddcbc5659ab0b180b37e92775)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Check for invalid input params when building scaling params [+ + +]
Author: Michael Strauss <michael.strauss@amd.com>
Date:   Wed Mar 23 16:06:25 2022 -0400

    drm/amd/display: Check for invalid input params when building scaling params
    
    [ Upstream commit 73b1da69f5314d96e1f963468863eaa884ee1030 ]
    
    [WHY]
    Function to calculate scaling ratios can be called with invalid plane
    src/dest, causing a divide by zero.
    
    [HOW]
    Fail building scaling params if plane state src/dest rects are
    unpopulated
    
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Reviewed-by: Charlene Liu <Charlene.Liu@amd.com>
    Acked-by: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Michael Strauss <michael.strauss@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Stable-dep-of: 374c9faac5a7 ("drm/amd/display: Fix null check for pipe_ctx->plane_state in resource_build_scaling_params")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Fix null check for pipe_ctx->plane_state in resource_build_scaling_params [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
Date:   Wed Feb 26 16:37:31 2025 +0800

    drm/amd/display: Fix null check for pipe_ctx->plane_state in resource_build_scaling_params
    
    [ Upstream commit 374c9faac5a763a05bc3f68ad9f73dab3c6aec90 ]
    
    Null pointer dereference issue could occur when pipe_ctx->plane_state
    is null. The fix adds a check to ensure 'pipe_ctx->plane_state' is not
    null before accessing. This prevents a null pointer dereference.
    
    Found by code review.
    
    Fixes: 3be5262e353b ("drm/amd/display: Rename more dc_surface stuff to plane_state")
    Reviewed-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 63e6a77ccf239337baa9b1e7787cde9fa0462092)
    Cc: stable@vger.kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Fix slab-use-after-free on hdcp_work [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Fri Feb 28 13:18:14 2025 -0600

    drm/amd/display: Fix slab-use-after-free on hdcp_work
    
    commit e65e7bea220c3ce8c4c793b4ba35557f4994ab2b upstream.
    
    [Why]
    A slab-use-after-free is reported when HDCP is destroyed but the
    property_validate_dwork queue is still running.
    
    [How]
    Cancel the delayed work when destroying workqueue.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4006
    Fixes: da3fd7ac0bcf ("drm/amd/display: Update CP property based on HW query")
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 725a04ba5a95e89c89633d4322430cfbca7ce128)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: fix type mismatch in CalculateDynamicMetadataParameters() [+ + +]
Author: Vitaliy Shevtsov <v.shevtsov@mt-integration.ru>
Date:   Thu Feb 27 01:28:51 2025 +0500

    drm/amd/display: fix type mismatch in CalculateDynamicMetadataParameters()
    
    [ Upstream commit c3c584c18c90a024a54716229809ba36424f9660 ]
    
    There is a type mismatch between what CalculateDynamicMetadataParameters()
    takes and what is passed to it. Currently this function accepts several
    args as signed long but it's called with unsigned integers and integer. On
    some systems where long is 32 bits and one of these unsigned int params is
    greater than INT_MAX it may cause passing input params as negative values.
    
    Fix this by changing these argument types from long to unsigned int and to
    int respectively. Also this will align the function's definition with
    similar functions in other dcn* drivers.
    
    Found by Linux Verification Center (linuxtesting.org) with Svace.
    
    Fixes: 6725a88f88a7 ("drm/amd/display: Add DCN3 DML")
    Signed-off-by: Vitaliy Shevtsov <v.shevtsov@mt-integration.ru>
    Reviewed-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Restore correct backlight brightness after a GPU reset [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Sun Feb 23 00:04:35 2025 -0600

    drm/amd/display: Restore correct backlight brightness after a GPU reset
    
    commit 5760388d9681ac743038b846b9082b9023969551 upstream.
    
    [Why]
    GPU reset will attempt to restore cached state, but brightness doesn't
    get restored. It will come back at 100% brightness, but userspace thinks
    it's the previous value.
    
    [How]
    When running resume sequence if GPU is in reset restore brightness
    to previous value.
    
    Acked-by: Wayne Lin <Wayne.Lin@amd.com>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 5e19e2b57b6bb640d68dfc7991e1e182922cf867)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Skip inactive planes within ModeSupportAndSystemConfiguration [+ + +]
Author: Hersen Wu <hersenxs.wu@amd.com>
Date:   Fri Apr 26 16:39:37 2024 -0400

    drm/amd/display: Skip inactive planes within ModeSupportAndSystemConfiguration
    
    commit a54f7e866cc73a4cb71b8b24bb568ba35c8969df upstream.
    
    [Why]
    Coverity reports Memory - illegal accesses.
    
    [How]
    Skip inactive planes.
    
    Reviewed-by: Alex Hung <alex.hung@amd.com>
    Acked-by: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Hersen Wu <hersenxs.wu@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    [get_pipe_idx() was introduced as a helper by
    dda4fb85e433 ("drm/amd/display: DML changes for DCN32/321") in v6.0.
    This patch backports it to make code clearer. And minor conflict is
    resolved due to code context change.]
    Signed-off-by: Jianqi Ren <jianqi.ren.cn@windriver.com>
    Signed-off-by: He Zhe <zhe.he@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd/pm: Fix negative array index read [+ + +]
Author: Jesse Zhang <jesse.zhang@amd.com>
Date:   Tue Apr 30 10:23:48 2024 +0800

    drm/amd/pm: Fix negative array index read
    
    commit c8c19ebf7c0b202a6a2d37a52ca112432723db5f upstream.
    
    Avoid using the negative values
    for clk_idex as an index into an array pptable->DpmDescriptor.
    
    V2: fix clk_index return check (Tim Huang)
    
    Signed-off-by: Jesse Zhang <Jesse.Zhang@amd.com>
    Reviewed-by: Tim Huang <Tim.Huang@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    [Minor conflict resolved due to code context change.]
    Signed-off-by: Jianqi Ren <jianqi.ren.cn@windriver.com>
    Signed-off-by: He Zhe <zhe.he@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd: Keep display off while going into S4 [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Thu Mar 6 12:51:24 2025 -0600

    drm/amd: Keep display off while going into S4
    
    [ Upstream commit 4afacc9948e1f8fdbca401d259ae65ad93d298c0 ]
    
    When userspace invokes S4 the flow is:
    
    1) amdgpu_pmops_prepare()
    2) amdgpu_pmops_freeze()
    3) Create hibernation image
    4) amdgpu_pmops_thaw()
    5) Write out image to disk
    6) Turn off system
    
    Then on resume amdgpu_pmops_restore() is called.
    
    This flow has a problem that because amdgpu_pmops_thaw() is called
    it will call amdgpu_device_resume() which will resume all of the GPU.
    
    This includes turning the display hardware back on and discovering
    connectors again.
    
    This is an unexpected experience for the display to turn back on.
    Adjust the flow so that during the S4 sequence display hardware is
    not turned back on.
    
    Reported-by: Xaver Hugl <xaver.hugl@gmail.com>
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/2038
    Cc: Muhammad Usama Anjum <usama.anjum@collabora.com>
    Tested-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Acked-by: Harry Wentland <harry.wentland@amd.com>
    Link: https://lore.kernel.org/r/20250306185124.44780-1-mario.limonciello@amd.com
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 68bfdc8dc0a1a7fdd9ab61e69907ae71a6fd3d91)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amdgpu: Fix JPEG video caps max size for navi1x and raven [+ + +]
Author: David Rosca <david.rosca@amd.com>
Date:   Fri Feb 28 13:34:49 2025 +0100

    drm/amdgpu: Fix JPEG video caps max size for navi1x and raven
    
    commit ec33964d9d88488fa954a03d476a8b811efc6e85 upstream.
    
    8192x8192 is the maximum supported resolution.
    
    Signed-off-by: David Rosca <david.rosca@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 6e0d2fde3ae8fdb5b47e10389f23ed2cb4daec5d)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/atomic: Filter out redundant DPMS calls [+ + +]
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Wed Feb 19 18:02:39 2025 +0200

    drm/atomic: Filter out redundant DPMS calls
    
    commit de93ddf88088f7624b589d0ff3af9effb87e8f3b upstream.
    
    Video players (eg. mpv) do periodic XResetScreenSaver() calls to
    keep the screen on while the video playing. The modesetting ddx
    plumbs these straight through into the kernel as DPMS setproperty
    ioctls, without any filtering whatsoever. When implemented via
    atomic these end up as empty commits on the crtc (which will
    nonetheless take one full frame), which leads to a dropped
    frame every time XResetScreenSaver() is called.
    
    Let's just filter out redundant DPMS property changes in the
    kernel to avoid this issue.
    
    v2: Explain the resulting commits a bit better (Sima)
        Document the behaviour in uapi docs (Sima)
    
    Cc: stable@vger.kernel.org
    Testcase: igt/kms_flip/flip-vs-dpms-on-nop
    Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch>
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250219160239.17502-1-ville.syrjala@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/bridge: ti-sn65dsi86: Fix multiple instances [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Tue Dec 10 15:18:46 2024 +0100

    drm/bridge: ti-sn65dsi86: Fix multiple instances
    
    [ Upstream commit 574f5ee2c85a00a579549d50e9fc9c6c072ee4c4 ]
    
    Each bridge instance creates up to four auxiliary devices with different
    names.  However, their IDs are always zero, causing duplicate filename
    errors when a system has multiple bridges:
    
        sysfs: cannot create duplicate filename '/bus/auxiliary/devices/ti_sn65dsi86.gpio.0'
    
    Fix this by using a unique instance ID per bridge instance.  The
    instance ID is derived from the I2C adapter number and the bridge's I2C
    address, to support multiple instances on the same bus.
    
    Fixes: bf73537f411b ("drm/bridge: ti-sn65dsi86: Break GPIO and MIPI-to-eDP bridge into sub-drivers")
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/7a68a0e3f927e26edca6040067fb653eb06efb79.1733840089.git.geert+renesas@glider.be
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/dp_mst: Fix drm RAD print [+ + +]
Author: Wayne Lin <Wayne.Lin@amd.com>
Date:   Mon Jan 13 17:10:59 2025 +0800

    drm/dp_mst: Fix drm RAD print
    
    [ Upstream commit 6bbce873a9c97cb12f5455c497be279ac58e707f ]
    
    [Why]
    The RAD of sideband message printed today is incorrect.
    For RAD stored within MST branch
    - If MST branch LCT is 1, it's RAD array is untouched and remained as 0.
    - If MST branch LCT is larger than 1, use nibble to store the up facing
      port number in cascaded sequence as illustrated below:
    
      u8 RAD[0] = (LCT_2_UFP << 4) | LCT_3_UFP
         RAD[1] = (LCT_4_UFP << 4) | LCT_5_UFP
         ...
    
    In drm_dp_mst_rad_to_str(), it wrongly to use BIT_MASK(4) to fetch the port
    number of one nibble.
    
    [How]
    Adjust the code by:
    - RAD array items are valuable only for LCT >= 1.
    - Use 0xF as the mask to replace BIT_MASK(4)
    
    V2:
    - Document how RAD is constructed (Imre)
    
    V3:
    - Adjust the comment for rad[] so kdoc formats it properly (Lyude)
    
    Fixes: 2f015ec6eab6 ("drm/dp_mst: Add sideband down request tracing + selftests")
    Cc: Imre Deak <imre.deak@intel.com>
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Cc: Harry Wentland <hwentlan@amd.com>
    Cc: Lyude Paul <lyude@redhat.com>
    Reviewed-by: Lyude Paul <lyude@redhat.com>
    Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
    Signed-off-by: Lyude Paul <lyude@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250113091100.3314533-2-Wayne.Lin@amd.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/gma500: Add NULL check for pci_gfx_root in mid_get_vbt_data() [+ + +]
Author: Ivan Abramov <i.abramov@mt-integration.ru>
Date:   Thu Mar 6 14:20:45 2025 +0300

    drm/gma500: Add NULL check for pci_gfx_root in mid_get_vbt_data()
    
    [ Upstream commit 9af152dcf1a06f589f44a74da4ad67e365d4db9a ]
    
    Since pci_get_domain_bus_and_slot() can return NULL, add NULL check for
    pci_gfx_root in the mid_get_vbt_data().
    
    This change is similar to the checks implemented in mid_get_fuse_settings()
    and mid_get_pci_revID(), which were introduced by commit 0cecdd818cd7
    ("gma500: Final enables for Oaktrail") as "additional minor
    bulletproofing".
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: f910b411053f ("gma500: Add the glue to the various BIOS and firmware interfaces")
    Signed-off-by: Ivan Abramov <i.abramov@mt-integration.ru>
    Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250306112046.17144-1-i.abramov@mt-integration.ru
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/mediatek: dsi: fix error codes in mtk_dsi_host_transfer() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Wed Jan 8 12:35:57 2025 +0300

    drm/mediatek: dsi: fix error codes in mtk_dsi_host_transfer()
    
    [ Upstream commit dcb166ee43c3d594e7b73a24f6e8cf5663eeff2c ]
    
    There is a type bug because the return statement:
    
            return ret < 0 ? ret : recv_cnt;
    
    The issue is that ret is an int, recv_cnt is a u32 and the function
    returns ssize_t, which is a signed long.  The way that the type promotion
    works is that the negative error codes are first cast to u32 and then
    to signed long.  The error codes end up being positive instead of
    negative and the callers treat them as success.
    
    Fixes: 81cc7e51c4f1 ("drm/mediatek: Allow commands to be sent during video mode")
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/r/202412210801.iADw0oIH-lkp@intel.com/
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Reviewed-by: CK Hu <ck.hu@mediatek.com>
    Link: https://patchwork.kernel.org/project/dri-devel/patch/b754a408-4f39-4e37-b52d-7706c132e27f@stanley.mountain/
    Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/mediatek: mtk_hdmi: Fix typo for aud_sampe_size member [+ + +]
Author: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Date:   Mon Feb 17 16:48:12 2025 +0100

    drm/mediatek: mtk_hdmi: Fix typo for aud_sampe_size member
    
    [ Upstream commit 72fcb88e7bbc053ed4fc74cebb0315b98a0f20c3 ]
    
    Rename member aud_sampe_size of struct hdmi_audio_param to
    aud_sample_size to fix a typo and enhance readability.
    
    This commit brings no functional changes.
    
    Fixes: 8f83f26891e1 ("drm/mediatek: Add HDMI support")
    Reviewed-by: CK Hu <ck.hu@mediatek.com>
    Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Link: https://patchwork.kernel.org/project/linux-mediatek/patch/20250217154836.108895-20-angelogioacchino.delregno@collabora.com/
    Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/mediatek: mtk_hdmi: Unregister audio platform device on failure [+ + +]
Author: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Date:   Mon Feb 17 16:48:10 2025 +0100

    drm/mediatek: mtk_hdmi: Unregister audio platform device on failure
    
    [ Upstream commit 0be123cafc06eed0fd1227166a66e786434b0c50 ]
    
    The probe function of this driver may fail after registering the
    audio platform device: in that case, the state is not getting
    cleaned up, leaving this device registered.
    
    Adding up to the mix, should the probe function of this driver
    return a probe deferral for N times, we're registering up to N
    audio platform devices and, again, never freeing them up.
    
    To fix this, add a pointer to the audio platform device in the
    mtk_hdmi structure, and add a devm action to unregister it upon
    driver removal or probe failure.
    
    Fixes: 8f83f26891e1 ("drm/mediatek: Add HDMI support")
    Reviewed-by: CK Hu <ck.hu@mediatek.com>
    Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Link: https://patchwork.kernel.org/project/linux-mediatek/patch/20250217154836.108895-18-angelogioacchino.delregno@collabora.com/
    Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/nouveau: Do not override forced connector status [+ + +]
Author: Thomas Zimmermann <tzimmermann@suse.de>
Date:   Tue Jan 14 10:57:25 2025 +0100

    drm/nouveau: Do not override forced connector status
    
    [ Upstream commit 01f1d77a2630e774ce33233c4e6723bca3ae9daa ]
    
    Keep user-forced connector status even if it cannot be programmed. Same
    behavior as for the rest of the drivers.
    
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Signed-off-by: Lyude Paul <lyude@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250114100214.195386-1-tzimmermann@suse.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/radeon: fix uninitialized size issue in radeon_vce_cs_parse() [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Tue Mar 11 14:14:59 2025 +0300

    drm/radeon: fix uninitialized size issue in radeon_vce_cs_parse()
    
    commit dd8689b52a24807c2d5ce0a17cb26dc87f75235c upstream.
    
    On the off chance that command stream passed from userspace via
    ioctl() call to radeon_vce_cs_parse() is weirdly crafted and
    first command to execute is to encode (case 0x03000001), the function
    in question will attempt to call radeon_vce_cs_reloc() with size
    argument that has not been properly initialized. Specifically, 'size'
    will point to 'tmp' variable before the latter had a chance to be
    assigned any value.
    
    Play it safe and init 'tmp' with 0, thus ensuring that
    radeon_vce_cs_reloc() will catch an early error in cases like these.
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    Fixes: 2fc5703abda2 ("drm/radeon: check VCE relocation buffer range v3")
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 2d52de55f9ee7aaee0e09ac443f77855989c6b68)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/v3d: Don't run jobs that have errors flagged in its fence [+ + +]
Author: Maíra Canal <mcanal@igalia.com>
Date:   Thu Mar 13 11:43:26 2025 -0300

    drm/v3d: Don't run jobs that have errors flagged in its fence
    
    commit 80cbee810e4e13cdbd3ae9654e9ecddf17f3e828 upstream.
    
    The V3D driver still relies on `drm_sched_increase_karma()` and
    `drm_sched_resubmit_jobs()` for resubmissions when a timeout occurs.
    The function `drm_sched_increase_karma()` marks the job as guilty, while
    `drm_sched_resubmit_jobs()` sets an error (-ECANCELED) in the DMA fence of
    that guilty job.
    
    Because of this, we must check whether the job’s DMA fence has been
    flagged with an error before executing the job. Otherwise, the same guilty
    job may be resubmitted indefinitely, causing repeated GPU resets.
    
    This patch adds a check for an error on the job's fence to prevent running
    a guilty job that was previously flagged when the GPU timed out.
    
    Note that the CPU and CACHE_CLEAN queues do not require this check, as
    their jobs are executed synchronously once the DRM scheduler starts them.
    
    Cc: stable@vger.kernel.org
    Fixes: d223f98f0209 ("drm/v3d: Add support for compute shader dispatch.")
    Fixes: 1584f16ca96e ("drm/v3d: Add support for submitting jobs to the TFU.")
    Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
    Signed-off-by: Maíra Canal <mcanal@igalia.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250313-v3d-gpu-reset-fixes-v4-1-c1e780d8e096@igalia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/vkms: Fix use after free and double free on init error [+ + +]
Author: José Expósito <jose.exposito89@gmail.com>
Date:   Wed Feb 12 09:49:12 2025 +0100

    drm/vkms: Fix use after free and double free on init error
    
    [ Upstream commit ed15511a773df86205bda66c37193569575ae828 ]
    
    If the driver initialization fails, the vkms_exit() function might
    access an uninitialized or freed default_config pointer and it might
    double free it.
    
    Fix both possible errors by initializing default_config only when the
    driver initialization succeeded.
    
    Reported-by: Louis Chauvet <louis.chauvet@bootlin.com>
    Closes: https://lore.kernel.org/all/Z5uDHcCmAwiTsGte@louis-chauvet-laptop/
    Fixes: 2df7af93fdad ("drm/vkms: Add vkms_config type")
    Signed-off-by: José Expósito <jose.exposito89@gmail.com>
    Reviewed-by: Thomas Zimmermann <tzimmremann@suse.de>
    Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250212084912.3196-1-jose.exposito89@gmail.com
    Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm: xlnx: zynqmp: Fix max dma segment size [+ + +]
Author: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Date:   Wed Jan 15 11:03:39 2025 +0200

    drm: xlnx: zynqmp: Fix max dma segment size
    
    [ Upstream commit 28b529a98525123acd37372a04d21e87ec2edcf7 ]
    
    Fix "mapping sg segment longer than device claims to support" warning by
    setting the max segment size.
    
    Fixes: d76271d22694 ("drm: xlnx: DRM/KMS driver for Xilinx ZynqMP DisplayPort Subsystem")
    Reviewed-by: Sean Anderson <sean.anderson@linux.dev>
    Tested-by: Sean Anderson <sean.anderson@linux.dev>
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250115-xilinx-formats-v2-10-160327ca652a@ideasonboard.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
EDAC/ie31200: Fix the DIMM size mask for several SoCs [+ + +]
Author: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Date:   Mon Mar 10 09:14:02 2025 +0800

    EDAC/ie31200: Fix the DIMM size mask for several SoCs
    
    [ Upstream commit 3427befbbca6b19fe0e37f91d66ce5221de70bf1 ]
    
    The DIMM size mask for {Sky, Kaby, Coffee} Lake is not bits{7:0},
    but bits{5:0}. Fix it.
    
    Fixes: 953dee9bbd24 ("EDAC, ie31200_edac: Add Skylake support")
    Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
    Signed-off-by: Tony Luck <tony.luck@intel.com>
    Tested-by: Gary Wang <gary.c.wang@intel.com>
    Link: https://lore.kernel.org/r/20250310011411.31685-3-qiuxu.zhuo@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

EDAC/ie31200: Fix the error path order of ie31200_init() [+ + +]
Author: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Date:   Mon Mar 10 09:14:03 2025 +0800

    EDAC/ie31200: Fix the error path order of ie31200_init()
    
    [ Upstream commit 231e341036d9988447e3b3345cf741a98139199e ]
    
    The error path order of ie31200_init() is incorrect, fix it.
    
    Fixes: 709ed1bcef12 ("EDAC/ie31200: Fallback if host bridge device is already initialized")
    Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
    Signed-off-by: Tony Luck <tony.luck@intel.com>
    Tested-by: Gary Wang <gary.c.wang@intel.com>
    Link: https://lore.kernel.org/r/20250310011411.31685-4-qiuxu.zhuo@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

EDAC/ie31200: Fix the size of EDAC_MC_LAYER_CHIP_SELECT layer [+ + +]
Author: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Date:   Mon Mar 10 09:14:01 2025 +0800

    EDAC/ie31200: Fix the size of EDAC_MC_LAYER_CHIP_SELECT layer
    
    [ Upstream commit d59d844e319d97682c8de29b88d2d60922a683b3 ]
    
    The EDAC_MC_LAYER_CHIP_SELECT layer pertains to the rank, not the DIMM.
    Fix its size to reflect the number of ranks instead of the number of DIMMs.
    Also delete the unused macros IE31200_{DIMMS,RANKS}.
    
    Fixes: 7ee40b897d18 ("ie31200_edac: Introduce the driver")
    Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
    Signed-off-by: Tony Luck <tony.luck@intel.com>
    Tested-by: Gary Wang <gary.c.wang@intel.com>
    Link: https://lore.kernel.org/r/20250310011411.31685-2-qiuxu.zhuo@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
exfat: fix the infinite loop in exfat_find_last_cluster() [+ + +]
Author: Yuezhang Mo <Yuezhang.Mo@sony.com>
Date:   Mon Mar 17 10:53:10 2025 +0800

    exfat: fix the infinite loop in exfat_find_last_cluster()
    
    [ Upstream commit b0522303f67255926b946aa66885a0104d1b2980 ]
    
    In exfat_find_last_cluster(), the cluster chain is traversed until
    the EOF cluster. If the cluster chain includes a loop due to file
    system corruption, the EOF cluster cannot be traversed, resulting
    in an infinite loop.
    
    If the number of clusters indicated by the file size is inconsistent
    with the cluster chain length, exfat_find_last_cluster() will return
    an error, so if this inconsistency is found, the traversal can be
    aborted without traversing to the EOF cluster.
    
    Reported-by: syzbot+f7d147e6db52b1e09dba@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=f7d147e6db52b1e09dba
    Tested-by: syzbot+f7d147e6db52b1e09dba@syzkaller.appspotmail.com
    Fixes: 31023864e67a ("exfat: add fat entry operations")
    Signed-off-by: Yuezhang Mo <Yuezhang.Mo@sony.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ext4: don't over-report free space or inodes in statvfs [+ + +]
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Fri Mar 14 00:38:42 2025 -0400

    ext4: don't over-report free space or inodes in statvfs
    
    commit f87d3af7419307ae26e705a2b2db36140db367a2 upstream.
    
    This fixes an analogus bug that was fixed in xfs in commit
    4b8d867ca6e2 ("xfs: don't over-report free space or inodes in
    statvfs") where statfs can report misleading / incorrect information
    where project quota is enabled, and the free space is less than the
    remaining quota.
    
    This commit will resolve a test failure in generic/762 which tests for
    this bug.
    
    Cc: stable@kernel.org
    Fixes: 689c958cbe6b ("ext4: add project quota support")
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: fix OOB read when checking dotdot dir [+ + +]
Author: Acs, Jakub <acsjakub@amazon.de>
Date:   Thu Mar 20 15:46:49 2025 +0000

    ext4: fix OOB read when checking dotdot dir
    
    commit d5e206778e96e8667d3bde695ad372c296dc9353 upstream.
    
    Mounting a corrupted filesystem with directory which contains '.' dir
    entry with rec_len == block size results in out-of-bounds read (later
    on, when the corrupted directory is removed).
    
    ext4_empty_dir() assumes every ext4 directory contains at least '.'
    and '..' as directory entries in the first data block. It first loads
    the '.' dir entry, performs sanity checks by calling ext4_check_dir_entry()
    and then uses its rec_len member to compute the location of '..' dir
    entry (in ext4_next_entry). It assumes the '..' dir entry fits into the
    same data block.
    
    If the rec_len of '.' is precisely one block (4KB), it slips through the
    sanity checks (it is considered the last directory entry in the data
    block) and leaves "struct ext4_dir_entry_2 *de" point exactly past the
    memory slot allocated to the data block. The following call to
    ext4_check_dir_entry() on new value of de then dereferences this pointer
    which results in out-of-bounds mem access.
    
    Fix this by extending __ext4_check_dir_entry() to check for '.' dir
    entries that reach the end of data block. Make sure to ignore the phony
    dir entries for checksum (by checking name_len for non-zero).
    
    Note: This is reported by KASAN as use-after-free in case another
    structure was recently freed from the slot past the bound, but it is
    really an OOB read.
    
    This issue was found by syzkaller tool.
    
    Call Trace:
    [   38.594108] BUG: KASAN: slab-use-after-free in __ext4_check_dir_entry+0x67e/0x710
    [   38.594649] Read of size 2 at addr ffff88802b41a004 by task syz-executor/5375
    [   38.595158]
    [   38.595288] CPU: 0 UID: 0 PID: 5375 Comm: syz-executor Not tainted 6.14.0-rc7 #1
    [   38.595298] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
    [   38.595304] Call Trace:
    [   38.595308]  <TASK>
    [   38.595311]  dump_stack_lvl+0xa7/0xd0
    [   38.595325]  print_address_description.constprop.0+0x2c/0x3f0
    [   38.595339]  ? __ext4_check_dir_entry+0x67e/0x710
    [   38.595349]  print_report+0xaa/0x250
    [   38.595359]  ? __ext4_check_dir_entry+0x67e/0x710
    [   38.595368]  ? kasan_addr_to_slab+0x9/0x90
    [   38.595378]  kasan_report+0xab/0xe0
    [   38.595389]  ? __ext4_check_dir_entry+0x67e/0x710
    [   38.595400]  __ext4_check_dir_entry+0x67e/0x710
    [   38.595410]  ext4_empty_dir+0x465/0x990
    [   38.595421]  ? __pfx_ext4_empty_dir+0x10/0x10
    [   38.595432]  ext4_rmdir.part.0+0x29a/0xd10
    [   38.595441]  ? __dquot_initialize+0x2a7/0xbf0
    [   38.595455]  ? __pfx_ext4_rmdir.part.0+0x10/0x10
    [   38.595464]  ? __pfx___dquot_initialize+0x10/0x10
    [   38.595478]  ? down_write+0xdb/0x140
    [   38.595487]  ? __pfx_down_write+0x10/0x10
    [   38.595497]  ext4_rmdir+0xee/0x140
    [   38.595506]  vfs_rmdir+0x209/0x670
    [   38.595517]  ? lookup_one_qstr_excl+0x3b/0x190
    [   38.595529]  do_rmdir+0x363/0x3c0
    [   38.595537]  ? __pfx_do_rmdir+0x10/0x10
    [   38.595544]  ? strncpy_from_user+0x1ff/0x2e0
    [   38.595561]  __x64_sys_unlinkat+0xf0/0x130
    [   38.595570]  do_syscall_64+0x5b/0x180
    [   38.595583]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fixes: ac27a0ec112a0 ("[PATCH] ext4: initial copy of files from ext3")
    Signed-off-by: Jakub Acs <acsjakub@amazon.de>
    Cc: Theodore Ts'o <tytso@mit.edu>
    Cc: Andreas Dilger <adilger.kernel@dilger.ca>
    Cc: linux-ext4@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Cc: Mahmoud Adam <mngyadam@amazon.com>
    Cc: stable@vger.kernel.org
    Cc: security@kernel.org
    Link: https://patch.msgid.link/b3ae36a6794c4a01944c7d70b403db5b@amazon.de
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fbdev: au1100fb: Move a variable assignment behind a null pointer check [+ + +]
Author: Markus Elfring <elfring@users.sourceforge.net>
Date:   Thu Apr 13 21:35:36 2023 +0200

    fbdev: au1100fb: Move a variable assignment behind a null pointer check
    
    [ Upstream commit 2df2c0caaecfd869b49e14f2b8df822397c5dd7f ]
    
    The address of a data structure member was determined before
    a corresponding null pointer check in the implementation of
    the function “au1100fb_setmode”.
    
    This issue was detected by using the Coccinelle software.
    
    Fixes: 3b495f2bb749 ("Au1100 FB driver uplift for 2.6.")
    Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
    Acked-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbdev: hyperv_fb: iounmap() the correct memory when removing a device [+ + +]
Author: Michael Kelley <mhklinux@outlook.com>
Date:   Sun Feb 9 15:52:52 2025 -0800

    fbdev: hyperv_fb: iounmap() the correct memory when removing a device
    
    [ Upstream commit 7241c886a71797cc51efc6fadec7076fcf6435c2 ]
    
    When a Hyper-V framebuffer device is removed, or the driver is unbound
    from a device, any allocated and/or mapped memory must be released. In
    particular, MMIO address space that was mapped to the framebuffer must
    be unmapped. Current code unmaps the wrong address, resulting in an
    error like:
    
    [ 4093.980597] iounmap: bad address 00000000c936c05c
    
    followed by a stack dump.
    
    Commit d21987d709e8 ("video: hyperv: hyperv_fb: Support deferred IO for
    Hyper-V frame buffer driver") changed the kind of address stored in
    info->screen_base, and the iounmap() call in hvfb_putmem() was not
    updated accordingly.
    
    Fix this by updating hvfb_putmem() to unmap the correct address.
    
    Fixes: d21987d709e8 ("video: hyperv: hyperv_fb: Support deferred IO for Hyper-V frame buffer driver")
    Signed-off-by: Michael Kelley <mhklinux@outlook.com>
    Reviewed-by: Saurabh Sengar <ssengar@linux.microsoft.com>
    Link: https://lore.kernel.org/r/20250209235252.2987-1-mhklinux@outlook.com
    Signed-off-by: Wei Liu <wei.liu@kernel.org>
    Message-ID: <20250209235252.2987-1-mhklinux@outlook.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbdev: sm501fb: Add some geometry checks. [+ + +]
Author: Danila Chernetsov <listdansp@mail.ru>
Date:   Wed Mar 19 01:30:11 2025 +0000

    fbdev: sm501fb: Add some geometry checks.
    
    [ Upstream commit aee50bd88ea5fde1ff4cc021385598f81a65830c ]
    
    Added checks for xoffset, yoffset settings.
    Incorrect settings of these parameters can lead to errors
    in sm501fb_pan_ functions.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 5fc404e47bdf ("[PATCH] fb: SM501 framebuffer driver")
    Signed-off-by: Danila Chernetsov <listdansp@mail.ru>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
firmware: imx-scu: fix OF node leak in .probe() [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Tue Dec 24 12:34:56 2024 +0900

    firmware: imx-scu: fix OF node leak in .probe()
    
    [ Upstream commit fbf10b86f6057cf79300720da4ea4b77e6708b0d ]
    
    imx_scu_probe() calls of_parse_phandle_with_args(), but does not
    release the OF node reference obtained by it. Add a of_node_put() call
    after done with the node.
    
    Fixes: f25a066d1a07 ("firmware: imx-scu: Support one TX and one RX")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs/ntfs3: Fix a couple integer overflows on 32bit systems [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Sun Feb 16 23:52:00 2025 +0300

    fs/ntfs3: Fix a couple integer overflows on 32bit systems
    
    [ Upstream commit 5ad414f4df2294b28836b5b7b69787659d6aa708 ]
    
    On 32bit systems the "off + sizeof(struct NTFS_DE)" addition can
    have an integer wrapping issue.  Fix it by using size_add().
    
    Fixes: 82cae269cfa9 ("fs/ntfs3: Add initialization of super block")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs/procfs: fix the comment above proc_pid_wchan() [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Wed Mar 19 14:02:22 2025 -0700

    fs/procfs: fix the comment above proc_pid_wchan()
    
    [ Upstream commit 6287fbad1cd91f0c25cdc3a580499060828a8f30 ]
    
    proc_pid_wchan() used to report kernel addresses to user space but that is
    no longer the case today.  Bring the comment above proc_pid_wchan() in
    sync with the implementation.
    
    Link: https://lkml.kernel.org/r/20250319210222.1518771-1-bvanassche@acm.org
    Fixes: b2f73922d119 ("fs/proc, core/debug: Don't expose absolute kernel addresses via wchan")
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Cc: Kees Cook <kees@kernel.org>
    Cc: Eric W. Biederman <ebiederm@xmission.com>
    Cc: Alexey Dobriyan <adobriyan@gmail.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fuse: don't truncate cached, mutated symlink [+ + +]
Author: Miklos Szeredi <mszeredi@redhat.com>
Date:   Thu Feb 20 11:02:58 2025 +0100

    fuse: don't truncate cached, mutated symlink
    
    [ Upstream commit b4c173dfbb6c78568578ff18f9e8822d7bd0e31b ]
    
    Fuse allows the value of a symlink to change and this property is exploited
    by some filesystems (e.g. CVMFS).
    
    It has been observed, that sometimes after changing the symlink contents,
    the value is truncated to the old size.
    
    This is caused by fuse_getattr() racing with fuse_reverse_inval_inode().
    fuse_reverse_inval_inode() updates the fuse_inode's attr_version, which
    results in fuse_change_attributes() exiting before updating the cached
    attributes
    
    This is okay, as the cached attributes remain invalid and the next call to
    fuse_change_attributes() will likely update the inode with the correct
    values.
    
    The reason this causes problems is that cached symlinks will be
    returned through page_get_link(), which truncates the symlink to
    inode->i_size.  This is correct for filesystems that don't mutate
    symlinks, but in this case it causes bad behavior.
    
    The solution is to just remove this truncation.  This can cause a
    regression in a filesystem that relies on supplying a symlink larger than
    the file size, but this is unlikely.  If that happens we'd need to make
    this behavior conditional.
    
    Reported-by: Laura Promberger <laura.promberger@cern.ch>
    Tested-by: Sam Lewis <samclewis@google.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Link: https://lore.kernel.org/r/20250220100258.793363-1-mszeredi@redhat.com
    Reviewed-by: Bernd Schubert <bschubert@ddn.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fuse: fix dax truncate/punch_hole fault path [+ + +]
Author: Alistair Popple <apopple@nvidia.com>
Date:   Fri Feb 28 14:30:56 2025 +1100

    fuse: fix dax truncate/punch_hole fault path
    
    [ Upstream commit 7851bf649d423edd7286b292739f2eefded3d35c ]
    
    Patch series "fs/dax: Fix ZONE_DEVICE page reference counts", v9.
    
    Device and FS DAX pages have always maintained their own page reference
    counts without following the normal rules for page reference counting.  In
    particular pages are considered free when the refcount hits one rather
    than zero and refcounts are not added when mapping the page.
    
    Tracking this requires special PTE bits (PTE_DEVMAP) and a secondary
    mechanism for allowing GUP to hold references on the page (see
    get_dev_pagemap).  However there doesn't seem to be any reason why FS DAX
    pages need their own reference counting scheme.
    
    By treating the refcounts on these pages the same way as normal pages we
    can remove a lot of special checks.  In particular pXd_trans_huge()
    becomes the same as pXd_leaf(), although I haven't made that change here.
    It also frees up a valuable SW define PTE bit on architectures that have
    devmap PTE bits defined.
    
    It also almost certainly allows further clean-up of the devmap managed
    functions, but I have left that as a future improvment.  It also enables
    support for compound ZONE_DEVICE pages which is one of my primary
    motivators for doing this work.
    
    This patch (of 20):
    
    FS DAX requires file systems to call into the DAX layout prior to
    unlinking inodes to ensure there is no ongoing DMA or other remote access
    to the direct mapped page.  The fuse file system implements
    fuse_dax_break_layouts() to do this which includes a comment indicating
    that passing dmap_end == 0 leads to unmapping of the whole file.
    
    However this is not true - passing dmap_end == 0 will not unmap anything
    before dmap_start, and further more dax_layout_busy_page_range() will not
    scan any of the range to see if there maybe ongoing DMA access to the
    range.  Fix this by passing -1 for dmap_end to fuse_dax_break_layouts()
    which will invalidate the entire file range to
    dax_layout_busy_page_range().
    
    Link: https://lkml.kernel.org/r/cover.8068ad144a7eea4a813670301f4d2a86a8e68ec4.1740713401.git-series.apopple@nvidia.com
    Link: https://lkml.kernel.org/r/f09a34b6c40032022e4ddee6fadb7cc676f08867.1740713401.git-series.apopple@nvidia.com
    Fixes: 6ae330cad6ef ("virtiofs: serialize truncate/punch_hole and dax fault path")
    Signed-off-by: Alistair Popple <apopple@nvidia.com>
    Co-developed-by: Dan Williams <dan.j.williams@intel.com>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Reviewed-by: Balbir Singh <balbirs@nvidia.com>
    Tested-by: Alison Schofield <alison.schofield@intel.com>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    Cc: Alexander Gordeev <agordeev@linux.ibm.com>
    Cc: Asahi Lina <lina@asahilina.net>
    Cc: Bjorn Helgaas <bhelgaas@google.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Christian Borntraeger <borntraeger@linux.ibm.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Chunyan Zhang <zhang.lyra@gmail.com>
    Cc: "Darrick J. Wong" <djwong@kernel.org>
    Cc: Dave Chinner <david@fromorbit.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Dave Jiang <dave.jiang@intel.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
    Cc: Heiko Carstens <hca@linux.ibm.com>
    Cc: Huacai Chen <chenhuacai@kernel.org>
    Cc: Ira Weiny <ira.weiny@intel.com>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Jason Gunthorpe <jgg@nvidia.com>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: linmiaohe <linmiaohe@huawei.com>
    Cc: Logan Gunthorpe <logang@deltatee.com>
    Cc: Matthew Wilcow (Oracle) <willy@infradead.org>
    Cc: Michael "Camp Drill Sergeant" Ellerman <mpe@ellerman.id.au>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Sven Schnelle <svens@linux.ibm.com>
    Cc: Ted Ts'o <tytso@mit.edu>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Cc: Vishal Verma <vishal.l.verma@intel.com>
    Cc: WANG Xuerui <kernel@xen0n.name>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gre: Fix IPv6 link-local address generation. [+ + +]
Author: Guillaume Nault <gnault@redhat.com>
Date:   Fri Mar 7 20:28:53 2025 +0100

    gre: Fix IPv6 link-local address generation.
    
    [ Upstream commit 183185a18ff96751db52a46ccf93fff3a1f42815 ]
    
    Use addrconf_addr_gen() to generate IPv6 link-local addresses on GRE
    devices in most cases and fall back to using add_v4_addrs() only in
    case the GRE configuration is incompatible with addrconf_addr_gen().
    
    GRE used to use addrconf_addr_gen() until commit e5dd729460ca
    ("ip/ip6_gre: use the same logic as SIT interfaces when computing v6LL
    address") restricted this use to gretap and ip6gretap devices, and
    created add_v4_addrs() (borrowed from SIT) for non-Ethernet GRE ones.
    
    The original problem came when commit 9af28511be10 ("addrconf: refuse
    isatap eui64 for INADDR_ANY") made __ipv6_isatap_ifid() fail when its
    addr parameter was 0. The commit says that this would create an invalid
    address, however, I couldn't find any RFC saying that the generated
    interface identifier would be wrong. Anyway, since gre over IPv4
    devices pass their local tunnel address to __ipv6_isatap_ifid(), that
    commit broke their IPv6 link-local address generation when the local
    address was unspecified.
    
    Then commit e5dd729460ca ("ip/ip6_gre: use the same logic as SIT
    interfaces when computing v6LL address") tried to fix that case by
    defining add_v4_addrs() and calling it to generate the IPv6 link-local
    address instead of using addrconf_addr_gen() (apart for gretap and
    ip6gretap devices, which would still use the regular
    addrconf_addr_gen(), since they have a MAC address).
    
    That broke several use cases because add_v4_addrs() isn't properly
    integrated into the rest of IPv6 Neighbor Discovery code. Several of
    these shortcomings have been fixed over time, but add_v4_addrs()
    remains broken on several aspects. In particular, it doesn't send any
    Router Sollicitations, so the SLAAC process doesn't start until the
    interface receives a Router Advertisement. Also, add_v4_addrs() mostly
    ignores the address generation mode of the interface
    (/proc/sys/net/ipv6/conf/*/addr_gen_mode), thus breaking the
    IN6_ADDR_GEN_MODE_RANDOM and IN6_ADDR_GEN_MODE_STABLE_PRIVACY cases.
    
    Fix the situation by using add_v4_addrs() only in the specific scenario
    where the normal method would fail. That is, for interfaces that have
    all of the following characteristics:
    
      * run over IPv4,
      * transport IP packets directly, not Ethernet (that is, not gretap
        interfaces),
      * tunnel endpoint is INADDR_ANY (that is, 0),
      * device address generation mode is EUI64.
    
    In all other cases, revert back to the regular addrconf_addr_gen().
    
    Also, remove the special case for ip6gre interfaces in add_v4_addrs(),
    since ip6gre devices now always use addrconf_addr_gen() instead.
    
    Fixes: e5dd729460ca ("ip/ip6_gre: use the same logic as SIT interfaces when computing v6LL address")
    Signed-off-by: Guillaume Nault <gnault@redhat.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/559c32ce5c9976b269e6337ac9abb6a96abe5096.1741375285.git.gnault@redhat.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
HID: hid-plantronics: Add mic mute mapping and generalize quirks [+ + +]
Author: Terry Junge <linuxhid@cosmicgizmosystems.com>
Date:   Fri Jan 17 16:58:38 2025 -0800

    HID: hid-plantronics: Add mic mute mapping and generalize quirks
    
    commit 9821709af892be9fbf4ee9a50b2f3e0604295ce0 upstream.
    
    Add mapping for headset mute key events.
    
    Remove PLT_QUIRK_DOUBLE_VOLUME_KEYS quirk and made it generic.
    The quirk logic did not keep track of the actual previous key
    so any key event occurring in less than or equal to 5ms was ignored.
    
    Remove PLT_QUIRK_FOLLOWED_OPPOSITE_VOLUME_KEYS quirk.
    It had the same logic issue as the double key quirk and was actually
    masking the as designed behavior of most of the headsets.
    It's occurrence should be minimized with the ALSA control naming
    quirk that is part of the patch set.
    
    Signed-off-by: Terry Junge <linuxhid@cosmicgizmosystems.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

HID: ignore non-functional sensor in HP 5MP Camera [+ + +]
Author: Chia-Lin Kao (AceLan) <acelan.kao@canonical.com>
Date:   Wed Jan 15 15:00:20 2025 +0800

    HID: ignore non-functional sensor in HP 5MP Camera
    
    [ Upstream commit 363236d709e75610b628c2a4337ccbe42e454b6d ]
    
    The HP 5MP Camera (USB ID 0408:5473) reports a HID sensor interface that
    is not actually implemented. Attempting to access this non-functional
    sensor via iio_info causes system hangs as runtime PM tries to wake up
    an unresponsive sensor.
    
      [453] hid-sensor-hub 0003:0408:5473.0003: Report latency attributes: ffffffff:ffffffff
      [453] hid-sensor-hub 0003:0408:5473.0003: common attributes: 5:1, 2:1, 3:1 ffffffff:ffffffff
    
    Add this device to the HID ignore list since the sensor interface is
    non-functional by design and should not be exposed to userspace.
    
    Signed-off-by: Chia-Lin Kao (AceLan) <acelan.kao@canonical.com>
    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: intel-ish-hid: fix the length of MNG_SYNC_FW_CLOCK in doorbell [+ + +]
Author: Zhang Lixu <lixu.zhang@intel.com>
Date:   Wed Jan 22 09:29:00 2025 +0800

    HID: intel-ish-hid: fix the length of MNG_SYNC_FW_CLOCK in doorbell
    
    [ Upstream commit 4b54ae69197b9f416baa0fceadff7e89075f8454 ]
    
    The timestamps in the Firmware log and HID sensor samples are incorrect.
    They show 1970-01-01 because the current IPC driver only uses the first
    8 bytes of bootup time when synchronizing time with the firmware. The
    firmware converts the bootup time to UTC time, which results in the
    display of 1970-01-01.
    
    In write_ipc_from_queue(), when sending the MNG_SYNC_FW_CLOCK message,
    the clock is updated according to the definition of ipc_time_update_msg.
    However, in _ish_sync_fw_clock(), the message length is specified as the
    size of uint64_t when building the doorbell. As a result, the firmware
    only receives the first 8 bytes of struct ipc_time_update_msg.
    This patch corrects the length in the doorbell to ensure the entire
    ipc_time_update_msg is sent, fixing the timestamp issue.
    
    Signed-off-by: Zhang Lixu <lixu.zhang@intel.com>
    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: remove superfluous (and wrong) Makefile entry for CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER [+ + +]
Author: Jiri Kosina <jikos@kernel.org>
Date:   Wed Mar 12 09:08:22 2025 +0100

    HID: remove superfluous (and wrong) Makefile entry for CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER
    
    [ Upstream commit fe0fb58325e519008e2606a5aa2cff7ad23e212d ]
    
    The line
    
            obj-$(INTEL_ISH_FIRMWARE_DOWNLOADER)   += intel-ish-hid/
    
    in top-level HID Makefile is both superfluous (as CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER
    depends on CONFIG_INTEL_ISH_HID, which contains intel-ish-hid/ already) and wrong (as it's
    missing the CONFIG_ prefix).
    
    Just remove it.
    
    Fixes: 91b228107da3e ("HID: intel-ish-hid: ISH firmware loader client driver")
    Reported-by: Jiri Slaby <jirislaby@kernel.org>
    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hrtimers: Mark is_migration_base() with __always_inline [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Thu Jan 16 18:07:45 2025 +0200

    hrtimers: Mark is_migration_base() with __always_inline
    
    [ Upstream commit 27af31e44949fa85550176520ef7086a0d00fd7b ]
    
    When is_migration_base() is unused, it prevents kernel builds
    with clang, `make W=1` and CONFIG_WERROR=y:
    
    kernel/time/hrtimer.c:156:20: error: unused function 'is_migration_base' [-Werror,-Wunused-function]
      156 | static inline bool is_migration_base(struct hrtimer_clock_base *base)
          |                    ^~~~~~~~~~~~~~~~~
    
    Fix this by marking it with __always_inline.
    
    [ tglx: Use __always_inline instead of __maybe_unused and move it into the
            usage sites conditional ]
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/all/20250116160745.243358-1-andriy.shevchenko@linux.intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hwmon: (nct6775-core) Fix out of bounds access for NCT679{8,9} [+ + +]
Author: Tasos Sahanidis <tasos@tasossah.com>
Date:   Wed Mar 12 05:08:32 2025 +0200

    hwmon: (nct6775-core) Fix out of bounds access for NCT679{8,9}
    
    [ Upstream commit 815f80ad20b63830949a77c816e35395d5d55144 ]
    
    pwm_num is set to 7 for these chips, but NCT6776_REG_PWM_MODE and
    NCT6776_PWM_MODE_MASK only contain 6 values.
    
    Fix this by adding another 0 to the end of each array.
    
    Signed-off-by: Tasos Sahanidis <tasos@tasossah.com>
    Link: https://lore.kernel.org/r/20250312030832.106475-1-tasos@tasossah.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i2c: ali1535: Fix an error handling path in ali1535_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Mon Mar 3 20:53:08 2025 +0100

    i2c: ali1535: Fix an error handling path in ali1535_probe()
    
    [ Upstream commit 9b5463f349d019a261f1e80803447efca3126151 ]
    
    If i2c_add_adapter() fails, the request_region() call in ali1535_setup()
    must be undone by a corresponding release_region() call, as done in the
    remove function.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/0daf63d7a2ce74c02e2664ba805bbfadab7d25e5.1741031571.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: ali15x3: Fix an error handling path in ali15x3_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Mon Mar 3 20:58:06 2025 +0100

    i2c: ali15x3: Fix an error handling path in ali15x3_probe()
    
    [ Upstream commit 6e55caaf30c88209d097e575a169b1dface1ab69 ]
    
    If i2c_add_adapter() fails, the request_region() call in ali15x3_setup()
    must be undone by a corresponding release_region() call, as done in the
    remove function.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/9b2090cbcc02659f425188ea05f2e02745c4e67b.1741031878.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: omap: fix IRQ storms [+ + +]
Author: Andreas Kemnade <andreas@kemnade.info>
Date:   Fri Feb 28 15:04:20 2025 +0100

    i2c: omap: fix IRQ storms
    
    commit 285df995f90e3d61d97f327d34b9659d92313314 upstream.
    
    On the GTA04A5 writing a reset command to the gyroscope causes IRQ
    storms because NACK IRQs are enabled and therefore triggered but not
    acked.
    
    Sending a reset command to the gyroscope by
    i2cset 1 0x69 0x14 0xb6
    with an additional debug print in the ISR (not the thread) itself
    causes
    
    [ 363.353515] i2c i2c-1: ioctl, cmd=0x720, arg=0xbe801b00
    [ 363.359039] omap_i2c 48072000.i2c: addr: 0x0069, len: 2, flags: 0x0, stop: 1
    [ 363.366180] omap_i2c 48072000.i2c: IRQ LL (ISR = 0x1110)
    [ 363.371673] omap_i2c 48072000.i2c: IRQ (ISR = 0x0010)
    [ 363.376892] omap_i2c 48072000.i2c: IRQ LL (ISR = 0x0102)
    [ 363.382263] omap_i2c 48072000.i2c: IRQ LL (ISR = 0x0102)
    [ 363.387664] omap_i2c 48072000.i2c: IRQ LL (ISR = 0x0102)
    repeating till infinity
    [...]
    (0x2 = NACK, 0x100 = Bus free, which is not enabled)
    Apparently no other IRQ bit gets set, so this stalls.
    
    Do not ignore enabled interrupts and make sure they are acked.
    If the NACK IRQ is not needed, it should simply not enabled, but
    according to the above log, caring about it is necessary unless
    the Bus free IRQ is enabled and handled. The assumption that is
    will always come with a ARDY IRQ, which was the idea behind
    ignoring it, proves wrong.
    It is true for simple reads from an unused address.
    
    To still avoid the i2cdetect trouble which is the reason for
    commit c770657bd261 ("i2c: omap: Fix standard mode false ACK readings"),
    avoid doing much about NACK in omap_i2c_xfer_data() which is used
    by both IRQ mode and polling mode, so also the false detection fix
    is extended to polling usage and IRQ storms are avoided.
    
    By changing this, the hardirq handler is not needed anymore to filter
    stuff.
    
    The mentioned gyro reset now just causes a -ETIMEDOUT instead of
    hanging the system.
    
    Fixes: c770657bd261 ("i2c: omap: Fix standard mode false ACK readings").
    CC: stable@kernel.org
    Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
    Tested-by: Nishanth Menon <nm@ti.com>
    Reviewed-by: Aniket Limaye <a-limaye@ti.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/20250228140420.379498-1-andreas@kemnade.info
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: sis630: Fix an error handling path in sis630_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Mon Mar 3 21:26:54 2025 +0100

    i2c: sis630: Fix an error handling path in sis630_probe()
    
    [ Upstream commit 2b22459792fcb4def9f0936d64575ac11a95a58d ]
    
    If i2c_add_adapter() fails, the request_region() call in sis630_setup()
    must be undone by a corresponding release_region() call, as done in the
    remove function.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Link: https://lore.kernel.org/r/3d607601f2c38e896b10207963c6ab499ca5c307.1741033587.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i3c: master: svc: Fix missing the IBI rules [+ + +]
Author: Stanley Chu <yschu@nuvoton.com>
Date:   Tue Mar 18 13:36:04 2025 +0800

    i3c: master: svc: Fix missing the IBI rules
    
    [ Upstream commit 9cecad134d84d14dc72a0eea7a107691c3e5a837 ]
    
    The code does not add IBI rules for devices with controller capability.
    However, the secondary controller has the controller capability and works
    at target mode when the device is probed. Therefore, add IBI rules for
    such devices.
    
    Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver")
    Signed-off-by: Stanley Chu <yschu@nuvoton.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://lore.kernel.org/r/20250318053606.3087121-2-yschu@nuvoton.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
IB/mad: Check available slots before posting receive WRs [+ + +]
Author: Maher Sanalla <msanalla@nvidia.com>
Date:   Thu Mar 13 16:20:17 2025 +0200

    IB/mad: Check available slots before posting receive WRs
    
    [ Upstream commit 37826f0a8c2f6b6add5179003b8597e32a445362 ]
    
    The ib_post_receive_mads() function handles posting receive work
    requests (WRs) to MAD QPs and is called in two cases:
    1) When a MAD port is opened.
    2) When a receive WQE is consumed upon receiving a new MAD.
    
    Whereas, if MADs arrive during the port open phase, a race condition
    might cause an extra WR to be posted, exceeding the QP’s capacity.
    This leads to failures such as:
    infiniband mlx5_0: ib_post_recv failed: -12
    infiniband mlx5_0: Couldn't post receive WRs
    infiniband mlx5_0: Couldn't start port
    infiniband mlx5_0: Couldn't open port 1
    
    Fix this by checking the current receive count before posting a new WR.
    If the QP’s receive queue is full, do not post additional WRs.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Maher Sanalla <msanalla@nvidia.com>
    Link: https://patch.msgid.link/c4984ba3c3a98a5711a558bccefcad789587ecf1.1741875592.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ice: fix memory leak in aRFS after reset [+ + +]
Author: Grzegorz Nitka <grzegorz.nitka@intel.com>
Date:   Thu Jan 23 09:15:39 2025 +0100

    ice: fix memory leak in aRFS after reset
    
    [ Upstream commit 23d97f18901ef5e4e264e3b1777fe65c760186b5 ]
    
    Fix aRFS (accelerated Receive Flow Steering) structures memory leak by
    adding a checker to verify if aRFS memory is already allocated while
    configuring VSI. aRFS objects are allocated in two cases:
    - as part of VSI initialization (at probe), and
    - as part of reset handling
    
    However, VSI reconfiguration executed during reset involves memory
    allocation one more time, without prior releasing already allocated
    resources. This led to the memory leak with the following signature:
    
    [root@os-delivery ~]# cat /sys/kernel/debug/kmemleak
    unreferenced object 0xff3c1ca7252e6000 (size 8192):
      comm "kworker/0:0", pid 8, jiffies 4296833052
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      backtrace (crc 0):
        [<ffffffff991ec485>] __kmalloc_cache_noprof+0x275/0x340
        [<ffffffffc0a6e06a>] ice_init_arfs+0x3a/0xe0 [ice]
        [<ffffffffc09f1027>] ice_vsi_cfg_def+0x607/0x850 [ice]
        [<ffffffffc09f244b>] ice_vsi_setup+0x5b/0x130 [ice]
        [<ffffffffc09c2131>] ice_init+0x1c1/0x460 [ice]
        [<ffffffffc09c64af>] ice_probe+0x2af/0x520 [ice]
        [<ffffffff994fbcd3>] local_pci_probe+0x43/0xa0
        [<ffffffff98f07103>] work_for_cpu_fn+0x13/0x20
        [<ffffffff98f0b6d9>] process_one_work+0x179/0x390
        [<ffffffff98f0c1e9>] worker_thread+0x239/0x340
        [<ffffffff98f14abc>] kthread+0xcc/0x100
        [<ffffffff98e45a6d>] ret_from_fork+0x2d/0x50
        [<ffffffff98e083ba>] ret_from_fork_asm+0x1a/0x30
        ...
    
    Fixes: 28bf26724fdb ("ice: Implement aRFS")
    Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
    Signed-off-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iio: accel: mma8452: Ensure error return on failure to matching oversampling ratio [+ + +]
Author: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Date:   Mon Feb 17 14:01:28 2025 +0000

    iio: accel: mma8452: Ensure error return on failure to matching oversampling ratio
    
    [ Upstream commit df330c808182a8beab5d0f84a6cbc9cff76c61fc ]
    
    If a match was not found, then the write_raw() callback would return
    the odr index, not an error. Return -EINVAL if this occurs.
    To avoid similar issues in future, introduce j, a new indexing variable
    rather than using ret for this purpose.
    
    Fixes: 79de2ee469aa ("iio: accel: mma8452: claim direct mode during write raw")
    Reviewed-by: David Lechner <dlechner@baylibre.com>
    Link: https://patch.msgid.link/20250217140135.896574-2-jic23@kernel.org
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: adc: ad7124: Fix comparison of channel configs [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Date:   Mon Mar 3 12:47:01 2025 +0100

    iio: adc: ad7124: Fix comparison of channel configs
    
    [ Upstream commit 05a5d874f7327b75e9bc4359618017e047cc129c ]
    
    Checking the binary representation of two structs (of the same type)
    for equality doesn't have the same semantic as comparing all members for
    equality. The former might find a difference where the latter doesn't in
    the presence of padding or when ambiguous types like float or bool are
    involved. (Floats typically have different representations for single
    values, like -0.0 vs +0.0, or 0.5 * 2² vs 0.25 * 2³. The type bool has
    at least 8 bits and the raw values 1 and 2 (probably) both evaluate to
    true, but memcmp finds a difference.)
    
    When searching for a channel that already has the configuration we need,
    the comparison by member is the one that is needed.
    
    Convert the comparison accordingly to compare the members one after
    another. Also add a static_assert guard to (somewhat) ensure that when
    struct ad7124_channel_config::config_props is expanded, the comparison
    is adapted, too.
    
    This issue is somewhat theoretic, but using memcmp() on a struct is a
    bad pattern that is worth fixing.
    
    Fixes: 7b8d045e497a ("iio: adc: ad7124: allow more than 8 channels")
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
    Link: https://patch.msgid.link/20250303114659.1672695-13-u.kleine-koenig@baylibre.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv6: Fix memleak of nhc_pcpu_rth_output in fib_check_nh_v6_gw(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Tue Mar 11 18:03:25 2025 -0700

    ipv6: Fix memleak of nhc_pcpu_rth_output in fib_check_nh_v6_gw().
    
    [ Upstream commit 9740890ee20e01f99ff1dde84c63dcf089fabb98 ]
    
    fib_check_nh_v6_gw() expects that fib6_nh_init() cleans up everything
    when it fails.
    
    Commit 7dd73168e273 ("ipv6: Always allocate pcpu memory in a fib6_nh")
    moved fib_nh_common_init() before alloc_percpu_gfp() within fib6_nh_init()
    but forgot to add cleanup for fib6_nh->nh_common.nhc_pcpu_rth_output in
    case it fails to allocate fib6_nh->rt6i_pcpu, resulting in memleak.
    
    Let's call fib_nh_common_release() and clear nhc_pcpu_rth_output in the
    error path.
    
    Note that we can remove the fib6_nh_release() call in nh_create_ipv6()
    later in net-next.git.
    
    Fixes: 7dd73168e273 ("ipv6: Always allocate pcpu memory in a fib6_nh")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250312010333.56001-1-kuniyu@amazon.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: fix omitted netlink attributes when using RTEXT_FILTER_SKIP_STATS [+ + +]
Author: Fernando Fernandez Mancera <ffmancera@riseup.net>
Date:   Wed Apr 2 14:17:51 2025 +0200

    ipv6: fix omitted netlink attributes when using RTEXT_FILTER_SKIP_STATS
    
    [ Upstream commit 7ac6ea4a3e0898db76aecccd68fb2c403eb7d24e ]
    
    Using RTEXT_FILTER_SKIP_STATS is incorrectly skipping non-stats IPv6
    netlink attributes on link dump. This causes issues on userspace tools,
    e.g iproute2 is not rendering address generation mode as it should due
    to missing netlink attribute.
    
    Move the filling of IFLA_INET6_STATS and IFLA_INET6_ICMP6STATS to a
    helper function guarded by a flag check to avoid hitting the same
    situation in the future.
    
    Fixes: d5566fd72ec1 ("rtnetlink: RTEXT_FILTER_SKIP_STATS support to avoid dumping inet/inet6 stats")
    Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20250402121751.3108-1-ffmancera@riseup.net
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: Fix signed integer overflow in __ip6_append_data [+ + +]
Author: Wang Yufen <wangyufen@huawei.com>
Date:   Tue Jun 7 20:00:27 2022 +0800

    ipv6: Fix signed integer overflow in __ip6_append_data
    
    commit f93431c86b631bbca5614c66f966bf3ddb3c2803 upstream.
    
    Resurrect ubsan overflow checks and ubsan report this warning,
    fix it by change the variable [length] type to size_t.
    
    UBSAN: signed-integer-overflow in net/ipv6/ip6_output.c:1489:19
    2147479552 + 8567 cannot be represented in type 'int'
    CPU: 0 PID: 253 Comm: err Not tainted 5.16.0+ #1
    Hardware name: linux,dummy-virt (DT)
    Call trace:
      dump_backtrace+0x214/0x230
      show_stack+0x30/0x78
      dump_stack_lvl+0xf8/0x118
      dump_stack+0x18/0x30
      ubsan_epilogue+0x18/0x60
      handle_overflow+0xd0/0xf0
      __ubsan_handle_add_overflow+0x34/0x44
      __ip6_append_data.isra.48+0x1598/0x1688
      ip6_append_data+0x128/0x260
      udpv6_sendmsg+0x680/0xdd0
      inet6_sendmsg+0x54/0x90
      sock_sendmsg+0x70/0x88
      ____sys_sendmsg+0xe8/0x368
      ___sys_sendmsg+0x98/0xe0
      __sys_sendmmsg+0xf4/0x3b8
      __arm64_sys_sendmmsg+0x34/0x48
      invoke_syscall+0x64/0x160
      el0_svc_common.constprop.4+0x124/0x300
      do_el0_svc+0x44/0xc8
      el0_svc+0x3c/0x1e8
      el0t_64_sync_handler+0x88/0xb0
      el0t_64_sync+0x16c/0x170
    
    Changes since v1:
    -Change the variable [length] type to unsigned, as Eric Dumazet suggested.
    Changes since v2:
    -Don't change exthdrlen type in ip6_make_skb, as Paolo Abeni suggested.
    Changes since v3:
    -Don't change ulen type in udpv6_sendmsg and l2tp_ip6_sendmsg, as
    Jakub Kicinski suggested.
    
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Wang Yufen <wangyufen@huawei.com>
    Link: https://lore.kernel.org/r/20220607120028.845916-1-wangyufen@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    [ Conflict due to f37a4cc6bb0b ("udp6: pass flow in ip6_make_skb
      together with cork") not in the tree ]
    Signed-off-by: Abdelkareem Abdelsaamad <kareemem@amazon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ipv6: Set errno after ip_fib_metrics_init() in ip6_route_info_create(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Tue Mar 11 18:38:48 2025 -0700

    ipv6: Set errno after ip_fib_metrics_init() in ip6_route_info_create().
    
    [ Upstream commit 9a81fc3480bf5dbe2bf80e278c440770f6ba2692 ]
    
    While creating a new IPv6, we could get a weird -ENOMEM when
    RTA_NH_ID is set and either of the conditions below is true:
    
      1) CONFIG_IPV6_SUBTREES is enabled and rtm_src_len is specified
      2) nexthop_get() fails
    
    e.g.)
    
      # strace ip -6 route add fe80::dead:beef:dead:beef nhid 1 from ::
      recvmsg(3, {msg_iov=[{iov_base=[...[
        {error=-ENOMEM, msg=[... [...]]},
        [{nla_len=49, nla_type=NLMSGERR_ATTR_MSG}, "Nexthops can not be used with so"...]
      ]], iov_len=32768}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 148
    
    Let's set err explicitly after ip_fib_metrics_init() in
    ip6_route_info_create().
    
    Fixes: f88d8ea67fbd ("ipv6: Plumb support for nexthop object in a fib6_info")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://patch.msgid.link/20250312013854.61125-1-kuniyu@amazon.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipvs: prevent integer overflow in do_ip_vs_get_ctl() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Mon Mar 10 10:45:53 2025 +0300

    ipvs: prevent integer overflow in do_ip_vs_get_ctl()
    
    [ Upstream commit 80b78c39eb86e6b55f56363b709eb817527da5aa ]
    
    The get->num_services variable is an unsigned int which is controlled by
    the user.  The struct_size() function ensures that the size calculation
    does not overflow an unsigned long, however, we are saving the result to
    an int so the calculation can overflow.
    
    Both "len" and "get->num_services" come from the user.  This check is
    just a sanity check to help the user and ensure they are using the API
    correctly.  An integer overflow here is not a big deal.  This has no
    security impact.
    
    Save the result from struct_size() type size_t to fix this integer
    overflow bug.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Acked-by: Julian Anastasov <ja@ssi.bg>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iscsi_ibft: Fix UBSAN shift-out-of-bounds warning in ibft_attr_show_nic() [+ + +]
Author: Chengen Du <chengen.du@canonical.com>
Date:   Tue Jan 14 12:12:34 2025 +0800

    iscsi_ibft: Fix UBSAN shift-out-of-bounds warning in ibft_attr_show_nic()
    
    [ Upstream commit 07e0d99a2f701123ad3104c0f1a1e66bce74d6e5 ]
    
    When performing an iSCSI boot using IPv6, iscsistart still reads the
    /sys/firmware/ibft/ethernetX/subnet-mask entry. Since the IPv6 prefix
    length is 64, this causes the shift exponent to become negative,
    triggering a UBSAN warning. As the concept of a subnet mask does not
    apply to IPv6, the value is set to ~0 to suppress the warning message.
    
    Signed-off-by: Chengen Du <chengen.du@canonical.com>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
isofs: fix KMSAN uninit-value bug in do_isofs_readdir() [+ + +]
Author: Qasim Ijaz <qasdev00@gmail.com>
Date:   Tue Feb 11 19:59:00 2025 +0000

    isofs: fix KMSAN uninit-value bug in do_isofs_readdir()
    
    [ Upstream commit 81a82e8f33880793029cd6f8a766fb13b737e6a7 ]
    
    In do_isofs_readdir() when assigning the variable
    "struct iso_directory_record *de" the b_data field of the buffer_head
    is accessed and an offset is added to it, the size of b_data is 2048
    and the offset size is 2047, meaning
    "de = (struct iso_directory_record *) (bh->b_data + offset);"
    yields the final byte of the 2048 sized b_data block.
    
    The first byte of the directory record (de_len) is then read and
    found to be 31, meaning the directory record size is 31 bytes long.
    The directory record is defined by the structure:
    
            struct iso_directory_record {
                    __u8 length;                     // 1 byte
                    __u8 ext_attr_length;            // 1 byte
                    __u8 extent[8];                  // 8 bytes
                    __u8 size[8];                    // 8 bytes
                    __u8 date[7];                    // 7 bytes
                    __u8 flags;                      // 1 byte
                    __u8 file_unit_size;             // 1 byte
                    __u8 interleave;                 // 1 byte
                    __u8 volume_sequence_number[4];  // 4 bytes
                    __u8 name_len;                   // 1 byte
                    char name[];                     // variable size
            } __attribute__((packed));
    
    The fixed portion of this structure occupies 33 bytes. Therefore, a
    valid directory record must be at least 33 bytes long
    (even without considering the variable-length name field).
    Since de_len is only 31, it is insufficient to contain
    the complete fixed header.
    
    The code later hits the following sanity check that
    compares de_len against the sum of de->name_len and
    sizeof(struct iso_directory_record):
    
            if (de_len < de->name_len[0] + sizeof(struct iso_directory_record)) {
                    ...
            }
    
    Since the fixed portion of the structure is
    33 bytes (up to and including name_len member),
    a valid record should have de_len of at least 33 bytes;
    here, however, de_len is too short, and the field de->name_len
    (located at offset 32) is accessed even though it lies beyond
    the available 31 bytes.
    
    This access on the corrupted isofs data triggers a KASAN uninitialized
    memory warning. The fix would be to first verify that de_len is at least
    sizeof(struct iso_directory_record) before accessing any
    fields like de->name_len.
    
    Reported-by: syzbot <syzbot+812641c6c3d7586a1613@syzkaller.appspotmail.com>
    Tested-by: syzbot <syzbot+812641c6c3d7586a1613@syzkaller.appspotmail.com>
    Closes: https://syzkaller.appspot.com/bug?extid=812641c6c3d7586a1613
    Fixes: 2deb1acc653c ("isofs: fix access to unallocated memory when reading corrupted filesystem")
    Signed-off-by: Qasim Ijaz <qasdev00@gmail.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20250211195900.42406-1-qasdev00@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
jfs: add index corruption check to DT_GETPAGE() [+ + +]
Author: Roman Smirnov <r.smirnov@omp.ru>
Date:   Wed Feb 26 11:25:22 2025 +0300

    jfs: add index corruption check to DT_GETPAGE()
    
    commit a8dfb2168906944ea61acfc87846b816eeab882d upstream.
    
    If the file system is corrupted, the header.stblindex variable
    may become greater than 127. Because of this, an array access out
    of bounds may occur:
    
    ------------[ cut here ]------------
    UBSAN: array-index-out-of-bounds in fs/jfs/jfs_dtree.c:3096:10
    index 237 is out of range for type 'struct dtslot[128]'
    CPU: 0 UID: 0 PID: 5822 Comm: syz-executor740 Not tainted 6.13.0-rc4-syzkaller-00110-g4099a71718b0 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120
     ubsan_epilogue lib/ubsan.c:231 [inline]
     __ubsan_handle_out_of_bounds+0x121/0x150 lib/ubsan.c:429
     dtReadFirst+0x622/0xc50 fs/jfs/jfs_dtree.c:3096
     dtReadNext fs/jfs/jfs_dtree.c:3147 [inline]
     jfs_readdir+0x9aa/0x3c50 fs/jfs/jfs_dtree.c:2862
     wrap_directory_iterator+0x91/0xd0 fs/readdir.c:65
     iterate_dir+0x571/0x800 fs/readdir.c:108
     __do_sys_getdents64 fs/readdir.c:403 [inline]
     __se_sys_getdents64+0x1e2/0x4b0 fs/readdir.c:389
     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
     </TASK>
    ---[ end trace ]---
    
    Add a stblindex check for corruption.
    
    Reported-by: syzbot <syzbot+9120834fc227768625ba@syzkaller.appspotmail.com>
    Closes: https://syzkaller.appspot.com/bug?extid=9120834fc227768625ba
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Signed-off-by: Roman Smirnov <r.smirnov@omp.ru>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

jfs: fix slab-out-of-bounds read in ea_get() [+ + +]
Author: Qasim Ijaz <qasdev00@gmail.com>
Date:   Thu Feb 13 21:05:53 2025 +0000

    jfs: fix slab-out-of-bounds read in ea_get()
    
    commit fdf480da5837c23b146c4743c18de97202fcab37 upstream.
    
    During the "size_check" label in ea_get(), the code checks if the extended
    attribute list (xattr) size matches ea_size. If not, it logs
    "ea_get: invalid extended attribute" and calls print_hex_dump().
    
    Here, EALIST_SIZE(ea_buf->xattr) returns 4110417968, which exceeds
    INT_MAX (2,147,483,647). Then ea_size is clamped:
    
            int size = clamp_t(int, ea_size, 0, EALIST_SIZE(ea_buf->xattr));
    
    Although clamp_t aims to bound ea_size between 0 and 4110417968, the upper
    limit is treated as an int, causing an overflow above 2^31 - 1. This leads
    "size" to wrap around and become negative (-184549328).
    
    The "size" is then passed to print_hex_dump() (called "len" in
    print_hex_dump()), it is passed as type size_t (an unsigned
    type), this is then stored inside a variable called
    "int remaining", which is then assigned to "int linelen" which
    is then passed to hex_dump_to_buffer(). In print_hex_dump()
    the for loop, iterates through 0 to len-1, where len is
    18446744073525002176, calling hex_dump_to_buffer()
    on each iteration:
    
            for (i = 0; i < len; i += rowsize) {
                    linelen = min(remaining, rowsize);
                    remaining -= rowsize;
    
                    hex_dump_to_buffer(ptr + i, linelen, rowsize, groupsize,
                                       linebuf, sizeof(linebuf), ascii);
    
                    ...
            }
    
    The expected stopping condition (i < len) is effectively broken
    since len is corrupted and very large. This eventually leads to
    the "ptr+i" being passed to hex_dump_to_buffer() to get closer
    to the end of the actual bounds of "ptr", eventually an out of
    bounds access is done in hex_dump_to_buffer() in the following
    for loop:
    
            for (j = 0; j < len; j++) {
                            if (linebuflen < lx + 2)
                                    goto overflow2;
                            ch = ptr[j];
                    ...
            }
    
    To fix this we should validate "EALIST_SIZE(ea_buf->xattr)"
    before it is utilised.
    
    Reported-by: syzbot <syzbot+4e6e7e4279d046613bc5@syzkaller.appspotmail.com>
    Tested-by: syzbot <syzbot+4e6e7e4279d046613bc5@syzkaller.appspotmail.com>
    Closes: https://syzkaller.appspot.com/bug?extid=4e6e7e4279d046613bc5
    Fixes: d9f9d96136cb ("jfs: xattr: check invalid xattr size more strictly")
    Cc: stable@vger.kernel.org
    Signed-off-by: Qasim Ijaz <qasdev00@gmail.com>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kexec: initialize ELF lowest address to ULONG_MAX [+ + +]
Author: Sourabh Jain <sourabhjain@linux.ibm.com>
Date:   Fri Jan 31 17:08:24 2025 +0530

    kexec: initialize ELF lowest address to ULONG_MAX
    
    [ Upstream commit 9986fb5164c8b21f6439cfd45ba36d8cc80c9710 ]
    
    Patch series "powerpc/crash: use generic crashkernel reservation", v3.
    
    Commit 0ab97169aa05 ("crash_core: add generic function to do reservation")
    added a generic function to reserve crashkernel memory.  So let's use the
    same function on powerpc and remove the architecture-specific code that
    essentially does the same thing.
    
    The generic crashkernel reservation also provides a way to split the
    crashkernel reservation into high and low memory reservations, which can
    be enabled for powerpc in the future.
    
    Additionally move powerpc to use generic APIs to locate memory hole for
    kexec segments while loading kdump kernel.
    
    This patch (of 7):
    
    kexec_elf_load() loads an ELF executable and sets the address of the
    lowest PT_LOAD section to the address held by the lowest_load_addr
    function argument.
    
    To determine the lowest PT_LOAD address, a local variable lowest_addr
    (type unsigned long) is initialized to UINT_MAX.  After loading each
    PT_LOAD, its address is compared to lowest_addr.  If a loaded PT_LOAD
    address is lower, lowest_addr is updated.  However, setting lowest_addr to
    UINT_MAX won't work when the kernel image is loaded above 4G, as the
    returned lowest PT_LOAD address would be invalid.  This is resolved by
    initializing lowest_addr to ULONG_MAX instead.
    
    This issue was discovered while implementing crashkernel high/low
    reservation on the PowerPC architecture.
    
    Link: https://lkml.kernel.org/r/20250131113830.925179-1-sourabhjain@linux.ibm.com
    Link: https://lkml.kernel.org/r/20250131113830.925179-2-sourabhjain@linux.ibm.com
    Fixes: a0458284f062 ("powerpc: Add support code for kexec_file_load()")
    Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com>
    Acked-by: Hari Bathini <hbathini@linux.ibm.com>
    Acked-by: Baoquan He <bhe@redhat.com>
    Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
    Cc: Mahesh Salgaonkar <mahesh@linux.ibm.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ksmbd: fix incorrect validation for num_aces field of smb_acl [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Wed Feb 12 09:32:11 2025 +0900

    ksmbd: fix incorrect validation for num_aces field of smb_acl
    
    [ Upstream commit 1b8b67f3c5e5169535e26efedd3e422172e2db64 ]
    
    parse_dcal() validate num_aces to allocate posix_ace_state_array.
    
    if (num_aces > ULONG_MAX / sizeof(struct smb_ace *))
    
    It is an incorrect validation that we can create an array of size ULONG_MAX.
    smb_acl has ->size field to calculate actual number of aces in request buffer
    size. Use this to check invalid num_aces.
    
    Reported-by: Igor Leite Ladessa <igor-ladessa@hotmail.com>
    Tested-by: Igor Leite Ladessa <igor-ladessa@hotmail.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ksmbd: fix multichannel connection failure [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Mon Mar 24 20:19:20 2025 +0900

    ksmbd: fix multichannel connection failure
    
    [ Upstream commit c1883049aa9b2b7dffd3a68c5fc67fa92c174bd9 ]
    
    ksmbd check that the session of second channel is in the session list of
    first connection. If it is in session list, multichannel connection
    should not be allowed.
    
    Fixes: b95629435b84 ("ksmbd: fix racy issue from session lookup and expire")
    Reported-by: Sean Heelan <seanheelan@gmail.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ksmbd: use aead_request_free to match aead_request_alloc [+ + +]
Author: Miaoqian Lin <linmq006@gmail.com>
Date:   Tue Mar 18 20:12:34 2025 +0800

    ksmbd: use aead_request_free to match aead_request_alloc
    
    [ Upstream commit 6171063e9d046ffa46f51579b2ca4a43caef581a ]
    
    Use aead_request_free() instead of kfree() to properly free memory
    allocated by aead_request_alloc(). This ensures sensitive crypto data
    is zeroed before being freed.
    
    Fixes: e2f34481b24d ("cifsd: add server-side procedures for SMB3")
    Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
lib/buildid: Handle memfd_secret() files in build_id_parse() [+ + +]
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Thu Oct 17 10:47:13 2024 -0700

    lib/buildid: Handle memfd_secret() files in build_id_parse()
    
    commit 5ac9b4e935dfc6af41eee2ddc21deb5c36507a9f upstream.
    
    >From memfd_secret(2) manpage:
    
      The memory areas backing the file created with memfd_secret(2) are
      visible only to the processes that have access to the file descriptor.
      The memory region is removed from the kernel page tables and only the
      page tables of the processes holding the file descriptor map the
      corresponding physical memory. (Thus, the pages in the region can't be
      accessed by the kernel itself, so that, for example, pointers to the
      region can't be passed to system calls.)
    
    We need to handle this special case gracefully in build ID fetching
    code. Return -EFAULT whenever secretmem file is passed to build_id_parse()
    family of APIs. Original report and repro can be found in [0].
    
      [0] https://lore.kernel.org/bpf/ZwyG8Uro%2FSyTXAni@ly-workstation/
    
    Fixes: de3ec364c3c3 ("lib/buildid: add single folio-based file reader abstraction")
    Reported-by: Yi Lai <yi1.lai@intel.com>
    Suggested-by: Shakeel Butt <shakeel.butt@linux.dev>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
    Link: https://lore.kernel.org/bpf/20241017175431.6183-A-hca@linux.ibm.com
    Link: https://lore.kernel.org/bpf/20241017174713.2157873-1-andrii@kernel.org
    [ Chen Linxuan: backport same logic without folio-based changes ]
    Fixes: 88a16a130933 ("perf: Add build id data in mmap2 event")
    Signed-off-by: Chen Linxuan <chenlinxuan@deepin.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lib: 842: Improve error handling in sw842_compress() [+ + +]
Author: Tanya Agarwal <tanyaagarwal25699@gmail.com>
Date:   Tue Jan 14 19:42:04 2025 +0530

    lib: 842: Improve error handling in sw842_compress()
    
    [ Upstream commit af324dc0e2b558678aec42260cce38be16cc77ca ]
    
    The static code analysis tool "Coverity Scan" pointed the following
    implementation details out for further development considerations:
    CID 1309755: Unused value
    In sw842_compress: A value assigned to a variable is never used. (CWE-563)
    returned_value: Assigning value from add_repeat_template(p, repeat_count)
    to ret here, but that stored value is overwritten before it can be used.
    
    Conclusion:
    Add error handling for the return value from an add_repeat_template()
    call.
    
    Fixes: 2da572c959dd ("lib: add software 842 compression/decompression")
    Signed-off-by: Tanya Agarwal <tanyaagarwal25699@gmail.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
libbpf: Fix hypothetical STT_SECTION extern NULL deref case [+ + +]
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Wed Feb 19 16:28:21 2025 -0800

    libbpf: Fix hypothetical STT_SECTION extern NULL deref case
    
    [ Upstream commit e0525cd72b5979d8089fe524a071ea93fd011dc9 ]
    
    Fix theoretical NULL dereference in linker when resolving *extern*
    STT_SECTION symbol against not-yet-existing ELF section. Not sure if
    it's possible in practice for valid ELF object files (this would require
    embedded assembly manipulations, at which point BTF will be missing),
    but fix the s/dst_sym/dst_sec/ typo guarding this condition anyways.
    
    Fixes: faf6ed321cf6 ("libbpf: Add BPF static linker APIs")
    Fixes: a46349227cd8 ("libbpf: Add linker extern resolution support for functions and global variables")
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20250220002821.834400-1-andrii@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 5.15.180 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Apr 10 14:32:07 2025 +0200

    Linux 5.15.180
    
    Link: https://lore.kernel.org/r/20250408104826.319283234@linuxfoundation.org
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: SeongJae Park <sj@kernel.org>
    Tested-by: Vijayendra Suman <vijayendra.suman@oracle.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Link: https://lore.kernel.org/r/20250409115832.538646489@linuxfoundation.org
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lockdep: Don't disable interrupts on RT in disable_irq_nosync_lockdep.*() [+ + +]
Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date:   Wed Feb 12 11:36:18 2025 +0100

    lockdep: Don't disable interrupts on RT in disable_irq_nosync_lockdep.*()
    
    [ Upstream commit 87886b32d669abc11c7be95ef44099215e4f5788 ]
    
    disable_irq_nosync_lockdep() disables interrupts with lockdep enabled to
    avoid false positive reports by lockdep that a certain lock has not been
    acquired with disabled interrupts. The user of this macros expects that
    a lock can be acquried without disabling interrupts because the IRQ line
    triggering the interrupt is disabled.
    
    This triggers a warning on PREEMPT_RT because after
    disable_irq_nosync_lockdep.*() the following spinlock_t now is acquired
    with disabled interrupts.
    
    On PREEMPT_RT there is no difference between spin_lock() and
    spin_lock_irq() so avoiding disabling interrupts in this case works for
    the two remaining callers as of today.
    
    Don't disable interrupts on PREEMPT_RT in disable_irq_nosync_lockdep.*().
    
    Closes: https://lore.kernel.org/760e34f9-6034-40e0-82a5-ee9becd24438@roeck-us.net
    Fixes: e8106b941ceab ("[PATCH] lockdep: core, add enable/disable_irq_irqsave/irqrestore() APIs")
    Reported-by: Guenter Roeck <linux@roeck-us.net>
    Suggested-by: "Steven Rostedt (Google)" <rostedt@goodmis.org>
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/20250212103619.2560503-2-bigeasy@linutronix.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
locking/semaphore: Use wake_q to wake up processes outside lock critical section [+ + +]
Author: Waiman Long <longman@redhat.com>
Date:   Fri Mar 7 15:26:52 2025 -0800

    locking/semaphore: Use wake_q to wake up processes outside lock critical section
    
    [ Upstream commit 85b2b9c16d053364e2004883140538e73b333cdb ]
    
    A circular lock dependency splat has been seen involving down_trylock():
    
      ======================================================
      WARNING: possible circular locking dependency detected
      6.12.0-41.el10.s390x+debug
      ------------------------------------------------------
      dd/32479 is trying to acquire lock:
      0015a20accd0d4f8 ((console_sem).lock){-.-.}-{2:2}, at: down_trylock+0x26/0x90
    
      but task is already holding lock:
      000000017e461698 (&zone->lock){-.-.}-{2:2}, at: rmqueue_bulk+0xac/0x8f0
    
      the existing dependency chain (in reverse order) is:
      -> #4 (&zone->lock){-.-.}-{2:2}:
      -> #3 (hrtimer_bases.lock){-.-.}-{2:2}:
      -> #2 (&rq->__lock){-.-.}-{2:2}:
      -> #1 (&p->pi_lock){-.-.}-{2:2}:
      -> #0 ((console_sem).lock){-.-.}-{2:2}:
    
    The console_sem -> pi_lock dependency is due to calling try_to_wake_up()
    while holding the console_sem raw_spinlock. This dependency can be broken
    by using wake_q to do the wakeup instead of calling try_to_wake_up()
    under the console_sem lock. This will also make the semaphore's
    raw_spinlock become a terminal lock without taking any further locks
    underneath it.
    
    The hrtimer_bases.lock is a raw_spinlock while zone->lock is a
    spinlock. The hrtimer_bases.lock -> zone->lock dependency happens via
    the debug_objects_fill_pool() helper function in the debugobjects code.
    
      -> #4 (&zone->lock){-.-.}-{2:2}:
             __lock_acquire+0xe86/0x1cc0
             lock_acquire.part.0+0x258/0x630
             lock_acquire+0xb8/0xe0
             _raw_spin_lock_irqsave+0xb4/0x120
             rmqueue_bulk+0xac/0x8f0
             __rmqueue_pcplist+0x580/0x830
             rmqueue_pcplist+0xfc/0x470
             rmqueue.isra.0+0xdec/0x11b0
             get_page_from_freelist+0x2ee/0xeb0
             __alloc_pages_noprof+0x2c2/0x520
             alloc_pages_mpol_noprof+0x1fc/0x4d0
             alloc_pages_noprof+0x8c/0xe0
             allocate_slab+0x320/0x460
             ___slab_alloc+0xa58/0x12b0
             __slab_alloc.isra.0+0x42/0x60
             kmem_cache_alloc_noprof+0x304/0x350
             fill_pool+0xf6/0x450
             debug_object_activate+0xfe/0x360
             enqueue_hrtimer+0x34/0x190
             __run_hrtimer+0x3c8/0x4c0
             __hrtimer_run_queues+0x1b2/0x260
             hrtimer_interrupt+0x316/0x760
             do_IRQ+0x9a/0xe0
             do_irq_async+0xf6/0x160
    
    Normally a raw_spinlock to spinlock dependency is not legitimate
    and will be warned if CONFIG_PROVE_RAW_LOCK_NESTING is enabled,
    but debug_objects_fill_pool() is an exception as it explicitly
    allows this dependency for non-PREEMPT_RT kernel without causing
    PROVE_RAW_LOCK_NESTING lockdep splat. As a result, this dependency is
    legitimate and not a bug.
    
    Anyway, semaphore is the only locking primitive left that is still
    using try_to_wake_up() to do wakeup inside critical section, all the
    other locking primitives had been migrated to use wake_q to do wakeup
    outside of the critical section. It is also possible that there are
    other circular locking dependencies involving printk/console_sem or
    other existing/new semaphores lurking somewhere which may show up in
    the future. Let just do the migration now to wake_q to avoid headache
    like this.
    
    Reported-by: yzbot+ed801a886dfdbfe7136d@syzkaller.appspotmail.com
    Signed-off-by: Waiman Long <longman@redhat.com>
    Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/r/20250307232717.1759087-3-boqun.feng@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mdacon: rework dependency list [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue Feb 25 17:44:23 2025 +0100

    mdacon: rework dependency list
    
    [ Upstream commit 5bbcc7645f4b244ffb5ac6563fbe9d3d42194447 ]
    
    mdacon has roughly the same dependencies as vgacon but expresses them
    as a negative list instead of a positive list, with the only practical
    difference being PowerPC/CHRP, which uses vga16fb instead of vgacon.
    
    The CONFIG_MDA_CONSOLE description advises to only turn it on when vgacon
    is also used because MDA/Hercules-only systems should be using vgacon
    instead, so just change the list to enforce that directly for simplicity.
    
    The probing was broken from 2002 to 2008, this improves on the fix
    that was added then: If vgacon is a loadable module, then mdacon
    cannot be built-in now, and the list of systems that support vgacon
    is carried over.
    
    Fixes: 0b9cf3aa6b1e ("mdacon messing up default vc's - set default to vc13-16 again")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
media: i2c: et8ek8: Don't strip remove function when driver is builtin [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date:   Sun Mar 24 17:00:44 2024 +0100

    media: i2c: et8ek8: Don't strip remove function when driver is builtin
    
    commit 545b215736c5c4b354e182d99c578a472ac9bfce upstream.
    
    Using __exit for the remove function results in the remove callback
    being discarded with CONFIG_VIDEO_ET8EK8=y. When such a device gets
    unbound (e.g. using sysfs or hotplug), the driver is just removed
    without the cleanup being performed. This results in resource leaks. Fix
    it by compiling in the remove callback unconditionally.
    
    This also fixes a W=1 modpost warning:
    
            WARNING: modpost: drivers/media/i2c/et8ek8/et8ek8: section mismatch in reference: et8ek8_i2c_driver+0x10 (section: .data) -> et8ek8_remove (section: .exit.text)
    
    Fixes: c5254e72b8ed ("[media] media: Driver for Toshiba et8ek8 5MP sensor")
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Bin Lan <bin.lan.cn@windriver.com>
    Signed-off-by: He Zhe <zhe.he@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: platform: allgro-dvt: unregister v4l2_device on the error path [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Thu Dec 5 11:06:21 2024 +0900

    media: platform: allgro-dvt: unregister v4l2_device on the error path
    
    [ Upstream commit c2b96a6818159fba8a3bcc38262da9e77f9b3ec7 ]
    
    In allegro_probe(), the v4l2 device is not unregistered in the error
    path, which results in a memory leak. Fix it by calling
    v4l2_device_unregister() before returning error.
    
    Fixes: d74d4e2359ec ("media: allegro: move driver out of staging")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Reviewed-by: Michael Tretter <m.tretter@pengutronix.de>
    Signed-off-by: Sebastian Fricke <sebastian.fricke@collabora.com>
    Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
memstick: rtsx_usb_ms: Fix slab-use-after-free in rtsx_usb_ms_drv_remove [+ + +]
Author: Luo Qiu <luoqiu@kylinsec.com.cn>
Date:   Mon Mar 17 18:14:38 2025 +0800

    memstick: rtsx_usb_ms: Fix slab-use-after-free in rtsx_usb_ms_drv_remove
    
    commit 4676741a3464b300b486e70585c3c9b692be1632 upstream.
    
    This fixes the following crash:
    
    ==================================================================
    BUG: KASAN: slab-use-after-free in rtsx_usb_ms_poll_card+0x159/0x200 [rtsx_usb_ms]
    Read of size 8 at addr ffff888136335380 by task kworker/6:0/140241
    
    CPU: 6 UID: 0 PID: 140241 Comm: kworker/6:0 Kdump: loaded Tainted: G            E      6.14.0-rc6+ #1
    Tainted: [E]=UNSIGNED_MODULE
    Hardware name: LENOVO 30FNA1V7CW/1057, BIOS S0EKT54A 07/01/2024
    Workqueue: events rtsx_usb_ms_poll_card [rtsx_usb_ms]
    Call Trace:
     <TASK>
     dump_stack_lvl+0x51/0x70
     print_address_description.constprop.0+0x27/0x320
     ? rtsx_usb_ms_poll_card+0x159/0x200 [rtsx_usb_ms]
     print_report+0x3e/0x70
     kasan_report+0xab/0xe0
     ? rtsx_usb_ms_poll_card+0x159/0x200 [rtsx_usb_ms]
     rtsx_usb_ms_poll_card+0x159/0x200 [rtsx_usb_ms]
     ? __pfx_rtsx_usb_ms_poll_card+0x10/0x10 [rtsx_usb_ms]
     ? __pfx___schedule+0x10/0x10
     ? kick_pool+0x3b/0x270
     process_one_work+0x357/0x660
     worker_thread+0x390/0x4c0
     ? __pfx_worker_thread+0x10/0x10
     kthread+0x190/0x1d0
     ? __pfx_kthread+0x10/0x10
     ret_from_fork+0x2d/0x50
     ? __pfx_kthread+0x10/0x10
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    
    Allocated by task 161446:
     kasan_save_stack+0x20/0x40
     kasan_save_track+0x10/0x30
     __kasan_kmalloc+0x7b/0x90
     __kmalloc_noprof+0x1a7/0x470
     memstick_alloc_host+0x1f/0xe0 [memstick]
     rtsx_usb_ms_drv_probe+0x47/0x320 [rtsx_usb_ms]
     platform_probe+0x60/0xe0
     call_driver_probe+0x35/0x120
     really_probe+0x123/0x410
     __driver_probe_device+0xc7/0x1e0
     driver_probe_device+0x49/0xf0
     __device_attach_driver+0xc6/0x160
     bus_for_each_drv+0xe4/0x160
     __device_attach+0x13a/0x2b0
     bus_probe_device+0xbd/0xd0
     device_add+0x4a5/0x760
     platform_device_add+0x189/0x370
     mfd_add_device+0x587/0x5e0
     mfd_add_devices+0xb1/0x130
     rtsx_usb_probe+0x28e/0x2e0 [rtsx_usb]
     usb_probe_interface+0x15c/0x460
     call_driver_probe+0x35/0x120
     really_probe+0x123/0x410
     __driver_probe_device+0xc7/0x1e0
     driver_probe_device+0x49/0xf0
     __device_attach_driver+0xc6/0x160
     bus_for_each_drv+0xe4/0x160
     __device_attach+0x13a/0x2b0
     rebind_marked_interfaces.isra.0+0xcc/0x110
     usb_reset_device+0x352/0x410
     usbdev_do_ioctl+0xe5c/0x1860
     usbdev_ioctl+0xa/0x20
     __x64_sys_ioctl+0xc5/0xf0
     do_syscall_64+0x59/0x170
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Freed by task 161506:
     kasan_save_stack+0x20/0x40
     kasan_save_track+0x10/0x30
     kasan_save_free_info+0x36/0x60
     __kasan_slab_free+0x34/0x50
     kfree+0x1fd/0x3b0
     device_release+0x56/0xf0
     kobject_cleanup+0x73/0x1c0
     rtsx_usb_ms_drv_remove+0x13d/0x220 [rtsx_usb_ms]
     platform_remove+0x2f/0x50
     device_release_driver_internal+0x24b/0x2e0
     bus_remove_device+0x124/0x1d0
     device_del+0x239/0x530
     platform_device_del.part.0+0x19/0xe0
     platform_device_unregister+0x1c/0x40
     mfd_remove_devices_fn+0x167/0x170
     device_for_each_child_reverse+0xc9/0x130
     mfd_remove_devices+0x6e/0xa0
     rtsx_usb_disconnect+0x2e/0xd0 [rtsx_usb]
     usb_unbind_interface+0xf3/0x3f0
     device_release_driver_internal+0x24b/0x2e0
     proc_disconnect_claim+0x13d/0x220
     usbdev_do_ioctl+0xb5e/0x1860
     usbdev_ioctl+0xa/0x20
     __x64_sys_ioctl+0xc5/0xf0
     do_syscall_64+0x59/0x170
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Last potentially related work creation:
     kasan_save_stack+0x20/0x40
     kasan_record_aux_stack+0x85/0x90
     insert_work+0x29/0x100
     __queue_work+0x34a/0x540
     call_timer_fn+0x2a/0x160
     expire_timers+0x5f/0x1f0
     __run_timer_base.part.0+0x1b6/0x1e0
     run_timer_softirq+0x8b/0xe0
     handle_softirqs+0xf9/0x360
     __irq_exit_rcu+0x114/0x130
     sysvec_apic_timer_interrupt+0x72/0x90
     asm_sysvec_apic_timer_interrupt+0x16/0x20
    
    Second to last potentially related work creation:
     kasan_save_stack+0x20/0x40
     kasan_record_aux_stack+0x85/0x90
     insert_work+0x29/0x100
     __queue_work+0x34a/0x540
     call_timer_fn+0x2a/0x160
     expire_timers+0x5f/0x1f0
     __run_timer_base.part.0+0x1b6/0x1e0
     run_timer_softirq+0x8b/0xe0
     handle_softirqs+0xf9/0x360
     __irq_exit_rcu+0x114/0x130
     sysvec_apic_timer_interrupt+0x72/0x90
     asm_sysvec_apic_timer_interrupt+0x16/0x20
    
    The buggy address belongs to the object at ffff888136335000
     which belongs to the cache kmalloc-2k of size 2048
    The buggy address is located 896 bytes inside of
     freed 2048-byte region [ffff888136335000, ffff888136335800)
    
    The buggy address belongs to the physical page:
    page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x136330
    head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    flags: 0x17ffffc0000040(head|node=0|zone=2|lastcpupid=0x1fffff)
    page_type: f5(slab)
    raw: 0017ffffc0000040 ffff888100042f00 ffffea000417a000 dead000000000002
    raw: 0000000000000000 0000000000080008 00000000f5000000 0000000000000000
    head: 0017ffffc0000040 ffff888100042f00 ffffea000417a000 dead000000000002
    head: 0000000000000000 0000000000080008 00000000f5000000 0000000000000000
    head: 0017ffffc0000003 ffffea0004d8cc01 ffffffffffffffff 0000000000000000
    head: 0000000000000008 0000000000000000 00000000ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff888136335280: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff888136335300: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    >ffff888136335380: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                       ^
     ffff888136335400: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff888136335480: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    ==================================================================
    
    Fixes: 6827ca573c03 ("memstick: rtsx_usb_ms: Support runtime power management")
    Signed-off-by: Luo Qiu <luoqiu@kylinsec.com.cn>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/4B7BC3E6E291E6F2+20250317101438.25650-1-luoqiu@kylinsec.com.cn
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mfd: sm501: Switch to BIT() to mitigate integer overflows [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Wed Jan 15 09:12:06 2025 -0800

    mfd: sm501: Switch to BIT() to mitigate integer overflows
    
    [ Upstream commit 2d8cb9ffe18c2f1e5bd07a19cbce85b26c1d0cf0 ]
    
    If offset end up being high enough, right hand expression in functions
    like sm501_gpio_set() shifted left for that number of bits, may
    not fit in int type.
    
    Just in case, fix that by using BIT() both as an option safe from
    overflow issues and to make this step look similar to other gpio
    drivers.
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    Fixes: f61be273d369 ("sm501: add gpiolib support")
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Link: https://lore.kernel.org/r/20250115171206.20308-1-n.zhandarovich@fintech.ru
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm, slab: remove duplicate kernel-doc comment for ksize() [+ + +]
Author: Vlastimil Babka <vbabka@suse.cz>
Date:   Mon Nov 7 17:11:27 2022 +0100

    mm, slab: remove duplicate kernel-doc comment for ksize()
    
    commit c18c20f16219516b12a4f2fd29c25e06be97e064 upstream.
    
    Akira reports:
    
    > "make htmldocs" reports duplicate C declaration of ksize() as follows:
    
    > /linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c:1428: WARNING: Duplicate C declaration, also defined at core-api/mm-api:212.
    > Declaration is '.. c:function:: size_t ksize (const void *objp)'.
    
    > This is due to the kernel-doc comment for ksize() declaration added in
    > include/linux/slab.h by commit 05a940656e1e ("slab: Introduce
    > kmalloc_size_roundup()").
    
    There is an older kernel-doc comment for ksize() definition in
    mm/slab_common.c, which is not only duplicated, but also contradicts the
    new one - the additional storage discovered by ksize() should not be
    used by callers anymore. Delete the old kernel-doc.
    
    Reported-by: Akira Yokosawa <akiyks@gmail.com>
    Link: https://lore.kernel.org/all/d33440f6-40cf-9747-3340-e54ffaf7afb8@gmail.com/
    Fixes: 05a940656e1e ("slab: Introduce kmalloc_size_roundup()")
    Cc: Kees Cook <keescook@chromium.org>
    Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mmc: atmel-mci: Add missing clk_disable_unprepare() [+ + +]
Author: Gu Bowen <gubowen5@huawei.com>
Date:   Tue Feb 25 10:28:56 2025 +0800

    mmc: atmel-mci: Add missing clk_disable_unprepare()
    
    commit e51a349d2dcf1df8422dabb90b2f691dc7df6f92 upstream.
    
    The error path when atmci_configure_dma() set dma fails in atmci driver
    does not correctly disable the clock.
    Add the missing clk_disable_unprepare() to the error path for pair with
    clk_prepare_enable().
    
    Fixes: 467e081d23e6 ("mmc: atmel-mci: use probe deferring if dma controller is not ready yet")
    Signed-off-by: Gu Bowen <gubowen5@huawei.com>
    Acked-by: Aubin Constans <aubin.constans@microchip.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20250225022856.3452240-1-gubowen5@huawei.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci-brcmstb: Add ability to increase max clock rate for 72116b0 [+ + +]
Author: Kamal Dasu <kdasu.kdev@gmail.com>
Date:   Fri May 20 14:31:08 2022 -0400

    mmc: sdhci-brcmstb: Add ability to increase max clock rate for 72116b0
    
    [ Upstream commit 97904a59855c7ac7c613085bc6bdc550d48524ff ]
    
    The 72116B0 has improved SDIO controllers that allow the max clock
    rate to be increased from a max of 100MHz to a max of 150MHz. The
    driver will need to get the clock and increase it's default rate
    and override the caps register, that still indicates a max of 100MHz.
    The new clock will be named "sdio_freq" in the DT node's "clock-names"
    list. The driver will use a DT property, "clock-frequency", to
    enable this functionality and will get the actual rate in MHz
    from the property to allow various speeds to be requested.
    
    Signed-off-by: Al Cooper <alcooperx@gmail.com>
    Signed-off-by: Kamal Dasu <kdasu.kdev@gmail.com>
    Acked-by: Florian Fainelli <f.fainelli@gmail.com>
    Link: https://lore.kernel.org/r/20220520183108.47358-3-kdasu.kdev@gmail.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Stable-dep-of: 723ef0e20dbb ("mmc: sdhci-brcmstb: add cqhci suspend/resume to PM ops")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mmc: sdhci-brcmstb: add cqhci suspend/resume to PM ops [+ + +]
Author: Kamal Dasu <kamal.dasu@broadcom.com>
Date:   Tue Mar 11 12:59:35 2025 -0400

    mmc: sdhci-brcmstb: add cqhci suspend/resume to PM ops
    
    [ Upstream commit 723ef0e20dbb2aa1b5406d2bb75374fc48187daa ]
    
    cqhci timeouts observed on brcmstb platforms during suspend:
      ...
      [  164.832853] mmc0: cqhci: timeout for tag 18
      ...
    
    Adding cqhci_suspend()/resume() calls to disable cqe
    in sdhci_brcmstb_suspend()/resume() respectively to fix
    CQE timeouts seen on PM suspend.
    
    Fixes: d46ba2d17f90 ("mmc: sdhci-brcmstb: Add support for Command Queuing (CQE)")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kamal Dasu <kamal.dasu@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://lore.kernel.org/r/20250311165946.28190-1-kamal.dasu@broadcom.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mmc: sdhci-brcmstb: Initialize base_clk to NULL in sdhci_brcmstb_probe() [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Wed Jun 8 08:27:57 2022 -0700

    mmc: sdhci-brcmstb: Initialize base_clk to NULL in sdhci_brcmstb_probe()
    
    commit c3c0ed75ffbff5c70667030b5139bbb75b0a30f5 upstream.
    
    Clang warns a few times along the lines of:
    
      drivers/mmc/host/sdhci-brcmstb.c:302:6: warning: variable 'base_clk' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
              if (res)
                  ^~~
      drivers/mmc/host/sdhci-brcmstb.c:376:24: note: uninitialized use occurs here
              clk_disable_unprepare(base_clk);
                                    ^~~~~~~~
    
    base_clk is used in the error path before it is initialized. Initialize
    it to NULL, as clk_disable_unprepare() calls clk_disable() and
    clk_unprepare(), which both handle NULL pointers gracefully.
    
    Link: https://github.com/ClangBuiltLinux/linux/issues/1650
    Reported-by: kernel test robot <lkp@intel.com>
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Acked-by: Florian Fainelli <f.fainelli@gmail.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Link: https://lore.kernel.org/r/20220608152757.82529-1-nathan@kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci-brcmstb: use clk_get_rate(base_clk) in PM resume [+ + +]
Author: Kamal Dasu <kdasu.kdev@gmail.com>
Date:   Thu Jul 14 13:41:32 2022 -0400

    mmc: sdhci-brcmstb: use clk_get_rate(base_clk) in PM resume
    
    commit 886201c70a1cab34ef96f867c2b2dd6379ffa7b9 upstream.
    
    Use clk_get_rate for base_clk on resume before setting new rate.
    This change ensures that the clock api returns current rate
    and sets the clock to the desired rate and honors CLK_GET_NO_CACHE
    attribute used by clock api.
    
    Fixes: 97904a59855c (mmc: sdhci-brcmstb: Add ability to increase max clock rate for 72116b0)
    Signed-off-by: Kamal Dasu <kdasu.kdev@gmail.com>
    Acked-by: Florian Fainelli <f.fainelli@gmail.com>
    Link: https://lore.kernel.org/r/20220714174132.18541-1-kdasu.kdev@gmail.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci-pxav3: set NEED_RSP_BUSY capability [+ + +]
Author: Karel Balej <balejk@matfyz.cz>
Date:   Mon Mar 10 15:07:04 2025 +0100

    mmc: sdhci-pxav3: set NEED_RSP_BUSY capability
    
    commit a41fcca4b342811b473bbaa4b44f1d34d87fcce6 upstream.
    
    Set the MMC_CAP_NEED_RSP_BUSY capability for the sdhci-pxav3 host to
    prevent conversion of R1B responses to R1. Without this, the eMMC card
    in the samsung,coreprimevelte smartphone using the Marvell PXA1908 SoC
    with this mmc host doesn't probe with the ETIMEDOUT error originating in
    __mmc_poll_for_busy.
    
    Note that the other issues reported for this phone and host, namely
    floods of "Tuning failed, falling back to fixed sampling clock" dmesg
    messages for the eMMC and unstable SDIO are not mitigated by this
    change.
    
    Link: https://lore.kernel.org/r/20200310153340.5593-1-ulf.hansson@linaro.org/
    Link: https://lore.kernel.org/r/D7204PWIGQGI.1FRFQPPIEE2P9@matfyz.cz/
    Link: https://lore.kernel.org/r/20250115-pxa1908-lkml-v14-0-847d24f3665a@skole.hr/
    Cc: stable@vger.kernel.org
    Signed-off-by: Karel Balej <balejk@matfyz.cz>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Tested-by: Duje Mihanović <duje.mihanovic@skole.hr>
    Link: https://lore.kernel.org/r/20250310140707.23459-1-balejk@matfyz.cz
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mptcp: Fix data stream corruption in the address announcement [+ + +]
Author: Arthur Mongodin <amongodin@randorisec.fr>
Date:   Fri Mar 14 21:11:31 2025 +0100

    mptcp: Fix data stream corruption in the address announcement
    
    commit 2c1f97a52cb827a5f2768e67a9dddffae1ed47ab upstream.
    
    Because of the size restriction in the TCP options space, the MPTCP
    ADD_ADDR option is exclusive and cannot be sent with other MPTCP ones.
    For this reason, in the linked mptcp_out_options structure, group of
    fields linked to different options are part of the same union.
    
    There is a case where the mptcp_pm_add_addr_signal() function can modify
    opts->addr, but not ended up sending an ADD_ADDR. Later on, back in
    mptcp_established_options, other options will be sent, but with
    unexpected data written in other fields due to the union, e.g. in
    opts->ext_copy. This could lead to a data stream corruption in the next
    packet.
    
    Using an intermediate variable, prevents from corrupting previously
    established DSS option. The assignment of the ADD_ADDR option
    parameters is now done once we are sure this ADD_ADDR option can be set
    in the packet, e.g. after having dropped other suboptions.
    
    Fixes: 1bff1e43a30e ("mptcp: optimize out option generation")
    Cc: stable@vger.kernel.org
    Suggested-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Arthur Mongodin <amongodin@randorisec.fr>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    [ Matt: the commit message has been updated: long lines splits and some
      clarifications. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20250314-net-mptcp-fix-data-stream-corr-sockopt-v1-1-122dbb249db3@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: safety check before fallback [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Mon Feb 24 19:11:52 2025 +0100

    mptcp: safety check before fallback
    
    [ Upstream commit db75a16813aabae3b78c06b1b99f5e314c1f55d3 ]
    
    Recently, some fallback have been initiated, while the connection was
    not supposed to fallback.
    
    Add a safety check with a warning to detect when an wrong attempt to
    fallback is being done. This should help detecting any future issues
    quicker.
    
    Acked-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20250224-net-mptcp-misc-fixes-v1-3-f550f636b435@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5: Bridge, fix the crash caused by LAG state check [+ + +]
Author: Jianbo Liu <jianbol@nvidia.com>
Date:   Tue Mar 11 00:01:43 2025 +0200

    net/mlx5: Bridge, fix the crash caused by LAG state check
    
    [ Upstream commit 4b8eeed4fb105770ce6dc84a2c6ef953c7b71cbb ]
    
    When removing LAG device from bridge, NETDEV_CHANGEUPPER event is
    triggered. Driver finds the lower devices (PFs) to flush all the
    offloaded entries. And mlx5_lag_is_shared_fdb is checked, it returns
    false if one of PF is unloaded. In such case,
    mlx5_esw_bridge_lag_rep_get() and its caller return NULL, instead of
    the alive PF, and the flush is skipped.
    
    Besides, the bridge fdb entry's lastuse is updated in mlx5 bridge
    event handler. But this SWITCHDEV_FDB_ADD_TO_BRIDGE event can be
    ignored in this case because the upper interface for bond is deleted,
    and the entry will never be aged because lastuse is never updated.
    
    To make things worse, as the entry is alive, mlx5 bridge workqueue
    keeps sending that event, which is then handled by kernel bridge
    notifier. It causes the following crash when accessing the passed bond
    netdev which is already destroyed.
    
    To fix this issue, remove such checks. LAG state is already checked in
    commit 15f8f168952f ("net/mlx5: Bridge, verify LAG state when adding
    bond to bridge"), driver still need to skip offload if LAG becomes
    invalid state after initialization.
    
     Oops: stack segment: 0000 [#1] SMP
     CPU: 3 UID: 0 PID: 23695 Comm: kworker/u40:3 Tainted: G           OE      6.11.0_mlnx #1
     Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
     Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
     Workqueue: mlx5_bridge_wq mlx5_esw_bridge_update_work [mlx5_core]
     RIP: 0010:br_switchdev_event+0x2c/0x110 [bridge]
     Code: 44 00 00 48 8b 02 48 f7 00 00 02 00 00 74 69 41 54 55 53 48 83 ec 08 48 8b a8 08 01 00 00 48 85 ed 74 4a 48 83 fe 02 48 89 d3 <4c> 8b 65 00 74 23 76 49 48 83 fe 05 74 7e 48 83 fe 06 75 2f 0f b7
     RSP: 0018:ffffc900092cfda0 EFLAGS: 00010297
     RAX: ffff888123bfe000 RBX: ffffc900092cfe08 RCX: 00000000ffffffff
     RDX: ffffc900092cfe08 RSI: 0000000000000001 RDI: ffffffffa0c585f0
     RBP: 6669746f6e690a30 R08: 0000000000000000 R09: ffff888123ae92c8
     R10: 0000000000000000 R11: fefefefefefefeff R12: ffff888123ae9c60
     R13: 0000000000000001 R14: ffffc900092cfe08 R15: 0000000000000000
     FS:  0000000000000000(0000) GS:ffff88852c980000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 00007f15914c8734 CR3: 0000000002830005 CR4: 0000000000770ef0
     DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
     PKRU: 55555554
     Call Trace:
      <TASK>
      ? __die_body+0x1a/0x60
      ? die+0x38/0x60
      ? do_trap+0x10b/0x120
      ? do_error_trap+0x64/0xa0
      ? exc_stack_segment+0x33/0x50
      ? asm_exc_stack_segment+0x22/0x30
      ? br_switchdev_event+0x2c/0x110 [bridge]
      ? sched_balance_newidle.isra.149+0x248/0x390
      notifier_call_chain+0x4b/0xa0
      atomic_notifier_call_chain+0x16/0x20
      mlx5_esw_bridge_update+0xec/0x170 [mlx5_core]
      mlx5_esw_bridge_update_work+0x19/0x40 [mlx5_core]
      process_scheduled_works+0x81/0x390
      worker_thread+0x106/0x250
      ? bh_worker+0x110/0x110
      kthread+0xb7/0xe0
      ? kthread_park+0x80/0x80
      ret_from_fork+0x2d/0x50
      ? kthread_park+0x80/0x80
      ret_from_fork_asm+0x11/0x20
      </TASK>
    
    Fixes: ff9b7521468b ("net/mlx5: Bridge, support LAG")
    Signed-off-by: Jianbo Liu <jianbol@nvidia.com>
    Reviewed-by: Vlad Buslov <vladbu@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
    Link: https://patch.msgid.link/1741644104-97767-6-git-send-email-tariqt@nvidia.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: handle errors in mlx5_chains_create_table() [+ + +]
Author: Wentao Liang <vulab@iscas.ac.cn>
Date:   Fri Mar 7 10:18:20 2025 +0800

    net/mlx5: handle errors in mlx5_chains_create_table()
    
    [ Upstream commit eab0396353be1c778eba1c0b5180176f04dd21ce ]
    
    In mlx5_chains_create_table(), the return value of mlx5_get_fdb_sub_ns()
    and mlx5_get_flow_namespace() must be checked to prevent NULL pointer
    dereferences. If either function fails, the function should log error
    message with mlx5_core_warn() and return error pointer.
    
    Fixes: 39ac237ce009 ("net/mlx5: E-Switch, Refactor chains and priorities")
    Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20250307021820.2646-1-vulab@iscas.ac.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5e: Prevent bridge link show failure for non-eswitch-allowed devices [+ + +]
Author: Carolina Jubran <cjubran@nvidia.com>
Date:   Tue Mar 11 00:01:44 2025 +0200

    net/mlx5e: Prevent bridge link show failure for non-eswitch-allowed devices
    
    [ Upstream commit e92df790d07a8eea873efcb84776e7b71f81c7d5 ]
    
    mlx5_eswitch_get_vepa returns -EPERM if the device lacks
    eswitch_manager capability, blocking mlx5e_bridge_getlink from
    retrieving VEPA mode. Since mlx5e_bridge_getlink implements
    ndo_bridge_getlink, returning -EPERM causes bridge link show to fail
    instead of skipping devices without this capability.
    
    To avoid this, return -EOPNOTSUPP from mlx5e_bridge_getlink when
    mlx5_eswitch_get_vepa fails, ensuring the command continues processing
    other devices while ignoring those without the necessary capability.
    
    Fixes: 4b89251de024 ("net/mlx5: Support ndo bridge_setlink and getlink")
    Signed-off-by: Carolina Jubran <cjubran@nvidia.com>
    Reviewed-by: Jianbo Liu <jianbol@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
    Link: https://patch.msgid.link/1741644104-97767-7-git-send-email-tariqt@nvidia.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/neighbor: add missing policy for NDTPA_QUEUE_LENBYTES [+ + +]
Author: Lin Ma <linma@zju.edu.cn>
Date:   Sun Mar 16 00:51:13 2025 +0800

    net/neighbor: add missing policy for NDTPA_QUEUE_LENBYTES
    
    [ Upstream commit 90a7138619a0c55e2aefaad27b12ffc2ddbeed78 ]
    
    Previous commit 8b5c171bb3dc ("neigh: new unresolved queue limits")
    introduces new netlink attribute NDTPA_QUEUE_LENBYTES to represent
    approximative value for deprecated QUEUE_LEN. However, it forgot to add
    the associated nla_policy in nl_ntbl_parm_policy array. Fix it with one
    simple NLA_U32 type policy.
    
    Fixes: 8b5c171bb3dc ("neigh: new unresolved queue limits")
    Signed-off-by: Lin Ma <linma@zju.edu.cn>
    Link: https://patch.msgid.link/20250315165113.37600-1-linma@zju.edu.cn
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: atm: fix use after free in lec_send() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri Mar 14 13:10:57 2025 +0300

    net: atm: fix use after free in lec_send()
    
    [ Upstream commit f3009d0d6ab78053117f8857b921a8237f4d17b3 ]
    
    The ->send() operation frees skb so save the length before calling
    ->send() to avoid a use after free.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/c751531d-4af4-42fe-affe-6104b34b791d@stanley.mountain
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: mv88e6xxx: Verify after ATU Load ops [+ + +]
Author: Joseph Huang <Joseph.Huang@garmin.com>
Date:   Thu Mar 6 12:23:05 2025 -0500

    net: dsa: mv88e6xxx: Verify after ATU Load ops
    
    [ Upstream commit dc5340c3133a3ebe54853fd299116149e528cfaa ]
    
    ATU Load operations could fail silently if there's not enough space
    on the device to hold the new entry. When this happens, the symptom
    depends on the unknown flood settings. If unknown multicast flood is
    disabled, the multicast packets are dropped when the ATU table is
    full. If unknown multicast flood is enabled, the multicast packets
    will be flooded to all ports. Either way, IGMP snooping is broken
    when the ATU Load operation fails silently.
    
    Do a Read-After-Write verification after each fdb/mdb add operation
    to make sure that the operation was really successful, and return
    -ENOSPC otherwise.
    
    Fixes: defb05b9b9b4 ("net: dsa: mv88e6xxx: Add support for fdb_add, fdb_del, and fdb_getnext")
    Signed-off-by: Joseph Huang <Joseph.Huang@garmin.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://patch.msgid.link/20250306172306.3859214-1-Joseph.Huang@garmin.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: fix geneve_opt length integer overflow [+ + +]
Author: Lin Ma <linma@zju.edu.cn>
Date:   Thu Apr 3 00:56:32 2025 +0800

    net: fix geneve_opt length integer overflow
    
    [ Upstream commit b27055a08ad4b415dcf15b63034f9cb236f7fb40 ]
    
    struct geneve_opt uses 5 bit length for each single option, which
    means every vary size option should be smaller than 128 bytes.
    
    However, all current related Netlink policies cannot promise this
    length condition and the attacker can exploit a exact 128-byte size
    option to *fake* a zero length option and confuse the parsing logic,
    further achieve heap out-of-bounds read.
    
    One example crash log is like below:
    
    [    3.905425] ==================================================================
    [    3.905925] BUG: KASAN: slab-out-of-bounds in nla_put+0xa9/0xe0
    [    3.906255] Read of size 124 at addr ffff888005f291cc by task poc/177
    [    3.906646]
    [    3.906775] CPU: 0 PID: 177 Comm: poc-oob-read Not tainted 6.1.132 #1
    [    3.907131] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
    [    3.907784] Call Trace:
    [    3.907925]  <TASK>
    [    3.908048]  dump_stack_lvl+0x44/0x5c
    [    3.908258]  print_report+0x184/0x4be
    [    3.909151]  kasan_report+0xc5/0x100
    [    3.909539]  kasan_check_range+0xf3/0x1a0
    [    3.909794]  memcpy+0x1f/0x60
    [    3.909968]  nla_put+0xa9/0xe0
    [    3.910147]  tunnel_key_dump+0x945/0xba0
    [    3.911536]  tcf_action_dump_1+0x1c1/0x340
    [    3.912436]  tcf_action_dump+0x101/0x180
    [    3.912689]  tcf_exts_dump+0x164/0x1e0
    [    3.912905]  fw_dump+0x18b/0x2d0
    [    3.913483]  tcf_fill_node+0x2ee/0x460
    [    3.914778]  tfilter_notify+0xf4/0x180
    [    3.915208]  tc_new_tfilter+0xd51/0x10d0
    [    3.918615]  rtnetlink_rcv_msg+0x4a2/0x560
    [    3.919118]  netlink_rcv_skb+0xcd/0x200
    [    3.919787]  netlink_unicast+0x395/0x530
    [    3.921032]  netlink_sendmsg+0x3d0/0x6d0
    [    3.921987]  __sock_sendmsg+0x99/0xa0
    [    3.922220]  __sys_sendto+0x1b7/0x240
    [    3.922682]  __x64_sys_sendto+0x72/0x90
    [    3.922906]  do_syscall_64+0x5e/0x90
    [    3.923814]  entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    [    3.924122] RIP: 0033:0x7e83eab84407
    [    3.924331] Code: 48 89 fa 4c 89 df e8 38 aa 00 00 8b 93 08 03 00 00 59 5e 48 83 f8 fc 74 1a 5b c3 0f 1f 84 00 00 00 00 00 48 8b 44 24 10 0f 05 <5b> c3 0f 1f 80 00 00 00 00 83 e2 39 83 faf
    [    3.925330] RSP: 002b:00007ffff505e370 EFLAGS: 00000202 ORIG_RAX: 000000000000002c
    [    3.925752] RAX: ffffffffffffffda RBX: 00007e83eaafa740 RCX: 00007e83eab84407
    [    3.926173] RDX: 00000000000001a8 RSI: 00007ffff505e3c0 RDI: 0000000000000003
    [    3.926587] RBP: 00007ffff505f460 R08: 00007e83eace1000 R09: 000000000000000c
    [    3.926977] R10: 0000000000000000 R11: 0000000000000202 R12: 00007ffff505f3c0
    [    3.927367] R13: 00007ffff505f5c8 R14: 00007e83ead1b000 R15: 00005d4fbbe6dcb8
    
    Fix these issues by enforing correct length condition in related
    policies.
    
    Fixes: 925d844696d9 ("netfilter: nft_tunnel: add support for geneve opts")
    Fixes: 4ece47787077 ("lwtunnel: add options setting and dumping for geneve")
    Fixes: 0ed5269f9e41 ("net/sched: add tunnel option support to act_tunnel_key")
    Fixes: 0a6e77784f49 ("net/sched: allow flower to match tunnel options")
    Signed-off-by: Lin Ma <linma@zju.edu.cn>
    Reviewed-by: Xin Long <lucien.xin@gmail.com>
    Acked-by: Cong Wang <xiyou.wangcong@gmail.com>
    Link: https://patch.msgid.link/20250402165632.6958-1-linma@zju.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mvpp2: Prevent parser TCAM memory corruption [+ + +]
Author: Tobias Waldekranz <tobias@waldekranz.com>
Date:   Tue Apr 1 08:58:04 2025 +0200

    net: mvpp2: Prevent parser TCAM memory corruption
    
    [ Upstream commit 96844075226b49af25a69a1d084b648ec2d9b08d ]
    
    Protect the parser TCAM/SRAM memory, and the cached (shadow) SRAM
    information, from concurrent modifications.
    
    Both the TCAM and SRAM tables are indirectly accessed by configuring
    an index register that selects the row to read or write to. This means
    that operations must be atomic in order to, e.g., avoid spreading
    writes across multiple rows. Since the shadow SRAM array is used to
    find free rows in the hardware table, it must also be protected in
    order to avoid TOCTOU errors where multiple cores allocate the same
    row.
    
    This issue was detected in a situation where `mvpp2_set_rx_mode()` ran
    concurrently on two CPUs. In this particular case the
    MVPP2_PE_MAC_UC_PROMISCUOUS entry was corrupted, causing the
    classifier unit to drop all incoming unicast - indicated by the
    `rx_classifier_drops` counter.
    
    Fixes: 3f518509dedc ("ethernet: Add new driver for Marvell Armada 375 network unit")
    Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
    Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Tested-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Link: https://patch.msgid.link/20250401065855.3113635-1-tobias@waldekranz.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: openvswitch: remove misbehaving actions length check [+ + +]
Author: Ilya Maximets <i.maximets@ovn.org>
Date:   Sat Mar 8 01:45:59 2025 +0100

    net: openvswitch: remove misbehaving actions length check
    
    [ Upstream commit a1e64addf3ff9257b45b78bc7d743781c3f41340 ]
    
    The actions length check is unreliable and produces different results
    depending on the initial length of the provided netlink attribute and
    the composition of the actual actions inside of it.  For example, a
    user can add 4088 empty clone() actions without triggering -EMSGSIZE,
    on attempt to add 4089 such actions the operation will fail with the
    -EMSGSIZE verdict.  However, if another 16 KB of other actions will
    be *appended* to the previous 4089 clone() actions, the check passes
    and the flow is successfully installed into the openvswitch datapath.
    
    The reason for a such a weird behavior is the way memory is allocated.
    When ovs_flow_cmd_new() is invoked, it calls ovs_nla_copy_actions(),
    that in turn calls nla_alloc_flow_actions() with either the actual
    length of the user-provided actions or the MAX_ACTIONS_BUFSIZE.  The
    function adds the size of the sw_flow_actions structure and then the
    actually allocated memory is rounded up to the closest power of two.
    
    So, if the user-provided actions are larger than MAX_ACTIONS_BUFSIZE,
    then MAX_ACTIONS_BUFSIZE + sizeof(*sfa) rounded up is 32K + 24 -> 64K.
    Later, while copying individual actions, we look at ksize(), which is
    64K, so this way the MAX_ACTIONS_BUFSIZE check is not actually
    triggered and the user can easily allocate almost 64 KB of actions.
    
    However, when the initial size is less than MAX_ACTIONS_BUFSIZE, but
    the actions contain ones that require size increase while copying
    (such as clone() or sample()), then the limit check will be performed
    during the reserve_sfa_size() and the user will not be allowed to
    create actions that yield more than 32 KB internally.
    
    This is one part of the problem.  The other part is that it's not
    actually possible for the userspace application to know beforehand
    if the particular set of actions will be rejected or not.
    
    Certain actions require more space in the internal representation,
    e.g. an empty clone() takes 4 bytes in the action list passed in by
    the user, but it takes 12 bytes in the internal representation due
    to an extra nested attribute, and some actions require less space in
    the internal representations, e.g. set(tunnel(..)) normally takes
    64+ bytes in the action list provided by the user, but only needs to
    store a single pointer in the internal implementation, since all the
    data is stored in the tunnel_info structure instead.
    
    And the action size limit is applied to the internal representation,
    not to the action list passed by the user.  So, it's not possible for
    the userpsace application to predict if the certain combination of
    actions will be rejected or not, because it is not possible for it to
    calculate how much space these actions will take in the internal
    representation without knowing kernel internals.
    
    All that is causing random failures in ovs-vswitchd in userspace and
    inability to handle certain traffic patterns as a result.  For example,
    it is reported that adding a bit more than a 1100 VMs in an OpenStack
    setup breaks the network due to OVS not being able to handle ARP
    traffic anymore in some cases (it tries to install a proper datapath
    flow, but the kernel rejects it with -EMSGSIZE, even though the action
    list isn't actually that large.)
    
    Kernel behavior must be consistent and predictable in order for the
    userspace application to use it in a reasonable way.  ovs-vswitchd has
    a mechanism to re-direct parts of the traffic and partially handle it
    in userspace if the required action list is oversized, but that doesn't
    work properly if we can't actually tell if the action list is oversized
    or not.
    
    Solution for this is to check the size of the user-provided actions
    instead of the internal representation.  This commit just removes the
    check from the internal part because there is already an implicit size
    check imposed by the netlink protocol.  The attribute can't be larger
    than 64 KB.  Realistically, we could reduce the limit to 32 KB, but
    we'll be risking to break some existing setups that rely on the fact
    that it's possible to create nearly 64 KB action lists today.
    
    Vast majority of flows in real setups are below 100-ish bytes.  So
    removal of the limit will not change real memory consumption on the
    system.  The absolutely worst case scenario is if someone adds a flow
    with 64 KB of empty clone() actions.  That will yield a 192 KB in the
    internal representation consuming 256 KB block of memory.  However,
    that list of actions is not meaningful and also a no-op.  Real world
    very large action lists (that can occur for a rare cases of BUM
    traffic handling) are unlikely to contain a large number of clones and
    will likely have a lot of tunnel attributes making the internal
    representation comparable in size to the original action list.
    So, it should be fine to just remove the limit.
    
    Commit in the 'Fixes' tag is the first one that introduced the
    difference between internal representation and the user-provided action
    lists, but there were many more afterwards that lead to the situation
    we have today.
    
    Fixes: 7d5437c709de ("openvswitch: Add tunneling interface.")
    Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
    Reviewed-by: Aaron Conole <aconole@redhat.com>
    Link: https://patch.msgid.link/20250308004609.2881861-1-i.maximets@ovn.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: qmi_wwan: add Telit Cinterion FE990B composition [+ + +]
Author: Fabio Porcedda <fabio.porcedda@gmail.com>
Date:   Thu Feb 27 12:24:39 2025 +0100

    net: usb: qmi_wwan: add Telit Cinterion FE990B composition
    
    commit e8cdd91926aac2c53a23925c538ad4c44be4201f upstream.
    
    Add the following Telit Cinterion FE990B composition:
    0x10b0: rmnet + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (AT) +
            tty (diag) + DPL + QDSS (Qualcomm Debug SubSystem) + adb
    
    usb-devices:
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  7 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10b0 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE990
    S:  SerialNumber=28c2595e
    C:  #Ifs= 9 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 6 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=8d(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
    Link: https://patch.msgid.link/20250227112441.3653819-2-fabio.porcedda@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: usb: qmi_wwan: add Telit Cinterion FN990B composition [+ + +]
Author: Fabio Porcedda <fabio.porcedda@gmail.com>
Date:   Wed Feb 5 18:16:46 2025 +0100

    net: usb: qmi_wwan: add Telit Cinterion FN990B composition
    
    commit 9dba9a45f8ca64a7df32aada14c20a3153af1ac8 upstream.
    
    Add the following Telit Cinterion FN990B composition:
    
    0x10d0: rmnet + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (AT) +
            tty (diag) + DPL + QDSS (Qualcomm Debug SubSystem) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 17 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10d0 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN990
    S:  SerialNumber=43b38f19
    C:  #Ifs= 9 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 6 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=8d(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
    Link: https://patch.msgid.link/20250205171649.618162-3-fabio.porcedda@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: usb: usbnet: restore usb%d name exception for local mac addresses [+ + +]
Author: Dominique Martinet <dominique.martinet@atmark-techno.com>
Date:   Wed Mar 26 17:32:36 2025 +0900

    net: usb: usbnet: restore usb%d name exception for local mac addresses
    
    commit 2ea396448f26d0d7d66224cb56500a6789c7ed07 upstream.
    
    commit 8a7d12d674ac ("net: usb: usbnet: fix name regression") assumed
    that local addresses always came from the kernel, but some devices hand
    out local mac addresses so we ended up with point-to-point devices with
    a mac set by the driver, renaming to eth%d when they used to be named
    usb%d.
    
    Userspace should not rely on device name, but for the sake of stability
    restore the local mac address check portion of the naming exception:
    point to point devices which either have no mac set by the driver or
    have a local mac handed out by the driver will keep the usb%d name.
    
    (some USB LTE modems are known to hand out a stable mac from the locally
    administered range; that mac appears to be random (different for
    mulitple devices) and can be reset with device-specific commands, so
    while such devices would benefit from getting a OUI reserved, we have
    to deal with these and might as well preserve the existing behavior
    to avoid breaking fragile openwrt configurations and such on upgrade.)
    
    Link: https://lkml.kernel.org/r/20241203130457.904325-1-asmadeus@codewreck.org
    Fixes: 8a7d12d674ac ("net: usb: usbnet: fix name regression")
    Cc: stable@vger.kernel.org
    Tested-by: Ahmed Naseef <naseefkm@gmail.com>
    Signed-off-by: Dominique Martinet <dominique.martinet@atmark-techno.com>
    Acked-by: Oliver Neukum <oneukum@suse.com>
    Link: https://patch.msgid.link/20250326-usbnet_rename-v2-1-57eb21fcff26@atmark-techno.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: wwan: mhi_wwan_mbim: Silence sequence number glitch errors [+ + +]
Author: Stephan Gerhold <stephan.gerhold@linaro.org>
Date:   Wed Feb 12 12:15:35 2025 +0100

    net: wwan: mhi_wwan_mbim: Silence sequence number glitch errors
    
    [ Upstream commit 0d1fac6d26aff5df21bb4ec980d9b7a11c410b96 ]
    
    When using the Qualcomm X55 modem on the ThinkPad X13s, the kernel log is
    constantly being filled with errors related to a "sequence number glitch",
    e.g.:
    
            [ 1903.284538] sequence number glitch prev=16 curr=0
            [ 1913.812205] sequence number glitch prev=50 curr=0
            [ 1923.698219] sequence number glitch prev=142 curr=0
            [ 2029.248276] sequence number glitch prev=1555 curr=0
            [ 2046.333059] sequence number glitch prev=70 curr=0
            [ 2076.520067] sequence number glitch prev=272 curr=0
            [ 2158.704202] sequence number glitch prev=2655 curr=0
            [ 2218.530776] sequence number glitch prev=2349 curr=0
            [ 2225.579092] sequence number glitch prev=6 curr=0
    
    Internet connectivity is working fine, so this error seems harmless. It
    looks like modem does not preserve the sequence number when entering low
    power state; the amount of errors depends on how actively the modem is
    being used.
    
    A similar issue has also been seen on USB-based MBIM modems [1]. However,
    in cdc_ncm.c the "sequence number glitch" message is a debug message
    instead of an error. Apply the same to the mhi_wwan_mbim.c driver to
    silence these errors when using the modem.
    
    [1]: https://lists.freedesktop.org/archives/libmbim-devel/2016-November/000781.html
    
    Signed-off-by: Stephan Gerhold <stephan.gerhold@linaro.org>
    Reviewed-by: Loic Poulain <loic.poulain@linaro.org>
    Acked-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Link: https://patch.msgid.link/20250212-mhi-wwan-mbim-sequence-glitch-v1-1-503735977cbd@linaro.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net_sched: Prevent creation of classes with TC_H_ROOT [+ + +]
Author: Cong Wang <xiyou.wangcong@gmail.com>
Date:   Thu Mar 6 15:23:54 2025 -0800

    net_sched: Prevent creation of classes with TC_H_ROOT
    
    [ Upstream commit 0c3057a5a04d07120b3d0ec9c79568fceb9c921e ]
    
    The function qdisc_tree_reduce_backlog() uses TC_H_ROOT as a termination
    condition when traversing up the qdisc tree to update parent backlog
    counters. However, if a class is created with classid TC_H_ROOT, the
    traversal terminates prematurely at this class instead of reaching the
    actual root qdisc, causing parent statistics to be incorrectly maintained.
    In case of DRR, this could lead to a crash as reported by Mingi Cho.
    
    Prevent the creation of any Qdisc class with classid TC_H_ROOT
    (0xFFFFFFFF) across all qdisc types, as suggested by Jamal.
    
    Reported-by: Mingi Cho <mincho@theori.io>
    Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Fixes: 066a3b5b2346 ("[NET_SCHED] sch_api: fix qdisc_tree_decrease_qlen() loop")
    Link: https://patch.msgid.link/20250306232355.93864-2-xiyou.wangcong@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net_sched: skbprio: Remove overly strict queue assertions [+ + +]
Author: Cong Wang <xiyou.wangcong@gmail.com>
Date:   Sat Mar 29 15:25:35 2025 -0700

    net_sched: skbprio: Remove overly strict queue assertions
    
    [ Upstream commit ce8fe975fd99b49c29c42e50f2441ba53112b2e8 ]
    
    In the current implementation, skbprio enqueue/dequeue contains an assertion
    that fails under certain conditions when SKBPRIO is used as a child qdisc under
    TBF with specific parameters. The failure occurs because TBF sometimes peeks at
    packets in the child qdisc without actually dequeuing them when tokens are
    unavailable.
    
    This peek operation creates a discrepancy between the parent and child qdisc
    queue length counters. When TBF later receives a high-priority packet,
    SKBPRIO's queue length may show a different value than what's reflected in its
    internal priority queue tracking, triggering the assertion.
    
    The fix removes this overly strict assertions in SKBPRIO, they are not
    necessary at all.
    
    Reported-by: syzbot+a3422a19b05ea96bee18@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=a3422a19b05ea96bee18
    Fixes: aea5f654e6b7 ("net/sched: add skbprio scheduler")
    Cc: Nishanth Devarajan <ndev2021@gmail.com>
    Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
    Acked-by: Paolo Abeni <pabeni@redhat.com>
    Link: https://patch.msgid.link/20250329222536.696204-2-xiyou.wangcong@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: nf_conncount: Fully initialize struct nf_conncount_tuple in insert_tree() [+ + +]
Author: Kohei Enju <enjuk@amazon.com>
Date:   Sun Mar 9 17:07:38 2025 +0900

    netfilter: nf_conncount: Fully initialize struct nf_conncount_tuple in insert_tree()
    
    [ Upstream commit d653bfeb07ebb3499c403404c21ac58a16531607 ]
    
    Since commit b36e4523d4d5 ("netfilter: nf_conncount: fix garbage
    collection confirm race"), `cpu` and `jiffies32` were introduced to
    the struct nf_conncount_tuple.
    
    The commit made nf_conncount_add() initialize `conn->cpu` and
    `conn->jiffies32` when allocating the struct.
    In contrast, count_tree() was not changed to initialize them.
    
    By commit 34848d5c896e ("netfilter: nf_conncount: Split insert and
    traversal"), count_tree() was split and the relevant allocation
    code now resides in insert_tree().
    Initialize `conn->cpu` and `conn->jiffies32` in insert_tree().
    
    BUG: KMSAN: uninit-value in find_or_evict net/netfilter/nf_conncount.c:117 [inline]
    BUG: KMSAN: uninit-value in __nf_conncount_add+0xd9c/0x2850 net/netfilter/nf_conncount.c:143
     find_or_evict net/netfilter/nf_conncount.c:117 [inline]
     __nf_conncount_add+0xd9c/0x2850 net/netfilter/nf_conncount.c:143
     count_tree net/netfilter/nf_conncount.c:438 [inline]
     nf_conncount_count+0x82f/0x1e80 net/netfilter/nf_conncount.c:521
     connlimit_mt+0x7f6/0xbd0 net/netfilter/xt_connlimit.c:72
     __nft_match_eval net/netfilter/nft_compat.c:403 [inline]
     nft_match_eval+0x1a5/0x300 net/netfilter/nft_compat.c:433
     expr_call_ops_eval net/netfilter/nf_tables_core.c:240 [inline]
     nft_do_chain+0x426/0x2290 net/netfilter/nf_tables_core.c:288
     nft_do_chain_ipv4+0x1a5/0x230 net/netfilter/nft_chain_filter.c:23
     nf_hook_entry_hookfn include/linux/netfilter.h:154 [inline]
     nf_hook_slow+0xf4/0x400 net/netfilter/core.c:626
     nf_hook_slow_list+0x24d/0x860 net/netfilter/core.c:663
     NF_HOOK_LIST include/linux/netfilter.h:350 [inline]
     ip_sublist_rcv+0x17b7/0x17f0 net/ipv4/ip_input.c:633
     ip_list_rcv+0x9ef/0xa40 net/ipv4/ip_input.c:669
     __netif_receive_skb_list_ptype net/core/dev.c:5936 [inline]
     __netif_receive_skb_list_core+0x15c5/0x1670 net/core/dev.c:5983
     __netif_receive_skb_list net/core/dev.c:6035 [inline]
     netif_receive_skb_list_internal+0x1085/0x1700 net/core/dev.c:6126
     netif_receive_skb_list+0x5a/0x460 net/core/dev.c:6178
     xdp_recv_frames net/bpf/test_run.c:280 [inline]
     xdp_test_run_batch net/bpf/test_run.c:361 [inline]
     bpf_test_run_xdp_live+0x2e86/0x3480 net/bpf/test_run.c:390
     bpf_prog_test_run_xdp+0xf1d/0x1ae0 net/bpf/test_run.c:1316
     bpf_prog_test_run+0x5e5/0xa30 kernel/bpf/syscall.c:4407
     __sys_bpf+0x6aa/0xd90 kernel/bpf/syscall.c:5813
     __do_sys_bpf kernel/bpf/syscall.c:5902 [inline]
     __se_sys_bpf kernel/bpf/syscall.c:5900 [inline]
     __ia32_sys_bpf+0xa0/0xe0 kernel/bpf/syscall.c:5900
     ia32_sys_call+0x394d/0x4180 arch/x86/include/generated/asm/syscalls_32.h:358
     do_syscall_32_irqs_on arch/x86/entry/common.c:165 [inline]
     __do_fast_syscall_32+0xb0/0x110 arch/x86/entry/common.c:387
     do_fast_syscall_32+0x38/0x80 arch/x86/entry/common.c:412
     do_SYSENTER_32+0x1f/0x30 arch/x86/entry/common.c:450
     entry_SYSENTER_compat_after_hwframe+0x84/0x8e
    
    Uninit was created at:
     slab_post_alloc_hook mm/slub.c:4121 [inline]
     slab_alloc_node mm/slub.c:4164 [inline]
     kmem_cache_alloc_noprof+0x915/0xe10 mm/slub.c:4171
     insert_tree net/netfilter/nf_conncount.c:372 [inline]
     count_tree net/netfilter/nf_conncount.c:450 [inline]
     nf_conncount_count+0x1415/0x1e80 net/netfilter/nf_conncount.c:521
     connlimit_mt+0x7f6/0xbd0 net/netfilter/xt_connlimit.c:72
     __nft_match_eval net/netfilter/nft_compat.c:403 [inline]
     nft_match_eval+0x1a5/0x300 net/netfilter/nft_compat.c:433
     expr_call_ops_eval net/netfilter/nf_tables_core.c:240 [inline]
     nft_do_chain+0x426/0x2290 net/netfilter/nf_tables_core.c:288
     nft_do_chain_ipv4+0x1a5/0x230 net/netfilter/nft_chain_filter.c:23
     nf_hook_entry_hookfn include/linux/netfilter.h:154 [inline]
     nf_hook_slow+0xf4/0x400 net/netfilter/core.c:626
     nf_hook_slow_list+0x24d/0x860 net/netfilter/core.c:663
     NF_HOOK_LIST include/linux/netfilter.h:350 [inline]
     ip_sublist_rcv+0x17b7/0x17f0 net/ipv4/ip_input.c:633
     ip_list_rcv+0x9ef/0xa40 net/ipv4/ip_input.c:669
     __netif_receive_skb_list_ptype net/core/dev.c:5936 [inline]
     __netif_receive_skb_list_core+0x15c5/0x1670 net/core/dev.c:5983
     __netif_receive_skb_list net/core/dev.c:6035 [inline]
     netif_receive_skb_list_internal+0x1085/0x1700 net/core/dev.c:6126
     netif_receive_skb_list+0x5a/0x460 net/core/dev.c:6178
     xdp_recv_frames net/bpf/test_run.c:280 [inline]
     xdp_test_run_batch net/bpf/test_run.c:361 [inline]
     bpf_test_run_xdp_live+0x2e86/0x3480 net/bpf/test_run.c:390
     bpf_prog_test_run_xdp+0xf1d/0x1ae0 net/bpf/test_run.c:1316
     bpf_prog_test_run+0x5e5/0xa30 kernel/bpf/syscall.c:4407
     __sys_bpf+0x6aa/0xd90 kernel/bpf/syscall.c:5813
     __do_sys_bpf kernel/bpf/syscall.c:5902 [inline]
     __se_sys_bpf kernel/bpf/syscall.c:5900 [inline]
     __ia32_sys_bpf+0xa0/0xe0 kernel/bpf/syscall.c:5900
     ia32_sys_call+0x394d/0x4180 arch/x86/include/generated/asm/syscalls_32.h:358
     do_syscall_32_irqs_on arch/x86/entry/common.c:165 [inline]
     __do_fast_syscall_32+0xb0/0x110 arch/x86/entry/common.c:387
     do_fast_syscall_32+0x38/0x80 arch/x86/entry/common.c:412
     do_SYSENTER_32+0x1f/0x30 arch/x86/entry/common.c:450
     entry_SYSENTER_compat_after_hwframe+0x84/0x8e
    
    Reported-by: syzbot+83fed965338b573115f7@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=83fed965338b573115f7
    Fixes: b36e4523d4d5 ("netfilter: nf_conncount: fix garbage collection confirm race")
    Signed-off-by: Kohei Enju <enjuk@amazon.com>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_ct: Use __refcount_inc() for per-CPU nft_ct_pcpu_template. [+ + +]
Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date:   Mon Feb 17 17:02:42 2025 +0100

    netfilter: nft_ct: Use __refcount_inc() for per-CPU nft_ct_pcpu_template.
    
    [ Upstream commit 5cfe5612ca9590db69b9be29dc83041dbf001108 ]
    
    nft_ct_pcpu_template is a per-CPU variable and relies on disabled BH for its
    locking. The refcounter is read and if its value is set to one then the
    refcounter is incremented and variable is used - otherwise it is already
    in use and left untouched.
    
    Without per-CPU locking in local_bh_disable() on PREEMPT_RT the
    read-then-increment operation is not atomic and therefore racy.
    
    This can be avoided by using unconditionally __refcount_inc() which will
    increment counter and return the old value as an atomic operation.
    In case the returned counter is not one, the variable is in use and we
    need to decrement counter. Otherwise we can use it.
    
    Use __refcount_inc() instead of read and a conditional increment.
    
    Fixes: edee4f1e9245 ("netfilter: nft_ct: add zone id set support")
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_exthdr: fix offset with ipv4_find_option() [+ + +]
Author: Alexey Kashavkin <akashavkin@gmail.com>
Date:   Sun Mar 2 00:14:36 2025 +0300

    netfilter: nft_exthdr: fix offset with ipv4_find_option()
    
    [ Upstream commit 6edd78af9506bb182518da7f6feebd75655d9a0e ]
    
    There is an incorrect calculation in the offset variable which causes
    the nft_skb_copy_to_reg() function to always return -EFAULT. Adding the
    start variable is redundant. In the __ip_options_compile() function the
    correct offset is specified when finding the function. There is no need
    to add the size of the iphdr structure to the offset.
    
    Fixes: dbb5281a1f84 ("netfilter: nf_tables: add support for matching IPv4 options")
    Signed-off-by: Alexey Kashavkin <akashavkin@gmail.com>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_set_hash: GC reaps elements with conncount for dynamic sets only [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Fri Mar 21 23:24:20 2025 +0100

    netfilter: nft_set_hash: GC reaps elements with conncount for dynamic sets only
    
    [ Upstream commit 9d74da1177c800eb3d51c13f9821b7b0683845a5 ]
    
    conncount has its own GC handler which determines when to reap stale
    elements, this is convenient for dynamic sets. However, this also reaps
    non-dynamic sets with static configurations coming from control plane.
    Always run connlimit gc handler but honor feedback to reap element if
    this set is dynamic.
    
    Fixes: 290180e2448c ("netfilter: nf_tables: add connlimit support")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_tunnel: fix geneve_opt type confusion addition [+ + +]
Author: Lin Ma <linma@zju.edu.cn>
Date:   Thu Apr 3 01:00:26 2025 +0800

    netfilter: nft_tunnel: fix geneve_opt type confusion addition
    
    [ Upstream commit 1b755d8eb1ace3870789d48fbd94f386ad6e30be ]
    
    When handling multiple NFTA_TUNNEL_KEY_OPTS_GENEVE attributes, the
    parsing logic should place every geneve_opt structure one by one
    compactly. Hence, when deciding the next geneve_opt position, the
    pointer addition should be in units of char *.
    
    However, the current implementation erroneously does type conversion
    before the addition, which will lead to heap out-of-bounds write.
    
    [    6.989857] ==================================================================
    [    6.990293] BUG: KASAN: slab-out-of-bounds in nft_tunnel_obj_init+0x977/0xa70
    [    6.990725] Write of size 124 at addr ffff888005f18974 by task poc/178
    [    6.991162]
    [    6.991259] CPU: 0 PID: 178 Comm: poc-oob-write Not tainted 6.1.132 #1
    [    6.991655] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
    [    6.992281] Call Trace:
    [    6.992423]  <TASK>
    [    6.992586]  dump_stack_lvl+0x44/0x5c
    [    6.992801]  print_report+0x184/0x4be
    [    6.993790]  kasan_report+0xc5/0x100
    [    6.994252]  kasan_check_range+0xf3/0x1a0
    [    6.994486]  memcpy+0x38/0x60
    [    6.994692]  nft_tunnel_obj_init+0x977/0xa70
    [    6.995677]  nft_obj_init+0x10c/0x1b0
    [    6.995891]  nf_tables_newobj+0x585/0x950
    [    6.996922]  nfnetlink_rcv_batch+0xdf9/0x1020
    [    6.998997]  nfnetlink_rcv+0x1df/0x220
    [    6.999537]  netlink_unicast+0x395/0x530
    [    7.000771]  netlink_sendmsg+0x3d0/0x6d0
    [    7.001462]  __sock_sendmsg+0x99/0xa0
    [    7.001707]  ____sys_sendmsg+0x409/0x450
    [    7.002391]  ___sys_sendmsg+0xfd/0x170
    [    7.003145]  __sys_sendmsg+0xea/0x170
    [    7.004359]  do_syscall_64+0x5e/0x90
    [    7.005817]  entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    [    7.006127] RIP: 0033:0x7ec756d4e407
    [    7.006339] Code: 48 89 fa 4c 89 df e8 38 aa 00 00 8b 93 08 03 00 00 59 5e 48 83 f8 fc 74 1a 5b c3 0f 1f 84 00 00 00 00 00 48 8b 44 24 10 0f 05 <5b> c3 0f 1f 80 00 00 00 00 83 e2 39 83 faf
    [    7.007364] RSP: 002b:00007ffed5d46760 EFLAGS: 00000202 ORIG_RAX: 000000000000002e
    [    7.007827] RAX: ffffffffffffffda RBX: 00007ec756cc4740 RCX: 00007ec756d4e407
    [    7.008223] RDX: 0000000000000000 RSI: 00007ffed5d467f0 RDI: 0000000000000003
    [    7.008620] RBP: 00007ffed5d468a0 R08: 0000000000000000 R09: 0000000000000000
    [    7.009039] R10: 0000000000000000 R11: 0000000000000202 R12: 0000000000000000
    [    7.009429] R13: 00007ffed5d478b0 R14: 00007ec756ee5000 R15: 00005cbd4e655cb8
    
    Fix this bug with correct pointer addition and conversion in parse
    and dump code.
    
    Fixes: 925d844696d9 ("netfilter: nft_tunnel: add support for geneve opts")
    Signed-off-by: Lin Ma <linma@zju.edu.cn>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: socket: Lookup orig tuple for IPv6 SNAT [+ + +]
Author: Maxim Mikityanskiy <maxtram95@gmail.com>
Date:   Tue Mar 18 18:15:16 2025 +0200

    netfilter: socket: Lookup orig tuple for IPv6 SNAT
    
    commit 932b32ffd7604fb00b5c57e239a3cc4d901ccf6e upstream.
    
    nf_sk_lookup_slow_v4 does the conntrack lookup for IPv4 packets to
    restore the original 5-tuple in case of SNAT, to be able to find the
    right socket (if any). Then socket_match() can correctly check whether
    the socket was transparent.
    
    However, the IPv6 counterpart (nf_sk_lookup_slow_v6) lacks this
    conntrack lookup, making xt_socket fail to match on the socket when the
    packet was SNATed. Add the same logic to nf_sk_lookup_slow_v6.
    
    IPv6 SNAT is used in Kubernetes clusters for pod-to-world packets, as
    pods' addresses are in the fd00::/8 ULA subnet and need to be replaced
    with the node's external address. Cilium leverages Envoy to enforce L7
    policies, and Envoy uses transparent sockets. Cilium inserts an iptables
    prerouting rule that matches on `-m socket --transparent` and redirects
    the packets to localhost, but it fails to match SNATed IPv6 packets due
    to that missing conntrack lookup.
    
    Closes: https://github.com/cilium/cilium/issues/37932
    Fixes: eb31628e37a0 ("netfilter: nf_tables: Add support for IPv6 NAT")
    Signed-off-by: Maxim Mikityanskiy <maxim@isovalent.com>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
netlabel: Fix NULL pointer exception caused by CALIPSO on IPv4 sockets [+ + +]
Author: Debin Zhu <mowenroot@163.com>
Date:   Tue Apr 1 20:40:18 2025 +0800

    netlabel: Fix NULL pointer exception caused by CALIPSO on IPv4 sockets
    
    [ Upstream commit 078aabd567de3d63d37d7673f714e309d369e6e2 ]
    
    When calling netlbl_conn_setattr(), addr->sa_family is used
    to determine the function behavior. If sk is an IPv4 socket,
    but the connect function is called with an IPv6 address,
    the function calipso_sock_setattr() is triggered.
    Inside this function, the following code is executed:
    
    sk_fullsock(__sk) ? inet_sk(__sk)->pinet6 : NULL;
    
    Since sk is an IPv4 socket, pinet6 is NULL, leading to a
    null pointer dereference.
    
    This patch fixes the issue by checking if inet6_sk(sk)
    returns a NULL pointer before accessing pinet6.
    
    Signed-off-by: Debin Zhu <mowenroot@163.com>
    Signed-off-by: Bitao Ouyang <1985755126@qq.com>
    Acked-by: Paul Moore <paul@paul-moore.com>
    Fixes: ceba1832b1b2 ("calipso: Set the calipso socket label to match the secattr.")
    Link: https://patch.msgid.link/20250401124018.4763-1-mowenroot@163.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netpoll: hold rcu read lock in __netpoll_send_skb() [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Thu Mar 6 05:16:18 2025 -0800

    netpoll: hold rcu read lock in __netpoll_send_skb()
    
    [ Upstream commit 505ead7ab77f289f12d8a68ac83da068e4d4408b ]
    
    The function __netpoll_send_skb() is being invoked without holding the
    RCU read lock. This oversight triggers a warning message when
    CONFIG_PROVE_RCU_LIST is enabled:
    
            net/core/netpoll.c:330 suspicious rcu_dereference_check() usage!
    
             netpoll_send_skb
             netpoll_send_udp
             write_ext_msg
             console_flush_all
             console_unlock
             vprintk_emit
    
    To prevent npinfo from disappearing unexpectedly, ensure that
    __netpoll_send_skb() is protected with the RCU read lock.
    
    Fixes: 2899656b494dcd1 ("netpoll: take rcu_read_lock_bh() in netpoll_send_skb_on_dev()")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20250306-netpoll_rcu_v2-v2-1-bc4f5c51742a@debian.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfsd: put dl_stid if fail to queue dl_recall [+ + +]
Author: Li Lingfeng <lilingfeng3@huawei.com>
Date:   Thu Feb 13 22:42:20 2025 +0800

    nfsd: put dl_stid if fail to queue dl_recall
    
    commit 230ca758453c63bd38e4d9f4a21db698f7abada8 upstream.
    
    Before calling nfsd4_run_cb to queue dl_recall to the callback_wq, we
    increment the reference count of dl_stid.
    We expect that after the corresponding work_struct is processed, the
    reference count of dl_stid will be decremented through the callback
    function nfsd4_cb_recall_release.
    However, if the call to nfsd4_run_cb fails, the incremented reference
    count of dl_stid will not be decremented correspondingly, leading to the
    following nfs4_stid leak:
    unreferenced object 0xffff88812067b578 (size 344):
      comm "nfsd", pid 2761, jiffies 4295044002 (age 5541.241s)
      hex dump (first 32 bytes):
        01 00 00 00 6b 6b 6b 6b b8 02 c0 e2 81 88 ff ff  ....kkkk........
        00 6b 6b 6b 6b 6b 6b 6b 00 00 00 00 ad 4e ad de  .kkkkkkk.....N..
      backtrace:
        kmem_cache_alloc+0x4b9/0x700
        nfsd4_process_open1+0x34/0x300
        nfsd4_open+0x2d1/0x9d0
        nfsd4_proc_compound+0x7a2/0xe30
        nfsd_dispatch+0x241/0x3e0
        svc_process_common+0x5d3/0xcc0
        svc_process+0x2a3/0x320
        nfsd+0x180/0x2e0
        kthread+0x199/0x1d0
        ret_from_fork+0x30/0x50
        ret_from_fork_asm+0x1b/0x30
    unreferenced object 0xffff8881499f4d28 (size 368):
      comm "nfsd", pid 2761, jiffies 4295044005 (age 5541.239s)
      hex dump (first 32 bytes):
        01 00 00 00 00 00 00 00 30 4d 9f 49 81 88 ff ff  ........0M.I....
        30 4d 9f 49 81 88 ff ff 20 00 00 00 01 00 00 00  0M.I.... .......
      backtrace:
        kmem_cache_alloc+0x4b9/0x700
        nfs4_alloc_stid+0x29/0x210
        alloc_init_deleg+0x92/0x2e0
        nfs4_set_delegation+0x284/0xc00
        nfs4_open_delegation+0x216/0x3f0
        nfsd4_process_open2+0x2b3/0xee0
        nfsd4_open+0x770/0x9d0
        nfsd4_proc_compound+0x7a2/0xe30
        nfsd_dispatch+0x241/0x3e0
        svc_process_common+0x5d3/0xcc0
        svc_process+0x2a3/0x320
        nfsd+0x180/0x2e0
        kthread+0x199/0x1d0
        ret_from_fork+0x30/0x50
        ret_from_fork_asm+0x1b/0x30
    Fix it by checking the result of nfsd4_run_cb and call nfs4_put_stid if
    fail to queue dl_recall.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Li Lingfeng <lilingfeng3@huawei.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
NFSD: Skip sending CB_RECALL_ANY when the backchannel isn't up [+ + +]
Author: Chuck Lever <chuck.lever@oracle.com>
Date:   Tue Jan 14 17:09:24 2025 -0500

    NFSD: Skip sending CB_RECALL_ANY when the backchannel isn't up
    
    commit 8a388c1fabeb6606e16467b23242416c0dbeffad upstream.
    
    NFSD sends CB_RECALL_ANY to clients when the server is low on
    memory or that client has a large number of delegations outstanding.
    
    We've seen cases where NFSD attempts to send CB_RECALL_ANY requests
    to disconnected clients, and gets confused. These calls never go
    anywhere if a backchannel transport to the target client isn't
    available. Before the server can send any backchannel operation, the
    client has to connect first and then do a BIND_CONN_TO_SESSION.
    
    This patch doesn't address the root cause of the confusion, but
    there's no need to queue up these optional operations if they can't
    go anywhere.
    
    Fixes: 44df6f439a17 ("NFSD: add delegation reaper to react to low memory condition")
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
NFSv4: Don't trigger uneccessary scans for return-on-close delegations [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Tue Feb 18 16:50:30 2025 -0500

    NFSv4: Don't trigger uneccessary scans for return-on-close delegations
    
    [ Upstream commit 47acca884f714f41d95dc654f802845544554784 ]
    
    The amount of looping through the list of delegations is occasionally
    leading to soft lockups. Avoid at least some loops by not requiring the
    NFSv4 state manager to scan for delegations that are marked for
    return-on-close. Instead, either mark them for immediate return (if
    possible) or else leave it up to nfs4_inode_return_delegation_on_close()
    to return them once the file is closed by the application.
    
    Fixes: b757144fd77c ("NFSv4: Be less aggressive about returning delegations for open files")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ntb: intel: Fix using link status DB's [+ + +]
Author: Nikita Shubin <n.shubin@yadro.com>
Date:   Thu Jun 6 11:15:19 2024 +0300

    ntb: intel: Fix using link status DB's
    
    [ Upstream commit 8144e9c8f30fb23bb736a5d24d5c9d46965563c4 ]
    
    Make sure we are not using DB's which were remapped for link status.
    
    Fixes: f6e51c354b60 ("ntb: intel: split out the gen3 code")
    Signed-off-by: Nikita Shubin <n.shubin@yadro.com>
    Reviewed-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ntb_hw_switchtec: Fix shift-out-of-bounds in switchtec_ntb_mw_set_trans [+ + +]
Author: Yajun Deng <yajun.deng@linux.dev>
Date:   Wed Aug 16 16:33:05 2023 +0800

    ntb_hw_switchtec: Fix shift-out-of-bounds in switchtec_ntb_mw_set_trans
    
    [ Upstream commit de203da734fae00e75be50220ba5391e7beecdf9 ]
    
    There is a kernel API ntb_mw_clear_trans() would pass 0 to both addr and
    size. This would make xlate_pos negative.
    
    [   23.734156] switchtec switchtec0: MW 0: part 0 addr 0x0000000000000000 size 0x0000000000000000
    [   23.734158] ================================================================================
    [   23.734172] UBSAN: shift-out-of-bounds in drivers/ntb/hw/mscc/ntb_hw_switchtec.c:293:7
    [   23.734418] shift exponent -1 is negative
    
    Ensuring xlate_pos is a positive or zero before BIT.
    
    Fixes: 1e2fd202f859 ("ntb_hw_switchtec: Check for alignment of the buffer in mw_set_trans()")
    Signed-off-by: Yajun Deng <yajun.deng@linux.dev>
    Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ntb_perf: Delete duplicate dmaengine_unmap_put() call in perf_copy_chunk() [+ + +]
Author: Markus Elfring <elfring@users.sourceforge.net>
Date:   Mon Sep 23 10:38:11 2024 +0200

    ntb_perf: Delete duplicate dmaengine_unmap_put() call in perf_copy_chunk()
    
    commit 4279e72cab31dd3eb8c89591eb9d2affa90ab6aa upstream.
    
    The function call “dmaengine_unmap_put(unmap)” was used in an if branch.
    The same call was immediately triggered by a subsequent goto statement.
    Thus avoid such a call repetition.
    
    This issue was detected by using the Coccinelle software.
    
    Fixes: 5648e56d03fa ("NTB: ntb_perf: Add full multi-port NTB API support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nvme-fc: go straight to connecting state when initializing [+ + +]
Author: Daniel Wagner <wagi@kernel.org>
Date:   Thu Jan 9 14:30:47 2025 +0100

    nvme-fc: go straight to connecting state when initializing
    
    [ Upstream commit d3d380eded7ee5fc2fc53b3b0e72365ded025c4a ]
    
    The initial controller initialization mimiks the reconnect loop
    behavior by switching from NEW to RESETTING and then to CONNECTING.
    
    The transition from NEW to CONNECTING is a valid transition, so there is
    no point entering the RESETTING state. TCP and RDMA also transition
    directly to CONNECTING state.
    
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    Reviewed-by: Hannes Reinecke <hare@suse.de>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Daniel Wagner <wagi@kernel.org>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme-pci: clean up CMBMSC when registering CMB fails [+ + +]
Author: Icenowy Zheng <uwu@icenowy.me>
Date:   Thu Feb 13 01:04:43 2025 +0800

    nvme-pci: clean up CMBMSC when registering CMB fails
    
    [ Upstream commit 6a3572e10f740acd48e2713ef37e92186a3ce5e8 ]
    
    CMB decoding should get disabled when the CMB block isn't successfully
    registered to P2P DMA subsystem.
    
    Clean up the CMBMSC register in this error handling codepath to disable
    CMB decoding (and CMBLOC/CMBSZ registers).
    
    Signed-off-by: Icenowy Zheng <uwu@icenowy.me>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nvme-pci: skip CMB blocks incompatible with PCI P2P DMA [+ + +]
Author: Icenowy Zheng <uwu@icenowy.me>
Date:   Thu Feb 13 01:04:44 2025 +0800

    nvme-pci: skip CMB blocks incompatible with PCI P2P DMA
    
    [ Upstream commit 56cf7ef0d490b28fad8f8629fc135c5ab7c9f54e ]
    
    The PCI P2PDMA code will register the CMB block to the memory
    hot-plugging subsystem, which have an alignment requirement. Memory
    blocks that do not satisfy this alignment requirement (usually 2MB) will
    lead to a WARNING from memory hotplugging.
    
    Verify the CMB block's address and size against the alignment and only
    try to send CMB blocks compatible with it to prevent this warning.
    
    Tested on Intel DC D4502 SSD, which has a 512K CMB block that is too
    small for memory hotplugging (thus PCI P2PDMA).
    
    Signed-off-by: Icenowy Zheng <uwu@icenowy.me>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme-tcp: fix possible UAF in nvme_tcp_poll [+ + +]
Author: Sagi Grimberg <sagi@grimberg.me>
Date:   Thu Feb 20 13:18:30 2025 +0200

    nvme-tcp: fix possible UAF in nvme_tcp_poll
    
    [ Upstream commit 8c1624b63a7d24142a2bbc3a5ee7e95f004ea36e ]
    
    nvme_tcp_poll() may race with the send path error handler because
    it may complete the request while it is actively being polled for
    completion, resulting in a UAF panic [1]:
    
    We should make sure to stop polling when we see an error when
    trying to read from the socket. Hence make sure to propagate the
    error so that the block layer breaks the polling cycle.
    
    [1]:
    --
    [35665.692310] nvme nvme2: failed to send request -13
    [35665.702265] nvme nvme2: unsupported pdu type (3)
    [35665.702272] BUG: kernel NULL pointer dereference, address: 0000000000000000
    [35665.702542] nvme nvme2: queue 1 receive failed:  -22
    [35665.703209] #PF: supervisor write access in kernel mode
    [35665.703213] #PF: error_code(0x0002) - not-present page
    [35665.703214] PGD 8000003801cce067 P4D 8000003801cce067 PUD 37e6f79067 PMD 0
    [35665.703220] Oops: 0002 [#1] SMP PTI
    [35665.703658] nvme nvme2: starting error recovery
    [35665.705809] Hardware name: Inspur aaabbb/YZMB-00882-104, BIOS 4.1.26 09/22/2022
    [35665.705812] Workqueue: kblockd blk_mq_requeue_work
    [35665.709172] RIP: 0010:_raw_spin_lock+0xc/0x30
    [35665.715788] Call Trace:
    [35665.716201]  <TASK>
    [35665.716613]  ? show_trace_log_lvl+0x1c1/0x2d9
    [35665.717049]  ? show_trace_log_lvl+0x1c1/0x2d9
    [35665.717457]  ? blk_mq_request_bypass_insert+0x2c/0xb0
    [35665.717950]  ? __die_body.cold+0x8/0xd
    [35665.718361]  ? page_fault_oops+0xac/0x140
    [35665.718749]  ? blk_mq_start_request+0x30/0xf0
    [35665.719144]  ? nvme_tcp_queue_rq+0xc7/0x170 [nvme_tcp]
    [35665.719547]  ? exc_page_fault+0x62/0x130
    [35665.719938]  ? asm_exc_page_fault+0x22/0x30
    [35665.720333]  ? _raw_spin_lock+0xc/0x30
    [35665.720723]  blk_mq_request_bypass_insert+0x2c/0xb0
    [35665.721101]  blk_mq_requeue_work+0xa5/0x180
    [35665.721451]  process_one_work+0x1e8/0x390
    [35665.721809]  worker_thread+0x53/0x3d0
    [35665.722159]  ? process_one_work+0x390/0x390
    [35665.722501]  kthread+0x124/0x150
    [35665.722849]  ? set_kthread_struct+0x50/0x50
    [35665.723182]  ret_from_fork+0x1f/0x30
    
    Reported-by: Zhang Guanghui <zhang.guanghui@cestc.cn>
    Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
    Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme: only allow entering LIVE from CONNECTING state [+ + +]
Author: Daniel Wagner <wagi@kernel.org>
Date:   Fri Feb 14 09:02:03 2025 +0100

    nvme: only allow entering LIVE from CONNECTING state
    
    [ Upstream commit d2fe192348f93fe3a0cb1e33e4aba58e646397f4 ]
    
    The fabric transports and also the PCI transport are not entering the
    LIVE state from NEW or RESETTING. This makes the state machine more
    restrictive and allows to catch not supported state transitions, e.g.
    directly switching from RESETTING to LIVE.
    
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    Signed-off-by: Daniel Wagner <wagi@kernel.org>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvmet-rdma: recheck queue state is LIVE in state lock in recv done [+ + +]
Author: Ruozhu Li <david.li@jaguarmicro.com>
Date:   Sun Feb 16 20:49:56 2025 +0800

    nvmet-rdma: recheck queue state is LIVE in state lock in recv done
    
    [ Upstream commit 3988ac1c67e6e84d2feb987d7b36d5791174b3da ]
    
    The queue state checking in nvmet_rdma_recv_done is not in queue state
    lock.Queue state can transfer to LIVE in cm establish handler between
    state checking and state lock here, cause a silent drop of nvme connect
    cmd.
    Recheck queue state whether in LIVE state in state lock to prevent this
    issue.
    
    Signed-off-by: Ruozhu Li <david.li@jaguarmicro.com>
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
objtool, media: dib8000: Prevent divide-by-zero in dib8000_set_dds() [+ + +]
Author: Josh Poimboeuf <jpoimboe@kernel.org>
Date:   Mon Mar 24 14:56:06 2025 -0700

    objtool, media: dib8000: Prevent divide-by-zero in dib8000_set_dds()
    
    [ Upstream commit e63d465f59011dede0a0f1d21718b59a64c3ff5c ]
    
    If dib8000_set_dds()'s call to dib8000_read32() returns zero, the result
    is a divide-by-zero.  Prevent that from happening.
    
    Fixes the following warning with an UBSAN kernel:
    
      drivers/media/dvb-frontends/dib8000.o: warning: objtool: dib8000_tune() falls through to next function dib8096p_cfg_DibRx()
    
    Fixes: 173a64cb3fcf ("[media] dib8000: enhancement")
    Reported-by: kernel test robot <lkp@intel.com>
    Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/r/bd1d504d930ae3f073b1e071bcf62cae7708773c.1742852847.git.jpoimboe@kernel.org
    Closes: https://lore.kernel.org/r/202503210602.fvH5DO1i-lkp@intel.com/
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ocfs2: validate l_tree_depth to avoid out-of-bounds access [+ + +]
Author: Vasiliy Kovalev <kovalev@altlinux.org>
Date:   Fri Feb 14 11:49:08 2025 +0300

    ocfs2: validate l_tree_depth to avoid out-of-bounds access
    
    [ Upstream commit a406aff8c05115119127c962cbbbbd202e1973ef ]
    
    The l_tree_depth field is 16-bit (__le16), but the actual maximum depth is
    limited to OCFS2_MAX_PATH_DEPTH.
    
    Add a check to prevent out-of-bounds access if l_tree_depth has an invalid
    value, which may occur when reading from a corrupted mounted disk [1].
    
    Link: https://lkml.kernel.org/r/20250214084908.736528-1-kovalev@altlinux.org
    Fixes: ccd979bdbce9 ("[PATCH] OCFS2: The Second Oracle Cluster Filesystem")
    Signed-off-by: Vasiliy Kovalev <kovalev@altlinux.org>
    Reported-by: syzbot+66c146268dc88f4341fd@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=66c146268dc88f4341fd [1]
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: Kurt Hackel <kurt.hackel@oracle.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Vasiliy Kovalev <kovalev@altlinux.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
octeontx2-af: Fix mbox INTR handler when num VFs > 64 [+ + +]
Author: Geetha sowjanya <gakula@marvell.com>
Date:   Thu Mar 27 14:44:41 2025 +0530

    octeontx2-af: Fix mbox INTR handler when num VFs > 64
    
    [ Upstream commit 0fdba88a211508984eb5df62008c29688692b134 ]
    
    When number of RVU VFs > 64, the vfs value passed to "rvu_queue_work"
    function is incorrect. Due to which mbox workqueue entries for
    VFs 0 to 63 never gets added to workqueue.
    
    Fixes: 9bdc47a6e328 ("octeontx2-af: Mbox communication support btw AF and it's VFs")
    Signed-off-by: Geetha sowjanya <gakula@marvell.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20250327091441.1284-1-gakula@marvell.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

octeontx2-af: Free NIX_AF_INT_VEC_GEN irq [+ + +]
Author: Geetha sowjanya <gakula@marvell.com>
Date:   Thu Mar 27 15:10:54 2025 +0530

    octeontx2-af: Free NIX_AF_INT_VEC_GEN irq
    
    [ Upstream commit 323d6db6dc7decb06f2545efb9496259ddacd4f4 ]
    
    Due to the incorrect initial vector number in
    rvu_nix_unregister_interrupts(), NIX_AF_INT_VEC_GEN is not
    geeting free. Fix the vector number to include NIX_AF_INT_VEC_GEN
    irq.
    
    Fixes: 5ed66306eab6 ("octeontx2-af: Add devlink health reporters for NIX")
    Signed-off-by: Geetha sowjanya <gakula@marvell.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20250327094054.2312-1-gakula@marvell.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
of: property: Increase NR_FWNODE_REFERENCE_ARGS [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Tue Feb 25 21:58:06 2025 +0800

    of: property: Increase NR_FWNODE_REFERENCE_ARGS
    
    [ Upstream commit eb50844d728f11e87491f7c7af15a4a737f1159d ]
    
    Currently, the following two macros have different values:
    
    // The maximal argument count for firmware node reference
     #define NR_FWNODE_REFERENCE_ARGS       8
    // The maximal argument count for DT node reference
     #define MAX_PHANDLE_ARGS 16
    
    It may cause firmware node reference's argument count out of range if
    directly assign DT node reference's argument count to firmware's.
    
    drivers/of/property.c:of_fwnode_get_reference_args() is doing the direct
    assignment, so may cause firmware's argument count @args->nargs got out
    of range, namely, in [9, 16].
    
    Fix by increasing NR_FWNODE_REFERENCE_ARGS to 16 to meet DT requirement.
    Will align both macros later to avoid such inconsistency.
    
    Fixes: 3e3119d3088f ("device property: Introduce fwnode_property_get_reference_args")
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Link: https://lore.kernel.org/r/20250225-fix_arg_count-v4-1-13cdc519eb31@quicinc.com
    Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
openvswitch: Use kmalloc_size_roundup() to match ksize() usage [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Tue Oct 18 02:06:33 2022 -0700

    openvswitch: Use kmalloc_size_roundup() to match ksize() usage
    
    [ Upstream commit ab3f7828c9793a5dfa99a54dc19ae3491c38bfa3 ]
    
    Round up allocations with kmalloc_size_roundup() so that openvswitch's
    use of ksize() is always accurate and no special handling of the memory
    is needed by KASAN, UBSAN_BOUNDS, nor FORTIFY_SOURCE.
    
    Cc: Pravin B Shelar <pshelar@ovn.org>
    Cc: dev@openvswitch.org
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20221018090628.never.537-kees@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: a1e64addf3ff ("net: openvswitch: remove misbehaving actions length check")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PCI/ASPM: Fix link state exit during switch upstream function removal [+ + +]
Author: Daniel Stodden <daniel.stodden@gmail.com>
Date:   Sun Dec 22 19:39:08 2024 -0800

    PCI/ASPM: Fix link state exit during switch upstream function removal
    
    [ Upstream commit cbf937dcadfd571a434f8074d057b32cd14fbea5 ]
    
    Before 456d8aa37d0f ("PCI/ASPM: Disable ASPM on MFD function removal to
    avoid use-after-free"), we would free the ASPM link only after the last
    function on the bus pertaining to the given link was removed.
    
    That was too late. If function 0 is removed before sibling function,
    link->downstream would point to free'd memory after.
    
    After above change, we freed the ASPM parent link state upon any function
    removal on the bus pertaining to a given link.
    
    That is too early. If the link is to a PCIe switch with MFD on the upstream
    port, then removing functions other than 0 first would free a link which
    still remains parent_link to the remaining downstream ports.
    
    The resulting GPFs are especially frequent during hot-unplug, because
    pciehp removes devices on the link bus in reverse order.
    
    On that switch, function 0 is the virtual P2P bridge to the internal bus.
    Free exactly when function 0 is removed -- before the parent link is
    obsolete, but after all subordinate links are gone.
    
    Link: https://lore.kernel.org/r/e12898835f25234561c9d7de4435590d957b85d9.1734924854.git.dns@arista.com
    Fixes: 456d8aa37d0f ("PCI/ASPM: Disable ASPM on MFD function removal to avoid use-after-free")
    Signed-off-by: Daniel Stodden <dns@arista.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    [kwilczynski: commit log]
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PCI/portdrv: Only disable pciehp interrupts early when needed [+ + +]
Author: Feng Tang <feng.tang@linux.alibaba.com>
Date:   Mon Mar 3 10:36:30 2025 +0800

    PCI/portdrv: Only disable pciehp interrupts early when needed
    
    [ Upstream commit 9d7db4db19827380e225914618c0c1bf435ed2f5 ]
    
    Firmware developers reported that Linux issues two PCIe hotplug commands in
    very short intervals on an ARM server, which doesn't comply with the PCIe
    spec.  According to PCIe r6.1, sec 6.7.3.2, if the Command Completed event
    is supported, software must wait for a command to complete or wait at
    least 1 second before sending a new command.
    
    In the failure case, the first PCIe hotplug command is from
    get_port_device_capability(), which sends a command to disable PCIe hotplug
    interrupts without waiting for its completion, and the second command comes
    from pcie_enable_notification() of pciehp driver, which enables hotplug
    interrupts again.
    
    Fix this by only disabling the hotplug interrupts when the pciehp driver is
    not enabled.
    
    Link: https://lore.kernel.org/r/20250303023630.78397-1-feng.tang@linux.alibaba.com
    Fixes: 2bd50dd800b5 ("PCI: PCIe: Disable PCIe port services during port initialization")
    Suggested-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Feng Tang <feng.tang@linux.alibaba.com>
    [bhelgaas: commit log]
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Lukas Wunner <lukas@wunner.de>
    Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PCI: Avoid reset when disabled via sysfs [+ + +]
Author: Nishanth Aravamudan <naravamudan@nvidia.com>
Date:   Fri Feb 7 14:56:00 2025 -0600

    PCI: Avoid reset when disabled via sysfs
    
    [ Upstream commit 479380efe1625e251008d24b2810283db60d6fcd ]
    
    After d88f521da3ef ("PCI: Allow userspace to query and set device reset
    mechanism"), userspace can disable reset of specific PCI devices by writing
    an empty string to the sysfs reset_method file.
    
    However, pci_slot_resettable() does not check pci_reset_supported(), which
    means that pci_reset_function() will still reset the device even if
    userspace has disabled all the reset methods.
    
    I was able to reproduce this issue with a vfio device passed to a qemu
    guest, where I had disabled PCI reset via sysfs.
    
    Add an explicit check of pci_reset_supported() in both
    pci_slot_resettable() and pci_bus_resettable() to ensure both the reset
    status and reset execution are bypassed if an administrator disables it for
    a device.
    
    Link: https://lore.kernel.org/r/20250207205600.1846178-1-naravamudan@nvidia.com
    Fixes: d88f521da3ef ("PCI: Allow userspace to query and set device reset mechanism")
    Signed-off-by: Nishanth Aravamudan <naravamudan@nvidia.com>
    [bhelgaas: commit log]
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Cc: Alex Williamson <alex.williamson@redhat.com>
    Cc: Raphael Norwitz <raphael.norwitz@nutanix.com>
    Cc: Amey Narkhede <ameynarkhede03@gmail.com>
    Cc: Jason Gunthorpe <jgg@nvidia.com>
    Cc: Yishai Hadas <yishaih@nvidia.com>
    Cc: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
    Cc: Kevin Tian <kevin.tian@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: brcmstb: Use internal register to change link capability [+ + +]
Author: Jim Quinlan <james.quinlan@broadcom.com>
Date:   Fri Feb 14 12:39:30 2025 -0500

    PCI: brcmstb: Use internal register to change link capability
    
    [ Upstream commit 0c97321e11e0e9e18546f828492758f6aaecec59 ]
    
    The driver has been mistakenly writing to a read-only (RO)
    configuration space register (PCI_EXP_LNKCAP) to change the
    PCIe link capability.
    
    Although harmless in this case, the proper write destination
    is an internal register that is reflected by PCI_EXP_LNKCAP.
    
    Thus, fix the brcm_pcie_set_gen() function to correctly update
    the link capability.
    
    Fixes: c0452137034b ("PCI: brcmstb: Add Broadcom STB PCIe host controller driver")
    Signed-off-by: Jim Quinlan <james.quinlan@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Link: https://lore.kernel.org/r/20250214173944.47506-3-james.quinlan@broadcom.com
    [kwilczynski: commit log]
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: cadence-ep: Fix the driver to send MSG TLP for INTx without data payload [+ + +]
Author: Hans Zhang <18255117159@163.com>
Date:   Sat Feb 15 00:57:24 2025 +0800

    PCI: cadence-ep: Fix the driver to send MSG TLP for INTx without data payload
    
    [ Upstream commit 3ac47fbf4f6e8c3a7c3855fac68cc3246f90f850 ]
    
    Per the Cadence's "PCIe Controller IP for AX14" user guide, Version
    1.04, Section 9.1.7.1, "AXI Subordinate to PCIe Address Translation
    Registers", Table 9.4, the bit 16 of the AXI Subordinate Address
    (axi_s_awaddr) when set corresponds to MSG with data, and when not set,
    to MSG without data.
    
    However, the driver is currently doing the opposite and due to this,
    the INTx is never received on the host.
    
    So, fix the driver to reflect the documentation and also make INTx work.
    
    Fixes: 37dddf14f1ae ("PCI: cadence: Add EndPoint Controller driver for Cadence PCIe controller")
    Signed-off-by: Hans Zhang <18255117159@163.com>
    Signed-off-by: Hans Zhang <hans.zhang@cixtech.com>
    Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Link: https://lore.kernel.org/r/20250214165724.184599-1-18255117159@163.com
    [kwilczynski: commit log]
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: pciehp: Don't enable HPIE when resuming in poll mode [+ + +]
Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Date:   Fri Mar 21 18:21:14 2025 +0200

    PCI: pciehp: Don't enable HPIE when resuming in poll mode
    
    [ Upstream commit 527664f738afb6f2c58022cd35e63801e5dc7aec ]
    
    PCIe hotplug can operate in poll mode without interrupt handlers using a
    polling kthread only.  eb34da60edee ("PCI: pciehp: Disable hotplug
    interrupt during suspend") failed to consider that and enables HPIE
    (Hot-Plug Interrupt Enable) unconditionally when resuming the Port.
    
    Only set HPIE if non-poll mode is in use. This makes
    pcie_enable_interrupt() match how pcie_enable_notification() already
    handles HPIE.
    
    Link: https://lore.kernel.org/r/20250321162114.3939-1-ilpo.jarvinen@linux.intel.com
    Fixes: eb34da60edee ("PCI: pciehp: Disable hotplug interrupt during suspend")
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: Remove stray put_device() in pci_register_host_bridge() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri Mar 7 11:46:34 2025 +0300

    PCI: Remove stray put_device() in pci_register_host_bridge()
    
    [ Upstream commit 6e8d06e5096c80cbf41313b4a204f43071ca42be ]
    
    This put_device() was accidentally left over from when we changed the code
    from using device_register() to calling device_add().  Delete it.
    
    Link: https://lore.kernel.org/r/55b24870-89fb-4c91-b85d-744e35db53c2@stanley.mountain
    Fixes: 9885440b16b8 ("PCI: Fix pci_host_bridge struct device release/free handling")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: xilinx-cpm: Fix IRQ domain leak in error path of probe [+ + +]
Author: Thippeswamy Havalige <thippeswamy.havalige@amd.com>
Date:   Mon Feb 24 21:20:22 2025 +0530

    PCI: xilinx-cpm: Fix IRQ domain leak in error path of probe
    
    [ Upstream commit 57b0302240741e73fe51f88404b3866e0d2933ad ]
    
    The IRQ domain allocated for the PCIe controller is not freed if
    resource_list_first_type() returns NULL, leading to a resource leak.
    
    This fix ensures properly cleaning up the allocated IRQ domain in
    the error path.
    
    Fixes: 49e427e6bdd1 ("Merge branch 'pci/host-probe-refactor'")
    Signed-off-by: Thippeswamy Havalige <thippeswamy.havalige@amd.com>
    [kwilczynski: added missing Fixes: tag, refactored to use one of the goto labels]
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Link: https://lore.kernel.org/r/20250224155025.782179-2-thippeswamy.havalige@amd.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf python: Check if there is space to copy all the event [+ + +]
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
Date:   Wed Mar 12 17:31:41 2025 -0300

    perf python: Check if there is space to copy all the event
    
    [ Upstream commit 89aaeaf84231157288035b366cb6300c1c6cac64 ]
    
    The pyrf_event__new() method copies the event obtained from the perf
    ring buffer to a structure that will then be turned into a python object
    for further consumption, so it copies perf_event.header.size bytes to
    its 'event' member:
    
      $ pahole -C pyrf_event /tmp/build/perf-tools-next/python/perf.cpython-312-x86_64-linux-gnu.so
      struct pyrf_event {
            PyObject                   ob_base;              /*     0    16 */
            struct evsel *             evsel;                /*    16     8 */
            struct perf_sample         sample;               /*    24   312 */
    
            /* XXX last struct has 7 bytes of padding, 2 holes */
    
            /* --- cacheline 5 boundary (320 bytes) was 16 bytes ago --- */
            union perf_event           event;                /*   336  4168 */
    
            /* size: 4504, cachelines: 71, members: 4 */
            /* member types with holes: 1, total: 2 */
            /* paddings: 1, sum paddings: 7 */
            /* last cacheline: 24 bytes */
      };
    
      $
    
    It was doing so without checking if the event just obtained has more
    than that space, fix it.
    
    This isn't a proper, final solution, as we need to support larger
    events, but for the time being we at least bounds check and document it.
    
    Fixes: 877108e42b1b9ba6 ("perf tools: Initial python binding")
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Reviewed-by: Ian Rogers <irogers@google.com>
    Link: https://lore.kernel.org/r/20250312203141.285263-7-acme@kernel.org
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

perf python: Decrement the refcount of just created event on failure [+ + +]
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
Date:   Wed Mar 12 17:31:39 2025 -0300

    perf python: Decrement the refcount of just created event on failure
    
    [ Upstream commit 3de5a2bf5b4847f7a59a184568f969f8fe05d57f ]
    
    To avoid a leak if we have the python object but then something happens
    and we need to return the operation, decrement the offset of the newly
    created object.
    
    Fixes: 377f698db12150a1 ("perf python: Add struct evsel into struct pyrf_event")
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Reviewed-by: Ian Rogers <irogers@google.com>
    Link: https://lore.kernel.org/r/20250312203141.285263-5-acme@kernel.org
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

perf python: Don't keep a raw_data pointer to consumed ring buffer space [+ + +]
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
Date:   Wed Mar 12 17:31:40 2025 -0300

    perf python: Don't keep a raw_data pointer to consumed ring buffer space
    
    [ Upstream commit f3fed3ae34d606819d87a63d970cc3092a5be7ab ]
    
    When processing tracepoints the perf python binding was parsing the
    event before calling perf_mmap__consume(&md->core) in
    pyrf_evlist__read_on_cpu().
    
    But part of this event parsing was to set the perf_sample->raw_data
    pointer to the payload of the event, which then could be overwritten by
    other event before tracepoint fields were asked for via event.prev_comm
    in a python program, for instance.
    
    This also happened with other fields, but strings were were problems
    were surfacing, as there is UTF-8 validation for the potentially garbled
    data.
    
    This ended up showing up as (with some added debugging messages):
    
      ( field 'prev_comm' ret=0x7f7c31f65110, raw_size=68 )  ( field 'prev_pid' ret=0x7f7c23b1bed0, raw_size=68 )  ( field 'prev_prio' ret=0x7f7c239c0030, raw_size=68 )  ( field 'prev_state' ret=0x7f7c239c0250, raw_size=68 ) time 14771421785867 prev_comm= prev_pid=1919907691 prev_prio=796026219 prev_state=0x303a32313175 ==>
      ( XXX '��' len=16, raw_size=68)  ( field 'next_comm' ret=(nil), raw_size=68 ) Traceback (most recent call last):
       File "/home/acme/git/perf-tools-next/tools/perf/python/tracepoint.py", line 51, in <module>
         main()
       File "/home/acme/git/perf-tools-next/tools/perf/python/tracepoint.py", line 46, in main
         event.next_comm,
         ^^^^^^^^^^^^^^^
      AttributeError: 'perf.sample_event' object has no attribute 'next_comm'
    
    When event.next_comm was asked for, the PyUnicode_FromString() python
    API would fail and that tracepoint field wouldn't be available, stopping
    the tools/perf/python/tracepoint.py test tool.
    
    But, since we already do a copy of the whole event in pyrf_event__new,
    just use it and while at it remove what was done in in e8968e654191390a
    ("perf python: Fix pyrf_evlist__read_on_cpu event consuming") because we
    don't really need to wait for parsing the sample before declaring the
    event as consumed.
    
    This copy is questionable as is now, as it limits the maximum event +
    sample_type and tracepoint payload to sizeof(union perf_event), this all
    has been "working" because 'struct perf_event_mmap2', the largest entry
    in 'union perf_event' is:
    
      $ pahole -C perf_event ~/bin/perf | grep mmap2
            struct perf_record_mmap2   mmap2;              /*     0  4168 */
      $
    
    Fixes: bae57e3825a3dded ("perf python: Add support to resolve tracepoint fields")
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Reviewed-by: Ian Rogers <irogers@google.com>
    Link: https://lore.kernel.org/r/20250312203141.285263-6-acme@kernel.org
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

perf python: Fixup description of sample.id event member [+ + +]
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
Date:   Wed Mar 12 17:31:36 2025 -0300

    perf python: Fixup description of sample.id event member
    
    [ Upstream commit 1376c195e8ad327bb9f2d32e0acc5ac39e7cb30a ]
    
    Some old cut'n'paste error, its "ip", so the description should be
    "event ip", not "event type".
    
    Fixes: 877108e42b1b9ba6 ("perf tools: Initial python binding")
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Reviewed-by: Ian Rogers <irogers@google.com>
    Link: https://lore.kernel.org/r/20250312203141.285263-2-acme@kernel.org
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf units: Fix insufficient array space [+ + +]
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
Date:   Mon Mar 10 16:45:32 2025 -0300

    perf units: Fix insufficient array space
    
    [ Upstream commit cf67629f7f637fb988228abdb3aae46d0c1748fe ]
    
    No need to specify the array size, let the compiler figure that out.
    
    This addresses this compiler warning that was noticed while build
    testing on fedora rawhide:
    
      31    15.81 fedora:rawhide                : FAIL gcc version 15.0.1 20250225 (Red Hat 15.0.1-0) (GCC)
        util/units.c: In function 'unit_number__scnprintf':
        util/units.c:67:24: error: initializer-string for array of 'char' is too long [-Werror=unterminated-string-initialization]
           67 |         char unit[4] = "BKMG";
              |                        ^~~~~~
        cc1: all warnings being treated as errors
    
    Fixes: 9808143ba2e54818 ("perf tools: Add unit_number__scnprintf function")
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Link: https://lore.kernel.org/r/20250310194534.265487-3-acme@kernel.org
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf/ring_buffer: Allow the EPOLLRDNORM flag for poll [+ + +]
Author: Tao Chen <chen.dylane@linux.dev>
Date:   Fri Mar 14 11:00:36 2025 +0800

    perf/ring_buffer: Allow the EPOLLRDNORM flag for poll
    
    [ Upstream commit c96fff391c095c11dc87dab35be72dee7d217cde ]
    
    The poll man page says POLLRDNORM is equivalent to POLLIN. For poll(),
    it seems that if user sets pollfd with POLLRDNORM in userspace, perf_poll
    will not return until timeout even if perf_output_wakeup called,
    whereas POLLIN returns.
    
    Fixes: 76369139ceb9 ("perf: Split up buffer handling from core code")
    Signed-off-by: Tao Chen <chen.dylane@linux.dev>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/r/20250314030036.2543180-1-chen.dylane@linux.dev
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pinctrl: bcm281xx: Fix incorrect regmap max_registers value [+ + +]
Author: Artur Weber <aweber.kernel@gmail.com>
Date:   Fri Feb 7 21:02:41 2025 +0100

    pinctrl: bcm281xx: Fix incorrect regmap max_registers value
    
    [ Upstream commit 68283c1cb573143c0b7515e93206f3503616bc10 ]
    
    The max_registers value does not take into consideration the stride;
    currently, it's set to the number of the last pin, but this does not
    accurately represent the final register.
    
    Fix this by multiplying the current value by 4.
    
    Fixes: 54b1aa5a5b16 ("ARM: pinctrl: Add Broadcom Capri pinctrl driver")
    Signed-off-by: Artur Weber <aweber.kernel@gmail.com>
    Link: https://lore.kernel.org/20250207-bcm21664-pinctrl-v1-2-e7cfac9b2d3b@gmail.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: renesas: rza2: Fix missing of_node_put() call [+ + +]
Author: Fabrizio Castro <fabrizio.castro.jz@renesas.com>
Date:   Wed Mar 5 16:37:53 2025 +0000

    pinctrl: renesas: rza2: Fix missing of_node_put() call
    
    [ Upstream commit abcdeb4e299a11ecb5a3ea0cce00e68e8f540375 ]
    
    of_parse_phandle_with_fixed_args() requires its caller to
    call into of_node_put() on the node pointer from the output
    structure, but such a call is currently missing.
    
    Call into of_node_put() to rectify that.
    
    Fixes: b59d0e782706 ("pinctrl: Add RZ/A2 pin and gpio controller")
    Signed-off-by: Fabrizio Castro <fabrizio.castro.jz@renesas.com>
    Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://lore.kernel.org/20250305163753.34913-5-fabrizio.castro.jz@renesas.com
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: renesas: rzg2l: Fix missing of_node_put() call [+ + +]
Author: Fabrizio Castro <fabrizio.castro.jz@renesas.com>
Date:   Wed Mar 5 16:37:51 2025 +0000

    pinctrl: renesas: rzg2l: Fix missing of_node_put() call
    
    [ Upstream commit a5779e625e2b377f16a6675c432aaf299ce5028c ]
    
    of_parse_phandle_with_fixed_args() requires its caller to
    call into of_node_put() on the node pointer from the output
    structure, but such a call is currently missing.
    
    Call into of_node_put() to rectify that.
    
    Fixes: c4c4637eb57f ("pinctrl: renesas: Add RZ/G2L pin and gpio controller driver")
    Signed-off-by: Fabrizio Castro <fabrizio.castro.jz@renesas.com>
    Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://lore.kernel.org/20250305163753.34913-3-fabrizio.castro.jz@renesas.com
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: tegra: Set SFIO mode to Mux Register [+ + +]
Author: Prathamesh Shete <pshete@nvidia.com>
Date:   Thu Mar 6 10:35:42 2025 +0530

    pinctrl: tegra: Set SFIO mode to Mux Register
    
    [ Upstream commit 17013f0acb322e5052ff9b9d0fab0ab5a4bfd828 ]
    
    Tegra devices have an 'sfsel' bit field that determines whether a pin
    operates in SFIO (Special Function I/O) or GPIO mode. Currently,
    tegra_pinctrl_gpio_disable_free() sets this bit when releasing a GPIO.
    
    However, tegra_pinctrl_set_mux() can be called independently in certain
    code paths where gpio_disable_free() is not invoked. In such cases, failing
    to set the SFIO mode could lead to incorrect pin configurations, resulting
    in functional issues for peripherals relying on SFIO.
    
    This patch ensures that whenever set_mux() is called, the SFIO mode is
    correctly set in the Mux Register if the 'sfsel' bit is present. This
    prevents situations where the pin remains in GPIO mode despite being
    configured for SFIO use.
    
    Fixes: 971dac7123c7 ("pinctrl: add a driver for NVIDIA Tegra")
    Signed-off-by: Prathamesh Shete <pshete@nvidia.com>
    Link: https://lore.kernel.org/20250306050542.16335-1-pshete@nvidia.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86: ISST: Correct command storage data length [+ + +]
Author: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Date:   Fri Mar 28 15:47:49 2025 -0700

    platform/x86: ISST: Correct command storage data length
    
    commit 9462e74c5c983cce34019bfb27f734552bebe59f upstream.
    
    After resume/online turbo limit ratio (TRL) is restored partially if
    the admin explicitly changed TRL from user space.
    
    A hash table is used to store SST mail box and MSR settings when modified
    to restore those settings after resume or online. This uses a struct
    isst_cmd field "data" to store these settings. This is a 64 bit field.
    But isst_store_new_cmd() is only assigning as u32. This results in
    truncation of 32 bits.
    
    Change the argument to u64 from u32.
    
    Fixes: f607874f35cb ("platform/x86: ISST: Restore state on resume")
    Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20250328224749.2691272-1-srinivas.pandruvada@linux.intel.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PM: sleep: Adjust check before setting power.must_resume [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Thu Feb 27 11:53:50 2025 +0100

    PM: sleep: Adjust check before setting power.must_resume
    
    [ Upstream commit eeb87d17aceab7803a5a5bcb6cf2817b745157cf ]
    
    The check before setting power.must_resume in device_suspend_noirq()
    does not take power.child_count into account, but it should do that, so
    use pm_runtime_need_not_resume() in it for this purpose and adjust the
    comment next to it accordingly.
    
    Fixes: 107d47b2b95e ("PM: sleep: core: Simplify the SMART_SUSPEND flag handling")
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
    Link: https://patch.msgid.link/3353728.44csPzL39Z@rjwysocki.net
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PM: sleep: Fix handling devices with direct_complete set on errors [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Thu Mar 13 17:00:00 2025 +0100

    PM: sleep: Fix handling devices with direct_complete set on errors
    
    [ Upstream commit 03f1444016b71feffa1dfb8a51f15ba592f94b13 ]
    
    When dpm_suspend() fails, some devices with power.direct_complete set
    may not have been handled by device_suspend() yet, so runtime PM has
    not been disabled for them yet even though power.direct_complete is set.
    
    Since device_resume() expects that runtime PM has been disabled for all
    devices with power.direct_complete set, it will attempt to reenable
    runtime PM for the devices that have not been processed by device_suspend()
    which does not make sense.  Had those devices had runtime PM disabled
    before device_suspend() had run, device_resume() would have inadvertently
    enable runtime PM for them, but this is not expected to happen because
    it would require ->prepare() callbacks to return positive values for
    devices with runtime PM disabled, which would be invalid.
    
    In practice, this issue is most likely benign because pm_runtime_enable()
    will not allow the "disable depth" counter to underflow, but it causes a
    warning message to be printed for each affected device.
    
    To allow device_resume() to distinguish the "direct complete" devices
    that have been processed by device_suspend() from those which have not
    been handled by it, make device_suspend() set power.is_suspended for
    "direct complete" devices.
    
    Next, move the power.is_suspended check in device_resume() before the
    power.direct_complete check in it to make it skip the "direct complete"
    devices that have not been handled by device_suspend().
    
    This change is based on a preliminary patch from Saravana Kannan.
    
    Fixes: aae4518b3124 ("PM / sleep: Mechanism to avoid resuming runtime-suspended devices unnecessarily")
    Link: https://lore.kernel.org/linux-pm/20241114220921.2529905-2-saravanak@google.com/
    Reported-by: Saravana Kannan <saravanak@google.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: Saravana Kannan <saravanak@google.com>
    Link: https://patch.msgid.link/12627587.O9o76ZdvQC@rjwysocki.net
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
power: supply: max77693: Fix wrong conversion of charge input threshold value [+ + +]
Author: Artur Weber <aweber.kernel@gmail.com>
Date:   Sun Mar 16 21:11:49 2025 +0100

    power: supply: max77693: Fix wrong conversion of charge input threshold value
    
    [ Upstream commit 30cc7b0d0e9341d419eb7da15fb5c22406dbe499 ]
    
    The charge input threshold voltage register on the MAX77693 PMIC accepts
    four values: 0x0 for 4.3v, 0x1 for 4.7v, 0x2 for 4.8v and 0x3 for 4.9v.
    Due to an oversight, the driver calculated the values for 4.7v and above
    starting from 0x0, rather than from 0x1 ([(4700000 - 4700000) / 100000]
    gives 0).
    
    Add 1 to the calculation to ensure that 4.7v is converted to a register
    value of 0x1 and that the other two voltages are converted correctly as
    well.
    
    Fixes: 87c2d9067893 ("power: max77693: Add charger driver for Maxim 77693")
    Signed-off-by: Artur Weber <aweber.kernel@gmail.com>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20250316-max77693-charger-input-threshold-fix-v1-1-2b037d0ac722@gmail.com
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powercap: call put_device() on an error path in powercap_register_control_type() [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Fri Jan 10 10:05:54 2025 +0900

    powercap: call put_device() on an error path in powercap_register_control_type()
    
    [ Upstream commit 93c66fbc280747ea700bd6199633d661e3c819b3 ]
    
    powercap_register_control_type() calls device_register(), but does not
    release the refcount of the device when it fails.
    
    Call put_device() before returning an error to balance the refcount.
    
    Since the kfree(control_type) will be done by powercap_release(), remove
    the lines in powercap_register_control_type() before returning the error.
    
    This bug was found by an experimental verifier that I am developing.
    
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Link: https://patch.msgid.link/20250110010554.1583411-1-joe@pf.is.s.u-tokyo.ac.jp
    [ rjw: Changelog edits ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
proc: fix UAF in proc_get_inode() [+ + +]
Author: Ye Bin <yebin10@huawei.com>
Date:   Sat Mar 1 15:06:24 2025 +0300

    proc: fix UAF in proc_get_inode()
    
    commit 654b33ada4ab5e926cd9c570196fefa7bec7c1df upstream.
    
    Fix race between rmmod and /proc/XXX's inode instantiation.
    
    The bug is that pde->proc_ops don't belong to /proc, it belongs to a
    module, therefore dereferencing it after /proc entry has been registered
    is a bug unless use_pde/unuse_pde() pair has been used.
    
    use_pde/unuse_pde can be avoided (2 atomic ops!) because pde->proc_ops
    never changes so information necessary for inode instantiation can be
    saved _before_ proc_register() in PDE itself and used later, avoiding
    pde->proc_ops->...  dereference.
    
          rmmod                         lookup
    sys_delete_module
                             proc_lookup_de
                               pde_get(de);
                               proc_get_inode(dir->i_sb, de);
      mod->exit()
        proc_remove
          remove_proc_subtree
           proc_entry_rundown(de);
      free_module(mod);
    
                                   if (S_ISREG(inode->i_mode))
                                     if (de->proc_ops->proc_read_iter)
                               --> As module is already freed, will trigger UAF
    
    BUG: unable to handle page fault for address: fffffbfff80a702b
    PGD 817fc4067 P4D 817fc4067 PUD 817fc0067 PMD 102ef4067 PTE 0
    Oops: Oops: 0000 [#1] PREEMPT SMP KASAN PTI
    CPU: 26 UID: 0 PID: 2667 Comm: ls Tainted: G
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996)
    RIP: 0010:proc_get_inode+0x302/0x6e0
    RSP: 0018:ffff88811c837998 EFLAGS: 00010a06
    RAX: dffffc0000000000 RBX: ffffffffc0538140 RCX: 0000000000000007
    RDX: 1ffffffff80a702b RSI: 0000000000000001 RDI: ffffffffc0538158
    RBP: ffff8881299a6000 R08: 0000000067bbe1e5 R09: 1ffff11023906f20
    R10: ffffffffb560ca07 R11: ffffffffb2b43a58 R12: ffff888105bb78f0
    R13: ffff888100518048 R14: ffff8881299a6004 R15: 0000000000000001
    FS:  00007f95b9686840(0000) GS:ffff8883af100000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: fffffbfff80a702b CR3: 0000000117dd2000 CR4: 00000000000006f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     proc_lookup_de+0x11f/0x2e0
     __lookup_slow+0x188/0x350
     walk_component+0x2ab/0x4f0
     path_lookupat+0x120/0x660
     filename_lookup+0x1ce/0x560
     vfs_statx+0xac/0x150
     __do_sys_newstat+0x96/0x110
     do_syscall_64+0x5f/0x170
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    [adobriyan@gmail.com: don't do 2 atomic ops on the common path]
    Link: https://lkml.kernel.org/r/3d25ded0-1739-447e-812b-e34da7990dcf@p183
    Fixes: 778f3dd5a13c ("Fix procfs compat_ioctl regression")
    Signed-off-by: Ye Bin <yebin10@huawei.com>
    Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
qlcnic: fix memory leak issues in qlcnic_sriov_common.c [+ + +]
Author: Haoxiang Li <haoxiang_li2024@163.com>
Date:   Fri Mar 7 17:49:52 2025 +0800

    qlcnic: fix memory leak issues in qlcnic_sriov_common.c
    
    commit d2b9d97e89c79c95f8b517e4fa43fd100f936acc upstream.
    
    Add qlcnic_sriov_free_vlans() in qlcnic_sriov_alloc_vlans() if
    any sriov_vlans fails to be allocated.
    Add qlcnic_sriov_free_vlans() to free the memory allocated by
    qlcnic_sriov_alloc_vlans() if "sriov->allowed_vlans" fails to
    be allocated.
    
    Fixes: 91b7282b613d ("qlcnic: Support VLAN id config.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Haoxiang Li <haoxiang_li2024@163.com>
    Link: https://patch.msgid.link/20250307094952.14874-1-haoxiang_li2024@163.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/bnxt_re: Add missing paranthesis in map_qp_id_to_tbl_indx [+ + +]
Author: Kashyap Desai <kashyap.desai@broadcom.com>
Date:   Mon Mar 3 08:59:37 2025 -0800

    RDMA/bnxt_re: Add missing paranthesis in map_qp_id_to_tbl_indx
    
    [ Upstream commit 67ee8d496511ad8e1cb88f72944847e7b3e4e47c ]
    
    The modulo operation returns wrong result without the
    paranthesis and that resulted in wrong QP table indexing.
    
    Fixes: 84cf229f4001 ("RDMA/bnxt_re: Fix the qp table indexing")
    Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Link: https://patch.msgid.link/1741021178-2569-3-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Avoid clearing VLAN_ID mask in modify qp path [+ + +]
Author: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Date:   Mon Mar 10 22:16:36 2025 -0700

    RDMA/bnxt_re: Avoid clearing VLAN_ID mask in modify qp path
    
    [ Upstream commit 81c0db302a674f8004ed805393d17fd76f552e83 ]
    
    Driver is always clearing the mask that sets the VLAN ID/Service Level
    in the adapter. Recent change for supporting multiple traffic class
    exposed this issue.
    
    Allow setting SL and VLAN_ID while QP is moved from INIT to RTR state.
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Fixes: c64b16a37b6d ("RDMA/bnxt_re: Support different traffic class")
    Signed-off-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Link: https://patch.msgid.link/1741670196-2919-1-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/core: Don't expose hw_counters outside of init net namespace [+ + +]
Author: Roman Gushchin <roman.gushchin@linux.dev>
Date:   Thu Feb 27 16:54:20 2025 +0000

    RDMA/core: Don't expose hw_counters outside of init net namespace
    
    [ Upstream commit a1ecb30f90856b0be4168ad51b8875148e285c1f ]
    
    Commit 467f432a521a ("RDMA/core: Split port and device counter sysfs
    attributes") accidentally almost exposed hw counters to non-init net
    namespaces. It didn't expose them fully, as an attempt to read any of
    those counters leads to a crash like this one:
    
    [42021.807566] BUG: kernel NULL pointer dereference, address: 0000000000000028
    [42021.814463] #PF: supervisor read access in kernel mode
    [42021.819549] #PF: error_code(0x0000) - not-present page
    [42021.824636] PGD 0 P4D 0
    [42021.827145] Oops: 0000 [#1] SMP PTI
    [42021.830598] CPU: 82 PID: 2843922 Comm: switchto-defaul Kdump: loaded Tainted: G S      W I        XXX
    [42021.841697] Hardware name: XXX
    [42021.849619] RIP: 0010:hw_stat_device_show+0x1e/0x40 [ib_core]
    [42021.855362] Code: 90 90 90 90 90 90 90 90 90 90 90 90 f3 0f 1e fa 0f 1f 44 00 00 49 89 d0 4c 8b 5e 20 48 8b 8f b8 04 00 00 48 81 c7 f0 fa ff ff <48> 8b 41 28 48 29 ce 48 83 c6 d0 48 c1 ee 04 69 d6 ab aa aa aa 48
    [42021.873931] RSP: 0018:ffff97fe90f03da0 EFLAGS: 00010287
    [42021.879108] RAX: ffff9406988a8c60 RBX: ffff940e1072d438 RCX: 0000000000000000
    [42021.886169] RDX: ffff94085f1aa000 RSI: ffff93c6cbbdbcb0 RDI: ffff940c7517aef0
    [42021.893230] RBP: ffff97fe90f03e70 R08: ffff94085f1aa000 R09: 0000000000000000
    [42021.900294] R10: ffff94085f1aa000 R11: ffffffffc0775680 R12: ffffffff87ca2530
    [42021.907355] R13: ffff940651602840 R14: ffff93c6cbbdbcb0 R15: ffff94085f1aa000
    [42021.914418] FS:  00007fda1a3b9700(0000) GS:ffff94453fb80000(0000) knlGS:0000000000000000
    [42021.922423] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [42021.928130] CR2: 0000000000000028 CR3: 00000042dcfb8003 CR4: 00000000003726f0
    [42021.935194] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [42021.942257] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [42021.949324] Call Trace:
    [42021.951756]  <TASK>
    [42021.953842]  [<ffffffff86c58674>] ? show_regs+0x64/0x70
    [42021.959030]  [<ffffffff86c58468>] ? __die+0x78/0xc0
    [42021.963874]  [<ffffffff86c9ef75>] ? page_fault_oops+0x2b5/0x3b0
    [42021.969749]  [<ffffffff87674b92>] ? exc_page_fault+0x1a2/0x3c0
    [42021.975549]  [<ffffffff87801326>] ? asm_exc_page_fault+0x26/0x30
    [42021.981517]  [<ffffffffc0775680>] ? __pfx_show_hw_stats+0x10/0x10 [ib_core]
    [42021.988482]  [<ffffffffc077564e>] ? hw_stat_device_show+0x1e/0x40 [ib_core]
    [42021.995438]  [<ffffffff86ac7f8e>] dev_attr_show+0x1e/0x50
    [42022.000803]  [<ffffffff86a3eeb1>] sysfs_kf_seq_show+0x81/0xe0
    [42022.006508]  [<ffffffff86a11134>] seq_read_iter+0xf4/0x410
    [42022.011954]  [<ffffffff869f4b2e>] vfs_read+0x16e/0x2f0
    [42022.017058]  [<ffffffff869f50ee>] ksys_read+0x6e/0xe0
    [42022.022073]  [<ffffffff8766f1ca>] do_syscall_64+0x6a/0xa0
    [42022.027441]  [<ffffffff8780013b>] entry_SYSCALL_64_after_hwframe+0x78/0xe2
    
    The problem can be reproduced using the following steps:
      ip netns add foo
      ip netns exec foo bash
      cat /sys/class/infiniband/mlx4_0/hw_counters/*
    
    The panic occurs because of casting the device pointer into an
    ib_device pointer using container_of() in hw_stat_device_show() is
    wrong and leads to a memory corruption.
    
    However the real problem is that hw counters should never been exposed
    outside of the non-init net namespace.
    
    Fix this by saving the index of the corresponding attribute group
    (it might be 1 or 2 depending on the presence of driver-specific
    attributes) and zeroing the pointer to hw_counters group for compat
    devices during the initialization.
    
    With this fix applied hw_counters are not available in a non-init
    net namespace:
      find /sys/class/infiniband/mlx4_0/ -name hw_counters
        /sys/class/infiniband/mlx4_0/ports/1/hw_counters
        /sys/class/infiniband/mlx4_0/ports/2/hw_counters
        /sys/class/infiniband/mlx4_0/hw_counters
    
      ip netns add foo
      ip netns exec foo bash
      find /sys/class/infiniband/mlx4_0/ -name hw_counters
    
    Fixes: 467f432a521a ("RDMA/core: Split port and device counter sysfs attributes")
    Signed-off-by: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: Leon Romanovsky <leon@kernel.org>
    Cc: Maher Sanalla <msanalla@nvidia.com>
    Cc: linux-rdma@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Link: https://patch.msgid.link/20250227165420.3430301-1-roman.gushchin@linux.dev
    Reviewed-by: Parav Pandit <parav@nvidia.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/hns: Fix a missing rollback in error path of hns_roce_create_qp_common() [+ + +]
Author: Junxian Huang <huangjunxian6@hisilicon.com>
Date:   Tue Mar 11 16:48:55 2025 +0800

    RDMA/hns: Fix a missing rollback in error path of hns_roce_create_qp_common()
    
    [ Upstream commit 444907dd45cbe62fd69398805b6e2c626fab5b3a ]
    
    When ib_copy_to_udata() fails in hns_roce_create_qp_common(),
    hns_roce_qp_remove() should be called in the error path to
    clean up resources in hns_roce_qp_store().
    
    Fixes: 0f00571f9433 ("RDMA/hns: Use new SQ doorbell register for HIP09")
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20250311084857.3803665-6-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix soft lockup during bt pages loop [+ + +]
Author: Junxian Huang <huangjunxian6@hisilicon.com>
Date:   Tue Mar 11 16:48:52 2025 +0800

    RDMA/hns: Fix soft lockup during bt pages loop
    
    [ Upstream commit 25655580136de59ec89f09089dd28008ea440fc9 ]
    
    Driver runs a for-loop when allocating bt pages and mapping them with
    buffer pages. When a large buffer (e.g. MR over 100GB) is being allocated,
    it may require a considerable loop count. This will lead to soft lockup:
    
            watchdog: BUG: soft lockup - CPU#27 stuck for 22s!
            ...
            Call trace:
             hem_list_alloc_mid_bt+0x124/0x394 [hns_roce_hw_v2]
             hns_roce_hem_list_request+0xf8/0x160 [hns_roce_hw_v2]
             hns_roce_mtr_create+0x2e4/0x360 [hns_roce_hw_v2]
             alloc_mr_pbl+0xd4/0x17c [hns_roce_hw_v2]
             hns_roce_reg_user_mr+0xf8/0x190 [hns_roce_hw_v2]
             ib_uverbs_reg_mr+0x118/0x290
    
            watchdog: BUG: soft lockup - CPU#35 stuck for 23s!
            ...
            Call trace:
             hns_roce_hem_list_find_mtt+0x7c/0xb0 [hns_roce_hw_v2]
             mtr_map_bufs+0xc4/0x204 [hns_roce_hw_v2]
             hns_roce_mtr_create+0x31c/0x3c4 [hns_roce_hw_v2]
             alloc_mr_pbl+0xb0/0x160 [hns_roce_hw_v2]
             hns_roce_reg_user_mr+0x108/0x1c0 [hns_roce_hw_v2]
             ib_uverbs_reg_mr+0x120/0x2bc
    
    Add a cond_resched() to fix soft lockup during these loops. In order not
    to affect the allocation performance of normal-size buffer, set the loop
    count of a 100GB MR as the threshold to call cond_resched().
    
    Fixes: 38389eaa4db1 ("RDMA/hns: Add mtr support for mixed multihop addressing")
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20250311084857.3803665-3-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix unmatched condition in error path of alloc_user_qp_db() [+ + +]
Author: Junxian Huang <huangjunxian6@hisilicon.com>
Date:   Tue Mar 11 16:48:53 2025 +0800

    RDMA/hns: Fix unmatched condition in error path of alloc_user_qp_db()
    
    [ Upstream commit b9f59a24ba35a7d955a9f8e148dd9f85b7b40a01 ]
    
    Currently the condition of unmapping sdb in error path is not exactly
    the same as the condition of mapping in alloc_user_qp_db(). This may
    cause a problem of unmapping an unmapped db in some case, such as
    when the QP is XRC TGT. Unified the two conditions.
    
    Fixes: 90ae0b57e4a5 ("RDMA/hns: Combine enable flags of qp")
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20250311084857.3803665-4-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix wrong value of max_sge_rd [+ + +]
Author: Junxian Huang <huangjunxian6@hisilicon.com>
Date:   Tue Mar 11 16:48:57 2025 +0800

    RDMA/hns: Fix wrong value of max_sge_rd
    
    [ Upstream commit 6b5e41a8b51fce520bb09bd651a29ef495e990de ]
    
    There is no difference between the sge of READ and non-READ
    operations in hns RoCE. Set max_sge_rd to the same value as
    max_send_sge.
    
    Fixes: 9a4435375cd1 ("IB/hns: Add driver files for hns RoCE driver")
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20250311084857.3803665-8-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Remove redundant 'phy_addr' in hns_roce_hem_list_find_mtt() [+ + +]
Author: Chengchang Tang <tangchengchang@huawei.com>
Date:   Thu Sep 22 20:33:10 2022 +0800

    RDMA/hns: Remove redundant 'phy_addr' in hns_roce_hem_list_find_mtt()
    
    [ Upstream commit 5f652387c5423a82453c5cb446a88834bf41a94b ]
    
    This parameter has never been used. Remove it to simplify the function.
    
    Link: https://lore.kernel.org/r/20220922123315.3732205-8-xuhaoyue1@hisilicon.com
    Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
    Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
    Signed-off-by: Haoyue Xu <xuhaoyue1@hisilicon.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Stable-dep-of: 25655580136d ("RDMA/hns: Fix soft lockup during bt pages loop")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/mlx5: Fix mlx5_poll_one() cur_qp update flow [+ + +]
Author: Patrisious Haddad <phaddad@nvidia.com>
Date:   Thu Mar 13 16:29:53 2025 +0200

    RDMA/mlx5: Fix mlx5_poll_one() cur_qp update flow
    
    [ Upstream commit 5ed3b0cb3f827072e93b4c5b6e2b8106fd7cccbd ]
    
    When cur_qp isn't NULL, in order to avoid fetching the QP from
    the radix tree again we check if the next cqe QP is identical to
    the one we already have.
    
    The bug however is that we are checking if the QP is identical by
    checking the QP number inside the CQE against the QP number inside the
    mlx5_ib_qp, but that's wrong since the QP number from the CQE is from
    FW so it should be matched against mlx5_core_qp which is our FW QP
    number.
    
    Otherwise we could use the wrong QP when handling a CQE which could
    cause the kernel trace below.
    
    This issue is mainly noticeable over QPs 0 & 1, since for now they are
    the only QPs in our driver whereas the QP number inside mlx5_ib_qp
    doesn't match the QP number inside mlx5_core_qp.
    
    BUG: kernel NULL pointer dereference, address: 0000000000000012
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
     PGD 0 P4D 0
     Oops: Oops: 0000 [#1] SMP
     CPU: 0 UID: 0 PID: 7927 Comm: kworker/u62:1 Not tainted 6.14.0-rc3+ #189
     Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
     Workqueue: ib-comp-unb-wq ib_cq_poll_work [ib_core]
     RIP: 0010:mlx5_ib_poll_cq+0x4c7/0xd90 [mlx5_ib]
     Code: 03 00 00 8d 58 ff 21 cb 66 39 d3 74 39 48 c7 c7 3c 89 6e a0 0f b7 db e8 b7 d2 b3 e0 49 8b 86 60 03 00 00 48 c7 c7 4a 89 6e a0 <0f> b7 5c 98 02 e8 9f d2 b3 e0 41 0f b7 86 78 03 00 00 83 e8 01 21
     RSP: 0018:ffff88810511bd60 EFLAGS: 00010046
     RAX: 0000000000000010 RBX: 0000000000000000 RCX: 0000000000000000
     RDX: 0000000000000000 RSI: ffff88885fa1b3c0 RDI: ffffffffa06e894a
     RBP: 00000000000000b0 R08: 0000000000000000 R09: ffff88810511bc10
     R10: 0000000000000001 R11: 0000000000000001 R12: ffff88810d593000
     R13: ffff88810e579108 R14: ffff888105146000 R15: 00000000000000b0
     FS:  0000000000000000(0000) GS:ffff88885fa00000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 0000000000000012 CR3: 00000001077e6001 CR4: 0000000000370eb0
     Call Trace:
      <TASK>
      ? __die+0x20/0x60
      ? page_fault_oops+0x150/0x3e0
      ? exc_page_fault+0x74/0x130
      ? asm_exc_page_fault+0x22/0x30
      ? mlx5_ib_poll_cq+0x4c7/0xd90 [mlx5_ib]
      __ib_process_cq+0x5a/0x150 [ib_core]
      ib_cq_poll_work+0x31/0x90 [ib_core]
      process_one_work+0x169/0x320
      worker_thread+0x288/0x3a0
      ? work_busy+0xb0/0xb0
      kthread+0xd7/0x1f0
      ? kthreads_online_cpu+0x130/0x130
      ? kthreads_online_cpu+0x130/0x130
      ret_from_fork+0x2d/0x50
      ? kthreads_online_cpu+0x130/0x130
      ret_from_fork_asm+0x11/0x20
      </TASK>
    
    Fixes: e126ba97dba9 ("mlx5: Add driver for Mellanox Connect-IB adapters")
    Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
    Reviewed-by: Edward Srouji <edwards@nvidia.com>
    Link: https://patch.msgid.link/4ada09d41f1e36db62c44a9b25c209ea5f054316.1741875692.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
regulator: check that dummy regulator has been probed before using it [+ + +]
Author: Christian Eggers <ceggers@arri.de>
Date:   Thu Mar 13 11:27:39 2025 +0100

    regulator: check that dummy regulator has been probed before using it
    
    commit 2c7a50bec4958f1d1c84d19cde518d0e96a676fd upstream.
    
    Due to asynchronous driver probing there is a chance that the dummy
    regulator hasn't already been probed when first accessing it.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Christian Eggers <ceggers@arri.de>
    Link: https://patch.msgid.link/20250313103051.32430-3-ceggers@arri.de
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
remoteproc: core: Clear table_sz when rproc_shutdown [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Wed Mar 19 18:01:05 2025 +0800

    remoteproc: core: Clear table_sz when rproc_shutdown
    
    [ Upstream commit efdde3d73ab25cef4ff2d06783b0aad8b093c0e4 ]
    
    There is case as below could trigger kernel dump:
    Use U-Boot to start remote processor(rproc) with resource table
    published to a fixed address by rproc. After Kernel boots up,
    stop the rproc, load a new firmware which doesn't have resource table
    ,and start rproc.
    
    When starting rproc with a firmware not have resource table,
    `memcpy(loaded_table, rproc->cached_table, rproc->table_sz)` will
    trigger dump, because rproc->cache_table is set to NULL during the last
    stop operation, but rproc->table_sz is still valid.
    
    This issue is found on i.MX8MP and i.MX9.
    
    Dump as below:
    Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
    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=000000010af63000
    [0000000000000000] pgd=0000000000000000, p4d=0000000000000000
    Internal error: Oops: 0000000096000004 [#1] PREEMPT SMP
    Modules linked in:
    CPU: 2 UID: 0 PID: 1060 Comm: sh Not tainted 6.14.0-rc7-next-20250317-dirty #38
    Hardware name: NXP i.MX8MPlus EVK board (DT)
    pstate: a0000005 (NzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : __pi_memcpy_generic+0x110/0x22c
    lr : rproc_start+0x88/0x1e0
    Call trace:
     __pi_memcpy_generic+0x110/0x22c (P)
     rproc_boot+0x198/0x57c
     state_store+0x40/0x104
     dev_attr_store+0x18/0x2c
     sysfs_kf_write+0x7c/0x94
     kernfs_fop_write_iter+0x120/0x1cc
     vfs_write+0x240/0x378
     ksys_write+0x70/0x108
     __arm64_sys_write+0x1c/0x28
     invoke_syscall+0x48/0x10c
     el0_svc_common.constprop.0+0xc0/0xe0
     do_el0_svc+0x1c/0x28
     el0_svc+0x30/0xcc
     el0t_64_sync_handler+0x10c/0x138
     el0t_64_sync+0x198/0x19c
    
    Clear rproc->table_sz to address the issue.
    
    Fixes: 9dc9507f1880 ("remoteproc: Properly deal with the resource table when detaching")
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Link: https://lore.kernel.org/r/20250319100106.3622619-1-peng.fan@oss.nxp.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

remoteproc: qcom_q6v5_mss: Handle platforms with one power domain [+ + +]
Author: Luca Weiss <luca@lucaweiss.eu>
Date:   Mon Feb 17 23:05:18 2025 +0100

    remoteproc: qcom_q6v5_mss: Handle platforms with one power domain
    
    [ Upstream commit 4641840341f37dc8231e0840ec1514b4061b4322 ]
    
    For example MSM8974 has mx voltage rail exposed as regulator and only cx
    voltage rail is exposed as power domain. This power domain (cx) is
    attached internally in power domain and cannot be attached in this driver.
    
    Fixes: 8750cf392394 ("remoteproc: qcom_q6v5_mss: Allow replacing regulators with power domains")
    Co-developed-by: Matti Lehtimäki <matti.lehtimaki@gmail.com>
    Signed-off-by: Matti Lehtimäki <matti.lehtimaki@gmail.com>
    Reviewed-by: Stephan Gerhold <stephan.gerhold@linaro.org>
    Signed-off-by: Luca Weiss <luca@lucaweiss.eu>
    Link: https://lore.kernel.org/r/20250217-msm8226-modem-v5-4-2bc74b80e0ae@lucaweiss.eu
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

remoteproc: qcom_q6v5_pas: Make single-PD handling more robust [+ + +]
Author: Luca Weiss <luca@lucaweiss.eu>
Date:   Tue Jan 28 22:54:00 2025 +0100

    remoteproc: qcom_q6v5_pas: Make single-PD handling more robust
    
    [ Upstream commit e917b73234b02aa4966325e7380d2559bf127ba9 ]
    
    Only go into the if condition for single-PD handling when there's
    actually just one power domain specified there. Otherwise it'll be an
    issue in the dts and we should fail in the regular code path.
    
    This also mirrors the latest changes in the qcom_q6v5_mss driver.
    
    Suggested-by: Stephan Gerhold <stephan.gerhold@linaro.org>
    Fixes: 17ee2fb4e856 ("remoteproc: qcom: pas: Vote for active/proxy power domains")
    Signed-off-by: Luca Weiss <luca@lucaweiss.eu>
    Reviewed-by: Stephan Gerhold <stephan.gerhold@linaro.org>
    Link: https://lore.kernel.org/r/20250128-pas-singlepd-v1-2-85d9ae4b0093@lucaweiss.eu
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "gre: Fix IPv6 link-local address generation." [+ + +]
Author: Guillaume Nault <gnault@redhat.com>
Date:   Wed Mar 19 22:26:50 2025 +0100

    Revert "gre: Fix IPv6 link-local address generation."
    
    [ Upstream commit fc486c2d060f67d672ddad81724f7c8a4d329570 ]
    
    This reverts commit 183185a18ff96751db52a46ccf93fff3a1f42815.
    
    This patch broke net/forwarding/ip6gre_custom_multipath_hash.sh in some
    circumstances (https://lore.kernel.org/netdev/Z9RIyKZDNoka53EO@mini-arch/).
    Let's revert it while the problem is being investigated.
    
    Fixes: 183185a18ff9 ("gre: Fix IPv6 link-local address generation.")
    Signed-off-by: Guillaume Nault <gnault@redhat.com>
    Link: https://patch.msgid.link/8b1ce738eb15dd841aab9ef888640cab4f6ccfea.1742418408.git.gnault@redhat.com
    Acked-by: Stanislav Fomichev <sdf@fomichev.me>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ring-buffer: Fix bytes_dropped calculation issue [+ + +]
Author: Feng Yang <yangfeng@kylinos.cn>
Date:   Sun Feb 23 15:01:06 2025 +0800

    ring-buffer: Fix bytes_dropped calculation issue
    
    [ Upstream commit c73f0b69648501978e8b3e8fa7eef7f4197d0481 ]
    
    The calculation of bytes-dropped and bytes_dropped_nested is reversed.
    Although it does not affect the final calculation of total_dropped,
    it should still be modified.
    
    Link: https://lore.kernel.org/20250223070106.6781-1-yangfeng59949@163.com
    Fixes: 6c43e554a2a5 ("ring-buffer: Add ring buffer startup selftest")
    Signed-off-by: Feng Yang <yangfeng@kylinos.cn>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
riscv: ftrace: Add parentheses in macro definitions of make_call_t0 and make_call_ra [+ + +]
Author: Juhan Jin <juhan.jin@foxmail.com>
Date:   Thu Feb 6 13:28:36 2025 -0600

    riscv: ftrace: Add parentheses in macro definitions of make_call_t0 and make_call_ra
    
    [ Upstream commit 5f1a58ed91a040d4625d854f9bb3dd4995919202 ]
    
    This patch adds parentheses to parameters caller and callee of macros
    make_call_t0 and make_call_ra. Every existing invocation of these two
    macros uses a single variable for each argument, so the absence of the
    parentheses seems okay. However, future invocations might use more
    complex expressions as arguments. For example, a future invocation might
    look like this: make_call_t0(a - b, c, call). Without parentheses in the
    macro definition, the macro invocation expands to:
    
    ...
    unsigned int offset = (unsigned long) c - (unsigned long) a - b;
    ...
    
    which is clearly wrong.
    
    The use of parentheses ensures arguments are correctly evaluated and
    potentially saves future users of make_call_t0 and make_call_ra debugging
    trouble.
    
    Fixes: 6724a76cff85 ("riscv: ftrace: Reduce the detour code size to half")
    Signed-off-by: Juhan Jin <juhan.jin@foxmail.com>
    Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
    Link: https://lore.kernel.org/r/tencent_AE90AA59903A628E87E9F80E563DA5BA5508@qq.com
    Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rtnetlink: Allocate vfinfo size for VF GUIDs when supported [+ + +]
Author: Mark Zhang <markzhang@nvidia.com>
Date:   Tue Mar 25 11:02:26 2025 +0200

    rtnetlink: Allocate vfinfo size for VF GUIDs when supported
    
    [ Upstream commit 23f00807619d15063d676218f36c5dfeda1eb420 ]
    
    Commit 30aad41721e0 ("net/core: Add support for getting VF GUIDs")
    added support for getting VF port and node GUIDs in netlink ifinfo
    messages, but their size was not taken into consideration in the
    function that allocates the netlink message, causing the following
    warning when a netlink message is filled with many VF port and node
    GUIDs:
     # echo 64 > /sys/bus/pci/devices/0000\:08\:00.0/sriov_numvfs
     # ip link show dev ib0
     RTNETLINK answers: Message too long
     Cannot send link get request: Message too long
    
    Kernel warning:
    
     ------------[ cut here ]------------
     WARNING: CPU: 2 PID: 1930 at net/core/rtnetlink.c:4151 rtnl_getlink+0x586/0x5a0
     Modules linked in: xt_conntrack xt_MASQUERADE nfnetlink xt_addrtype iptable_nat nf_nat br_netfilter overlay mlx5_ib macsec mlx5_core tls rpcrdma rdma_ucm ib_uverbs ib_iser libiscsi scsi_transport_iscsi ib_umad rdma_cm iw_cm ib_ipoib fuse ib_cm ib_core
     CPU: 2 UID: 0 PID: 1930 Comm: ip Not tainted 6.14.0-rc2+ #1
     Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
     RIP: 0010:rtnl_getlink+0x586/0x5a0
     Code: cb 82 e8 3d af 0a 00 4d 85 ff 0f 84 08 ff ff ff 4c 89 ff 41 be ea ff ff ff e8 66 63 5b ff 49 c7 07 80 4f cb 82 e9 36 fc ff ff <0f> 0b e9 16 fe ff ff e8 de a0 56 00 66 66 2e 0f 1f 84 00 00 00 00
     RSP: 0018:ffff888113557348 EFLAGS: 00010246
     RAX: 00000000ffffffa6 RBX: ffff88817e87aa34 RCX: dffffc0000000000
     RDX: 0000000000000003 RSI: 0000000000000000 RDI: ffff88817e87afb8
     RBP: 0000000000000009 R08: ffffffff821f44aa R09: 0000000000000000
     R10: ffff8881260f79a8 R11: ffff88817e87af00 R12: ffff88817e87aa00
     R13: ffffffff8563d300 R14: 00000000ffffffa6 R15: 00000000ffffffff
     FS:  00007f63a5dbf280(0000) GS:ffff88881ee00000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 00007f63a5ba4493 CR3: 00000001700fe002 CR4: 0000000000772eb0
     DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
     PKRU: 55555554
     Call Trace:
      <TASK>
      ? __warn+0xa5/0x230
      ? rtnl_getlink+0x586/0x5a0
      ? report_bug+0x22d/0x240
      ? handle_bug+0x53/0xa0
      ? exc_invalid_op+0x14/0x50
      ? asm_exc_invalid_op+0x16/0x20
      ? skb_trim+0x6a/0x80
      ? rtnl_getlink+0x586/0x5a0
      ? __pfx_rtnl_getlink+0x10/0x10
      ? rtnetlink_rcv_msg+0x1e5/0x860
      ? __pfx___mutex_lock+0x10/0x10
      ? rcu_is_watching+0x34/0x60
      ? __pfx_lock_acquire+0x10/0x10
      ? stack_trace_save+0x90/0xd0
      ? filter_irq_stacks+0x1d/0x70
      ? kasan_save_stack+0x30/0x40
      ? kasan_save_stack+0x20/0x40
      ? kasan_save_track+0x10/0x30
      rtnetlink_rcv_msg+0x21c/0x860
      ? entry_SYSCALL_64_after_hwframe+0x76/0x7e
      ? __pfx_rtnetlink_rcv_msg+0x10/0x10
      ? arch_stack_walk+0x9e/0xf0
      ? rcu_is_watching+0x34/0x60
      ? lock_acquire+0xd5/0x410
      ? rcu_is_watching+0x34/0x60
      netlink_rcv_skb+0xe0/0x210
      ? __pfx_rtnetlink_rcv_msg+0x10/0x10
      ? __pfx_netlink_rcv_skb+0x10/0x10
      ? rcu_is_watching+0x34/0x60
      ? __pfx___netlink_lookup+0x10/0x10
      ? lock_release+0x62/0x200
      ? netlink_deliver_tap+0xfd/0x290
      ? rcu_is_watching+0x34/0x60
      ? lock_release+0x62/0x200
      ? netlink_deliver_tap+0x95/0x290
      netlink_unicast+0x31f/0x480
      ? __pfx_netlink_unicast+0x10/0x10
      ? rcu_is_watching+0x34/0x60
      ? lock_acquire+0xd5/0x410
      netlink_sendmsg+0x369/0x660
      ? lock_release+0x62/0x200
      ? __pfx_netlink_sendmsg+0x10/0x10
      ? import_ubuf+0xb9/0xf0
      ? __import_iovec+0x254/0x2b0
      ? lock_release+0x62/0x200
      ? __pfx_netlink_sendmsg+0x10/0x10
      ____sys_sendmsg+0x559/0x5a0
      ? __pfx_____sys_sendmsg+0x10/0x10
      ? __pfx_copy_msghdr_from_user+0x10/0x10
      ? rcu_is_watching+0x34/0x60
      ? do_read_fault+0x213/0x4a0
      ? rcu_is_watching+0x34/0x60
      ___sys_sendmsg+0xe4/0x150
      ? __pfx____sys_sendmsg+0x10/0x10
      ? do_fault+0x2cc/0x6f0
      ? handle_pte_fault+0x2e3/0x3d0
      ? __pfx_handle_pte_fault+0x10/0x10
      ? preempt_count_sub+0x14/0xc0
      ? __down_read_trylock+0x150/0x270
      ? __handle_mm_fault+0x404/0x8e0
      ? __pfx___handle_mm_fault+0x10/0x10
      ? lock_release+0x62/0x200
      ? __rcu_read_unlock+0x65/0x90
      ? rcu_is_watching+0x34/0x60
      __sys_sendmsg+0xd5/0x150
      ? __pfx___sys_sendmsg+0x10/0x10
      ? __up_read+0x192/0x480
      ? lock_release+0x62/0x200
      ? __rcu_read_unlock+0x65/0x90
      ? rcu_is_watching+0x34/0x60
      do_syscall_64+0x6d/0x140
      entry_SYSCALL_64_after_hwframe+0x76/0x7e
     RIP: 0033:0x7f63a5b13367
     Code: 0e 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb b9 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 51 c3 48 83 ec 28 89 54 24 1c 48 89 74 24 10
     RSP: 002b:00007fff8c726bc8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
     RAX: ffffffffffffffda RBX: 0000000067b687c2 RCX: 00007f63a5b13367
     RDX: 0000000000000000 RSI: 00007fff8c726c30 RDI: 0000000000000004
     RBP: 00007fff8c726cb8 R08: 0000000000000000 R09: 0000000000000034
     R10: 00007fff8c726c7c R11: 0000000000000246 R12: 0000000000000001
     R13: 0000000000000000 R14: 00007fff8c726cd0 R15: 00007fff8c726cd0
      </TASK>
     irq event stamp: 0
     hardirqs last  enabled at (0): [<0000000000000000>] 0x0
     hardirqs last disabled at (0): [<ffffffff813f9e58>] copy_process+0xd08/0x2830
     softirqs last  enabled at (0): [<ffffffff813f9e58>] copy_process+0xd08/0x2830
     softirqs last disabled at (0): [<0000000000000000>] 0x0
     ---[ end trace 0000000000000000 ]---
    
    Thus, when calculating ifinfo message size, take VF GUIDs sizes into
    account when supported.
    
    Fixes: 30aad41721e0 ("net/core: Add support for getting VF GUIDs")
    Signed-off-by: Mark Zhang <markzhang@nvidia.com>
    Reviewed-by: Maher Sanalla <msanalla@nvidia.com>
    Signed-off-by: Mark Bloch <mbloch@nvidia.com>
    Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
    Link: https://patch.msgid.link/20250325090226.749730-1-mbloch@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/cio: Fix CHPID "configure" attribute caching [+ + +]
Author: Peter Oberparleiter <oberpar@linux.ibm.com>
Date:   Fri Jan 31 12:02:55 2025 +0100

    s390/cio: Fix CHPID "configure" attribute caching
    
    [ Upstream commit 32ae4a2992529e2c7934e422035fad1d9b0f1fb5 ]
    
    In some environments, the SCLP firmware interface used to query a
    CHPID's configured state is not supported. On these environments,
    rapidly reading the corresponding sysfs attribute produces inconsistent
    results:
    
      $ cat /sys/devices/css0/chp0.00/configure
      cat: /sys/devices/css0/chp0.00/configure: Operation not supported
      $ cat /sys/devices/css0/chp0.00/configure
      3
    
    This occurs for example when Linux is run as a KVM guest. The
    inconsistency is a result of CIO using cached results for generating
    the value of the "configure" attribute while failing to handle the
    situation where no data was returned by SCLP.
    
    Fix this by not updating the cache-expiration timestamp when SCLP
    returns no data. With the fix applied, the system response is
    consistent:
    
      $ cat /sys/devices/css0/chp0.00/configure
      cat: /sys/devices/css0/chp0.00/configure: Operation not supported
      $ cat /sys/devices/css0/chp0.00/configure
      cat: /sys/devices/css0/chp0.00/configure: Operation not supported
    
    Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com>
    Reviewed-by: Eric Farman <farman@linux.ibm.com>
    Tested-by: Eric Farman <farman@linux.ibm.com>
    Signed-off-by: Peter Oberparleiter <oberpar@linux.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/deadline: Use online cpus for validating runtime [+ + +]
Author: Shrikanth Hegde <sshegde@linux.ibm.com>
Date:   Thu Mar 6 10:59:53 2025 +0530

    sched/deadline: Use online cpus for validating runtime
    
    [ Upstream commit 14672f059d83f591afb2ee1fff56858efe055e5a ]
    
    The ftrace selftest reported a failure because writing -1 to
    sched_rt_runtime_us returns -EBUSY. This happens when the possible
    CPUs are different from active CPUs.
    
    Active CPUs are part of one root domain, while remaining CPUs are part
    of def_root_domain. Since active cpumask is being used, this results in
    cpus=0 when a non active CPUs is used in the loop.
    
    Fix it by looping over the online CPUs instead for validating the
    bandwidth calculations.
    
    Signed-off-by: Shrikanth Hegde <sshegde@linux.ibm.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Reviewed-by: Juri Lelli <juri.lelli@redhat.com>
    Link: https://lore.kernel.org/r/20250306052954.452005-2-sshegde@linux.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/isolation: Prevent boot crash when the boot CPU is nohz_full [+ + +]
Author: Oleg Nesterov <oleg@redhat.com>
Date:   Thu Apr 11 16:39:05 2024 +0200

    sched/isolation: Prevent boot crash when the boot CPU is nohz_full
    
    Documentation/timers/no_hz.rst states that the "nohz_full=" mask must not
    include the boot CPU, which is no longer true after:
    
      08ae95f4fd3b ("nohz_full: Allow the boot CPU to be nohz_full").
    
    However after:
    
      aae17ebb53cd ("workqueue: Avoid using isolated cpus' timers on queue_delayed_work")
    
    the kernel will crash at boot time in this case; housekeeping_any_cpu()
    returns an invalid CPU number until smp_init() brings the first
    housekeeping CPU up.
    
    Change housekeeping_any_cpu() to check the result of cpumask_any_and() and
    return smp_processor_id() in this case.
    
    This is just the simple and backportable workaround which fixes the
    symptom, but smp_processor_id() at boot time should be safe at least for
    type == HK_TYPE_TIMER, this more or less matches the tick_do_timer_boot_cpu
    logic.
    
    There is no worry about cpu_down(); tick_nohz_cpu_down() will not allow to
    offline tick_do_timer_cpu (the 1st online housekeeping CPU).
    
    [ Apply only documentation changes as commit which causes boot
      crash when boot CPU is nohz_full is not backported to stable
      kernels - Krishanth ]
    
    Reported-by: Chris von Recklinghausen <crecklin@redhat.com>
    Signed-off-by: Oleg Nesterov <oleg@redhat.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Reviewed-by: Phil Auld <pauld@redhat.com>
    Acked-by: Frederic Weisbecker <frederic@kernel.org>
    Link: https://lore.kernel.org/r/20240411143905.GA19288@redhat.com
    Closes: https://lore.kernel.org/all/20240402105847.GA24832@redhat.com/
    Signed-off-by: Krishanth Jagaduri <Krishanth.Jagaduri@sony.com>
    [ strip out upstream commit and Fixes: so tools don't get confused that
      this commit actually does anything real - gregkh]
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sched/smt: Always inline sched_smt_active() [+ + +]
Author: Josh Poimboeuf <jpoimboe@kernel.org>
Date:   Mon Mar 31 21:26:44 2025 -0700

    sched/smt: Always inline sched_smt_active()
    
    [ Upstream commit 09f37f2d7b21ff35b8b533f9ab8cfad2fe8f72f6 ]
    
    sched_smt_active() can be called from noinstr code, so it should always
    be inlined.  The CONFIG_SCHED_SMT version already has __always_inline.
    Do the same for its !CONFIG_SCHED_SMT counterpart.
    
    Fixes the following warning:
    
      vmlinux.o: error: objtool: intel_idle_ibrs+0x13: call to sched_smt_active() leaves .noinstr.text section
    
    Fixes: 321a874a7ef8 ("sched/smt: Expose sched_smt_present static key")
    Reported-by: kernel test robot <lkp@intel.com>
    Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/r/1d03907b0a247cf7fb5c1d518de378864f603060.1743481539.git.jpoimboe@kernel.org
    Closes: https://lore.kernel.org/r/202503311434.lyw2Tveh-lkp@intel.com/
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched: Clarify wake_up_q()'s write to task->wake_q.next [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Wed Jan 29 20:53:03 2025 +0100

    sched: Clarify wake_up_q()'s write to task->wake_q.next
    
    [ Upstream commit bcc6244e13b4d4903511a1ea84368abf925031c0 ]
    
    Clarify that wake_up_q() does an atomic write to task->wake_q.next, after
    which a concurrent __wake_q_add() can immediately overwrite
    task->wake_q.next again.
    
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20250129-sched-wakeup-prettier-v1-1-2f51f5f663fa@google.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scsi: core: Use GFP_NOIO to avoid circular locking dependency [+ + +]
Author: Rik van Riel <riel@surriel.com>
Date:   Tue Jan 28 16:35:39 2025 -0500

    scsi: core: Use GFP_NOIO to avoid circular locking dependency
    
    [ Upstream commit 5363ee9d110e139584c2d92a0b640bc210588506 ]
    
    Filesystems can write to disk from page reclaim with __GFP_FS
    set. Marc found a case where scsi_realloc_sdev_budget_map() ends up in
    page reclaim with GFP_KERNEL, where it could try to take filesystem
    locks again, leading to a deadlock.
    
    WARNING: possible circular locking dependency detected
    6.13.0 #1 Not tainted
    ------------------------------------------------------
    kswapd0/70 is trying to acquire lock:
    ffff8881025d5d78 (&q->q_usage_counter(io)){++++}-{0:0}, at: blk_mq_submit_bio+0x461/0x6e0
    
    but task is already holding lock:
    ffffffff81ef5f40 (fs_reclaim){+.+.}-{0:0}, at: balance_pgdat+0x9f/0x760
    
    The full lockdep splat can be found in Marc's report:
    
    https://lkml.org/lkml/2025/1/24/1101
    
    Avoid the potential deadlock by doing the allocation with GFP_NOIO, which
    prevents both filesystem and block layer recursion.
    
    Reported-by: Marc Aurèle La France <tsi@tuyoix.net>
    Signed-off-by: Rik van Riel <riel@surriel.com>
    Link: https://lore.kernel.org/r/20250129104525.0ae8421e@fangorn
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: qla1280: Fix kernel oops when debug level > 2 [+ + +]
Author: Magnus Lindholm <linmag7@gmail.com>
Date:   Sat Jan 25 10:49:22 2025 +0100

    scsi: qla1280: Fix kernel oops when debug level > 2
    
    [ Upstream commit 5233e3235dec3065ccc632729675575dbe3c6b8a ]
    
    A null dereference or oops exception will eventually occur when qla1280.c
    driver is compiled with DEBUG_QLA1280 enabled and ql_debug_level > 2.  I
    think its clear from the code that the intention here is sg_dma_len(s) not
    length of sg_next(s) when printing the debug info.
    
    Signed-off-by: Magnus Lindholm <linmag7@gmail.com>
    Link: https://lore.kernel.org/r/20250125095033.26188-1-linmag7@gmail.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sctp: Fix undefined behavior in left shift operation [+ + +]
Author: Yu-Chun Lin <eleanor15x@gmail.com>
Date:   Tue Feb 18 16:12:16 2025 +0800

    sctp: Fix undefined behavior in left shift operation
    
    [ Upstream commit 606572eb22c1786a3957d24307f5760bb058ca19 ]
    
    According to the C11 standard (ISO/IEC 9899:2011, 6.5.7):
    "If E1 has a signed type and E1 x 2^E2 is not representable in the result
    type, the behavior is undefined."
    
    Shifting 1 << 31 causes signed integer overflow, which leads to undefined
    behavior.
    
    Fix this by explicitly using '1U << 31' to ensure the shift operates on
    an unsigned type, avoiding undefined behavior.
    
    Signed-off-by: Yu-Chun Lin <eleanor15x@gmail.com>
    Link: https://patch.msgid.link/20250218081217.3468369-1-eleanor15x@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selinux: Chain up tool resolving errors in install_policy.sh [+ + +]
Author: Tim Schumacher <tim.schumacher1@huawei.com>
Date:   Fri Mar 7 10:56:43 2025 +0100

    selinux: Chain up tool resolving errors in install_policy.sh
    
    [ Upstream commit 6ae0042f4d3f331e841495eb0a3d51598e593ec2 ]
    
    Subshell evaluations are not exempt from errexit, so if a command is
    not available, `which` will fail and exit the script as a whole.
    This causes the helpful error messages to not be printed if they are
    tacked on using a `$?` comparison.
    
    Resolve the issue by using chains of logical operators, which are not
    subject to the effects of errexit.
    
    Fixes: e37c1877ba5b1 ("scripts/selinux: modernize mdp")
    Signed-off-by: Tim Schumacher <tim.schumacher1@huawei.com>
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
serial: 8250_dma: terminate correct DMA in tx_dma_flush() [+ + +]
Author: John Keeping <jkeeping@inmusicbrands.com>
Date:   Mon Feb 24 12:18:30 2025 +0000

    serial: 8250_dma: terminate correct DMA in tx_dma_flush()
    
    commit a26503092c75abba70a0be2aa01145ecf90c2a22 upstream.
    
    When flushing transmit side DMA, it is the transmit channel that should
    be terminated, not the receive channel.
    
    Fixes: 9e512eaaf8f40 ("serial: 8250: Fix fifo underflow on flush")
    Cc: stable <stable@kernel.org>
    Reported-by: Wentao Guan <guanwentao@uniontech.com>
    Signed-off-by: John Keeping <jkeeping@inmusicbrands.com>
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Link: https://lore.kernel.org/r/20250224121831.1429323-1-jkeeping@inmusicbrands.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
slab: clean up function prototypes [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Fri Nov 5 13:36:23 2021 -0700

    slab: clean up function prototypes
    
    [ Upstream commit 72d67229f522e3331d1eabd9f58d36ae080eb228 ]
    
    Based on feedback from Joe Perches and Linus Torvalds, regularize the
    slab function prototypes before making attribute changes.
    
    Link: https://lkml.kernel.org/r/20210930222704.2631604-4-keescook@chromium.org
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Alexandre Bounine <alex.bou9@gmail.com>
    Cc: Andy Whitcroft <apw@canonical.com>
    Cc: Daniel Micay <danielmicay@gmail.com>
    Cc: Dennis Zhou <dennis@kernel.org>
    Cc: Dwaipayan Ray <dwaipayanray1@gmail.com>
    Cc: Gustavo A. R. Silva <gustavoars@kernel.org>
    Cc: Ira Weiny <ira.weiny@intel.com>
    Cc: Jing Xiangfeng <jingxiangfeng@huawei.com>
    Cc: Joe Perches <joe@perches.com>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: kernel test robot <lkp@intel.com>
    Cc: Lukas Bulwahn <lukas.bulwahn@gmail.com>
    Cc: Matt Porter <mporter@kernel.crashing.org>
    Cc: Miguel Ojeda <ojeda@kernel.org>
    Cc: Nathan Chancellor <nathan@kernel.org>
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Cc: Souptick Joarder <jrdr.linux@gmail.com>
    Cc: Tejun Heo <tj@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Stable-dep-of: a1e64addf3ff ("net: openvswitch: remove misbehaving actions length check")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

slab: Introduce kmalloc_size_roundup() [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Fri Sep 23 13:28:08 2022 -0700

    slab: Introduce kmalloc_size_roundup()
    
    [ Upstream commit 05a940656e1eb2026d9ee31019d5b47e9545124d ]
    
    In the effort to help the compiler reason about buffer sizes, the
    __alloc_size attribute was added to allocators. This improves the scope
    of the compiler's ability to apply CONFIG_UBSAN_BOUNDS and (in the near
    future) CONFIG_FORTIFY_SOURCE. For most allocations, this works well,
    as the vast majority of callers are not expecting to use more memory
    than what they asked for.
    
    There is, however, one common exception to this: anticipatory resizing
    of kmalloc allocations. These cases all use ksize() to determine the
    actual bucket size of a given allocation (e.g. 128 when 126 was asked
    for). This comes in two styles in the kernel:
    
    1) An allocation has been determined to be too small, and needs to be
       resized. Instead of the caller choosing its own next best size, it
       wants to minimize the number of calls to krealloc(), so it just uses
       ksize() plus some additional bytes, forcing the realloc into the next
       bucket size, from which it can learn how large it is now. For example:
    
            data = krealloc(data, ksize(data) + 1, gfp);
            data_len = ksize(data);
    
    2) The minimum size of an allocation is calculated, but since it may
       grow in the future, just use all the space available in the chosen
       bucket immediately, to avoid needing to reallocate later. A good
       example of this is skbuff's allocators:
    
            data = kmalloc_reserve(size, gfp_mask, node, &pfmemalloc);
            ...
            /* kmalloc(size) might give us more room than requested.
             * Put skb_shared_info exactly at the end of allocated zone,
             * to allow max possible filling before reallocation.
             */
            osize = ksize(data);
            size = SKB_WITH_OVERHEAD(osize);
    
    In both cases, the "how much was actually allocated?" question is answered
    _after_ the allocation, where the compiler hinting is not in an easy place
    to make the association any more. This mismatch between the compiler's
    view of the buffer length and the code's intention about how much it is
    going to actually use has already caused problems[1]. It is possible to
    fix this by reordering the use of the "actual size" information.
    
    We can serve the needs of users of ksize() and still have accurate buffer
    length hinting for the compiler by doing the bucket size calculation
    _before_ the allocation. Code can instead ask "how large an allocation
    would I get for a given size?".
    
    Introduce kmalloc_size_roundup(), to serve this function so we can start
    replacing the "anticipatory resizing" uses of ksize().
    
    [1] https://github.com/ClangBuiltLinux/linux/issues/1599
        https://github.com/KSPP/linux/issues/183
    
    [ vbabka@suse.cz: add SLOB version ]
    
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: linux-mm@kvack.org
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
    Stable-dep-of: a1e64addf3ff ("net: openvswitch: remove misbehaving actions length check")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
smb: client: Fix match_session bug preventing session reuse [+ + +]
Author: Henrique Carvalho <henrique.carvalho@suse.com>
Date:   Tue Mar 11 15:23:59 2025 -0300

    smb: client: Fix match_session bug preventing session reuse
    
    commit 605b249ea96770ac4fac4b8510a99e0f8442be5e upstream.
    
    Fix a bug in match_session() that can causes the session to not be
    reused in some cases.
    
    Reproduction steps:
    
    mount.cifs //server/share /mnt/a -o credentials=creds
    mount.cifs //server/share /mnt/b -o credentials=creds,sec=ntlmssp
    cat /proc/fs/cifs/DebugData | grep SessionId | wc -l
    
    mount.cifs //server/share /mnt/b -o credentials=creds,sec=ntlmssp
    mount.cifs //server/share /mnt/a -o credentials=creds
    cat /proc/fs/cifs/DebugData | grep SessionId | wc -l
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Enzo Matsumiya <ematsumiya@suse.de>
    Signed-off-by: Henrique Carvalho <henrique.carvalho@suse.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

smb: client: fix potential UAF in cifs_debug_files_proc_show() [+ + +]
Author: Paulo Alcantara <pc@manguebit.com>
Date:   Tue Apr 2 16:33:53 2024 -0300

    smb: client: fix potential UAF in cifs_debug_files_proc_show()
    
    commit ca545b7f0823f19db0f1148d59bc5e1a56634502 upstream.
    
    Skip sessions that are being teared down (status == SES_EXITING) to
    avoid UAF.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    [ This patch removes lock/unlock operation in routine cifs_ses_exiting()
      for ses_lock is not present in v5.15 and not ported yet. ses->status
      is protected by a global lock, cifs_tcp_ses_lock, in v5.15. ]
    Signed-off-by: Jianqi Ren <jianqi.ren.cn@windriver.com>
    Signed-off-by: He Zhe <zhe.he@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
soc: qcom: pdr: Fix the potential deadlock [+ + +]
Author: Saranya R <quic_sarar@quicinc.com>
Date:   Wed Feb 12 22:07:20 2025 +0530

    soc: qcom: pdr: Fix the potential deadlock
    
    commit 2eeb03ad9f42dfece63051be2400af487ddb96d2 upstream.
    
    When some client process A call pdr_add_lookup() to add the look up for
    the service and does schedule locator work, later a process B got a new
    server packet indicating locator is up and call pdr_locator_new_server()
    which eventually sets pdr->locator_init_complete to true which process A
    sees and takes list lock and queries domain list but it will timeout due
    to deadlock as the response will queued to the same qmi->wq and it is
    ordered workqueue and process B is not able to complete new server
    request work due to deadlock on list lock.
    
    Fix it by removing the unnecessary list iteration as the list iteration
    is already being done inside locator work, so avoid it here and just
    call schedule_work() here.
    
           Process A                        Process B
    
                                         process_scheduled_works()
    pdr_add_lookup()                      qmi_data_ready_work()
     process_scheduled_works()             pdr_locator_new_server()
                                             pdr->locator_init_complete=true;
       pdr_locator_work()
        mutex_lock(&pdr->list_lock);
    
         pdr_locate_service()                  mutex_lock(&pdr->list_lock);
    
          pdr_get_domain_list()
           pr_err("PDR: %s get domain list
                   txn wait failed: %d\n",
                   req->service_name,
                   ret);
    
    Timeout error log due to deadlock:
    
    "
     PDR: tms/servreg get domain list txn wait failed: -110
     PDR: service lookup for msm/adsp/sensor_pd:tms/servreg failed: -110
    "
    
    Thanks to Bjorn and Johan for letting me know that this commit also fixes
    an audio regression when using the in-kernel pd-mapper as that makes it
    easier to hit this race. [1]
    
    Link: https://lore.kernel.org/lkml/Zqet8iInnDhnxkT9@hovoldconsulting.com/ # [1]
    Fixes: fbe639b44a82 ("soc: qcom: Introduce Protection Domain Restart helpers")
    CC: stable@vger.kernel.org
    Reviewed-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
    Tested-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
    Tested-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Saranya R <quic_sarar@quicinc.com>
    Co-developed-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
    Signed-off-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
    Link: https://lore.kernel.org/r/20250212163720.1577876-1-mukesh.ojha@oss.qualcomm.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
soundwire: slave: fix an OF node reference leak in soundwire slave device [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Thu Dec 5 12:48:44 2024 +0900

    soundwire: slave: fix an OF node reference leak in soundwire slave device
    
    [ Upstream commit aac2f8363f773ae1f65aab140e06e2084ac6b787 ]
    
    When initializing a soundwire slave device, an OF node is stored to the
    device with refcount incremented. However, the refcount is not
    decremented in .release(), thus call of_node_put() in
    sdw_slave_release().
    
    Fixes: a2e484585ad3 ("soundwire: core: add device tree support for slave devices")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20241205034844.2784964-1-joe@pf.is.s.u-tokyo.ac.jp
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
spufs: fix a leak in spufs_create_context() [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Wed Mar 12 19:38:28 2025 -0400

    spufs: fix a leak in spufs_create_context()
    
    [ Upstream commit 0f5cce3fc55b08ee4da3372baccf4bcd36a98396 ]
    
    Leak fixes back in 2008 missed one case - if we are trying to set affinity
    and spufs_mkdir() fails, we need to drop the reference to neighbor.
    
    Fixes: 58119068cb27 "[POWERPC] spufs: Fix memory leak on SPU affinity"
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spufs: fix a leak on spufs_new_file() failure [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sat Mar 8 19:26:31 2025 -0500

    spufs: fix a leak on spufs_new_file() failure
    
    [ Upstream commit d1ca8698ca1332625d83ea0d753747be66f9906d ]
    
    It's called from spufs_fill_dir(), and caller of that will do
    spufs_rmdir() in case of failure.  That does remove everything
    we'd managed to create, but... the problem dentry is still
    negative.  IOW, it needs to be explicitly dropped.
    
    Fixes: 3f51dd91c807 "[PATCH] spufs: fix spufs_fill_dir error path"
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tcp: fix races in tcp_abort() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue May 28 12:52:52 2024 +0000

    tcp: fix races in tcp_abort()
    
    commit 5ce4645c23cf5f048eb8e9ce49e514bababdee85 upstream.
    
    tcp_abort() has the same issue than the one fixed in the prior patch
    in tcp_write_err().
    
    In order to get consistent results from tcp_poll(), we must call
    sk_error_report() after tcp_done().
    
    We can use tcp_done_with_error() to centralize this logic.
    
    Fixes: c1e64e298b8c ("net: diag: Support destroying TCP sockets.")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Neal Cardwell <ncardwell@google.com>
    Link: https://lore.kernel.org/r/20240528125253.1966136-4-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [youngmin: Resolved minor conflict in net/ipv4/tcp.c]
    Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
thermal/cpufreq_cooling: Remove structure member documentation [+ + +]
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
Date:   Tue Feb 11 09:47:11 2025 +0100

    thermal/cpufreq_cooling: Remove structure member documentation
    
    [ Upstream commit a6768c4f92e152265590371975d44c071a5279c7 ]
    
    The structure member documentation refers to a member which does not
    exist any more. Remove it.
    
    Link: https://lore.kernel.org/all/202501220046.h3PMBCti-lkp@intel.com/
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202501220046.h3PMBCti-lkp@intel.com/
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
    Link: https://patch.msgid.link/20250211084712.2746705-1-daniel.lezcano@linaro.org
    [ rjw: Minor changelog edits ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
thermal: int340x: Add NULL check for adev [+ + +]
Author: Chenyuan Yang <chenyuan0y@gmail.com>
Date:   Wed Mar 12 23:36:11 2025 -0500

    thermal: int340x: Add NULL check for adev
    
    [ Upstream commit 2542a3f70e563a9e70e7ded314286535a3321bdb ]
    
    Not all devices have an ACPI companion fwnode, so adev might be NULL.
    This is similar to the commit cd2fd6eab480
    ("platform/x86: int3472: Check for adev == NULL").
    
    Add a check for adev not being set and return -ENODEV in that case to
    avoid a possible NULL pointer deref in int3402_thermal_probe().
    
    Note, under the same directory, int3400_thermal_probe() has such a
    check.
    
    Fixes: 77e337c6e23e ("Thermal: introduce INT3402 thermal driver")
    Signed-off-by: Chenyuan Yang <chenyuan0y@gmail.com>
    Acked-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
    Link: https://patch.msgid.link/20250313043611.1212116-1-chenyuan0y@gmail.com
    [ rjw: Subject edit, added Fixes: ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing/osnoise: Fix possible recursive locking for cpus_read_lock() [+ + +]
Author: Ran Xiaokai <ran.xiaokai@zte.com.cn>
Date:   Fri Mar 21 09:52:49 2025 +0000

    tracing/osnoise: Fix possible recursive locking for cpus_read_lock()
    
    commit 7e6b3fcc9c5294aeafed0dbe1a09a1bc899bd0f2 upstream.
    
    Lockdep reports this deadlock log:
    
    osnoise: could not start sampling thread
    ============================================
    WARNING: possible recursive locking detected
    --------------------------------------------
           CPU0
           ----
      lock(cpu_hotplug_lock);
      lock(cpu_hotplug_lock);
    
     Call Trace:
      <TASK>
      print_deadlock_bug+0x282/0x3c0
      __lock_acquire+0x1610/0x29a0
      lock_acquire+0xcb/0x2d0
      cpus_read_lock+0x49/0x120
      stop_per_cpu_kthreads+0x7/0x60
      start_kthread+0x103/0x120
      osnoise_hotplug_workfn+0x5e/0x90
      process_one_work+0x44f/0xb30
      worker_thread+0x33e/0x5e0
      kthread+0x206/0x3b0
      ret_from_fork+0x31/0x50
      ret_from_fork_asm+0x11/0x20
      </TASK>
    
    This is the deadlock scenario:
    osnoise_hotplug_workfn()
      guard(cpus_read_lock)();      // first lock call
      start_kthread(cpu)
        if (IS_ERR(kthread)) {
          stop_per_cpu_kthreads(); {
            cpus_read_lock();      // second lock call. Cause the AA deadlock
          }
        }
    
    It is not necessary to call stop_per_cpu_kthreads() which stops osnoise
    kthread for every other CPUs in the system if a failure occurs during
    hotplug of a certain CPU.
    For start_per_cpu_kthreads(), if the start_kthread() call fails,
    this function calls stop_per_cpu_kthreads() to handle the error.
    Therefore, similarly, there is no need to call stop_per_cpu_kthreads()
    again within start_kthread().
    So just remove stop_per_cpu_kthreads() from start_kthread to solve this issue.
    
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/20250321095249.2739397-1-ranxiaokai627@163.com
    Fixes: c8895e271f79 ("trace/osnoise: Support hotplug operations")
    Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing: Do not use PERF enums when perf is not defined [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Sun Mar 23 15:21:51 2025 -0400

    tracing: Do not use PERF enums when perf is not defined
    
    commit 8eb1518642738c6892bd629b46043513a3bf1a6a upstream.
    
    An update was made to up the module ref count when a synthetic event is
    registered for both trace and perf events. But if perf is not configured
    in, the perf enums used will cause the kernel to fail to build.
    
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Douglas Raillard <douglas.raillard@arm.com>
    Link: https://lore.kernel.org/20250323152151.528b5ced@batman.local.home
    Fixes: 21581dd4e7ff ("tracing: Ensure module defining synth event cannot be unloaded while tracing")
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202503232230.TeREVy8R-lkp@intel.com/
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing: Ensure module defining synth event cannot be unloaded while tracing [+ + +]
Author: Douglas Raillard <douglas.raillard@arm.com>
Date:   Tue Mar 18 18:09:05 2025 +0000

    tracing: Ensure module defining synth event cannot be unloaded while tracing
    
    commit 21581dd4e7ff6c07d0ab577e3c32b13a74b31522 upstream.
    
    Currently, using synth_event_delete() will fail if the event is being
    used (tracing in progress), but that is normally done in the module exit
    function. At that stage, failing is problematic as returning a non-zero
    status means the module will become locked (impossible to unload or
    reload again).
    
    Instead, ensure the module exit function does not get called in the
    first place by increasing the module refcnt when the event is enabled.
    
    Cc: stable@vger.kernel.org
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Fixes: 35ca5207c2d11 ("tracing: Add synthetic event command generation functions")
    Link: https://lore.kernel.org/20250318180906.226841-1-douglas.raillard@arm.com
    Signed-off-by: Douglas Raillard <douglas.raillard@arm.com>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing: Fix synth event printk format for str fields [+ + +]
Author: Douglas Raillard <douglas.raillard@arm.com>
Date:   Tue Mar 25 16:52:02 2025 +0000

    tracing: Fix synth event printk format for str fields
    
    commit 4d38328eb442dc06aec4350fd9594ffa6488af02 upstream.
    
    The printk format for synth event uses "%.*s" to print string fields,
    but then only passes the pointer part as var arg.
    
    Replace %.*s with %s as the C string is guaranteed to be null-terminated.
    
    The output in print fmt should never have been updated as __get_str()
    handles the string limit because it can access the length of the string in
    the string meta data that is saved in the ring buffer.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Fixes: 8db4d6bfbbf92 ("tracing: Change synthetic event string format to limit printed length")
    Link: https://lore.kernel.org/20250325165202.541088-1-douglas.raillard@arm.com
    Signed-off-by: Douglas Raillard <douglas.raillard@arm.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing: Fix use-after-free in print_graph_function_flags during tracer switching [+ + +]
Author: Tengda Wu <wutengda@huaweicloud.com>
Date:   Thu Mar 20 12:21:37 2025 +0000

    tracing: Fix use-after-free in print_graph_function_flags during tracer switching
    
    commit 7f81f27b1093e4895e87b74143c59c055c3b1906 upstream.
    
    Kairui reported a UAF issue in print_graph_function_flags() during
    ftrace stress testing [1]. This issue can be reproduced if puting a
    'mdelay(10)' after 'mutex_unlock(&trace_types_lock)' in s_start(),
    and executing the following script:
    
      $ echo function_graph > current_tracer
      $ cat trace > /dev/null &
      $ sleep 5  # Ensure the 'cat' reaches the 'mdelay(10)' point
      $ echo timerlat > current_tracer
    
    The root cause lies in the two calls to print_graph_function_flags
    within print_trace_line during each s_show():
    
      * One through 'iter->trace->print_line()';
      * Another through 'event->funcs->trace()', which is hidden in
        print_trace_fmt() before print_trace_line returns.
    
    Tracer switching only updates the former, while the latter continues
    to use the print_line function of the old tracer, which in the script
    above is print_graph_function_flags.
    
    Moreover, when switching from the 'function_graph' tracer to the
    'timerlat' tracer, s_start only calls graph_trace_close of the
    'function_graph' tracer to free 'iter->private', but does not set
    it to NULL. This provides an opportunity for 'event->funcs->trace()'
    to use an invalid 'iter->private'.
    
    To fix this issue, set 'iter->private' to NULL immediately after
    freeing it in graph_trace_close(), ensuring that an invalid pointer
    is not passed to other tracers. Additionally, clean up the unnecessary
    'iter->private = NULL' during each 'cat trace' when using wakeup and
    irqsoff tracers.
    
     [1] https://lore.kernel.org/all/20231112150030.84609-1-ryncsn@gmail.com/
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Zheng Yejian <zhengyejian1@huawei.com>
    Link: https://lore.kernel.org/20250320122137.23635-1-wutengda@huaweicloud.com
    Fixes: eecb91b9f98d ("tracing: Fix memleak due to race between current_tracer and trace")
    Closes: https://lore.kernel.org/all/CAMgjq7BW79KDSCyp+tZHjShSzHsScSiJxn5ffskp-QzVM06fxw@mail.gmail.com/
    Reported-by: Kairui Song <kasong@tencent.com>
    Signed-off-by: Tengda Wu <wutengda@huaweicloud.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tty: serial: 8250: Add Brainboxes XC devices [+ + +]
Author: Cameron Williams <cang1@live.co.uk>
Date:   Mon Mar 10 22:27:10 2025 +0000

    tty: serial: 8250: Add Brainboxes XC devices
    
    commit 5c7e2896481a177bbda41d7850f05a9f5a8aee2b upstream.
    
    These ExpressCard devices use the OxPCIE chip and can be used with
    this driver.
    
    Signed-off-by: Cameron Williams <cang1@live.co.uk>
    Cc: stable <stable@kernel.org>
    Link: https://lore.kernel.org/r/DB7PR02MB3802907A9360F27F6CD67AAFC4D62@DB7PR02MB3802.eurprd02.prod.outlook.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tty: serial: 8250: Add some more device IDs [+ + +]
Author: Cameron Williams <cang1@live.co.uk>
Date:   Sun Feb 23 22:07:38 2025 +0000

    tty: serial: 8250: Add some more device IDs
    
    commit be6a23650908e2f827f2e7839a3fbae41ccb5b63 upstream.
    
    These card IDs got missed the first time around.
    
    Cc: stable <stable@kernel.org>
    Signed-off-by: Cameron Williams <cang1@live.co.uk>
    Link: https://lore.kernel.org/r/DB7PR02MB380295BCC879CCF91315AC38C4C12@DB7PR02MB3802.eurprd02.prod.outlook.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tty: serial: fsl_lpuart: disable transmitter before changing RS485 related registers [+ + +]
Author: Sherry Sun <sherry.sun@nxp.com>
Date:   Wed Mar 12 10:25:03 2025 +0800

    tty: serial: fsl_lpuart: disable transmitter before changing RS485 related registers
    
    [ Upstream commit f5cb528d6441eb860250a2f085773aac4f44085e ]
    
    According to the LPUART reference manual, TXRTSE and TXRTSPOL of MODIR
    register only can be changed when the transmitter is disabled.
    So disable the transmitter before changing RS485 related registers and
    re-enable it after the change is done.
    
    Fixes: 67b01837861c ("tty: serial: lpuart: Add RS485 support for 32-bit uart flavour")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://lore.kernel.org/r/20250312022503.1342990-1-sherry.sun@nxp.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tty: serial: fsl_lpuart: use UARTMODIR register bits for lpuart32 platform [+ + +]
Author: Sherry Sun <sherry.sun@nxp.com>
Date:   Fri Apr 14 10:21:11 2023 +0800

    tty: serial: fsl_lpuart: use UARTMODIR register bits for lpuart32 platform
    
    [ Upstream commit d57d56e4dddfb5c92cd81abf8922055bf0fb85a4 ]
    
    For lpuart32 platforms, UARTMODIR register is used instead of UARTMODEM.
    So here should configure the corresponding UARTMODIR register bits to
    avoid confusion.
    
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
    Link: https://lore.kernel.org/r/20230414022111.20896-1-sherry.sun@nxp.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: f5cb528d6441 ("tty: serial: fsl_lpuart: disable transmitter before changing RS485 related registers")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tunnels: Accept PACKET_HOST in skb_tunnel_check_pmtu(). [+ + +]
Author: Guillaume Nault <gnault@redhat.com>
Date:   Sat Mar 29 01:33:44 2025 +0100

    tunnels: Accept PACKET_HOST in skb_tunnel_check_pmtu().
    
    [ Upstream commit 8930424777e43257f5bf6f0f0f53defd0d30415c ]
    
    Because skb_tunnel_check_pmtu() doesn't handle PACKET_HOST packets,
    commit 30a92c9e3d6b ("openvswitch: Set the skbuff pkt_type for proper
    pmtud support.") forced skb->pkt_type to PACKET_OUTGOING for
    openvswitch packets that are sent using the OVS_ACTION_ATTR_OUTPUT
    action. This allowed such packets to invoke the
    iptunnel_pmtud_check_icmp() or iptunnel_pmtud_check_icmpv6() helpers
    and thus trigger PMTU update on the input device.
    
    However, this also broke other parts of PMTU discovery. Since these
    packets don't have the PACKET_HOST type anymore, they won't trigger the
    sending of ICMP Fragmentation Needed or Packet Too Big messages to
    remote hosts when oversized (see the skb_in->pkt_type condition in
    __icmp_send() for example).
    
    These two skb->pkt_type checks are therefore incompatible as one
    requires skb->pkt_type to be PACKET_HOST, while the other requires it
    to be anything but PACKET_HOST.
    
    It makes sense to not trigger ICMP messages for non-PACKET_HOST packets
    as these messages should be generated only for incoming l2-unicast
    packets. However there doesn't seem to be any reason for
    skb_tunnel_check_pmtu() to ignore PACKET_HOST packets.
    
    Allow both cases to work by allowing skb_tunnel_check_pmtu() to work on
    PACKET_HOST packets and not overriding skb->pkt_type in openvswitch
    anymore.
    
    Fixes: 30a92c9e3d6b ("openvswitch: Set the skbuff pkt_type for proper pmtud support.")
    Fixes: 4cb47a8644cc ("tunnels: PMTU discovery support for directly bridged IP packets")
    Signed-off-by: Guillaume Nault <gnault@redhat.com>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Reviewed-by: Aaron Conole <aconole@redhat.com>
    Tested-by: Aaron Conole <aconole@redhat.com>
    Link: https://patch.msgid.link/eac941652b86fddf8909df9b3bf0d97bc9444793.1743208264.git.gnault@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
USB: serial: ftdi_sio: add support for Altera USB Blaster 3 [+ + +]
Author: Boon Khai Ng <boon.khai.ng@intel.com>
Date:   Wed Mar 12 11:05:44 2025 +0800

    USB: serial: ftdi_sio: add support for Altera USB Blaster 3
    
    commit 18e0885bd2ca738407036434418a26a58394a60e upstream.
    
    The Altera USB Blaster 3, available as both a cable and an on-board
    solution, is primarily used for programming and debugging FPGAs.
    
    It interfaces with host software such as Quartus Programmer,
    System Console, SignalTap, and Nios Debugger. The device utilizes
    either an FT2232 or FT4232 chip.
    
    Enabling the support for various configurations of the on-board
    USB Blaster 3 by including the appropriate VID/PID pairs,
    allowing it to function as a serial device via ftdi_sio.
    
    Note that this check-in does not include support for the
    cable solution, as it does not support UART functionality.
    The supported configurations are determined by the
    hardware design and include:
    
    1) PID 0x6022, FT2232, 1 JTAG port (Port A) + Port B as UART
    2) PID 0x6025, FT4232, 1 JTAG port (Port A) + Port C as UART
    3) PID 0x6026, FT4232, 1 JTAG port (Port A) + Port C, D as UART
    4) PID 0x6029, FT4232, 1 JTAG port (Port B) + Port C as UART
    5) PID 0x602a, FT4232, 1 JTAG port (Port B) + Port C, D as UART
    6) PID 0x602c, FT4232, 1 JTAG port (Port A) + Port B as UART
    7) PID 0x602d, FT4232, 1 JTAG port (Port A) + Port B, C as UART
    8) PID 0x602e, FT4232, 1 JTAG port (Port A) + Port B, C, D as UART
    
    These configurations allow for flexibility in how the USB Blaster 3 is
    used, depending on the specific needs of the hardware design.
    
    Signed-off-by: Boon Khai Ng <boon.khai.ng@intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Telit Cinterion FE990B compositions [+ + +]
Author: Fabio Porcedda <fabio.porcedda@gmail.com>
Date:   Tue Mar 4 10:19:38 2025 +0100

    USB: serial: option: add Telit Cinterion FE990B compositions
    
    commit 4981bb50392b7515b765da28cf8768ce624c2670 upstream.
    
    Add the following Telit Cinterion FE990B40 compositions:
    
    0x10b0: rmnet + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (AT) +
            tty (diag) + DPL + QDSS (Qualcomm Debug SubSystem) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  7 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10b0 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE990
    S:  SerialNumber=28c2595e
    C:  #Ifs= 9 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 6 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=8d(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10b1: MBIM + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (AT) +
            tty (diag) + DPL + QDSS (Qualcomm Debug SubSystem) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  8 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10b1 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE990
    S:  SerialNumber=28c2595e
    C:  #Ifs=10 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=8d(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 9 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10b2: RNDIS + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (AT) +
            tty (diag) + DPL + QDSS (Qualcomm Debug SubSystem) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  9 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10b2 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE990
    S:  SerialNumber=28c2595e
    C:  #Ifs=10 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=ef(misc ) Sub=04 Prot=01 Driver=rndis_host
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=8d(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 9 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10b3: ECM + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (AT) +
            tty (diag) + DPL + QDSS (Qualcomm Debug SubSystem) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 11 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10b3 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE990
    S:  SerialNumber=28c2595e
    C:  #Ifs=10 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
    E:  Ad=82(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=8d(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 9 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
    Reviewed-by: Daniele Palmas <dnlplm@gmail.com>
    [ johan: use USB_DEVICE_AND_INTERFACE_INFO() and sort by protocol ]
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: fix Telit Cinterion FE990A name [+ + +]
Author: Fabio Porcedda <fabio.porcedda@gmail.com>
Date:   Tue Mar 4 10:19:39 2025 +0100

    USB: serial: option: fix Telit Cinterion FE990A name
    
    commit 6232f0d8e100a26275bbd773fc56a60af2c95322 upstream.
    
    The correct name for FE990 is FE990A so use it in order to avoid
    confusion with FE990B.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: match on interface class for Telit FN990B [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Mar 6 11:44:41 2025 +0100

    USB: serial: option: match on interface class for Telit FN990B
    
    commit 9a665fe3d967fe46edb4fd2497c7a5cc2dac2f55 upstream.
    
    The device id entries for Telit FN990B ended up matching only on the
    interface protocol. While this works, the protocol is qualified by the
    interface class (and subclass) which should have been included.
    
    Switch to matching using USB_DEVICE_AND_INTERFACE_INFO() while keeping
    the entries sorted also by protocol for consistency.
    
    Link: https://lore.kernel.org/20250227110655.3647028-2-fabio.porcedda@gmail.com/
    Cc: Fabio Porcedda <fabio.porcedda@gmail.com>
    Cc: Daniele Palmas <dnlplm@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: usbnet:fix NPE during rx_complete [+ + +]
Author: Ying Lu <luying1@xiaomi.com>
Date:   Wed Apr 2 16:58:59 2025 +0800

    usbnet:fix NPE during rx_complete
    
    commit 51de3600093429e3b712e5f091d767babc5dd6df upstream.
    
    Missing usbnet_going_away Check in Critical Path.
    The usb_submit_urb function lacks a usbnet_going_away
    validation, whereas __usbnet_queue_skb includes this check.
    
    This inconsistency creates a race condition where:
    A URB request may succeed, but the corresponding SKB data
    fails to be queued.
    
    Subsequent processes:
    (e.g., rx_complete → defer_bh → __skb_unlink(skb, list))
    attempt to access skb->next, triggering a NULL pointer
    dereference (Kernel Panic).
    
    Fixes: 04e906839a05 ("usbnet: fix cyclical race on disconnect with work queue")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ying Lu <luying1@xiaomi.com>
    Link: https://patch.msgid.link/4c9ef2efaa07eb7f9a5042b74348a67e5a3a7aea.1743584159.git.luying1@xiaomi.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vboxsf: fix building with GCC 15 [+ + +]
Author: Brahmajit Das <brahmajit.xyz@gmail.com>
Date:   Tue Jan 21 21:56:48 2025 +0530

    vboxsf: fix building with GCC 15
    
    [ Upstream commit 4e7487245abcbc5a1a1aea54e4d3b33c53804bda ]
    
    Building with GCC 15 results in build error
    fs/vboxsf/super.c:24:54: error: initializer-string for array of ‘unsigned char’ is too long [-Werror=unterminated-string-initialization]
       24 | static const unsigned char VBSF_MOUNT_SIGNATURE[4] = "\000\377\376\375";
          |                                                      ^~~~~~~~~~~~~~~~~~
    cc1: all warnings being treated as errors
    
    Due to GCC having enabled -Werror=unterminated-string-initialization[0]
    by default. Separately initializing each array element of
    VBSF_MOUNT_SIGNATURE to ensure NUL termination, thus satisfying GCC 15
    and fixing the build error.
    
    [0]: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wno-unterminated-string-initialization
    
    Signed-off-by: Brahmajit Das <brahmajit.xyz@gmail.com>
    Link: https://lore.kernel.org/r/20250121162648.1408743-1-brahmajit.xyz@gmail.com
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vlan: fix memory leak in vlan_newlink() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Jul 8 15:11:53 2022 +0000

    vlan: fix memory leak in vlan_newlink()
    
    commit 72a0b329114b1caa8e69dfa7cdad1dd3c69b8602 upstream.
    
    Blamed commit added back a bug I fixed in commit 9bbd917e0bec
    ("vlan: fix memory leak in vlan_dev_set_egress_priority")
    
    If a memory allocation fails in vlan_changelink() after other allocations
    succeeded, we need to call vlan_dev_free_egress_priority()
    to free all allocated memory because after a failed ->newlink()
    we do not call any methods like ndo_uninit() or dev->priv_destructor().
    
    In following example, if the allocation for last element 2000:2001 fails,
    we need to free eight prior allocations:
    
    ip link add link dummy0 dummy0.100 type vlan id 100 \
            egress-qos-map 1:2 2:3 3:4 4:5 5:6 6:7 7:8 8:9 2000:2001
    
    syzbot report was:
    
    BUG: memory leak
    unreferenced object 0xffff888117bd1060 (size 32):
    comm "syz-executor408", pid 3759, jiffies 4294956555 (age 34.090s)
    hex dump (first 32 bytes):
    09 00 00 00 00 a0 00 00 00 00 00 00 00 00 00 00 ................
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    backtrace:
    [<ffffffff83fc60ad>] kmalloc include/linux/slab.h:600 [inline]
    [<ffffffff83fc60ad>] vlan_dev_set_egress_priority+0xed/0x170 net/8021q/vlan_dev.c:193
    [<ffffffff83fc6628>] vlan_changelink+0x178/0x1d0 net/8021q/vlan_netlink.c:128
    [<ffffffff83fc67c8>] vlan_newlink+0x148/0x260 net/8021q/vlan_netlink.c:185
    [<ffffffff838b1278>] rtnl_newlink_create net/core/rtnetlink.c:3363 [inline]
    [<ffffffff838b1278>] __rtnl_newlink+0xa58/0xdc0 net/core/rtnetlink.c:3580
    [<ffffffff838b1629>] rtnl_newlink+0x49/0x70 net/core/rtnetlink.c:3593
    [<ffffffff838ac66c>] rtnetlink_rcv_msg+0x21c/0x5c0 net/core/rtnetlink.c:6089
    [<ffffffff839f9c37>] netlink_rcv_skb+0x87/0x1d0 net/netlink/af_netlink.c:2501
    [<ffffffff839f8da7>] netlink_unicast_kernel net/netlink/af_netlink.c:1319 [inline]
    [<ffffffff839f8da7>] netlink_unicast+0x397/0x4c0 net/netlink/af_netlink.c:1345
    [<ffffffff839f9266>] netlink_sendmsg+0x396/0x710 net/netlink/af_netlink.c:1921
    [<ffffffff8384dbf6>] sock_sendmsg_nosec net/socket.c:714 [inline]
    [<ffffffff8384dbf6>] sock_sendmsg+0x56/0x80 net/socket.c:734
    [<ffffffff8384e15c>] ____sys_sendmsg+0x36c/0x390 net/socket.c:2488
    [<ffffffff838523cb>] ___sys_sendmsg+0x8b/0xd0 net/socket.c:2542
    [<ffffffff838525b8>] __sys_sendmsg net/socket.c:2571 [inline]
    [<ffffffff838525b8>] __do_sys_sendmsg net/socket.c:2580 [inline]
    [<ffffffff838525b8>] __se_sys_sendmsg net/socket.c:2578 [inline]
    [<ffffffff838525b8>] __x64_sys_sendmsg+0x78/0xf0 net/socket.c:2578
    [<ffffffff845ad8d5>] do_syscall_x64 arch/x86/entry/common.c:50 [inline]
    [<ffffffff845ad8d5>] do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
    [<ffffffff8460006a>] entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    Fixes: 37aa50c539bc ("vlan: introduce vlan_dev_free_egress_priority")
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Xin Long <lucien.xin@gmail.com>
    Reviewed-by: Xin Long <lucien.xin@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
vsock: avoid timeout during connect() if the socket is closing [+ + +]
Author: Stefano Garzarella <sgarzare@redhat.com>
Date:   Fri Mar 28 15:15:28 2025 +0100

    vsock: avoid timeout during connect() if the socket is closing
    
    [ Upstream commit fccd2b711d9628c7ce0111d5e4938652101ee30a ]
    
    When a peer attempts to establish a connection, vsock_connect() contains
    a loop that waits for the state to be TCP_ESTABLISHED. However, the
    other peer can be fast enough to accept the connection and close it
    immediately, thus moving the state to TCP_CLOSING.
    
    When this happens, the peer in the vsock_connect() is properly woken up,
    but since the state is not TCP_ESTABLISHED, it goes back to sleep
    until the timeout expires, returning -ETIMEDOUT.
    
    If the socket state is TCP_CLOSING, waiting for the timeout is pointless.
    vsock_connect() can return immediately without errors or delay since the
    connection actually happened. The socket will be in a closing state,
    but this is not an issue, and subsequent calls will fail as expected.
    
    We discovered this issue while developing a test that accepts and
    immediately closes connections to stress the transport switch between
    two connect() calls, where the first one was interrupted by a signal
    (see Closes link).
    
    Reported-by: Luigi Leonardi <leonardi@redhat.com>
    Closes: https://lore.kernel.org/virtualization/bq6hxrolno2vmtqwcvb5bljfpb7mvwb3kohrvaed6auz5vxrfv@ijmd2f3grobn/
    Fixes: d021c344051a ("VSOCK: Introduce VM Sockets")
    Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
    Acked-by: Paolo Abeni <pabeni@redhat.com>
    Tested-by: Luigi Leonardi <leonardi@redhat.com>
    Reviewed-by: Luigi Leonardi <leonardi@redhat.com>
    Link: https://patch.msgid.link/20250328141528.420719-1-sgarzare@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
watch_queue: fix pipe accounting mismatch [+ + +]
Author: Eric Sandeen <sandeen@redhat.com>
Date:   Thu Feb 27 11:41:08 2025 -0600

    watch_queue: fix pipe accounting mismatch
    
    [ Upstream commit f13abc1e8e1a3b7455511c4e122750127f6bc9b0 ]
    
    Currently, watch_queue_set_size() modifies the pipe buffers charged to
    user->pipe_bufs without updating the pipe->nr_accounted on the pipe
    itself, due to the if (!pipe_has_watch_queue()) test in
    pipe_resize_ring(). This means that when the pipe is ultimately freed,
    we decrement user->pipe_bufs by something other than what than we had
    charged to it, potentially leading to an underflow. This in turn can
    cause subsequent too_many_pipe_buffers_soft() tests to fail with -EPERM.
    
    To remedy this, explicitly account for the pipe usage in
    watch_queue_set_size() to match the number set via account_pipe_buffers()
    
    (It's unclear why watch_queue_set_size() does not update nr_accounted;
    it may be due to intentional overprovisioning in watch_queue_set_size()?)
    
    Fixes: e95aada4cb93d ("pipe: wakeup wr_wait after setting max_usage")
    Signed-off-by: Eric Sandeen <sandeen@redhat.com>
    Link: https://lore.kernel.org/r/206682a8-0604-49e5-8224-fdbe0c12b460@redhat.com
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
wifi: iwlwifi: fw: allocate chained SG tables for dump [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Sun Feb 9 14:34:45 2025 +0200

    wifi: iwlwifi: fw: allocate chained SG tables for dump
    
    [ Upstream commit 7774e3920029398ad49dc848b23840593f14d515 ]
    
    The firmware dumps can be pretty big, and since we use single
    pages for each SG table entry, even the table itself may end
    up being an order-5 allocation. Build chained tables so that
    we need not allocate a higher-order table here.
    
    This could be improved and cleaned up, e.g. by using the SG
    pool code or simply kvmalloc(), but all of that would require
    also updating the devcoredump first since that frees it all,
    so we need to be more careful. SG pool might also run against
    the CONFIG_ARCH_NO_SG_CHAIN limitation, which is irrelevant
    here.
    
    Also use _devcd_free_sgtable() for the error paths now, much
    simpler especially since it's in two places now.
    
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20250209143303.697c7a465ac9.Iea982df46b5c075bfb77ade36f187d99a70c63db@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/dumpstack: Fix inaccurate unwinding from exception stacks due to misplaced assignment [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Tue Mar 25 03:01:23 2025 +0100

    x86/dumpstack: Fix inaccurate unwinding from exception stacks due to misplaced assignment
    
    [ Upstream commit 2c118f50d7fd4d9aefc4533a26f83338b2906b7a ]
    
    Commit:
    
      2e4be0d011f2 ("x86/show_trace_log_lvl: Ensure stack pointer is aligned, again")
    
    was intended to ensure alignment of the stack pointer; but it also moved
    the initialization of the "stack" variable down into the loop header.
    
    This was likely intended as a no-op cleanup, since the commit
    message does not mention it; however, this caused a behavioral change
    because the value of "regs" is different between the two places.
    
    Originally, get_stack_pointer() used the regs provided by the caller; after
    that commit, get_stack_pointer() instead uses the regs at the top of the
    stack frame the unwinder is looking at. Often, there are no such regs at
    all, and "regs" is NULL, causing get_stack_pointer() to fall back to the
    task's current stack pointer, which is not what we want here, but probably
    happens to mostly work. Other times, the original regs will point to
    another regs frame - in that case, the linear guess unwind logic in
    show_trace_log_lvl() will start unwinding too far up the stack, causing the
    first frame found by the proper unwinder to never be visited, resulting in
    a stack trace consisting purely of guess lines.
    
    Fix it by moving the "stack = " assignment back where it belongs.
    
    Fixes: 2e4be0d011f2 ("x86/show_trace_log_lvl: Ensure stack pointer is aligned, again")
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/r/20250325-2025-03-unwind-fixes-v1-2-acd774364768@google.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/entry: Fix ORC unwinder for PUSH_REGS with save_ret=1 [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Tue Mar 25 03:01:22 2025 +0100

    x86/entry: Fix ORC unwinder for PUSH_REGS with save_ret=1
    
    [ Upstream commit 57e2428f8df8263275344566e02c277648a4b7f1 ]
    
    PUSH_REGS with save_ret=1 is used by interrupt entry helper functions that
    initially start with a UNWIND_HINT_FUNC ORC state.
    
    However, save_ret=1 means that we clobber the helper function's return
    address (and then later restore the return address further down on the
    stack); after that point, the only thing on the stack we can unwind through
    is the IRET frame, so use UNWIND_HINT_IRET_REGS until we have a full
    pt_regs frame.
    
    ( An alternate approach would be to move the pt_regs->di overwrite down
      such that it is the final step of pt_regs setup; but I don't want to
      rearrange entry code just to make unwinding a tiny bit more elegant. )
    
    Fixes: 9e809d15d6b6 ("x86/entry: Reduce the code footprint of the 'idtentry' macro")
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Juergen Gross <jgross@suse.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Link: https://lore.kernel.org/r/20250325-2025-03-unwind-fixes-v1-1-acd774364768@google.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/fpu: Avoid copying dynamic FP state from init_task in arch_dup_task_struct() [+ + +]
Author: Benjamin Berg <benjamin.berg@intel.com>
Date:   Wed Feb 26 14:31:36 2025 +0100

    x86/fpu: Avoid copying dynamic FP state from init_task in arch_dup_task_struct()
    
    [ Upstream commit 5d3b81d4d8520efe888536b6906dc10fd1a228a8 ]
    
    The init_task instance of struct task_struct is statically allocated and
    may not contain the full FP state for userspace. As such, limit the copy
    to the valid area of both init_task and 'dst' and ensure all memory is
    initialized.
    
    Note that the FP state is only needed for userspace, and as such it is
    entirely reasonable for init_task to not contain parts of it.
    
    Fixes: 5aaeb5c01c5b ("x86/fpu, sched: Introduce CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT and use it on x86")
    Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Link: https://lore.kernel.org/r/20250226133136.816901-1-benjamin@sipsolutions.net
    ----
    
    v2:
    - Fix code if arch_task_struct_size < sizeof(init_task) by using
      memcpy_and_pad.
    
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/irq: Define trace events conditionally [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue Feb 25 22:32:33 2025 +0100

    x86/irq: Define trace events conditionally
    
    [ Upstream commit 9de7695925d5d2d2085681ba935857246eb2817d ]
    
    When both of X86_LOCAL_APIC and X86_THERMAL_VECTOR are disabled,
    the irq tracing produces a W=1 build warning for the tracing
    definitions:
    
      In file included from include/trace/trace_events.h:27,
                     from include/trace/define_trace.h:113,
                     from arch/x86/include/asm/trace/irq_vectors.h:383,
                     from arch/x86/kernel/irq.c:29:
      include/trace/stages/init.h:2:23: error: 'str__irq_vectors__trace_system_name' defined but not used [-Werror=unused-const-variable=]
    
    Make the tracepoints conditional on the same symbosl that guard
    their usage.
    
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/r/20250225213236.3141752-1-arnd@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/microcode/AMD: Fix out-of-bounds on systems with CPU-less NUMA nodes [+ + +]
Author: Florent Revest <revest@chromium.org>
Date:   Mon Mar 10 15:42:43 2025 +0100

    x86/microcode/AMD: Fix out-of-bounds on systems with CPU-less NUMA nodes
    
    commit e3e89178a9f4a80092578af3ff3c8478f9187d59 upstream.
    
    Currently, load_microcode_amd() iterates over all NUMA nodes, retrieves their
    CPU masks and unconditionally accesses per-CPU data for the first CPU of each
    mask.
    
    According to Documentation/admin-guide/mm/numaperf.rst:
    
      "Some memory may share the same node as a CPU, and others are provided as
      memory only nodes."
    
    Therefore, some node CPU masks may be empty and wouldn't have a "first CPU".
    
    On a machine with far memory (and therefore CPU-less NUMA nodes):
    - cpumask_of_node(nid) is 0
    - cpumask_first(0) is CONFIG_NR_CPUS
    - cpu_data(CONFIG_NR_CPUS) accesses the cpu_info per-CPU array at an
      index that is 1 out of bounds
    
    This does not have any security implications since flashing microcode is
    a privileged operation but I believe this has reliability implications by
    potentially corrupting memory while flashing a microcode update.
    
    When booting with CONFIG_UBSAN_BOUNDS=y on an AMD machine that flashes
    a microcode update. I get the following splat:
    
      UBSAN: array-index-out-of-bounds in arch/x86/kernel/cpu/microcode/amd.c:X:Y
      index 512 is out of range for type 'unsigned long[512]'
      [...]
      Call Trace:
       dump_stack
       __ubsan_handle_out_of_bounds
       load_microcode_amd
       request_microcode_amd
       reload_store
       kernfs_fop_write_iter
       vfs_write
       ksys_write
       do_syscall_64
       entry_SYSCALL_64_after_hwframe
    
    Change the loop to go over only NUMA nodes which have CPUs before determining
    whether the first CPU on the respective node needs microcode update.
    
      [ bp: Massage commit message, fix typo. ]
    
    Fixes: 7ff6edf4fef3 ("x86/microcode/AMD: Fix mixed steppings support")
    Signed-off-by: Florent Revest <revest@chromium.org>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20250310144243.861978-1-revest@chromium.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/mm/pat: cpa-test: fix length for CPA_ARRAY test [+ + +]
Author: Mike Rapoport (Microsoft) <rppt@kernel.org>
Date:   Sun Jan 26 09:47:25 2025 +0200

    x86/mm/pat: cpa-test: fix length for CPA_ARRAY test
    
    [ Upstream commit 33ea120582a638b2f2e380a50686c2b1d7cce795 ]
    
    The CPA_ARRAY test always uses len[1] as numpages argument to
    change_page_attr_set() although the addresses array is different each
    iteration of the test loop.
    
    Replace len[1] with len[i] to have numpages matching the addresses array.
    
    Fixes: ecc729f1f471 ("x86/mm/cpa: Add ARRAY and PAGES_ARRAY selftests")
    Signed-off-by: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20250126074733.1384926-2-rppt@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/mm: Fix flush_tlb_range() when used for zapping normal PMDs [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Fri Jan 3 19:39:38 2025 +0100

    x86/mm: Fix flush_tlb_range() when used for zapping normal PMDs
    
    commit 3ef938c3503563bfc2ac15083557f880d29c2e64 upstream.
    
    On the following path, flush_tlb_range() can be used for zapping normal
    PMD entries (PMD entries that point to page tables) together with the PTE
    entries in the pointed-to page table:
    
        collapse_pte_mapped_thp
          pmdp_collapse_flush
            flush_tlb_range
    
    The arm64 version of flush_tlb_range() has a comment describing that it can
    be used for page table removal, and does not use any last-level
    invalidation optimizations. Fix the X86 version by making it behave the
    same way.
    
    Currently, X86 only uses this information for the following two purposes,
    which I think means the issue doesn't have much impact:
    
     - In native_flush_tlb_multi() for checking if lazy TLB CPUs need to be
       IPI'd to avoid issues with speculative page table walks.
     - In Hyper-V TLB paravirtualization, again for lazy TLB stuff.
    
    The patch "x86/mm: only invalidate final translations with INVLPGB" which
    is currently under review (see
    <https://lore.kernel.org/all/20241230175550.4046587-13-riel@surriel.com/>)
    would probably be making the impact of this a lot worse.
    
    Fixes: 016c4d92cd16 ("x86/mm/tlb: Add freed_tables argument to flush_tlb_mm_range")
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/20250103-x86-collapse-flush-fix-v1-1-3c521856cfa6@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/platform: Only allow CONFIG_EISA for 32-bit [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Feb 26 22:37:14 2025 +0100

    x86/platform: Only allow CONFIG_EISA for 32-bit
    
    [ Upstream commit 976ba8da2f3c2f1e997f4f620da83ae65c0e3728 ]
    
    The CONFIG_EISA menu was cleaned up in 2018, but this inadvertently
    brought the option back on 64-bit machines: ISA remains guarded by
    a CONFIG_X86_32 check, but EISA no longer depends on ISA.
    
    The last Intel machines ith EISA support used a 82375EB PCI/EISA bridge
    from 1993 that could be paired with the 440FX chipset on early Pentium-II
    CPUs, long before the first x86-64 products.
    
    Fixes: 6630a8e50105 ("eisa: consolidate EISA Kconfig entry in drivers/eisa")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/r/20250226213714.4040853-11-arnd@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/sgx: Warn explicitly if X86_FEATURE_SGX_LC is not enabled [+ + +]
Author: Vladis Dronov <vdronov@redhat.com>
Date:   Sun Mar 9 18:22:16 2025 +0100

    x86/sgx: Warn explicitly if X86_FEATURE_SGX_LC is not enabled
    
    [ Upstream commit 65be5c95d08eedda570a6c888a12384c77fe7614 ]
    
    The kernel requires X86_FEATURE_SGX_LC to be able to create SGX enclaves,
    not just X86_FEATURE_SGX.
    
    There is quite a number of hardware which has X86_FEATURE_SGX but not
    X86_FEATURE_SGX_LC. A kernel running on such hardware does not create
    the /dev/sgx_enclave file and does so silently.
    
    Explicitly warn if X86_FEATURE_SGX_LC is not enabled to properly notify
    users that the kernel disabled the SGX driver.
    
    The X86_FEATURE_SGX_LC, a.k.a. SGX Launch Control, is a CPU feature
    that enables LE (Launch Enclave) hash MSRs to be writable (with
    additional opt-in required in the 'feature control' MSR) when running
    enclaves, i.e. using a custom root key rather than the Intel proprietary
    key for enclave signing.
    
    I've hit this issue myself and have spent some time researching where
    my /dev/sgx_enclave file went on SGX-enabled hardware.
    
    Related links:
    
      https://github.com/intel/linux-sgx/issues/837
      https://patchwork.kernel.org/project/platform-driver-x86/patch/20180827185507.17087-3-jarkko.sakkinen@linux.intel.com/
    
    [ mingo: Made the error message a bit more verbose, and added other cases
             where the kernel fails to create the /dev/sgx_enclave device node. ]
    
    Signed-off-by: Vladis Dronov <vdronov@redhat.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Acked-by: Kai Huang <kai.huang@intel.com>
    Cc: Jarkko Sakkinen <jarkko@kernel.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Sean Christopherson <sean.j.christopherson@intel.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20250309172215.21777-2-vdronov@redhat.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/tsc: Always save/restore TSC sched_clock() on suspend/resume [+ + +]
Author: Guilherme G. Piccoli <gpiccoli@igalia.com>
Date:   Sat Feb 15 17:58:16 2025 -0300

    x86/tsc: Always save/restore TSC sched_clock() on suspend/resume
    
    commit d90c9de9de2f1712df56de6e4f7d6982d358cabe upstream.
    
    TSC could be reset in deep ACPI sleep states, even with invariant TSC.
    
    That's the reason we have sched_clock() save/restore functions, to deal
    with this situation. But what happens is that such functions are guarded
    with a check for the stability of sched_clock - if not considered stable,
    the save/restore routines aren't executed.
    
    On top of that, we have a clear comment in native_sched_clock() saying
    that *even* with TSC unstable, we continue using TSC for sched_clock due
    to its speed.
    
    In other words, if we have a situation of TSC getting detected as unstable,
    it marks the sched_clock as unstable as well, so subsequent S3 sleep cycles
    could bring bogus sched_clock values due to the lack of the save/restore
    mechanism, causing warnings like this:
    
      [22.954918] ------------[ cut here ]------------
      [22.954923] Delta way too big! 18446743750843854390 ts=18446744072977390405 before=322133536015 after=322133536015 write stamp=18446744072977390405
      [22.954923] If you just came from a suspend/resume,
      [22.954923] please switch to the trace global clock:
      [22.954923]   echo global > /sys/kernel/tracing/trace_clock
      [22.954923] or add trace_clock=global to the kernel command line
      [22.954937] WARNING: CPU: 2 PID: 5728 at kernel/trace/ring_buffer.c:2890 rb_add_timestamp+0x193/0x1c0
    
    Notice that the above was reproduced even with "trace_clock=global".
    
    The fix for that is to _always_ save/restore the sched_clock on suspend
    cycle _if TSC is used_ as sched_clock - only if we fallback to jiffies
    the sched_clock_stable() check becomes relevant to save/restore the
    sched_clock.
    
    Debugged-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: stable@vger.kernel.org
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/r/20250215210314.351480-1-gpiccoli@igalia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xfrm_output: Force software GSO only in tunnel mode [+ + +]
Author: Cosmin Ratiu <cratiu@nvidia.com>
Date:   Wed Feb 19 12:52:48 2025 +0200

    xfrm_output: Force software GSO only in tunnel mode
    
    [ Upstream commit 0aae2867aa6067f73d066bc98385e23c8454a1d7 ]
    
    The cited commit fixed a software GSO bug with VXLAN + IPSec in tunnel
    mode. Unfortunately, it is slightly broader than necessary, as it also
    severely affects performance for Geneve + IPSec transport mode over a
    device capable of both HW GSO and IPSec crypto offload. In this case,
    xfrm_output unnecessarily triggers software GSO instead of letting the
    HW do it. In simple iperf3 tests over Geneve + IPSec transport mode over
    a back-2-back pair of NICs with MTU 1500, the performance was observed
    to be up to 6x worse when doing software GSO compared to leaving it to
    the hardware.
    
    This commit makes xfrm_output only trigger software GSO in crypto
    offload cases for already encapsulated packets in tunnel mode, as not
    doing so would then cause the inner tunnel skb->inner_networking_header
    to be overwritten and break software GSO for that packet later if the
    device turns out to not be capable of HW GSO.
    
    Taking a closer look at the conditions for the original bug, to better
    understand the reasons for this change:
    - vxlan_build_skb -> iptunnel_handle_offloads sets inner_protocol and
      inner network header.
    - then, udp_tunnel_xmit_skb -> ip_tunnel_xmit adds outer transport and
      network headers.
    - later in the xmit path, xfrm_output -> xfrm_outer_mode_output ->
      xfrm4_prepare_output -> xfrm4_tunnel_encap_add overwrites the inner
      network header with the one set in ip_tunnel_xmit before adding the
      second outer header.
    - __dev_queue_xmit -> validate_xmit_skb checks whether GSO segmentation
      needs to happen based on dev features. In the original bug, the hw
      couldn't segment the packets, so skb_gso_segment was invoked.
    - deep in the .gso_segment callback machinery, __skb_udp_tunnel_segment
      tries to use the wrong inner network header, expecting the one set in
      iptunnel_handle_offloads but getting the one set by xfrm instead.
    - a bit later, ipv6_gso_segment accesses the wrong memory based on that
      wrong inner network header.
    
    With the new change, the original bug (or similar ones) cannot happen
    again, as xfrm will now trigger software GSO before applying a tunnel.
    This concern doesn't exist in packet offload mode, when the HW adds
    encapsulation headers. For the non-offloaded packets (crypto in SW),
    software GSO is still done unconditionally in the else branch.
    
    Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
    Reviewed-by: Yael Chemla <ychemla@nvidia.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Fixes: a204aef9fd77 ("xfrm: call xfrm_output_gso when inner_protocol is set in xfrm_output")
    Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>