Changelog in Linux kernel 6.6.66

 
ACPI: x86: Add skip i2c clients quirk for Acer Iconia One 8 A1-840 [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Sat Nov 16 10:58:24 2024 +0100

    ACPI: x86: Add skip i2c clients quirk for Acer Iconia One 8 A1-840
    
    [ Upstream commit 82f250ed1a1dcde0ad2a1513f85af7f9514635e8 ]
    
    The Acer Iconia One 8 A1-840 (not to be confused with the A1-840FHD which
    is a different model) ships with Android 4.4 as factory OS and has the
    usual broken DSDT issues for x86 Android tablets.
    
    Add quirks to skip ACPI I2C client enumeration and disable ACPI battery/AC
    and ACPI GPIO event handlers.
    
    Also add the "INT33F5" HID for the TI PMIC used on this tablet to the list
    of HIDs for which not to skip i2c_client instantiation, since we do want
    an ACPI instantiated i2c_client for the PMIC.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://patch.msgid.link/20241116095825.11660-1-hdegoede@redhat.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: x86: Clean up Asus entries in acpi_quirk_skip_dmi_ids[] [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Sat Nov 16 10:58:25 2024 +0100

    ACPI: x86: Clean up Asus entries in acpi_quirk_skip_dmi_ids[]
    
    [ Upstream commit bd8aa15848f5f21951cd0b0d01510b3ad1f777d4 ]
    
    The Asus entries in the acpi_quirk_skip_dmi_ids[] table are the only
    entries without a comment which model they apply to. Add these comments.
    
    The Asus TF103C entry also is in the wrong place for what is supposed to
    be an alphabetically sorted list. Move it up so that the list is properly
    sorted and add a comment that the list is alphabetically sorted.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://patch.msgid.link/20241116095825.11660-2-hdegoede@redhat.com
    [ rjw: Changelog and subject edits ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: x86: Make UART skip quirks work on PCI UARTs without an UID [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Sat Nov 9 22:59:36 2024 +0100

    ACPI: x86: Make UART skip quirks work on PCI UARTs without an UID
    
    [ Upstream commit 7f261203d7c2e0c06e668b25dfaaee091a79ab25 ]
    
    The Vexia EDU ATLA 10 tablet (9V version) which shipped with Android 4.2
    as factory OS has the usual broken DSDT issues for x86 Android tablets.
    
    On top of that this tablet is special because all its LPSS island
    peripherals are enumerated as PCI devices rather then as ACPI devices as
    they typically are.
    
    For the x86-android-tablets kmod to be able to instantiate a serdev client
    for the Bluetooth HCI on this tablet, an ACPI_QUIRK_UART1_SKIP quirk is
    necessary.
    
    Modify acpi_dmi_skip_serdev_enumeration() to work with PCI enumerated
    UARTs without an UID, such as the UARTs on this tablet.
    
    Also make acpi_dmi_skip_serdev_enumeration() exit early if there are no
    quirks, since there is nothing to do then.
    
    And add the necessary quirks for the Vexia EDU ATLA 10 tablet.
    
    This should compile with CONFIG_PCI being unset without issues because
    dev_is_pci() is defined as "(false)" then.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://patch.msgid.link/20241109215936.83004-1-hdegoede@redhat.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
af_packet: avoid erroring out after sock_init_data() in packet_create() [+ + +]
Author: Ignat Korchagin <ignat@cloudflare.com>
Date:   Mon Oct 14 16:38:00 2024 +0100

    af_packet: avoid erroring out after sock_init_data() in packet_create()
    
    [ Upstream commit 46f2a11cb82b657fd15bab1c47821b635e03838b ]
    
    After sock_init_data() the allocated sk object is attached to the provided
    sock object. On error, packet_create() frees the sk object leaving the
    dangling pointer in the sock object on return. Some other code may try
    to use this pointer and cause use-after-free.
    
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Ignat Korchagin <ignat@cloudflare.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20241014153808.51894-2-ignat@cloudflare.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: hda/conexant: Use the new codec SSID matching [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Oct 8 14:02:30 2024 +0200

    ALSA: hda/conexant: Use the new codec SSID matching
    
    [ Upstream commit 1f55e3699fc9ced72400cdca39fe248bf2b288a2 ]
    
    Now we can perform the codec ID matching primarily, and reduce the
    conditional application of the quirk for conflicting PCI SSID between
    System76 and Tuxedo devices.
    
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/20241008120233.7154-3-tiwai@suse.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek: Add support for Samsung Galaxy Book3 360 (NP730QFG) [+ + +]
Author: Sahas Leelodharry <sahas.leelodharry@mail.mcgill.ca>
Date:   Mon Dec 2 03:28:33 2024 +0000

    ALSA: hda/realtek: Add support for Samsung Galaxy Book3 360 (NP730QFG)
    
    commit e2974a220594c06f536e65dfd7b2447e0e83a1cb upstream.
    
    Fixes the 3.5mm headphone jack on the Samsung Galaxy Book 3 360
    NP730QFG laptop.
    Unlike the other Galaxy Book3 series devices, this device only needs
    the ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET quirk.
    Verified changes on the device and compared with codec state in Windows.
    
    [ white-space fixes by tiwai ]
    
    Signed-off-by: Sahas Leelodharry <sahas.leelodharry@mail.mcgill.ca>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/QB1PR01MB40047D4CC1282DB7F1333124CC352@QB1PR01MB4004.CANPRD01.PROD.OUTLOOK.COM
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/realtek: Enable mute and micmute LED on HP ProBook 430 G8 [+ + +]
Author: Nazar Bilinskyi <nbilinskyi@gmail.com>
Date:   Sun Dec 1 01:16:31 2024 +0200

    ALSA: hda/realtek: Enable mute and micmute LED on HP ProBook 430 G8
    
    commit 3a83f7baf1346aca885cb83cb888e835fef7c472 upstream.
    
    HP ProBook 430 G8 has a mute and micmute LEDs that can be made to work
    using quirk ALC236_FIXUP_HP_GPIO_LED. Enable already existing quirk.
    
    Signed-off-by: Nazar Bilinskyi <nbilinskyi@gmail.com>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20241130231631.8929-1-nbilinskyi@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda: Fix build error without CONFIG_SND_DEBUG [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Fri Oct 11 09:21:52 2024 +0200

    ALSA: hda: Fix build error without CONFIG_SND_DEBUG
    
    commit 0ddf2784d6c29e59409a62b8f32dc5abe56135a4 upstream.
    
    The macro should have been defined without setting the non-existing
    name field in the case of CONFIG_SND_DEBUG=n.
    
    Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
    Closes: https://lore.kernel.org/20241011131046.5eb3905a@canb.auug.org.au
    Fixes: 5b1913a79c3e ("ALSA: hda: Use own quirk lookup helper")
    Link: https://patch.msgid.link/20241011072152.14657-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda: Use own quirk lookup helper [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Oct 8 14:02:29 2024 +0200

    ALSA: hda: Use own quirk lookup helper
    
    [ Upstream commit 5b1913a79c3e0518d9c5db343fa9fc4edcea041f ]
    
    For allowing the primary codec SSID matching (that works around the
    conflicting PCI SSID problems), introduce a new struct hda_quirk,
    which is compatible with the existing struct snd_pci_quirk along with
    new helper functions and macros.
    
    The existing snd_pci_quirk tables are replaced with hda_quirk tables
    accordingly, while keeping SND_PCI_QUIRK() entry definitions as is.
    
    This patch shouldn't bring any behavior change, just some renaming and
    shifting the code.  The actual change for the codec SSID matching will
    follow after this.
    
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/20241008120233.7154-2-tiwai@suse.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: seq: ump: Fix seq port updates per FB info notify [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Thu Nov 28 18:04:22 2024 +0100

    ALSA: seq: ump: Fix seq port updates per FB info notify
    
    [ Upstream commit aaa55faa2495320e44bc643a917c701f2cc89ee7 ]
    
    update_port_infos() is called when a UMP FB Info update notification
    is received, and this function is supposed to update the attributes of
    the corresponding sequencer port.  However, the function had a few
    issues and it brought to the incorrect states.  Namely:
    
    - It tried to get a wrong sequencer info for the update without
      correcting the port number with the group-offset 1
    - The loop exited immediately when a sequencer port isn't present;
      this ended up with the truncation if a sequencer port in the middle
      goes away
    
    This patch addresses those bugs.
    
    Fixes: 4a16a3af0571 ("ALSA: seq: ump: Handle FB info update")
    Link: https://patch.msgid.link/20241128170423.23351-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: seq: ump: Use automatic cleanup of kfree() [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Thu Feb 22 12:15:08 2024 +0100

    ALSA: seq: ump: Use automatic cleanup of kfree()
    
    [ Upstream commit 316e38ef776663a7a4c5d76438c42c948c574df4 ]
    
    There are common patterns where a temporary buffer is allocated and
    freed at the exit, and those can be simplified with the recent cleanup
    mechanism via __free(kfree).
    
    No functional changes, only code refactoring.
    
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://lore.kernel.org/r/20240222111509.28390-9-tiwai@suse.de
    Stable-dep-of: aaa55faa2495 ("ALSA: seq: ump: Fix seq port updates per FB info notify")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: ump: Update substream name from assigned FB names [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Mon Jul 29 16:13:14 2024 +0200

    ALSA: ump: Update substream name from assigned FB names
    
    [ Upstream commit 0642a3c5cacc0321c755d45ae48f2c84475469a6 ]
    
    We had a nice name scheme in ALSA sequencer UMP binding for each
    sequencer port referring to each assigned Function Block name, while
    the legacy rawmidi refers only to the UMP Endpoint name.  It's better
    to align both.
    
    This patch moves the UMP Group attribute update functions into the
    core UMP code from the sequencer binding code, and improve the
    substream name of the legacy rawmidi.
    
    Link: https://patch.msgid.link/20240729141315.18253-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Stable-dep-of: aaa55faa2495 ("ALSA: seq: ump: Fix seq port updates per FB info notify")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: add mixer mapping for Corsair HS80 [+ + +]
Author: Marie Ramlow <me@nycode.dev>
Date:   Sat Nov 30 17:52:40 2024 +0100

    ALSA: usb-audio: add mixer mapping for Corsair HS80
    
    commit a7de2b873f3dbcda02d504536f1ec6dc50e3f6c4 upstream.
    
    The Corsair HS80 RGB Wireless is a USB headset with a mic and a sidetone
    feature. It has the same quirk as the Virtuoso series.
    This labels the mixers appropriately, so applications don't
    move the sidetone volume when they actually intend to move the main
    headset volume.
    
    Signed-off-by: Marie Ramlow <me@nycode.dev>
    cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20241130165240.17838-1-me@nycode.dev
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Make mic volume workarounds globally applicable [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Nov 5 13:02:18 2024 +0100

    ALSA: usb-audio: Make mic volume workarounds globally applicable
    
    [ Upstream commit d6e6b9218ced5249b9136833ef5ec3f554ec7fde ]
    
    It seems that many webcams have buggy firmware and don't expose the
    mic capture volume with the proper resolution.  We have workarounds in
    mixer.c, but judging from the numbers, those can be better managed as
    global quirk flags.
    
    Link: https://patch.msgid.link/20241105120220.5740-2-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: Notify xrun for low-latency mode [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Thu Nov 28 09:04:16 2024 +0100

    ALSA: usb-audio: Notify xrun for low-latency mode
    
    [ Upstream commit 4f9d674377d090e38d93360bd4df21b67534d622 ]
    
    The low-latency mode of USB-audio driver uses a similar approach like
    the implicit feedback mode but it has an explicit queuing at the
    trigger start time.  The difference is, however, that no packet will
    be handled any longer after all queued packets are handled but no
    enough data is fed.  In the case of implicit feedback mode, the
    capture-side packet handling triggers the re-queuing, and this checks
    the XRUN.  OTOH, in the low-latency mode, it just stops without XRUN
    notification unless any new action is taken from user-space via ack
    callback.  For example, when you stop the stream in aplay, no XRUN is
    reported.
    
    This patch adds the XRUN check at the packet complete callback in the
    case all pending URBs are exhausted.  Strictly speaking, this state
    doesn't match really with XRUN; in theory the application may queue
    immediately after this happens.  But such behavior is only for
    1-period configuration, which the USB-audio driver doesn't support.
    So we may conclude that this situation leads certainly to XRUN.
    
    A caveat is that the XRUN should be triggered only for the PCM RUNNING
    state, and not during DRAINING.  This additional state check is put in
    notify_xrun(), too.
    
    Fixes: d5f871f89e21 ("ALSA: usb-audio: Improved lowlatency playback support")
    Reported-by: Leonard Crestez <cdleonard@gmail.com>
    Link: https://lore.kernel.org/25d5b0d8-4efd-4630-9d33-7a9e3fa9dc2b@gmail.com
    Link: https://patch.msgid.link/20241128080446.1181-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: Update UMP group attributes for GTB blocks, too [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed Aug 7 11:22:59 2024 +0200

    ALSA: usb-audio: Update UMP group attributes for GTB blocks, too
    
    commit ebaa86c0bddd2c47c516bf2096b17c0bed71d914 upstream.
    
    When a FB is created from a GTB instead of UMP FB Info inquiry, we
    missed the update of the corresponding UMP Group attributes.
    Export the call of updater and let it be called from the USB driver.
    
    Fixes: 0642a3c5cacc ("ALSA: ump: Update substream name from assigned FB names")
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/20240807092303.1935-5-tiwai@suse.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arm64: Ensure bits ASID[15:8] are masked out when the kernel uses 8-bit ASIDs [+ + +]
Author: Catalin Marinas <catalin.marinas@arm.com>
Date:   Tue Dec 3 15:19:41 2024 +0000

    arm64: Ensure bits ASID[15:8] are masked out when the kernel uses 8-bit ASIDs
    
    commit c0900d15d31c2597dd9f634c8be2b71762199890 upstream.
    
    Linux currently sets the TCR_EL1.AS bit unconditionally during CPU
    bring-up. On an 8-bit ASID CPU, this is RES0 and ignored, otherwise
    16-bit ASIDs are enabled. However, if running in a VM and the hypervisor
    reports 8-bit ASIDs (ID_AA64MMFR0_EL1.ASIDBits == 0) on a 16-bit ASIDs
    CPU, Linux uses bits 8 to 63 as a generation number for tracking old
    process ASIDs. The bottom 8 bits of this generation end up being written
    to TTBR1_EL1 and also used for the ASID-based TLBI operations as the
    upper 8 bits of the ASID. Following an ASID roll-over event we can have
    threads of the same application with the same 8-bit ASID but different
    generation numbers running on separate CPUs. Both TLB caching and the
    TLBI operations will end up using different actual 16-bit ASIDs for the
    same process.
    
    A similar scenario can happen in a big.LITTLE configuration if the boot
    CPU only uses 8-bit ASIDs while secondary CPUs have 16-bit ASIDs.
    
    Ensure that the ASID generation is only tracked by bits 16 and up,
    leaving bits 15:8 as 0 if the kernel uses 8-bit ASIDs. Note that
    clearing TCR_EL1.AS is not sufficient since the architecture requires
    that the top 8 bits of the ASID passed to TLBI instructions are 0 rather
    than ignored in such configuration.
    
    Cc: stable@vger.kernel.org
    Cc: Will Deacon <will@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: James Morse <james.morse@arm.com>
    Acked-by: Mark Rutland <mark.rutland@arm.com>
    Acked-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20241203151941.353796-1-catalin.marinas@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: ptrace: fix partial SETREGSET for NT_ARM_TAGGED_ADDR_CTRL [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Dec 5 12:16:52 2024 +0000

    arm64: ptrace: fix partial SETREGSET for NT_ARM_TAGGED_ADDR_CTRL
    
    commit ca62d90085f4af36de745883faab9f8a7cbb45d3 upstream.
    
    Currently tagged_addr_ctrl_set() doesn't initialize the temporary 'ctrl'
    variable, and a SETREGSET call with a length of zero will leave this
    uninitialized. Consequently tagged_addr_ctrl_set() will consume an
    arbitrary value, potentially leaking up to 64 bits of memory from the
    kernel stack. The read is limited to a specific slot on the stack, and
    the issue does not provide a write mechanism.
    
    As set_tagged_addr_ctrl() only accepts values where bits [63:4] zero and
    rejects other values, a partial SETREGSET attempt will randomly succeed
    or fail depending on the value of the uninitialized value, and the
    exposure is significantly limited.
    
    Fix this by initializing the temporary value before copying the regset
    from userspace, as for other regsets (e.g. NT_PRSTATUS, NT_PRFPREG,
    NT_ARM_SYSTEM_CALL). In the case of a zero-length write, the existing
    value of the tagged address ctrl will be retained.
    
    The NT_ARM_TAGGED_ADDR_CTRL regset is only visible in the
    user_aarch64_view used by a native AArch64 task to manipulate another
    native AArch64 task. As get_tagged_addr_ctrl() only returns an error
    value when called for a compat task, tagged_addr_ctrl_get() and
    tagged_addr_ctrl_set() should never observe an error value from
    get_tagged_addr_ctrl(). Add a WARN_ON_ONCE() to both to indicate that
    such an error would be unexpected, and error handlnig is not missing in
    either case.
    
    Fixes: 2200aa7154cb ("arm64: mte: ptrace: Add NT_ARM_TAGGED_ADDR_CTRL regset")
    Cc: <stable@vger.kernel.org> # 5.10.x
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    Link: https://lore.kernel.org/r/20241205121655.1824269-2-mark.rutland@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: amd: yc: Add quirk for microphone on Lenovo Thinkpad T14s Gen 6 21M1CTO1WW [+ + +]
Author: Uwe Kleine-König <ukleinek@debian.org>
Date:   Fri Nov 22 08:56:05 2024 +0100

    ASoC: amd: yc: Add quirk for microphone on Lenovo Thinkpad T14s Gen 6 21M1CTO1WW
    
    [ Upstream commit cbc86dd0a4fe9f8c41075328c2e740b68419d639 ]
    
    Add a quirk for Tova's Lenovo Thinkpad T14s with product name 21M1.
    
    Suggested-by: Tova <blueaddagio@laposte.net>
    Link: https://bugs.debian.org/1087673
    Signed-off-by: Uwe Kleine-König <ukleinek@debian.org>
    Link: https://patch.msgid.link/20241122075606.213132-2-ukleinek@debian.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: amd: yc: fix internal mic on Redmi G 2022 [+ + +]
Author: Alex Far <anf1980@gmail.com>
Date:   Sat Nov 16 21:58:45 2024 +0300

    ASoC: amd: yc: fix internal mic on Redmi G 2022
    
    [ Upstream commit 67a0463d339059eeeead9cd015afa594659cfdaf ]
    
    This laptop model requires an additional detection quirk to enable the
    internal microphone
    
    Signed-off-by: Alex Far <anf1980@gmail.com>
    Link: https://patch.msgid.link/ZzjrZY3sImcqTtGx@RedmiG
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: hdmi-codec: reorder channel allocation list [+ + +]
Author: Jonas Karlman <jonas@kwiboo.se>
Date:   Fri Nov 15 04:43:44 2024 +0000

    ASoC: hdmi-codec: reorder channel allocation list
    
    [ Upstream commit 82ff5abc2edcfba0c0f1a1be807795e2876f46e9 ]
    
    The ordering in hdmi_codec_get_ch_alloc_table_idx() results in
    wrong channel allocation for a number of cases, e.g. when ELD
    reports FL|FR|LFE|FC|RL|RR or FL|FR|LFE|FC|RL|RR|RC|RLC|RRC:
    
    ca_id 0x01 with speaker mask FL|FR|LFE is selected instead of
    ca_id 0x03 with speaker mask FL|FR|LFE|FC for 4 channels
    
    and
    
    ca_id 0x04 with speaker mask FL|FR|RC gets selected instead of
    ca_id 0x0b with speaker mask FL|FR|LFE|FC|RL|RR for 6 channels
    
    Fix this by reordering the channel allocation list with most
    specific speaker masks at the top.
    
    Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
    Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
    Link: https://patch.msgid.link/20241115044344.3510979-1-christianshewitt@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: Intel: avs: Fix return status of avs_pcm_hw_constraints_init() [+ + +]
Author: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Date:   Thu Oct 10 13:20:08 2024 +0200

    ASoC: Intel: avs: Fix return status of avs_pcm_hw_constraints_init()
    
    commit a0aae96be5ffc5b456ca07bfe1385b721c20e184 upstream.
    
    Check for return code from avs_pcm_hw_constraints_init() in
    avs_dai_fe_startup() only checks if value is different from 0. Currently
    function can return positive value, change it to return 0 on success.
    
    Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com>
    Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
    I've observed KASAN on our setups and while patch itself is correct
    regardless. Problem seems to be caused by recent changes to rates, as
    this started happening after recent patchsets and doesn't reproduce with
    those reverted
    https://lore.kernel.org/linux-sound/20240905-alsa-12-24-128-v1-0-8371948d3921@baylibre.com/
    https://lore.kernel.org/linux-sound/20240911135756.24434-1-tiwai@suse.de/
    I've tested using Mark tree, where they are both applied and for some
    reason snd_pcm_hw_constraint_minmax() started returning positive value,
    while previously it returned 0. I'm bit worried if it signals some
    potential deeper problem regarding constraints with above changes.
    
    Link: https://patch.msgid.link/20241010112008.545526-1-amadeuszx.slawinski@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: mediatek: mt8188-mt6359: Remove hardcoded dmic codec [+ + +]
Author: Nícolas F. R. A. Prado <nfraprado@collabora.com>
Date:   Tue Dec 3 16:20:58 2024 -0300

    ASoC: mediatek: mt8188-mt6359: Remove hardcoded dmic codec
    
    [ Upstream commit ec16a3cdf37e507013062f9c4a2067eacdd12b62 ]
    
    Remove hardcoded dmic codec from the UL_SRC dai link to avoid requiring
    a dmic codec to be present for the driver to probe, as not every
    MT8188-based platform might need a dmic codec. The codec can be assigned
    to the dai link through the dai-link property in Devicetree on the
    platforms where it is needed.
    
    No Devicetree currently relies on it so it is safe to remove without
    worrying about backward compatibility.
    
    Fixes: 9f08dcbddeb3 ("ASoC: mediatek: mt8188-mt6359: support new board with nau88255")
    Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Link: https://patch.msgid.link/20241203-mt8188-6359-unhardcode-dmic-v1-1-346e3e5cbe6d@collabora.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: SOF: ipc3-topology: Convert the topology pin index to ALH dai index [+ + +]
Author: Bard Liao <yung-chuan.liao@linux.intel.com>
Date:   Wed Nov 27 17:29:54 2024 +0800

    ASoC: SOF: ipc3-topology: Convert the topology pin index to ALH dai index
    
    [ Upstream commit e9db1b551774037ebe39dde4a658d89ba95e260b ]
    
    Intel SoundWire machine driver always uses Pin number 2 and above.
    Currently, the pin number is used as the FW DAI index directly. As a
    result, FW DAI 0 and 1 are never used. That worked fine because we use
    up to 2 DAIs in a SDW link. Convert the topology pin index to ALH dai
    index, the mapping is using 2-off indexing, iow, pin #2 is ALH dai #0.
    
    The issue exists since beginning. And the Fixes tag is the first commit
    that this commit can be applied.
    
    Fixes: b66bfc3a9810 ("ASoC: SOF: sof-audio: Fix broken early bclk feature for SSP")
    Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
    Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com>
    Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
    Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
    Link: https://patch.msgid.link/20241127092955.20026-1-yung-chuan.liao@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: SOF: ipc3-topology: fix resource leaks in sof_ipc3_widget_setup_comp_dai() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Sat Nov 30 13:09:06 2024 +0300

    ASoC: SOF: ipc3-topology: fix resource leaks in sof_ipc3_widget_setup_comp_dai()
    
    [ Upstream commit 6d544ea21d367cbd9746ae882e67a839391a6594 ]
    
    These error paths should free comp_dai before returning.
    
    Fixes: 909dadf21aae ("ASoC: SOF: topology: Make DAI widget parsing IPC agnostic")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://patch.msgid.link/67d185cf-d139-4f8c-970a-dbf0542246a8@stanley.mountain
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bcache: revert replacing IS_ERR_OR_NULL with IS_ERR again [+ + +]
Author: Liequan Che <cheliequan@inspur.com>
Date:   Mon Dec 2 19:56:38 2024 +0800

    bcache: revert replacing IS_ERR_OR_NULL with IS_ERR again
    
    commit b2e382ae12a63560fca35050498e19e760adf8c0 upstream.
    
    Commit 028ddcac477b ("bcache: Remove unnecessary NULL point check in
    node allocations") leads a NULL pointer deference in cache_set_flush().
    
    1721         if (!IS_ERR_OR_NULL(c->root))
    1722                 list_add(&c->root->list, &c->btree_cache);
    
    >From the above code in cache_set_flush(), if previous registration code
    fails before allocating c->root, it is possible c->root is NULL as what
    it is initialized. __bch_btree_node_alloc() never returns NULL but
    c->root is possible to be NULL at above line 1721.
    
    This patch replaces IS_ERR() by IS_ERR_OR_NULL() to fix this.
    
    Fixes: 028ddcac477b ("bcache: Remove unnecessary NULL point check in node allocations")
    Signed-off-by: Liequan Che <cheliequan@inspur.com>
    Cc: stable@vger.kernel.org
    Cc: Zheng Wang <zyytlz.wz@163.com>
    Reviewed-by: Mingzhe Zou <mingzhe.zou@easystack.cn>
    Signed-off-by: Coly Li <colyli@suse.de>
    Link: https://lore.kernel.org/r/20241202115638.28957-1-colyli@suse.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Bluetooth: Add new quirks for ATS2851 [+ + +]
Author: Danil Pylaev <danstiv404@gmail.com>
Date:   Mon Oct 21 12:22:44 2024 +0000

    Bluetooth: Add new quirks for ATS2851
    
    [ Upstream commit 94464a7b71634037b13d54021e0dfd0fb0d8c1f0 ]
    
    This adds quirks for broken extended create connection,
    and write auth payload timeout.
    
    Signed-off-by: Danil Pylaev <danstiv404@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: btusb: Add RTL8852BE device 0489:e123 to device tables [+ + +]
Author: Hilda Wu <hildawu@realtek.com>
Date:   Tue Oct 1 16:37:29 2024 +0800

    Bluetooth: btusb: Add RTL8852BE device 0489:e123 to device tables
    
    [ Upstream commit 69b84ffce260ff13826dc10aeb3c3e5c2288a552 ]
    
    Add the support ID 0489:e123 to usb_device_id table for
    Realtek RTL8852B chip.
    
    The device info from /sys/kernel/debug/usb/devices as below.
    
    T:  Bus=01 Lev=01 Prnt=01 Port=07 Cnt=04 Dev#=  7 Spd=12   MxCh= 0
    D:  Ver= 1.00 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=0489 ProdID=e123 Rev= 0.00
    S:  Manufacturer=Realtek
    S:  Product=Bluetooth Radio
    S:  SerialNumber=00e04c000001
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
    I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
    I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
    I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
    I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    
    Signed-off-by: Hilda Wu <hildawu@realtek.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: hci_core: Fix not checking skb length on hci_acldata_packet [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Tue Oct 8 10:16:48 2024 -0400

    Bluetooth: hci_core: Fix not checking skb length on hci_acldata_packet
    
    [ Upstream commit 3fe288a8214e7dd784d1f9b7c9e448244d316b47 ]
    
    This fixes not checking if skb really contains an ACL header otherwise
    the code may attempt to access some uninitilized/invalid memory past the
    valid skb->data.
    
    Reported-by: syzbot+6ea290ba76d8c1eb1ac2@syzkaller.appspotmail.com
    Tested-by: syzbot+6ea290ba76d8c1eb1ac2@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=6ea290ba76d8c1eb1ac2
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: L2CAP: do not leave dangling sk pointer on error in l2cap_sock_create() [+ + +]
Author: Ignat Korchagin <ignat@cloudflare.com>
Date:   Mon Oct 14 16:38:01 2024 +0100

    Bluetooth: L2CAP: do not leave dangling sk pointer on error in l2cap_sock_create()
    
    [ Upstream commit 7c4f78cdb8e7501e9f92d291a7d956591bf73be9 ]
    
    bt_sock_alloc() allocates the sk object and attaches it to the provided
    sock object. On error l2cap_sock_alloc() frees the sk object, but the
    dangling pointer is still attached to the sock object, which may create
    use-after-free in other code.
    
    Signed-off-by: Ignat Korchagin <ignat@cloudflare.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20241014153808.51894-3-ignat@cloudflare.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: RFCOMM: avoid leaving dangling sk pointer in rfcomm_sock_alloc() [+ + +]
Author: Ignat Korchagin <ignat@cloudflare.com>
Date:   Mon Oct 14 16:38:02 2024 +0100

    Bluetooth: RFCOMM: avoid leaving dangling sk pointer in rfcomm_sock_alloc()
    
    [ Upstream commit 3945c799f12b8d1f49a3b48369ca494d981ac465 ]
    
    bt_sock_alloc() attaches allocated sk object to the provided sock object.
    If rfcomm_dlc_alloc() fails, we release the sk object, but leave the
    dangling pointer in the sock object, which may cause use-after-free.
    
    Fix this by swapping calls to bt_sock_alloc() and rfcomm_dlc_alloc().
    
    Signed-off-by: Ignat Korchagin <ignat@cloudflare.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20241014153808.51894-4-ignat@cloudflare.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: Set quirks for ATS2851 [+ + +]
Author: Danil Pylaev <danstiv404@gmail.com>
Date:   Mon Oct 21 12:22:46 2024 +0000

    Bluetooth: Set quirks for ATS2851
    
    [ Upstream commit 677a55ba11a82c2835550a82324cec5fcb2f9e2d ]
    
    This adds quirks for broken ats2851 features.
    
    Signed-off-by: Danil Pylaev <danstiv404@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: Support new quirks for ATS2851 [+ + +]
Author: Danil Pylaev <danstiv404@gmail.com>
Date:   Mon Oct 21 12:22:45 2024 +0000

    Bluetooth: Support new quirks for ATS2851
    
    [ Upstream commit 5bd3135924b4570dcecc8793f7771cb8d42d8b19 ]
    
    This adds support for quirks for broken extended create connection,
    and write auth payload timeout.
    
    Signed-off-by: Danil Pylaev <danstiv404@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf, vsock: Fix poll() missing a queue [+ + +]
Author: Michal Luczaj <mhal@rbox.co>
Date:   Mon Nov 18 22:03:41 2024 +0100

    bpf, vsock: Fix poll() missing a queue
    
    [ Upstream commit 9f0fc98145218ff8f50d8cfa3b393785056c53e1 ]
    
    When a verdict program simply passes a packet without redirection, sk_msg
    is enqueued on sk_psock::ingress_msg. Add a missing check to poll().
    
    Fixes: 634f1a7110b4 ("vsock: support sockmap")
    Signed-off-by: Michal Luczaj <mhal@rbox.co>
    Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
    Reviewed-by: Luigi Leonardi <leonardi@redhat.com>
    Link: https://lore.kernel.org/r/20241118-vsock-bpf-poll-close-v1-1-f1b9669cacdc@rbox.co
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf, vsock: Invoke proto::close on close() [+ + +]
Author: Michal Luczaj <mhal@rbox.co>
Date:   Mon Nov 18 22:03:43 2024 +0100

    bpf, vsock: Invoke proto::close on close()
    
    [ Upstream commit 135ffc7becc82cfb84936ae133da7969220b43b2 ]
    
    vsock defines a BPF callback to be invoked when close() is called. However,
    this callback is never actually executed. As a result, a closed vsock
    socket is not automatically removed from the sockmap/sockhash.
    
    Introduce a dummy vsock_close() and make vsock_release() call proto::close.
    
    Note: changes in __vsock_release() look messy, but it's only due to indent
    level reduction and variables xmas tree reorder.
    
    Fixes: 634f1a7110b4 ("vsock: support sockmap")
    Signed-off-by: Michal Luczaj <mhal@rbox.co>
    Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
    Reviewed-by: Luigi Leonardi <leonardi@redhat.com>
    Link: https://lore.kernel.org/r/20241118-vsock-bpf-poll-close-v1-3-f1b9669cacdc@rbox.co
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: Call free_htab_elem() after htab_unlock_bucket() [+ + +]
Author: Hou Tao <houtao1@huawei.com>
Date:   Wed Nov 6 14:35:40 2024 +0800

    bpf: Call free_htab_elem() after htab_unlock_bucket()
    
    [ Upstream commit b9e9ed90b10c82a4e9d4d70a2890f06bfcdd3b78 ]
    
    For htab of maps, when the map is removed from the htab, it may hold the
    last reference of the map. bpf_map_fd_put_ptr() will invoke
    bpf_map_free_id() to free the id of the removed map element. However,
    bpf_map_fd_put_ptr() is invoked while holding a bucket lock
    (raw_spin_lock_t), and bpf_map_free_id() attempts to acquire map_idr_lock
    (spinlock_t), triggering the following lockdep warning:
    
      =============================
      [ BUG: Invalid wait context ]
      6.11.0-rc4+ #49 Not tainted
      -----------------------------
      test_maps/4881 is trying to lock:
      ffffffff84884578 (map_idr_lock){+...}-{3:3}, at: bpf_map_free_id.part.0+0x21/0x70
      other info that might help us debug this:
      context-{5:5}
      2 locks held by test_maps/4881:
       #0: ffffffff846caf60 (rcu_read_lock){....}-{1:3}, at: bpf_fd_htab_map_update_elem+0xf9/0x270
       #1: ffff888149ced148 (&htab->lockdep_key#2){....}-{2:2}, at: htab_map_update_elem+0x178/0xa80
      stack backtrace:
      CPU: 0 UID: 0 PID: 4881 Comm: test_maps Not tainted 6.11.0-rc4+ #49
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), ...
      Call Trace:
       <TASK>
       dump_stack_lvl+0x6e/0xb0
       dump_stack+0x10/0x20
       __lock_acquire+0x73e/0x36c0
       lock_acquire+0x182/0x450
       _raw_spin_lock_irqsave+0x43/0x70
       bpf_map_free_id.part.0+0x21/0x70
       bpf_map_put+0xcf/0x110
       bpf_map_fd_put_ptr+0x9a/0xb0
       free_htab_elem+0x69/0xe0
       htab_map_update_elem+0x50f/0xa80
       bpf_fd_htab_map_update_elem+0x131/0x270
       htab_map_update_elem+0x50f/0xa80
       bpf_fd_htab_map_update_elem+0x131/0x270
       bpf_map_update_value+0x266/0x380
       __sys_bpf+0x21bb/0x36b0
       __x64_sys_bpf+0x45/0x60
       x64_sys_call+0x1b2a/0x20d0
       do_syscall_64+0x5d/0x100
       entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    One way to fix the lockdep warning is using raw_spinlock_t for
    map_idr_lock as well. However, bpf_map_alloc_id() invokes
    idr_alloc_cyclic() after acquiring map_idr_lock, it will trigger a
    similar lockdep warning because the slab's lock (s->cpu_slab->lock) is
    still a spinlock.
    
    Instead of changing map_idr_lock's type, fix the issue by invoking
    htab_put_fd_value() after htab_unlock_bucket(). However, only deferring
    the invocation of htab_put_fd_value() is not enough, because the old map
    pointers in htab of maps can not be saved during batched deletion.
    Therefore, also defer the invocation of free_htab_elem(), so these
    to-be-freed elements could be linked together similar to lru map.
    
    There are four callers for ->map_fd_put_ptr:
    
    (1) alloc_htab_elem() (through htab_put_fd_value())
    It invokes ->map_fd_put_ptr() under a raw_spinlock_t. The invocation of
    htab_put_fd_value() can not simply move after htab_unlock_bucket(),
    because the old element has already been stashed in htab->extra_elems.
    It may be reused immediately after htab_unlock_bucket() and the
    invocation of htab_put_fd_value() after htab_unlock_bucket() may release
    the newly-added element incorrectly. Therefore, saving the map pointer
    of the old element for htab of maps before unlocking the bucket and
    releasing the map_ptr after unlock. Beside the map pointer in the old
    element, should do the same thing for the special fields in the old
    element as well.
    
    (2) free_htab_elem() (through htab_put_fd_value())
    Its caller includes __htab_map_lookup_and_delete_elem(),
    htab_map_delete_elem() and __htab_map_lookup_and_delete_batch().
    
    For htab_map_delete_elem(), simply invoke free_htab_elem() after
    htab_unlock_bucket(). For __htab_map_lookup_and_delete_batch(), just
    like lru map, linking the to-be-freed element into node_to_free list
    and invoking free_htab_elem() for these element after unlock. It is safe
    to reuse batch_flink as the link for node_to_free, because these
    elements have been removed from the hash llist.
    
    Because htab of maps doesn't support lookup_and_delete operation,
    __htab_map_lookup_and_delete_elem() doesn't have the problem, so kept
    it as is.
    
    (3) fd_htab_map_free()
    It invokes ->map_fd_put_ptr without raw_spinlock_t.
    
    (4) bpf_fd_htab_map_update_elem()
    It invokes ->map_fd_put_ptr without raw_spinlock_t.
    
    After moving free_htab_elem() outside htab bucket lock scope, using
    pcpu_freelist_push() instead of __pcpu_freelist_push() to disable
    the irq before freeing elements, and protecting the invocations of
    bpf_mem_cache_free() with migrate_{disable|enable} pair.
    
    Signed-off-by: Hou Tao <houtao1@huawei.com>
    Link: https://lore.kernel.org/r/20241106063542.357743-2-houtao@huaweicloud.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix exact match conditions in trie_get_next_key() [+ + +]
Author: Hou Tao <houtao1@huawei.com>
Date:   Fri Dec 6 19:06:18 2024 +0800

    bpf: Fix exact match conditions in trie_get_next_key()
    
    [ Upstream commit 27abc7b3fa2e09bbe41e2924d328121546865eda ]
    
    trie_get_next_key() uses node->prefixlen == key->prefixlen to identify
    an exact match, However, it is incorrect because when the target key
    doesn't fully match the found node (e.g., node->prefixlen != matchlen),
    these two nodes may also have the same prefixlen. It will return
    expected result when the passed key exist in the trie. However when a
    recently-deleted key or nonexistent key is passed to
    trie_get_next_key(), it may skip keys and return incorrect result.
    
    Fix it by using node->prefixlen == matchlen to identify exact matches.
    When the condition is true after the search, it also implies
    node->prefixlen equals key->prefixlen, otherwise, the search would
    return NULL instead.
    
    Fixes: b471f2f1de8b ("bpf: implement MAP_GET_NEXT_KEY command for LPM_TRIE map")
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Signed-off-by: Hou Tao <houtao1@huawei.com>
    Link: https://lore.kernel.org/r/20241206110622.1161752-6-houtao@huaweicloud.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix narrow scalar spill onto 64-bit spilled scalar slots [+ + +]
Author: Tao Lyu <tao.lyu@epfl.ch>
Date:   Tue Dec 3 20:47:54 2024 -0800

    bpf: Fix narrow scalar spill onto 64-bit spilled scalar slots
    
    [ Upstream commit b0e66977dc072906bb76555fb1a64261d7f63d0f ]
    
    When CAP_PERFMON and CAP_SYS_ADMIN (allow_ptr_leaks) are disabled, the
    verifier aims to reject partial overwrite on an 8-byte stack slot that
    contains a spilled pointer.
    
    However, in such a scenario, it rejects all partial stack overwrites as
    long as the targeted stack slot is a spilled register, because it does
    not check if the stack slot is a spilled pointer.
    
    Incomplete checks will result in the rejection of valid programs, which
    spill narrower scalar values onto scalar slots, as shown below.
    
    0: R1=ctx() R10=fp0
    ; asm volatile ( @ repro.bpf.c:679
    0: (7a) *(u64 *)(r10 -8) = 1          ; R10=fp0 fp-8_w=1
    1: (62) *(u32 *)(r10 -8) = 1
    attempt to corrupt spilled pointer on stack
    processed 2 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0.
    
    Fix this by expanding the check to not consider spilled scalar registers
    when rejecting the write into the stack.
    
    Previous discussion on this patch is at link [0].
    
      [0]: https://lore.kernel.org/bpf/20240403202409.2615469-1-tao.lyu@epfl.ch
    
    Fixes: ab125ed3ec1c ("bpf: fix check for attempt to corrupt spilled pointer")
    Acked-by: Eduard Zingerman <eddyz87@gmail.com>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Tao Lyu <tao.lyu@epfl.ch>
    Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20241204044757.1483141-3-memxor@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: fix OOB devmap writes when deleting elements [+ + +]
Author: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Date:   Fri Nov 22 13:10:30 2024 +0100

    bpf: fix OOB devmap writes when deleting elements
    
    commit ab244dd7cf4c291f82faacdc50b45cc0f55b674d upstream.
    
    Jordy reported issue against XSKMAP which also applies to DEVMAP - the
    index used for accessing map entry, due to being a signed integer,
    causes the OOB writes. Fix is simple as changing the type from int to
    u32, however, when compared to XSKMAP case, one more thing needs to be
    addressed.
    
    When map is released from system via dev_map_free(), we iterate through
    all of the entries and an iterator variable is also an int, which
    implies OOB accesses. Again, change it to be u32.
    
    Example splat below:
    
    [  160.724676] BUG: unable to handle page fault for address: ffffc8fc2c001000
    [  160.731662] #PF: supervisor read access in kernel mode
    [  160.736876] #PF: error_code(0x0000) - not-present page
    [  160.742095] PGD 0 P4D 0
    [  160.744678] Oops: Oops: 0000 [#1] PREEMPT SMP
    [  160.749106] CPU: 1 UID: 0 PID: 520 Comm: kworker/u145:12 Not tainted 6.12.0-rc1+ #487
    [  160.757050] Hardware name: Intel Corporation S2600WFT/S2600WFT, BIOS SE5C620.86B.02.01.0008.031920191559 03/19/2019
    [  160.767642] Workqueue: events_unbound bpf_map_free_deferred
    [  160.773308] RIP: 0010:dev_map_free+0x77/0x170
    [  160.777735] Code: 00 e8 fd 91 ed ff e8 b8 73 ed ff 41 83 7d 18 19 74 6e 41 8b 45 24 49 8b bd f8 00 00 00 31 db 85 c0 74 48 48 63 c3 48 8d 04 c7 <48> 8b 28 48 85 ed 74 30 48 8b 7d 18 48 85 ff 74 05 e8 b3 52 fa ff
    [  160.796777] RSP: 0018:ffffc9000ee1fe38 EFLAGS: 00010202
    [  160.802086] RAX: ffffc8fc2c001000 RBX: 0000000080000000 RCX: 0000000000000024
    [  160.809331] RDX: 0000000000000000 RSI: 0000000000000024 RDI: ffffc9002c001000
    [  160.816576] RBP: 0000000000000000 R08: 0000000000000023 R09: 0000000000000001
    [  160.823823] R10: 0000000000000001 R11: 00000000000ee6b2 R12: dead000000000122
    [  160.831066] R13: ffff88810c928e00 R14: ffff8881002df405 R15: 0000000000000000
    [  160.838310] FS:  0000000000000000(0000) GS:ffff8897e0c40000(0000) knlGS:0000000000000000
    [  160.846528] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  160.852357] CR2: ffffc8fc2c001000 CR3: 0000000005c32006 CR4: 00000000007726f0
    [  160.859604] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [  160.866847] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [  160.874092] PKRU: 55555554
    [  160.876847] Call Trace:
    [  160.879338]  <TASK>
    [  160.881477]  ? __die+0x20/0x60
    [  160.884586]  ? page_fault_oops+0x15a/0x450
    [  160.888746]  ? search_extable+0x22/0x30
    [  160.892647]  ? search_bpf_extables+0x5f/0x80
    [  160.896988]  ? exc_page_fault+0xa9/0x140
    [  160.900973]  ? asm_exc_page_fault+0x22/0x30
    [  160.905232]  ? dev_map_free+0x77/0x170
    [  160.909043]  ? dev_map_free+0x58/0x170
    [  160.912857]  bpf_map_free_deferred+0x51/0x90
    [  160.917196]  process_one_work+0x142/0x370
    [  160.921272]  worker_thread+0x29e/0x3b0
    [  160.925082]  ? rescuer_thread+0x4b0/0x4b0
    [  160.929157]  kthread+0xd4/0x110
    [  160.932355]  ? kthread_park+0x80/0x80
    [  160.936079]  ret_from_fork+0x2d/0x50
    [  160.943396]  ? kthread_park+0x80/0x80
    [  160.950803]  ret_from_fork_asm+0x11/0x20
    [  160.958482]  </TASK>
    
    Fixes: 546ac1ffb70d ("bpf: add devmap, a map for storing net device references")
    CC: stable@vger.kernel.org
    Reported-by: Jordy Zomer <jordyzomer@google.com>
    Suggested-by: Jordy Zomer <jordyzomer@google.com>
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Link: https://lore.kernel.org/r/20241122121030.716788-3-maciej.fijalkowski@intel.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

bpf: Handle BPF_EXIST and BPF_NOEXIST for LPM trie [+ + +]
Author: Hou Tao <houtao1@huawei.com>
Date:   Fri Dec 6 19:06:16 2024 +0800

    bpf: Handle BPF_EXIST and BPF_NOEXIST for LPM trie
    
    [ Upstream commit eae6a075e9537dd69891cf77ca5a88fa8a28b4a1 ]
    
    Add the currently missing handling for the BPF_EXIST and BPF_NOEXIST
    flags. These flags can be specified by users and are relevant since LPM
    trie supports exact matches during update.
    
    Fixes: b95a5c4db09b ("bpf: add a longest prefix match trie map implementation")
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: Hou Tao <houtao1@huawei.com>
    Link: https://lore.kernel.org/r/20241206110622.1161752-4-houtao@huaweicloud.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Handle in-place update for full LPM trie correctly [+ + +]
Author: Hou Tao <houtao1@huawei.com>
Date:   Fri Dec 6 19:06:17 2024 +0800

    bpf: Handle in-place update for full LPM trie correctly
    
    [ Upstream commit 532d6b36b2bfac5514426a97a4df8d103d700d43 ]
    
    When a LPM trie is full, in-place updates of existing elements
    incorrectly return -ENOSPC.
    
    Fix this by deferring the check of trie->n_entries. For new insertions,
    n_entries must not exceed max_entries. However, in-place updates are
    allowed even when the trie is full.
    
    Fixes: b95a5c4db09b ("bpf: add a longest prefix match trie map implementation")
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Signed-off-by: Hou Tao <houtao1@huawei.com>
    Link: https://lore.kernel.org/r/20241206110622.1161752-5-houtao@huaweicloud.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: put bpf_link's program when link is safe to be deallocated [+ + +]
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Fri Nov 1 11:17:52 2024 -0700

    bpf: put bpf_link's program when link is safe to be deallocated
    
    [ Upstream commit f44ec8733a8469143fde1984b5e6931b2e2f6f3f ]
    
    In general, BPF link's underlying BPF program should be considered to be
    reachable through attach hook -> link -> prog chain, and, pessimistically,
    we have to assume that as long as link's memory is not safe to free,
    attach hook's code might hold a pointer to BPF program and use it.
    
    As such, it's not (generally) correct to put link's program early before
    waiting for RCU GPs to go through. More eager bpf_prog_put() that we
    currently do is mostly correct due to BPF program's release code doing
    similar RCU GP waiting, but as will be shown in the following patches,
    BPF program can be non-sleepable (and, thus, reliant on only "classic"
    RCU GP), while BPF link's attach hook can have sleepable semantics and
    needs to be protected by RCU Tasks Trace, and for such cases BPF link
    has to go through RCU Tasks Trace + "classic" RCU GPs before being
    deallocated. And so, if we put BPF program early, we might free BPF
    program before we free BPF link, leading to use-after-free situation.
    
    So, this patch defers bpf_prog_put() until we are ready to perform
    bpf_link's deallocation. At worst, this delays BPF program freeing by
    one extra RCU GP, but that seems completely acceptable. Alternatively,
    we'd need more elaborate ways to determine BPF hook, BPF link, and BPF
    program lifetimes, and how they relate to each other, which seems like
    an unnecessary complication.
    
    Note, for most BPF links we still will perform eager bpf_prog_put() and
    link dealloc, so for those BPF links there are no observable changes
    whatsoever. Only BPF links that use deferred dealloc might notice
    slightly delayed freeing of BPF programs.
    
    Also, to reduce code and logic duplication, extract program put + link
    dealloc logic into bpf_link_dealloc() helper.
    
    Link: https://lore.kernel.org/20241101181754.782341-1-andrii@kernel.org
    Tested-by: Jordan Rife <jrife@google.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Remove unnecessary kfree(im_node) in lpm_trie_update_elem [+ + +]
Author: Hou Tao <houtao1@huawei.com>
Date:   Fri Dec 6 19:06:15 2024 +0800

    bpf: Remove unnecessary kfree(im_node) in lpm_trie_update_elem
    
    [ Upstream commit 3d5611b4d7efbefb85a74fcdbc35c603847cc022 ]
    
    There is no need to call kfree(im_node) when updating element fails,
    because im_node must be NULL. Remove the unnecessary kfree() for
    im_node.
    
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: Hou Tao <houtao1@huawei.com>
    Link: https://lore.kernel.org/r/20241206110622.1161752-3-houtao@huaweicloud.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Stable-dep-of: 532d6b36b2bf ("bpf: Handle in-place update for full LPM trie correctly")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpftool: fix potential NULL pointer dereferencing in prog_dump() [+ + +]
Author: Amir Mohammadi <amirmohammadi1999.am@gmail.com>
Date:   Thu Nov 21 12:04:13 2024 +0330

    bpftool: fix potential NULL pointer dereferencing in prog_dump()
    
    [ Upstream commit ef3ba8c258ee368a5343fa9329df85b4bcb9e8b5 ]
    
    A NULL pointer dereference could occur if ksyms
    is not properly checked before usage in the prog_dump() function.
    
    Fixes: b053b439b72a ("bpf: libbpf: bpftool: Print bpf_line_info during prog dump")
    Signed-off-by: Amir Mohammadi <amiremohamadi@yahoo.com>
    Reviewed-by: Quentin Monnet <qmo@kernel.org>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/r/20241121083413.7214-1-amiremohamadi@yahoo.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: add cancellation points to trim loops [+ + +]
Author: Luca Stefani <luca.stefani.ge1@gmail.com>
Date:   Tue Sep 17 22:33:05 2024 +0200

    btrfs: add cancellation points to trim loops
    
    commit 69313850dce33ce8c24b38576a279421f4c60996 upstream.
    
    There are reports that system cannot suspend due to running trim because
    the task responsible for trimming the device isn't able to finish in
    time, especially since we have a free extent discarding phase, which can
    trim a lot of unallocated space. There are no limits on the trim size
    (unlike the block group part).
    
    Since trime isn't a critical call it can be interrupted at any time,
    in such cases we stop the trim, report the amount of discarded bytes and
    return an error.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219180
    Link: https://bugzilla.suse.com/show_bug.cgi?id=1229737
    CC: stable@vger.kernel.org # 5.15+
    Signed-off-by: Luca Stefani <luca.stefani.ge1@gmail.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: avoid unnecessary device path update for the same device [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Tue Sep 24 12:52:17 2024 +0930

    btrfs: avoid unnecessary device path update for the same device
    
    [ Upstream commit 2e8b6bc0ab41ce41e6dfcc204b6cc01d5abbc952 ]
    
    [PROBLEM]
    It is very common for udev to trigger device scan, and every time a
    mounted btrfs device got re-scan from different soft links, we will get
    some of unnecessary device path updates, this is especially common
    for LVM based storage:
    
     # lvs
      scratch1 test -wi-ao---- 10.00g
      scratch2 test -wi-a----- 10.00g
      scratch3 test -wi-a----- 10.00g
      scratch4 test -wi-a----- 10.00g
      scratch5 test -wi-a----- 10.00g
      test     test -wi-a----- 10.00g
    
     # mkfs.btrfs -f /dev/test/scratch1
     # mount /dev/test/scratch1 /mnt/btrfs
     # dmesg -c
     [  205.705234] BTRFS: device fsid 7be2602f-9e35-4ecf-a6ff-9e91d2c182c9 devid 1 transid 6 /dev/mapper/test-scratch1 (253:4) scanned by mount (1154)
     [  205.710864] BTRFS info (device dm-4): first mount of filesystem 7be2602f-9e35-4ecf-a6ff-9e91d2c182c9
     [  205.711923] BTRFS info (device dm-4): using crc32c (crc32c-intel) checksum algorithm
     [  205.713856] BTRFS info (device dm-4): using free-space-tree
     [  205.722324] BTRFS info (device dm-4): checking UUID tree
    
    So far so good, but even if we just touched any soft link of
    "dm-4", we will get quite some unnecessary device path updates.
    
     # touch /dev/mapper/test-scratch1
     # dmesg -c
     [  469.295796] BTRFS info: devid 1 device path /dev/mapper/test-scratch1 changed to /dev/dm-4 scanned by (udev-worker) (1221)
     [  469.300494] BTRFS info: devid 1 device path /dev/dm-4 changed to /dev/mapper/test-scratch1 scanned by (udev-worker) (1221)
    
    Such device path rename is unnecessary and can lead to random path
    change due to the udev race.
    
    [CAUSE]
    Inside device_list_add(), we are using a very primitive way checking if
    the device has changed, strcmp().
    
    Which can never handle links well, no matter if it's hard or soft links.
    
    So every different link of the same device will be treated as a different
    device, causing the unnecessary device path update.
    
    [FIX]
    Introduce a helper, is_same_device(), and use path_equal() to properly
    detect the same block device.
    So that the different soft links won't trigger the rename race.
    
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Link: https://bugzilla.suse.com/show_bug.cgi?id=1230641
    Reported-by: Fabian Vogt <fvogt@suse.com>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: do not clear read-only when adding sprout device [+ + +]
Author: Boris Burkov <boris@bur.io>
Date:   Tue Oct 15 14:27:32 2024 -0700

    btrfs: do not clear read-only when adding sprout device
    
    [ Upstream commit 70958a949d852cbecc3d46127bf0b24786df0130 ]
    
    If you follow the seed/sprout wiki, it suggests the following workflow:
    
    btrfstune -S 1 seed_dev
    mount seed_dev mnt
    btrfs device add sprout_dev
    mount -o remount,rw mnt
    
    The first mount mounts the FS readonly, which results in not setting
    BTRFS_FS_OPEN, and setting the readonly bit on the sb. The device add
    somewhat surprisingly clears the readonly bit on the sb (though the
    mount is still practically readonly, from the users perspective...).
    Finally, the remount checks the readonly bit on the sb against the flag
    and sees no change, so it does not run the code intended to run on
    ro->rw transitions, leaving BTRFS_FS_OPEN unset.
    
    As a result, when the cleaner_kthread runs, it sees no BTRFS_FS_OPEN and
    does no work. This results in leaking deleted snapshots until we run out
    of space.
    
    I propose fixing it at the first departure from what feels reasonable:
    when we clear the readonly bit on the sb during device add.
    
    A new fstest I have written reproduces the bug and confirms the fix.
    
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Boris Burkov <boris@bur.io>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: don't take dev_replace rwsem on task already holding it [+ + +]
Author: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Date:   Tue Sep 10 09:55:01 2024 +0200

    btrfs: don't take dev_replace rwsem on task already holding it
    
    [ Upstream commit 8cca35cb29f81eba3e96ec44dad8696c8a2f9138 ]
    
    Running fstests btrfs/011 with MKFS_OPTIONS="-O rst" to force the usage of
    the RAID stripe-tree, we get the following splat from lockdep:
    
     BTRFS info (device sdd): dev_replace from /dev/sdd (devid 1) to /dev/sdb started
    
     ============================================
     WARNING: possible recursive locking detected
     6.11.0-rc3-btrfs-for-next #599 Not tainted
     --------------------------------------------
     btrfs/2326 is trying to acquire lock:
     ffff88810f215c98 (&fs_info->dev_replace.rwsem){++++}-{3:3}, at: btrfs_map_block+0x39f/0x2250
    
     but task is already holding lock:
     ffff88810f215c98 (&fs_info->dev_replace.rwsem){++++}-{3:3}, at: btrfs_map_block+0x39f/0x2250
    
     other info that might help us debug this:
      Possible unsafe locking scenario:
    
            CPU0
            ----
       lock(&fs_info->dev_replace.rwsem);
       lock(&fs_info->dev_replace.rwsem);
    
      *** DEADLOCK ***
    
      May be due to missing lock nesting notation
    
     1 lock held by btrfs/2326:
      #0: ffff88810f215c98 (&fs_info->dev_replace.rwsem){++++}-{3:3}, at: btrfs_map_block+0x39f/0x2250
    
     stack backtrace:
     CPU: 1 UID: 0 PID: 2326 Comm: btrfs Not tainted 6.11.0-rc3-btrfs-for-next #599
     Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
     Call Trace:
      <TASK>
      dump_stack_lvl+0x5b/0x80
      __lock_acquire+0x2798/0x69d0
      ? __pfx___lock_acquire+0x10/0x10
      ? __pfx___lock_acquire+0x10/0x10
      lock_acquire+0x19d/0x4a0
      ? btrfs_map_block+0x39f/0x2250
      ? __pfx_lock_acquire+0x10/0x10
      ? find_held_lock+0x2d/0x110
      ? lock_is_held_type+0x8f/0x100
      down_read+0x8e/0x440
      ? btrfs_map_block+0x39f/0x2250
      ? __pfx_down_read+0x10/0x10
      ? do_raw_read_unlock+0x44/0x70
      ? _raw_read_unlock+0x23/0x40
      btrfs_map_block+0x39f/0x2250
      ? btrfs_dev_replace_by_ioctl+0xd69/0x1d00
      ? btrfs_bio_counter_inc_blocked+0xd9/0x2e0
      ? __kasan_slab_alloc+0x6e/0x70
      ? __pfx_btrfs_map_block+0x10/0x10
      ? __pfx_btrfs_bio_counter_inc_blocked+0x10/0x10
      ? kmem_cache_alloc_noprof+0x1f2/0x300
      ? mempool_alloc_noprof+0xed/0x2b0
      btrfs_submit_chunk+0x28d/0x17e0
      ? __pfx_btrfs_submit_chunk+0x10/0x10
      ? bvec_alloc+0xd7/0x1b0
      ? bio_add_folio+0x171/0x270
      ? __pfx_bio_add_folio+0x10/0x10
      ? __kasan_check_read+0x20/0x20
      btrfs_submit_bio+0x37/0x80
      read_extent_buffer_pages+0x3df/0x6c0
      btrfs_read_extent_buffer+0x13e/0x5f0
      read_tree_block+0x81/0xe0
      read_block_for_search+0x4bd/0x7a0
      ? __pfx_read_block_for_search+0x10/0x10
      btrfs_search_slot+0x78d/0x2720
      ? __pfx_btrfs_search_slot+0x10/0x10
      ? lock_is_held_type+0x8f/0x100
      ? kasan_save_track+0x14/0x30
      ? __kasan_slab_alloc+0x6e/0x70
      ? kmem_cache_alloc_noprof+0x1f2/0x300
      btrfs_get_raid_extent_offset+0x181/0x820
      ? __pfx_lock_acquire+0x10/0x10
      ? __pfx_btrfs_get_raid_extent_offset+0x10/0x10
      ? down_read+0x194/0x440
      ? __pfx_down_read+0x10/0x10
      ? do_raw_read_unlock+0x44/0x70
      ? _raw_read_unlock+0x23/0x40
      btrfs_map_block+0x5b5/0x2250
      ? __pfx_btrfs_map_block+0x10/0x10
      scrub_submit_initial_read+0x8fe/0x11b0
      ? __pfx_scrub_submit_initial_read+0x10/0x10
      submit_initial_group_read+0x161/0x3a0
      ? lock_release+0x20e/0x710
      ? __pfx_submit_initial_group_read+0x10/0x10
      ? __pfx_lock_release+0x10/0x10
      scrub_simple_mirror.isra.0+0x3eb/0x580
      scrub_stripe+0xe4d/0x1440
      ? lock_release+0x20e/0x710
      ? __pfx_scrub_stripe+0x10/0x10
      ? __pfx_lock_release+0x10/0x10
      ? do_raw_read_unlock+0x44/0x70
      ? _raw_read_unlock+0x23/0x40
      scrub_chunk+0x257/0x4a0
      scrub_enumerate_chunks+0x64c/0xf70
      ? __mutex_unlock_slowpath+0x147/0x5f0
      ? __pfx_scrub_enumerate_chunks+0x10/0x10
      ? bit_wait_timeout+0xb0/0x170
      ? __up_read+0x189/0x700
      ? scrub_workers_get+0x231/0x300
      ? up_write+0x490/0x4f0
      btrfs_scrub_dev+0x52e/0xcd0
      ? create_pending_snapshots+0x230/0x250
      ? __pfx_btrfs_scrub_dev+0x10/0x10
      btrfs_dev_replace_by_ioctl+0xd69/0x1d00
      ? lock_acquire+0x19d/0x4a0
      ? __pfx_btrfs_dev_replace_by_ioctl+0x10/0x10
      ? lock_release+0x20e/0x710
      ? btrfs_ioctl+0xa09/0x74f0
      ? __pfx_lock_release+0x10/0x10
      ? do_raw_spin_lock+0x11e/0x240
      ? __pfx_do_raw_spin_lock+0x10/0x10
      btrfs_ioctl+0xa14/0x74f0
      ? lock_acquire+0x19d/0x4a0
      ? find_held_lock+0x2d/0x110
      ? __pfx_btrfs_ioctl+0x10/0x10
      ? lock_release+0x20e/0x710
      ? do_sigaction+0x3f0/0x860
      ? __pfx_do_vfs_ioctl+0x10/0x10
      ? do_raw_spin_lock+0x11e/0x240
      ? lockdep_hardirqs_on_prepare+0x270/0x3e0
      ? _raw_spin_unlock_irq+0x28/0x50
      ? do_sigaction+0x3f0/0x860
      ? __pfx_do_sigaction+0x10/0x10
      ? __x64_sys_rt_sigaction+0x18e/0x1e0
      ? __pfx___x64_sys_rt_sigaction+0x10/0x10
      ? __x64_sys_close+0x7c/0xd0
      __x64_sys_ioctl+0x137/0x190
      do_syscall_64+0x71/0x140
      entry_SYSCALL_64_after_hwframe+0x76/0x7e
     RIP: 0033:0x7f0bd1114f9b
     Code: Unable to access opcode bytes at 0x7f0bd1114f71.
     RSP: 002b:00007ffc8a8c3130 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
     RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f0bd1114f9b
     RDX: 00007ffc8a8c35e0 RSI: 00000000ca289435 RDI: 0000000000000003
     RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000007
     R10: 0000000000000008 R11: 0000000000000246 R12: 00007ffc8a8c6c85
     R13: 00000000398e72a0 R14: 0000000000004361 R15: 0000000000000004
      </TASK>
    
    This happens because on RAID stripe-tree filesystems we recurse back into
    btrfs_map_block() on scrub to perform the logical to device physical
    mapping.
    
    But as the device replace task is already holding the dev_replace::rwsem
    we deadlock.
    
    So don't take the dev_replace::rwsem in case our task is the task performing
    the device replace.
    
    Suggested-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: fix missing snapshot drew unlock when root is dead during swap activation [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Fri Nov 29 13:33:03 2024 +0000

    btrfs: fix missing snapshot drew unlock when root is dead during swap activation
    
    [ Upstream commit 9c803c474c6c002d8ade68ebe99026cc39c37f85 ]
    
    When activating a swap file we acquire the root's snapshot drew lock and
    then check if the root is dead, failing and returning with -EPERM if it's
    dead but without unlocking the root's snapshot lock. Fix this by adding
    the missing unlock.
    
    Fixes: 60021bd754c6 ("btrfs: prevent subvol with swapfile from being deleted")
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cacheinfo: Allocate memory during CPU hotplug if not done from the primary CPU [+ + +]
Author: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
Date:   Wed Nov 27 16:22:46 2024 -0800

    cacheinfo: Allocate memory during CPU hotplug if not done from the primary CPU
    
    commit b3fce429a1e030b50c1c91351d69b8667eef627b upstream.
    
    Commit
    
      5944ce092b97 ("arch_topology: Build cacheinfo from primary CPU")
    
    adds functionality that architectures can use to optionally allocate and
    build cacheinfo early during boot. Commit
    
      6539cffa9495 ("cacheinfo: Add arch specific early level initializer")
    
    lets secondary CPUs correct (and reallocate memory) cacheinfo data if
    needed.
    
    If the early build functionality is not used and cacheinfo does not need
    correction, memory for cacheinfo is never allocated. x86 does not use
    the early build functionality. Consequently, during the cacheinfo CPU
    hotplug callback, last_level_cache_is_valid() attempts to dereference
    a NULL pointer:
    
      BUG: kernel NULL pointer dereference, address: 0000000000000100
      #PF: supervisor read access in kernel mode
      #PF: error_code(0x0000) - not present page
      PGD 0 P4D 0
      Oops: 0000 [#1] PREEPMT SMP NOPTI
      CPU: 0 PID 19 Comm: cpuhp/0 Not tainted 6.4.0-rc2 #1
      RIP: 0010: last_level_cache_is_valid+0x95/0xe0a
    
    Allocate memory for cacheinfo during the cacheinfo CPU hotplug callback
    if not done earlier.
    
    Moreover, before determining the validity of the last-level cache info,
    ensure that it has been allocated. Simply checking for non-zero
    cache_leaves() is not sufficient, as some architectures (e.g., Intel
    processors) have non-zero cache_leaves() before allocation.
    
    Dereferencing NULL cacheinfo can occur in update_per_cpu_data_slice_size().
    This function iterates over all online CPUs. However, a CPU may have come
    online recently, but its cacheinfo may not have been allocated yet.
    
    While here, remove an unnecessary indentation in allocate_cache_info().
    
      [ bp: Massage. ]
    
    Fixes: 6539cffa9495 ("cacheinfo: Add arch specific early level initializer")
    Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Radu Rendec <rrendec@redhat.com>
    Reviewed-by: Nikolay Borisov <nik.borisov@suse.com>
    Reviewed-by: Andreas Herrmann <aherrmann@suse.de>
    Reviewed-by: Sudeep Holla <sudeep.holla@arm.com>
    Cc: stable@vger.kernel.org # 6.3+
    Link: https://lore.kernel.org/r/20241128002247.26726-2-ricardo.neri-calderon@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
can: c_can: c_can_handle_bus_err(): update statistics if skb allocation fails [+ + +]
Author: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Date:   Fri Nov 22 23:15:42 2024 +0100

    can: c_can: c_can_handle_bus_err(): update statistics if skb allocation fails
    
    [ Upstream commit 9e66242504f49e17481d8e197730faba7d99c934 ]
    
    Ensure that the statistics are always updated, even if the skb
    allocation fails.
    
    Fixes: 4d6d26537940 ("can: c_can: fix {rx,tx}_errors statistics")
    Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
    Link: https://patch.msgid.link/20241122221650.633981-2-dario.binacchi@amarulasolutions.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: dev: can_set_termination(): allow sleeping GPIOs [+ + +]
Author: Marc Kleine-Budde <mkl@pengutronix.de>
Date:   Thu Nov 21 11:08:25 2024 +0100

    can: dev: can_set_termination(): allow sleeping GPIOs
    
    commit ee1dfbdd8b4b6de85e96ae2059dc9c1bdb6b49b5 upstream.
    
    In commit 6e86a1543c37 ("can: dev: provide optional GPIO based
    termination support") GPIO based termination support was added.
    
    For no particular reason that patch uses gpiod_set_value() to set the
    GPIO. This leads to the following warning, if the systems uses a
    sleeping GPIO, i.e. behind an I2C port expander:
    
    | WARNING: CPU: 0 PID: 379 at /drivers/gpio/gpiolib.c:3496 gpiod_set_value+0x50/0x6c
    | CPU: 0 UID: 0 PID: 379 Comm: ip Not tainted 6.11.0-20241016-1 #1 823affae360cc91126e4d316d7a614a8bf86236c
    
    Replace gpiod_set_value() by gpiod_set_value_cansleep() to allow the
    use of sleeping GPIOs.
    
    Cc: Nicolai Buchwitz <nb@tipi-net.de>
    Cc: Lino Sanfilippo <l.sanfilippo@kunbus.com>
    Cc: stable@vger.kernel.org
    Reported-by: Leonard Göhrs <l.goehrs@pengutronix.de>
    Tested-by: Leonard Göhrs <l.goehrs@pengutronix.de>
    Fixes: 6e86a1543c37 ("can: dev: provide optional GPIO based termination support")
    Link: https://patch.msgid.link/20241121-dev-fix-can_set_termination-v1-1-41fa6e29216d@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: ems_usb: ems_usb_rx_err(): fix {rx,tx}_errors statistics [+ + +]
Author: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Date:   Fri Nov 22 23:15:52 2024 +0100

    can: ems_usb: ems_usb_rx_err(): fix {rx,tx}_errors statistics
    
    [ Upstream commit 72a7e2e74b3075959f05e622bae09b115957dffe ]
    
    The ems_usb_rx_err() function only incremented the receive error counter
    and never the transmit error counter, even if the ECC_DIR flag reported
    that an error had occurred during transmission.
    
    Increment the receive/transmit error counter based on the value of the
    ECC_DIR flag.
    
    Fixes: 702171adeed3 ("ems_usb: Added support for EMS CPC-USB/ARM7 CAN/USB interface")
    Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
    Link: https://patch.msgid.link/20241122221650.633981-12-dario.binacchi@amarulasolutions.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: f81604: f81604_handle_can_bus_errors(): fix {rx,tx}_errors statistics [+ + +]
Author: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Date:   Fri Nov 22 23:15:53 2024 +0100

    can: f81604: f81604_handle_can_bus_errors(): fix {rx,tx}_errors statistics
    
    [ Upstream commit d7b916540c2ba3d2a88c27b2a6287b39d8eac052 ]
    
    The f81604_handle_can_bus_errors() function only incremented the receive
    error counter and never the transmit error counter, even if the ECC_DIR
    flag reported that an error had occurred during transmission.
    
    Increment the receive/transmit error counter based on the value of the
    ECC_DIR flag.
    
    Fixes: 88da17436973 ("can: usb: f81604: add Fintek F81604 support")
    Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
    Link: https://patch.msgid.link/20241122221650.633981-13-dario.binacchi@amarulasolutions.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: gs_usb: add usb endpoint address detection at driver probe step [+ + +]
Author: Alexander Kozhinov <ak.alexander.kozhinov@gmail.com>
Date:   Fri Oct 18 23:24:26 2024 +0200

    can: gs_usb: add usb endpoint address detection at driver probe step
    
    [ Upstream commit 889b2ae9139a87b3390f7003cb1bb3d65bf90a26 ]
    
    There is an approach made to implement gs_usb firmware/driver based on
    Zephyr RTOS. It was found that USB stack of Zephyr RTOS overwrites USB
    EP addresses, if they have different last 4 bytes in absence of other
    endpoints.
    
    For example in case of gs_usb candlelight firmware EP-IN is 0x81 and
    EP-OUT 0x02. If there are no additional USB endpoints, Zephyr RTOS will
    overwrite EP-OUT to 0x01. More information can be found in the
    discussion with Zephyr RTOS USB stack maintainer here:
    
    https://github.com/zephyrproject-rtos/zephyr/issues/67812
    
    There are already two different gs_usb FW driver implementations based
    on Zephyr RTOS:
    
    1. https://github.com/CANnectivity/cannectivity
       (by: https://github.com/henrikbrixandersen)
    2. https://github.com/zephyrproject-rtos/zephyr/compare/main...KozhinovAlexander:zephyr:gs_usb
       (by: https://github.com/KozhinovAlexander)
    
    At the moment both Zephyr RTOS implementations use dummy USB endpoint,
    to overcome described USB stack behavior from Zephyr itself. Since
    Zephyr RTOS is intended to be used on microcontrollers with very
    constrained amount of resources (ROM, RAM) and additional endpoint
    requires memory, it is more convenient to update the gs_usb driver in
    the Linux kernel.
    
    To fix this problem, update the gs_usb driver from using hard coded
    endpoint numbers to evaluate the endpoint descriptors and use the
    endpoints provided there.
    
    Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices")
    Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
    Signed-off-by: Alexander Kozhinov <ak.alexander.kozhinov@gmail.com>
    Link: https://patch.msgid.link/20241018212450.31746-1-ak.alexander.kozhinov@gmail.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: gs_usb: add VID/PID for Xylanta SAINT3 product family [+ + +]
Author: Marc Kleine-Budde <mkl@pengutronix.de>
Date:   Tue Jun 25 16:03:52 2024 +0200

    can: gs_usb: add VID/PID for Xylanta SAINT3 product family
    
    [ Upstream commit 69e2326a21ef409d6c709cb990565331727b9f27 ]
    
    Add support for the Xylanta SAINT3 product family.
    
    Cc: Andy Jackson <andy@xylanta.com>
    Cc: Ken Aitchison <ken@xylanta.com>
    Tested-by: Andy Jackson <andy@xylanta.com>
    Link: https://lore.kernel.org/all/20240625140353.769373-1-mkl@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Stable-dep-of: 889b2ae9139a ("can: gs_usb: add usb endpoint address detection at driver probe step")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: hi311x: hi3110_can_ist(): fix potential use-after-free [+ + +]
Author: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Date:   Fri Nov 22 23:15:45 2024 +0100

    can: hi311x: hi3110_can_ist(): fix potential use-after-free
    
    [ Upstream commit 9ad86d377ef4a19c75a9c639964879a5b25a433b ]
    
    The commit a22bd630cfff ("can: hi311x: do not report txerr and rxerr
    during bus-off") removed the reporting of rxerr and txerr even in case
    of correct operation (i. e. not bus-off).
    
    The error count information added to the CAN frame after netif_rx() is
    a potential use after free, since there is no guarantee that the skb
    is in the same state. It might be freed or reused.
    
    Fix the issue by postponing the netif_rx() call in case of txerr and
    rxerr reporting.
    
    Fixes: a22bd630cfff ("can: hi311x: do not report txerr and rxerr during bus-off")
    Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
    Link: https://patch.msgid.link/20241122221650.633981-5-dario.binacchi@amarulasolutions.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: hi311x: hi3110_can_ist(): fix {rx,tx}_errors statistics [+ + +]
Author: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Date:   Fri Nov 22 23:15:49 2024 +0100

    can: hi311x: hi3110_can_ist(): fix {rx,tx}_errors statistics
    
    [ Upstream commit 3e4645931655776e757f9fb5ae29371cd7cb21a2 ]
    
    The hi3110_can_ist() function was incorrectly incrementing only the
    receive error counter, even in cases of bit or acknowledgment errors that
    occur during transmission.
    
    The fix the issue by incrementing the appropriate counter based on the
    type of error.
    
    Fixes: 57e83fb9b746 ("can: hi311x: Add Holt HI-311x CAN driver")
    Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
    Link: https://patch.msgid.link/20241122221650.633981-9-dario.binacchi@amarulasolutions.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: ifi_canfd: ifi_canfd_handle_lec_err(): fix {rx,tx}_errors statistics [+ + +]
Author: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Date:   Fri Nov 22 23:15:48 2024 +0100

    can: ifi_canfd: ifi_canfd_handle_lec_err(): fix {rx,tx}_errors statistics
    
    [ Upstream commit bb03d568bb21b4afe7935d1943bcf68ddea3ea45 ]
    
    The ifi_canfd_handle_lec_err() function was incorrectly incrementing only
    the receive error counter, even in cases of bit or acknowledgment errors
    that occur during transmission.
    
    Fix the issue by incrementing the appropriate counter based on the
    type of error.
    
    Fixes: 5bbd655a8bd0 ("can: ifi: Add more detailed error reporting")
    Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
    Reviewed-by: Marek Vasut <marex@denx.de>
    Link: https://patch.msgid.link/20241122221650.633981-8-dario.binacchi@amarulasolutions.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: j1939: j1939_session_new(): fix skb reference counting [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Tue Nov 5 12:48:23 2024 +0300

    can: j1939: j1939_session_new(): fix skb reference counting
    
    [ Upstream commit a8c695005bfe6569acd73d777ca298ddddd66105 ]
    
    Since j1939_session_skb_queue() does an extra skb_get() for each new
    skb, do the same for the initial one in j1939_session_new() to avoid
    refcount underflow.
    
    Reported-by: syzbot+d4e8dc385d9258220c31@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=d4e8dc385d9258220c31
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Tested-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Link: https://patch.msgid.link/20241105094823.2403806-1-dmantipov@yandex.ru
    [mkl: clean up commit message]
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: m_can: m_can_handle_lec_err(): fix {rx,tx}_errors statistics [+ + +]
Author: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Date:   Fri Nov 22 23:15:47 2024 +0100

    can: m_can: m_can_handle_lec_err(): fix {rx,tx}_errors statistics
    
    [ Upstream commit 988d4222bf9039a875a3d48f2fe35c317831ff68 ]
    
    The m_can_handle_lec_err() function was incorrectly incrementing only the
    receive error counter, even in cases of bit or acknowledgment errors that
    occur during transmission.
    
    Fix the issue by incrementing the appropriate counter based on the
    type of error.
    
    Fixes: e0d1f4816f2a ("can: m_can: add Bosch M_CAN controller support")
    Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
    Link: https://patch.msgid.link/20241122221650.633981-7-dario.binacchi@amarulasolutions.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: mcp251xfd: mcp251xfd_get_tef_len(): work around erratum DS80000789E 6. [+ + +]
Author: Marc Kleine-Budde <mkl@pengutronix.de>
Date:   Sun Nov 24 18:42:56 2024 +0100

    can: mcp251xfd: mcp251xfd_get_tef_len(): work around erratum DS80000789E 6.
    
    commit 30447a1bc0e066e492552b3e5ffeb63c1605dfe2 upstream.
    
    Commit b8e0ddd36ce9 ("can: mcp251xfd: tef: prepare to workaround
    broken TEF FIFO tail index erratum") introduced
    mcp251xfd_get_tef_len() to get the number of unhandled transmit events
    from the Transmit Event FIFO (TEF).
    
    As the TEF has no head index, the driver uses the TX-FIFO's tail index
    instead, assuming that send frames are completed.
    
    When calculating the number of unhandled TEF events, that commit
    didn't take mcp2518fd erratum DS80000789E 6. into account. According
    to that erratum, the FIFOCI bits of a FIFOSTA register, here the
    TX-FIFO tail index might be corrupted.
    
    However here it seems the bit indicating that the TX-FIFO is
    empty (MCP251XFD_REG_FIFOSTA_TFERFFIF) is not correct while the
    TX-FIFO tail index is.
    
    Assume that the TX-FIFO is indeed empty if:
    - Chip's head and tail index are equal (len == 0).
    - The TX-FIFO is less than half full.
      (The TX-FIFO empty case has already been checked at the
       beginning of this function.)
    - No free buffers in the TX ring.
    
    If the TX-FIFO is assumed to be empty, assume that the TEF is full and
    return the number of elements in the TX-FIFO (which equals the number
    of TEF elements).
    
    If these assumptions are false, the driver might read to many objects
    from the TEF. mcp251xfd_handle_tefif_one() checks the sequence numbers
    and will refuse to process old events.
    
    Reported-by: Renjaya Raga Zenta <renjaya.zenta@formulatrix.com>
    Closes: https://patch.msgid.link/CAJ7t6HgaeQ3a_OtfszezU=zB-FqiZXqrnATJ3UujNoQJJf7GgA@mail.gmail.com
    Fixes: b8e0ddd36ce9 ("can: mcp251xfd: tef: prepare to workaround broken TEF FIFO tail index erratum")
    Tested-by: Renjaya Raga Zenta <renjaya.zenta@formulatrix.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20241126-mcp251xfd-fix-length-calculation-v2-1-c2ed516ed6ba@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: sja1000: sja1000_err(): fix {rx,tx}_errors statistics [+ + +]
Author: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Date:   Fri Nov 22 23:15:50 2024 +0100

    can: sja1000: sja1000_err(): fix {rx,tx}_errors statistics
    
    [ Upstream commit 2c4ef3af4b028a0eaaf378df511d3b425b1df61f ]
    
    The sja1000_err() function only incremented the receive error counter
    and never the transmit error counter, even if the ECC_DIR flag reported
    that an error had occurred during transmission.
    
    Increment the receive/transmit error counter based on the value of the
    ECC_DIR flag.
    
    Fixes: 429da1cc841b ("can: Driver for the SJA1000 CAN controller")
    Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
    Link: https://patch.msgid.link/20241122221650.633981-10-dario.binacchi@amarulasolutions.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: sun4i_can: sun4i_can_err(): call can_change_state() even if cf is NULL [+ + +]
Author: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Date:   Fri Nov 22 23:15:43 2024 +0100

    can: sun4i_can: sun4i_can_err(): call can_change_state() even if cf is NULL
    
    [ Upstream commit ee6bf3677ae03569d833795064e17f605c2163c7 ]
    
    Call the function can_change_state() if the allocation of the skb
    fails, as it handles the cf parameter when it is null.
    
    Additionally, this ensures that the statistics related to state error
    counters (i. e. warning, passive, and bus-off) are updated.
    
    Fixes: 0738eff14d81 ("can: Allwinner A10/A20 CAN Controller support - Kernel module")
    Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
    Link: https://patch.msgid.link/20241122221650.633981-3-dario.binacchi@amarulasolutions.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: sun4i_can: sun4i_can_err(): fix {rx,tx}_errors statistics [+ + +]
Author: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Date:   Fri Nov 22 23:15:51 2024 +0100

    can: sun4i_can: sun4i_can_err(): fix {rx,tx}_errors statistics
    
    [ Upstream commit 595a81988a6fe06eb5849e972c8b9cb21c4e0d54 ]
    
    The sun4i_can_err() function only incremented the receive error counter
    and never the transmit error counter, even if the STA_ERR_DIR flag
    reported that an error had occurred during transmission.
    
    Increment the receive/transmit error counter based on the value of the
    STA_ERR_DIR flag.
    
    Fixes: 0738eff14d81 ("can: Allwinner A10/A20 CAN Controller support - Kernel module")
    Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
    Link: https://patch.msgid.link/20241122221650.633981-11-dario.binacchi@amarulasolutions.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clk: en7523: Initialize num before accessing hws in en7523_register_clocks() [+ + +]
Author: Haoyu Li <lihaoyu499@gmail.com>
Date:   Tue Dec 3 22:29:15 2024 +0800

    clk: en7523: Initialize num before accessing hws in en7523_register_clocks()
    
    [ Upstream commit 52fd1709e41d3a85b48bcfe2404a024ebaf30c3b ]
    
    With the new __counted_by annotation in clk_hw_onecell_data, the "num"
    struct member must be set before accessing the "hws" array. Failing to
    do so will trigger a runtime warning when enabling CONFIG_UBSAN_BOUNDS
    and CONFIG_FORTIFY_SOURCE.
    
    Fixes: f316cdff8d67 ("clk: Annotate struct clk_hw_onecell_data with __counted_by")
    Signed-off-by: Haoyu Li <lihaoyu499@gmail.com>
    Link: https://lore.kernel.org/r/20241203142915.345523-1-lihaoyu499@gmail.com
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: qcom: rcg2: add clk_rcg2_shared_floor_ops [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Sun Oct 27 03:24:45 2024 +0200

    clk: qcom: rcg2: add clk_rcg2_shared_floor_ops
    
    [ Upstream commit aec8c0e28ce4a1f89fd82fcc06a5cc73147e9817 ]
    
    Generally SDCC clocks use clk_rcg2_floor_ops, however on SAR2130P
    platform it's recommended to use rcg2_shared_ops for all Root Clock
    Generators to park them instead of disabling. Implement a mix of those,
    clk_rcg2_shared_floor_ops.
    
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://lore.kernel.org/r/20241027-sar2130p-clocks-v5-6-ecad2a1432ba@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: qcom: rpmh: add support for SAR2130P [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Sun Oct 27 03:24:46 2024 +0200

    clk: qcom: rpmh: add support for SAR2130P
    
    [ Upstream commit 2cc88de6261f01ebd4e2a3b4e29681fe87d0c089 ]
    
    Define clocks as supported by the RPMh on the SAR2130P platform. The
    msm-5.10 kernel declares just the CXO clock, the RF_CLK1 clock was added
    following recommendation from Taniya Das.
    
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Taniya Das <quic_tdas@quicinc.com>
    Link: https://lore.kernel.org/r/20241027-sar2130p-clocks-v5-7-ecad2a1432ba@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: qcom: tcsrcc-sm8550: add SAR2130P support [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Sun Oct 27 03:24:48 2024 +0200

    clk: qcom: tcsrcc-sm8550: add SAR2130P support
    
    [ Upstream commit d2e0a043530b9d6f37a8de8f05e0725667aba0a6 ]
    
    The SAR2130P platform has the same TCSR Clock Controller as the SM8550,
    except for the lack of the UFS clocks. Extend the SM8550 TCSRCC driver
    to support SAR2130P.
    
    Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://lore.kernel.org/r/20241027-sar2130p-clocks-v5-9-ecad2a1432ba@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dccp: Fix memory leak in dccp_feat_change_recv [+ + +]
Author: Ivan Solodovnikov <solodovnikov.ia@phystech.edu>
Date:   Tue Nov 26 17:39:02 2024 +0300

    dccp: Fix memory leak in dccp_feat_change_recv
    
    [ Upstream commit 22be4727a8f898442066bcac34f8a1ad0bc72e14 ]
    
    If dccp_feat_push_confirm() fails after new value for SP feature was accepted
    without reconciliation ('entry == NULL' branch), memory allocated for that value
    with dccp_feat_clone_sp_val() is never freed.
    
    Here is the kmemleak stack for this:
    
    unreferenced object 0xffff88801d4ab488 (size 8):
      comm "syz-executor310", pid 1127, jiffies 4295085598 (age 41.666s)
      hex dump (first 8 bytes):
        01 b4 4a 1d 80 88 ff ff                          ..J.....
      backtrace:
        [<00000000db7cabfe>] kmemdup+0x23/0x50 mm/util.c:128
        [<0000000019b38405>] kmemdup include/linux/string.h:465 [inline]
        [<0000000019b38405>] dccp_feat_clone_sp_val net/dccp/feat.c:371 [inline]
        [<0000000019b38405>] dccp_feat_clone_sp_val net/dccp/feat.c:367 [inline]
        [<0000000019b38405>] dccp_feat_change_recv net/dccp/feat.c:1145 [inline]
        [<0000000019b38405>] dccp_feat_parse_options+0x1196/0x2180 net/dccp/feat.c:1416
        [<00000000b1f6d94a>] dccp_parse_options+0xa2a/0x1260 net/dccp/options.c:125
        [<0000000030d7b621>] dccp_rcv_state_process+0x197/0x13d0 net/dccp/input.c:650
        [<000000001f74c72e>] dccp_v4_do_rcv+0xf9/0x1a0 net/dccp/ipv4.c:688
        [<00000000a6c24128>] sk_backlog_rcv include/net/sock.h:1041 [inline]
        [<00000000a6c24128>] __release_sock+0x139/0x3b0 net/core/sock.c:2570
        [<00000000cf1f3a53>] release_sock+0x54/0x1b0 net/core/sock.c:3111
        [<000000008422fa23>] inet_wait_for_connect net/ipv4/af_inet.c:603 [inline]
        [<000000008422fa23>] __inet_stream_connect+0x5d0/0xf70 net/ipv4/af_inet.c:696
        [<0000000015b6f64d>] inet_stream_connect+0x53/0xa0 net/ipv4/af_inet.c:735
        [<0000000010122488>] __sys_connect_file+0x15c/0x1a0 net/socket.c:1865
        [<00000000b4b70023>] __sys_connect+0x165/0x1a0 net/socket.c:1882
        [<00000000f4cb3815>] __do_sys_connect net/socket.c:1892 [inline]
        [<00000000f4cb3815>] __se_sys_connect net/socket.c:1889 [inline]
        [<00000000f4cb3815>] __x64_sys_connect+0x6e/0xb0 net/socket.c:1889
        [<00000000e7b1e839>] do_syscall_64+0x33/0x40 arch/x86/entry/common.c:46
        [<0000000055e91434>] entry_SYSCALL_64_after_hwframe+0x67/0xd1
    
    Clean up the allocated memory in case of dccp_feat_push_confirm() failure
    and bail out with an error reset code.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: e77b8363b2ea ("dccp: Process incoming Change feature-negotiation options")
    Signed-off-by: Ivan Solodovnikov <solodovnikov.ia@phystech.edu>
    Link: https://patch.msgid.link/20241126143902.190853-1-solodovnikov.ia@phystech.edu
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dlm: fix possible lkb_resource null dereference [+ + +]
Author: Alexander Aring <aahringo@redhat.com>
Date:   Fri Oct 4 11:13:38 2024 -0400

    dlm: fix possible lkb_resource null dereference
    
    [ Upstream commit b98333c67daf887c724cd692e88e2db9418c0861 ]
    
    This patch fixes a possible null pointer dereference when this function is
    called from request_lock() as lkb->lkb_resource is not assigned yet,
    only after validate_lock_args() by calling attach_lkb(). Another issue
    is that a resource name could be a non printable bytearray and we cannot
    assume to be ASCII coded.
    
    The log functionality is probably never being hit when DLM is used in
    normal way and no debug logging is enabled. The null pointer dereference
    can only occur on a new created lkb that does not have the resource
    assigned yet, it probably never hits the null pointer dereference but we
    should be sure that other changes might not change this behaviour and we
    actually can hit the mentioned null pointer dereference.
    
    In this patch we just drop the printout of the resource name, the lkb id
    is enough to make a possible connection to a resource name if this
    exists.
    
    Signed-off-by: Alexander Aring <aahringo@redhat.com>
    Signed-off-by: David Teigland <teigland@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dma-buf: fix dma_fence_array_signaled v4 [+ + +]
Author: Christian König <christian.koenig@amd.com>
Date:   Fri Nov 8 09:29:48 2024 +0100

    dma-buf: fix dma_fence_array_signaled v4
    
    commit 78ac1c3558810486d90aa533b0039aa70487a3da upstream.
    
    The function silently assumed that signaling was already enabled for the
    dma_fence_array. This meant that without enabling signaling first we would
    never see forward progress.
    
    Fix that by falling back to testing each individual fence when signaling
    isn't enabled yet.
    
    v2: add the comment suggested by Boris why this is done this way
    v3: fix the underflow pointed out by Tvrtko
    v4: atomic_read_acquire() as suggested by Tvrtko
    
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
    Tested-by: Chia-I Wu <olvaffe@gmail.com>
    Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
    Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12094
    Cc: <stable@vger.kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241112121925.18464-1-christian.koenig@amd.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dma-debug: fix a possible deadlock on radix_lock [+ + +]
Author: Levi Yun <yeoreum.yun@arm.com>
Date:   Fri Oct 25 11:06:00 2024 +0100

    dma-debug: fix a possible deadlock on radix_lock
    
    [ Upstream commit 7543c3e3b9b88212fcd0aaf5cab5588797bdc7de ]
    
    radix_lock() shouldn't be held while holding dma_hash_entry[idx].lock
    otherwise, there's a possible deadlock scenario when
    dma debug API is called holding rq_lock():
    
    CPU0                   CPU1                       CPU2
    dma_free_attrs()
    check_unmap()          add_dma_entry()            __schedule() //out
                                                      (A) rq_lock()
    get_hash_bucket()
    (A) dma_entry_hash
                                                      check_sync()
                           (A) radix_lock()           (W) dma_entry_hash
    dma_entry_free()
    (W) radix_lock()
                           // CPU2's one
                           (W) rq_lock()
    
    CPU1 situation can happen when it extending radix tree and
    it tries to wake up kswapd via wake_all_kswapd().
    
    CPU2 situation can happen while perf_event_task_sched_out()
    (i.e. dma sync operation is called while deleting perf_event using
     etm and etr tmc which are Arm Coresight hwtracing driver backends).
    
    To remove this possible situation, call dma_entry_free() after
    put_hash_bucket() in check_unmap().
    
    Reported-by: Denis Nikitin <denik@chromium.org>
    Closes: https://lists.linaro.org/archives/list/coresight@lists.linaro.org/thread/2WMS7BBSF5OZYB63VT44U5YWLFP5HL6U/#RWM6MLQX5ANBTEQ2PRM7OXCBGCE6NPWU
    Signed-off-by: Levi Yun <yeoreum.yun@arm.com>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dma-fence: Fix reference leak on fence merge failure path [+ + +]
Author: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Date:   Fri Nov 15 10:21:49 2024 +0000

    dma-fence: Fix reference leak on fence merge failure path
    
    commit 949291c5314009b4f6e252391edbb40fdd5d5414 upstream.
    
    Release all fence references if the output dma-fence-array could not be
    allocated.
    
    Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
    Fixes: 245a4a7b531c ("dma-buf: generalize dma_fence unwrap & merging v3")
    Cc: Christian König <christian.koenig@amd.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Sumit Semwal <sumit.semwal@linaro.org>
    Cc: Gustavo Padovan <gustavo@padovan.org>
    Cc: Friedrich Vock <friedrich.vock@gmx.de>
    Cc: linux-media@vger.kernel.org
    Cc: dri-devel@lists.freedesktop.org
    Cc: linaro-mm-sig@lists.linaro.org
    Cc: <stable@vger.kernel.org> # v6.0+
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241115102153.1980-2-tursulin@igalia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dma-fence: Use kernel's sort for merging fences [+ + +]
Author: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Date:   Fri Nov 15 10:21:50 2024 +0000

    dma-fence: Use kernel's sort for merging fences
    
    commit fe52c649438b8489c9456681d93a9b3de3d38263 upstream.
    
    One alternative to the fix Christian proposed in
    https://lore.kernel.org/dri-devel/20241024124159.4519-3-christian.koenig@amd.com/
    is to replace the rather complex open coded sorting loops with the kernel
    standard sort followed by a context squashing pass.
    
    Proposed advantage of this would be readability but one concern Christian
    raised was that there could be many fences, that they are typically mostly
    sorted, and so the kernel's heap sort would be much worse by the proposed
    algorithm.
    
    I had a look running some games and vkcube to see what are the typical
    number of input fences. Tested scenarios:
    
    1) Hogwarts Legacy under Gamescope
    
    450 calls per second to __dma_fence_unwrap_merge.
    
    Percentages per number of fences buckets, before and after checking for
    signalled status, sorting and flattening:
    
       N       Before      After
       0       0.91%
       1      69.40%
      2-3     28.72%       9.4%  (90.6% resolved to one fence)
      4-5      0.93%
      6-9      0.03%
      10+
    
    2) Cyberpunk 2077 under Gamescope
    
    1050 calls per second, amounting to 0.01% CPU time according to perf top.
    
       N       Before      After
       0       1.13%
       1      52.30%
      2-3     40.34%       55.57%
      4-5      1.46%        0.50%
      6-9      2.44%
      10+      2.34%
    
    3) vkcube under Plasma
    
    90 calls per second.
    
       N       Before      After
       0
       1
      2-3      100%         0%   (Ie. all resolved to a single fence)
      4-5
      6-9
      10+
    
    In the case of vkcube all invocations in the 2-3 bucket were actually
    just two input fences.
    
    From these numbers it looks like the heap sort should not be a
    disadvantage, given how the dominant case is <= 2 input fences which heap
    sort solves with just one compare and swap. (And for the case of one input
    fence we have a fast path in the previous patch.)
    
    A complementary possibility is to implement a different sorting algorithm
    under the same API as the kernel's sort() and so keep the simplicity,
    potentially moving the new sort under lib/ if it would be found more
    widely useful.
    
    v2:
     * Hold on to fence references and reduce commentary. (Christian)
     * Record and use latest signaled timestamp in the 2nd loop too.
     * Consolidate zero or one fences fast paths.
    
    v3:
     * Reverse the seqno sort order for a simpler squashing pass. (Christian)
    
    Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
    Fixes: 245a4a7b531c ("dma-buf: generalize dma_fence unwrap & merging v3")
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3617
    Cc: Christian König <christian.koenig@amd.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Sumit Semwal <sumit.semwal@linaro.org>
    Cc: Gustavo Padovan <gustavo@padovan.org>
    Cc: Friedrich Vock <friedrich.vock@gmx.de>
    Cc: linux-media@vger.kernel.org
    Cc: dri-devel@lists.freedesktop.org
    Cc: linaro-mm-sig@lists.linaro.org
    Cc: <stable@vger.kernel.org> # v6.0+
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241115102153.1980-3-tursulin@igalia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
driver core: Add FWLINK_FLAG_IGNORE to completely ignore a fwnode link [+ + +]
Author: Saravana Kannan <saravanak@google.com>
Date:   Mon Mar 4 21:04:55 2024 -0800

    driver core: Add FWLINK_FLAG_IGNORE to completely ignore a fwnode link
    
    [ Upstream commit b7e1241d8f77ed64404a5e4450f43a319310fc91 ]
    
    A fwnode link between specific supplier-consumer fwnodes can be added
    multiple times for multiple reasons. If that dependency doesn't exist,
    deleting the fwnode link once doesn't guarantee that it won't get created
    again.
    
    So, add FWLINK_FLAG_IGNORE flag to mark a fwnode link as one that needs to
    be completely ignored. Since a fwnode link's flags is an OR of all the
    flags passed to all the fwnode_link_add() calls to create that specific
    fwnode link, the FWLINK_FLAG_IGNORE flag is preserved and can be used to
    mark a fwnode link as on that need to be completely ignored until it is
    deleted.
    
    Signed-off-by: Saravana Kannan <saravanak@google.com>
    Acked-by: "Rafael J. Wysocki" <rafael@kernel.org>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Link: https://lore.kernel.org/r/20240305050458.1400667-3-saravanak@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: bac3b10b78e5 ("driver core: fw_devlink: Stop trying to optimize cycle detection logic")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

driver core: fw_devlink: Improve logs for cycle detection [+ + +]
Author: Saravana Kannan <saravanak@google.com>
Date:   Fri Feb 2 01:56:35 2024 -0800

    driver core: fw_devlink: Improve logs for cycle detection
    
    [ Upstream commit 6e7ad1aebb4fc9fed0217dd50ef6e58a53f17d81 ]
    
    The links in a cycle are not all logged in a consistent manner or not
    logged at all. Make them consistent by adding a "cycle:" string and log all
    the link in the cycles (even the child ==> parent dependency) so that it's
    easier to debug cycle detection code. Also, mark the start and end of a
    cycle so it's easy to tell when multiple cycles are logged back to back.
    
    Signed-off-by: Saravana Kannan <saravanak@google.com>
    Tested-by: Xu Yang <xu.yang_2@nxp.com>
    Link: https://lore.kernel.org/r/20240202095636.868578-4-saravanak@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: bac3b10b78e5 ("driver core: fw_devlink: Stop trying to optimize cycle detection logic")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

driver core: fw_devlink: Stop trying to optimize cycle detection logic [+ + +]
Author: Saravana Kannan <saravanak@google.com>
Date:   Wed Oct 30 10:10:07 2024 -0700

    driver core: fw_devlink: Stop trying to optimize cycle detection logic
    
    [ Upstream commit bac3b10b78e54b7da3cede397258f75a2180609b ]
    
    In attempting to optimize fw_devlink runtime, I introduced numerous cycle
    detection bugs by foregoing cycle detection logic under specific
    conditions. Each fix has further narrowed the conditions for optimization.
    
    It's time to give up on these optimization attempts and just run the cycle
    detection logic every time fw_devlink tries to create a device link.
    
    The specific bug report that triggered this fix involved a supplier fwnode
    that never gets a device created for it. Instead, the supplier fwnode is
    represented by the device that corresponds to an ancestor fwnode.
    
    In this case, fw_devlink didn't do any cycle detection because the cycle
    detection logic is only run when a device link is created between the
    devices that correspond to the actual consumer and supplier fwnodes.
    
    With this change, fw_devlink will run cycle detection logic even when
    creating SYNC_STATE_ONLY proxy device links from a device that is an
    ancestor of a consumer fwnode.
    
    Reported-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Closes: https://lore.kernel.org/all/1a1ab663-d068-40fb-8c94-f0715403d276@ideasonboard.com/
    Fixes: 6442d79d880c ("driver core: fw_devlink: Improve detection of overlapping cycles")
    Cc: stable <stable@kernel.org>
    Tested-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Signed-off-by: Saravana Kannan <saravanak@google.com>
    Link: https://lore.kernel.org/r/20241030171009.1853340-1-saravanak@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amdgpu/hdp5.2: do a posting read when flushing HDP [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Fri Nov 22 11:24:13 2024 -0500

    drm/amdgpu/hdp5.2: do a posting read when flushing HDP
    
    commit f756dbac1ce1d5f9a2b35e3b55fa429cf6336437 upstream.
    
    Need to read back to make sure the write goes through.
    
    Cc: David Belanger <david.belanger@amd.com>
    Reviewed-by: Frank Min <frank.min@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/vcn: reset fw_shared when VCPU buffers corrupted on vcn v4.0.3 [+ + +]
Author: Xiang Liu <xiang.liu@amd.com>
Date:   Fri Nov 15 16:59:30 2024 +0800

    drm/amdgpu/vcn: reset fw_shared when VCPU buffers corrupted on vcn v4.0.3
    
    [ Upstream commit 928cd772e18ffbd7723cb2361db4a8ccf2222235 ]
    
    It is not necessarily corrupted. When there is RAS fatal error, device
    memory access is blocked. Hence vcpu bo cannot be saved to system memory
    as in a regular suspend sequence before going for reset. In other full
    device reset cases, that gets saved and restored during resume.
    
    v2: Remove redundant code like vcn_v4_0 did
    v2: Refine commit message
    v3: Drop the volatile
    v3: Refine commit message
    
    Signed-off-by: Xiang Liu <xiang.liu@amd.com>
    Acked-by: Christian König <christian.koenig@amd.com>
    Reviewed-by: Stanley.Yang <Stanley.Yang@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amdgpu: clear RB_OVERFLOW bit when enabling interrupts for vega20_ih [+ + +]
Author: Victor Lu <victorchengchi.lu@amd.com>
Date:   Thu Jul 18 18:01:23 2024 -0400

    drm/amdgpu: clear RB_OVERFLOW bit when enabling interrupts for vega20_ih
    
    [ Upstream commit 8b22f048331dfd45fdfbf0efdfb1d43deff7518d ]
    
    Port this change to vega20_ih.c:
    commit afbf7955ff01 ("drm/amdgpu: clear RB_OVERFLOW bit when enabling interrupts")
    
    Original commit message:
    "Why:
    Setting IH_RB_WPTR register to 0 will not clear the RB_OVERFLOW bit
    if RB_ENABLE is not set.
    
    How to fix:
    Set WPTR_OVERFLOW_CLEAR bit after RB_ENABLE bit is set.
    The RB_ENABLE bit is required to be set, together with
    WPTR_OVERFLOW_ENABLE bit so that setting WPTR_OVERFLOW_CLEAR bit
    would clear the RB_OVERFLOW."
    
    Signed-off-by: Victor Lu <victorchengchi.lu@amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amdgpu: Dereference the ATCS ACPI buffer [+ + +]
Author: Prike Liang <Prike.Liang@amd.com>
Date:   Thu Oct 17 14:54:31 2024 +0800

    drm/amdgpu: Dereference the ATCS ACPI buffer
    
    [ Upstream commit 32e7ee293ff476c67b51be006e986021967bc525 ]
    
    Need to dereference the atcs acpi buffer after
    the method is executed, otherwise it will result in
    a memory leak.
    
    Signed-off-by: Prike Liang <Prike.Liang@amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amdgpu: refine error handling in amdgpu_ttm_tt_pin_userptr [+ + +]
Author: Lang Yu <lang.yu@amd.com>
Date:   Fri Oct 18 17:21:09 2024 +0800

    drm/amdgpu: refine error handling in amdgpu_ttm_tt_pin_userptr
    
    [ Upstream commit 46186667f98fb7158c98f4ff5da62c427761ffcd ]
    
    Free sg table when dma_map_sgtable() failed to avoid memory leak.
    
    Signed-off-by: Lang Yu <lang.yu@amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amdgpu: rework resume handling for display (v2) [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Mon Nov 25 13:59:09 2024 -0500

    drm/amdgpu: rework resume handling for display (v2)
    
    commit 73dae652dcac776296890da215ee7dec357a1032 upstream.
    
    Split resume into a 3rd step to handle displays when DCC is
    enabled on DCN 4.0.1.  Move display after the buffer funcs
    have been re-enabled so that the GPU will do the move and
    properly set the DCC metadata for DCN.
    
    v2: fix fence irq resume ordering
    
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org # 6.11.x
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: set the right AMDGPU sg segment limitation [+ + +]
Author: Prike Liang <Prike.Liang@amd.com>
Date:   Thu Oct 31 10:59:17 2024 +0800

    drm/amdgpu: set the right AMDGPU sg segment limitation
    
    [ Upstream commit e2e97435783979124ba92d6870415c57ecfef6a5 ]
    
    The driver needs to set the correct max_segment_size;
    otherwise debug_dma_map_sg() will complain about the
    over-mapping of the AMDGPU sg length as following:
    
    WARNING: CPU: 6 PID: 1964 at kernel/dma/debug.c:1178 debug_dma_map_sg+0x2dc/0x370
    [  364.049444] Modules linked in: veth amdgpu(OE) amdxcp drm_exec gpu_sched drm_buddy drm_ttm_helper ttm(OE) drm_suballoc_helper drm_display_helper drm_kms_helper i2c_algo_bit rpcsec_gss_krb5 auth_rpcgss nfsv4 nfs lockd grace netfs xt_conntrack xt_MASQUERADE nf_conntrack_netlink xfrm_user xfrm_algo iptable_nat xt_addrtype iptable_filter br_netfilter nvme_fabrics overlay nfnetlink_cttimeout nfnetlink openvswitch nsh nf_conncount nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 libcrc32c bridge stp llc amd_atl intel_rapl_msr intel_rapl_common sunrpc sch_fq_codel snd_hda_codec_realtek snd_hda_codec_generic snd_hda_scodec_component snd_hda_codec_hdmi snd_hda_intel snd_intel_dspcfg edac_mce_amd binfmt_misc snd_hda_codec snd_pci_acp6x snd_hda_core snd_acp_config snd_hwdep snd_soc_acpi kvm_amd snd_pcm kvm snd_seq_midi snd_seq_midi_event crct10dif_pclmul ghash_clmulni_intel sha512_ssse3 snd_rawmidi sha256_ssse3 sha1_ssse3 aesni_intel snd_seq nls_iso8859_1 crypto_simd snd_seq_device cryptd snd_timer rapl input_leds snd
    [  364.049532]  ipmi_devintf wmi_bmof ccp serio_raw k10temp sp5100_tco soundcore ipmi_msghandler cm32181 industrialio mac_hid msr parport_pc ppdev lp parport drm efi_pstore ip_tables x_tables pci_stub crc32_pclmul nvme ahci libahci i2c_piix4 r8169 nvme_core i2c_designware_pci realtek i2c_ccgx_ucsi video wmi hid_generic cdc_ether usbnet usbhid hid r8152 mii
    [  364.049576] CPU: 6 PID: 1964 Comm: rocminfo Tainted: G           OE      6.10.0-custom #492
    [  364.049579] Hardware name: AMD Majolica-RN/Majolica-RN, BIOS RMJ1009A 06/13/2021
    [  364.049582] RIP: 0010:debug_dma_map_sg+0x2dc/0x370
    [  364.049585] Code: 89 4d b8 e8 36 b1 86 00 8b 4d b8 48 8b 55 b0 44 8b 45 a8 4c 8b 4d a0 48 89 c6 48 c7 c7 00 4b 74 bc 4c 89 4d b8 e8 b4 73 f3 ff <0f> 0b 4c 8b 4d b8 8b 15 c8 2c b8 01 85 d2 0f 85 ee fd ff ff 8b 05
    [  364.049588] RSP: 0018:ffff9ca600b57ac0 EFLAGS: 00010286
    [  364.049590] RAX: 0000000000000000 RBX: ffff88b7c132b0c8 RCX: 0000000000000027
    [  364.049592] RDX: ffff88bb0f521688 RSI: 0000000000000001 RDI: ffff88bb0f521680
    [  364.049594] RBP: ffff9ca600b57b20 R08: 000000000000006f R09: ffff9ca600b57930
    [  364.049596] R10: ffff9ca600b57928 R11: ffffffffbcb46328 R12: 0000000000000000
    [  364.049597] R13: 0000000000000001 R14: ffff88b7c19c0700 R15: ffff88b7c9059800
    [  364.049599] FS:  00007fb2d3516e80(0000) GS:ffff88bb0f500000(0000) knlGS:0000000000000000
    [  364.049601] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  364.049603] CR2: 000055610bd03598 CR3: 00000001049f6000 CR4: 0000000000350ef0
    [  364.049605] Call Trace:
    [  364.049607]  <TASK>
    [  364.049609]  ? show_regs+0x6d/0x80
    [  364.049614]  ? __warn+0x8c/0x140
    [  364.049618]  ? debug_dma_map_sg+0x2dc/0x370
    [  364.049621]  ? report_bug+0x193/0x1a0
    [  364.049627]  ? handle_bug+0x46/0x80
    [  364.049631]  ? exc_invalid_op+0x1d/0x80
    [  364.049635]  ? asm_exc_invalid_op+0x1f/0x30
    [  364.049642]  ? debug_dma_map_sg+0x2dc/0x370
    [  364.049647]  __dma_map_sg_attrs+0x90/0xe0
    [  364.049651]  dma_map_sgtable+0x25/0x40
    [  364.049654]  amdgpu_bo_move+0x59a/0x850 [amdgpu]
    [  364.049935]  ? srso_return_thunk+0x5/0x5f
    [  364.049939]  ? amdgpu_ttm_tt_populate+0x5d/0xc0 [amdgpu]
    [  364.050095]  ttm_bo_handle_move_mem+0xc3/0x180 [ttm]
    [  364.050103]  ttm_bo_validate+0xc1/0x160 [ttm]
    [  364.050108]  ? amdgpu_ttm_tt_get_user_pages+0xe5/0x1b0 [amdgpu]
    [  364.050263]  amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu+0xa12/0xc90 [amdgpu]
    [  364.050473]  kfd_ioctl_alloc_memory_of_gpu+0x16b/0x3b0 [amdgpu]
    [  364.050680]  kfd_ioctl+0x3c2/0x530 [amdgpu]
    [  364.050866]  ? __pfx_kfd_ioctl_alloc_memory_of_gpu+0x10/0x10 [amdgpu]
    [  364.051054]  ? srso_return_thunk+0x5/0x5f
    [  364.051057]  ? tomoyo_file_ioctl+0x20/0x30
    [  364.051063]  __x64_sys_ioctl+0x9c/0xd0
    [  364.051068]  x64_sys_call+0x1219/0x20d0
    [  364.051073]  do_syscall_64+0x51/0x120
    [  364.051077]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    [  364.051081] RIP: 0033:0x7fb2d2f1a94f
    
    Signed-off-by: Prike Liang <Prike.Liang@amd.com>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amdgpu: skip amdgpu_device_cache_pci_state under sriov [+ + +]
Author: Victor Zhao <Victor.Zhao@amd.com>
Date:   Thu Oct 24 13:40:39 2024 +0800

    drm/amdgpu: skip amdgpu_device_cache_pci_state under sriov
    
    [ Upstream commit afe260df55ac280cd56306248cb6d8a6b0db095c ]
    
    Under sriov, host driver will save and restore vf pci cfg space during
    reset. And during device init, under sriov, pci_restore_state happens after
    fullaccess released, and it can have race condition with mmio protection
    enable from host side leading to missing interrupts.
    
    So skip amdgpu_device_cache_pci_state for sriov.
    
    Signed-off-by: Victor Zhao <Victor.Zhao@amd.com>
    Acked-by: Lijo Lazar <lijo.lazar@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/bridge: it6505: Enable module autoloading [+ + +]
Author: Liao Chen <liaochen4@huawei.com>
Date:   Mon Sep 2 11:33:18 2024 +0000

    drm/bridge: it6505: Enable module autoloading
    
    [ Upstream commit 1e2ab24cd708b1c864ff983ee1504c0a409d2f8e ]
    
    Add MODULE_DEVICE_TABLE(), so modules could be properly autoloaded based
    on the alias from of_device_id table.
    
    Signed-off-by: Liao Chen <liaochen4@huawei.com>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240902113320.903147-2-liaochen4@huawei.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/bridge: it6505: Fix inverted reset polarity [+ + +]
Author: Chen-Yu Tsai <wenst@chromium.org>
Date:   Tue Oct 29 17:54:10 2024 +0800

    drm/bridge: it6505: Fix inverted reset polarity
    
    [ Upstream commit c5f3f21728b069412e8072b8b1d0a3d9d3ab0265 ]
    
    The IT6505 bridge chip has a active low reset line. Since it is a
    "reset" and not an "enable" line, the GPIO should be asserted to
    put it in reset and deasserted to bring it out of reset during
    the power on sequence.
    
    The polarity was inverted when the driver was first introduced, likely
    because the device family that was targeted had an inverting level
    shifter on the reset line.
    
    The MT8186 Corsola devices already have the IT6505 in their device tree,
    but the whole display pipeline is actually disabled and won't be enabled
    until some remaining issues are sorted out. The other known user is
    the MT8183 Kukui / Jacuzzi family; their device trees currently do not
    have the IT6505 included.
    
    Fix the polarity in the driver while there are no actual users.
    
    Fixes: b5c84a9edcd4 ("drm/bridge: add it6505 driver")
    Cc: stable@vger.kernel.org
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241029095411.657616-1-wenst@chromium.org
    Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/bridge: it6505: update usleep_range for RC circuit charge time [+ + +]
Author: Kuro Chung <kuro.chung@ite.com.tw>
Date:   Tue Jun 4 10:44:05 2024 +0800

    drm/bridge: it6505: update usleep_range for RC circuit charge time
    
    [ Upstream commit 8814444e62b8a8b573fba2cbbb327d5817b74eb0 ]
    
    The spec of timing between IVDD/OVDD and SYSRTEN is 10ms, but SYSRSTN RC
    circuit need at least 25ms for rising time, update for match spec
    
    Signed-off-by: Kuro Chung <kuro.chung@ite.com.tw>
    Signed-off-by: Hermes Wu <hermes.wu@ite.com.tw>
    Reviewed-by: Robert Foss <rfoss@kernel.org>
    Signed-off-by: Robert Foss <rfoss@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240604024405.1122488-1-kuro.chung@ite.com.tw
    Stable-dep-of: c5f3f21728b0 ("drm/bridge: it6505: Fix inverted reset polarity")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/display: Fix building with GCC 15 [+ + +]
Author: Brahmajit Das <brahmajit.xyz@gmail.com>
Date:   Wed Oct 2 14:53:11 2024 +0530

    drm/display: Fix building with GCC 15
    
    [ Upstream commit a500f3751d3c861be7e4463c933cf467240cca5d ]
    
    GCC 15 enables -Werror=unterminated-string-initialization by default.
    This results in the following build error
    
    drivers/gpu/drm/display/drm_dp_dual_mode_helper.c: In function ‘is_hdmi_adaptor’:
    drivers/gpu/drm/display/drm_dp_dual_mode_helper.c:164:17: error: initializer-string for array of
     ‘char’ is too long [-Werror=unterminated-string-initialization]
      164 |                 "DP-HDMI ADAPTOR\x04";
          |                 ^~~~~~~~~~~~~~~~~~~~~
    
    After discussion with Ville, the fix was to increase the size of
    dp_dual_mode_hdmi_id array by one, so that it can accommodate the NULL
    line character. This should let us build the kernel with GCC 15.
    
    Signed-off-by: Brahmajit Das <brahmajit.xyz@gmail.com>
    Reviewed-by: Jani Nikula <jani.nikula@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241002092311.942822-1-brahmajit.xyz@gmail.com
    Signed-off-by: Jani Nikula <jani.nikula@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/dp_mst: Fix MST sideband message body length check [+ + +]
Author: Imre Deak <imre.deak@intel.com>
Date:   Mon Nov 25 22:53:14 2024 +0200

    drm/dp_mst: Fix MST sideband message body length check
    
    commit bd2fccac61b40eaf08d9546acc9fef958bfe4763 upstream.
    
    Fix the MST sideband message body length check, which must be at least 1
    byte accounting for the message body CRC (aka message data CRC) at the
    end of the message.
    
    This fixes a case where an MST branch device returns a header with a
    correct header CRC (indicating a correctly received body length), with
    the body length being incorrectly set to 0. This will later lead to a
    memory corruption in drm_dp_sideband_append_payload() and the following
    errors in dmesg:
    
       UBSAN: array-index-out-of-bounds in drivers/gpu/drm/display/drm_dp_mst_topology.c:786:25
       index -1 is out of range for type 'u8 [48]'
       Call Trace:
        drm_dp_sideband_append_payload+0x33d/0x350 [drm_display_helper]
        drm_dp_get_one_sb_msg+0x3ce/0x5f0 [drm_display_helper]
        drm_dp_mst_hpd_irq_handle_event+0xc8/0x1580 [drm_display_helper]
    
       memcpy: detected field-spanning write (size 18446744073709551615) of single field "&msg->msg[msg->curlen]" at drivers/gpu/drm/display/drm_dp_mst_topology.c:791 (size 256)
       Call Trace:
        drm_dp_sideband_append_payload+0x324/0x350 [drm_display_helper]
        drm_dp_get_one_sb_msg+0x3ce/0x5f0 [drm_display_helper]
        drm_dp_mst_hpd_irq_handle_event+0xc8/0x1580 [drm_display_helper]
    
    Cc: <stable@vger.kernel.org>
    Cc: Lyude Paul <lyude@redhat.com>
    Reviewed-by: Lyude Paul <lyude@redhat.com>
    Signed-off-by: Imre Deak <imre.deak@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241125205314.1725887-1-imre.deak@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/dp_mst: Fix resetting msg rx state after topology removal [+ + +]
Author: Imre Deak <imre.deak@intel.com>
Date:   Tue Dec 3 18:02:17 2024 +0200

    drm/dp_mst: Fix resetting msg rx state after topology removal
    
    commit a6fa67d26de385c3c7a23c1e109a0e23bfda4ec7 upstream.
    
    If the MST topology is removed during the reception of an MST down reply
    or MST up request sideband message, the
    drm_dp_mst_topology_mgr::up_req_recv/down_rep_recv states could be reset
    from one thread via drm_dp_mst_topology_mgr_set_mst(false), racing with
    the reading/parsing of the message from another thread via
    drm_dp_mst_handle_down_rep() or drm_dp_mst_handle_up_req(). The race is
    possible since the reader/parser doesn't hold any lock while accessing
    the reception state. This in turn can lead to a memory corruption in the
    reader/parser as described by commit bd2fccac61b4 ("drm/dp_mst: Fix MST
    sideband message body length check").
    
    Fix the above by resetting the message reception state if needed before
    reading/parsing a message. Another solution would be to hold the
    drm_dp_mst_topology_mgr::lock for the whole duration of the message
    reception/parsing in drm_dp_mst_handle_down_rep() and
    drm_dp_mst_handle_up_req(), however this would require a bigger change.
    Since the fix is also needed for stable, opting for the simpler solution
    in this patch.
    
    Cc: Lyude Paul <lyude@redhat.com>
    Cc: <stable@vger.kernel.org>
    Fixes: 1d082618bbf3 ("drm/display/dp_mst: Fix down/up message handling after sink disconnect")
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13056
    Reviewed-by: Lyude Paul <lyude@redhat.com>
    Signed-off-by: Imre Deak <imre.deak@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241203160223.2926014-2-imre.deak@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/dp_mst: Verify request type in the corresponding down message reply [+ + +]
Author: Imre Deak <imre.deak@intel.com>
Date:   Tue Dec 3 18:02:18 2024 +0200

    drm/dp_mst: Verify request type in the corresponding down message reply
    
    commit 4d49e77a973d3b5d1881663c3f122906a0702940 upstream.
    
    After receiving the response for an MST down request message, the
    response should be accepted/parsed only if the response type matches
    that of the request. Ensure this by checking if the request type code
    stored both in the request and the reply match, dropping the reply in
    case of a mismatch.
    
    This fixes the topology detection for an MST hub, as described in the
    Closes link below, where the hub sends an incorrect reply message after
    a CLEAR_PAYLOAD_TABLE -> LINK_ADDRESS down request message sequence.
    
    Cc: Lyude Paul <lyude@redhat.com>
    Cc: <stable@vger.kernel.org>
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12804
    Reviewed-by: Lyude Paul <lyude@redhat.com>
    Signed-off-by: Imre Deak <imre.deak@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241203160223.2926014-3-imre.deak@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/mcde: Enable module autoloading [+ + +]
Author: Liao Chen <liaochen4@huawei.com>
Date:   Mon Sep 2 11:33:20 2024 +0000

    drm/mcde: Enable module autoloading
    
    [ Upstream commit 8a16b5cdae26207ff4c22834559384ad3d7bc970 ]
    
    Add MODULE_DEVICE_TABLE(), so modules could be properly autoloaded based
    on the alias from of_device_id table.
    
    Signed-off-by: Liao Chen <liaochen4@huawei.com>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240902113320.903147-4-liaochen4@huawei.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/panel: simple: Add Microchip AC69T88A LVDS Display panel [+ + +]
Author: Manikandan Muralidharan <manikandan.m@microchip.com>
Date:   Thu Sep 19 14:45:48 2024 +0530

    drm/panel: simple: Add Microchip AC69T88A LVDS Display panel
    
    [ Upstream commit 40da1463cd6879f542238b36c1148f517927c595 ]
    
    Add support for Microchip AC69T88A 5 inch TFT LCD 800x480
    Display module with LVDS interface.The panel uses the Sitronix
    ST7262 800x480 Display driver
    
    Signed-off-by: Manikandan Muralidharan <manikandan.m@microchip.com>
    Signed-off-by: Dharma Balasubiramani <dharma.b@microchip.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240919091548.430285-2-manikandan.m@microchip.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/radeon/r600_cs: Fix possible int overflow in r600_packet3_check() [+ + +]
Author: Igor Artemiev <Igor.A.Artemiev@mcst.ru>
Date:   Fri Sep 27 18:07:19 2024 +0300

    drm/radeon/r600_cs: Fix possible int overflow in r600_packet3_check()
    
    [ Upstream commit a1e2da6a5072f8abe5b0feaa91a5bcd9dc544a04 ]
    
    It is possible, although unlikely, that an integer overflow will occur
    when the result of radeon_get_ib_value() is shifted to the left.
    
    Avoid it by casting one of the operands to larger data type (u64).
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    Signed-off-by: Igor Artemiev <Igor.A.Artemiev@mcst.ru>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/sched: memset() 'job' in drm_sched_job_init() [+ + +]
Author: Philipp Stanner <pstanner@redhat.com>
Date:   Mon Oct 21 12:50:28 2024 +0200

    drm/sched: memset() 'job' in drm_sched_job_init()
    
    [ Upstream commit 2320c9e6a768d135c7b0039995182bb1a4e4fd22 ]
    
    drm_sched_job_init() has no control over how users allocate struct
    drm_sched_job. Unfortunately, the function can also not set some struct
    members such as job->sched.
    
    This could theoretically lead to UB by users dereferencing the struct's
    pointer members too early.
    
    It is easier to debug such issues if these pointers are initialized to
    NULL, so dereferencing them causes a NULL pointer exception.
    Accordingly, drm_sched_entity_init() does precisely that and initializes
    its struct with memset().
    
    Initialize parameter "job" to 0 in drm_sched_job_init().
    
    Signed-off-by: Philipp Stanner <pstanner@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241021105028.19794-2-pstanner@redhat.com
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/sti: Add __iomem for mixer_dbg_mxn's parameter [+ + +]
Author: Pei Xiao <xiaopei01@kylinos.cn>
Date:   Wed Nov 20 15:21:36 2024 +0800

    drm/sti: Add __iomem for mixer_dbg_mxn's parameter
    
    [ Upstream commit 86e8f94789dd6f3e705bfa821e1e416f97a2f863 ]
    
    Sparse complains about incorrect type in argument 1.
    expected void const volatile  __iomem *ptr but got void *.
    so modify mixer_dbg_mxn's addr parameter.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202411191809.6V3c826r-lkp@intel.com/
    Fixes: a5f81078a56c ("drm/sti: add debugfs entries for MIXER crtc")
    Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
    Acked-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/c28f0dcb6a4526721d83ba1f659bba30564d3d54.1732087094.git.xiaopei01@kylinos.cn
    Signed-off-by: Raphael Gallais-Pou <raphael.gallais-pou@foss.st.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/v3d: Enable Performance Counters before clearing them [+ + +]
Author: Maíra Canal <mcanal@igalia.com>
Date:   Wed Dec 4 09:28:31 2024 -0300

    drm/v3d: Enable Performance Counters before clearing them
    
    [ Upstream commit c98b10496b2f3c4f576af3482c71aadcfcbf765e ]
    
    On the Raspberry Pi 5, performance counters are not being cleared
    when `v3d_perfmon_start()` is called, even though we write to the
    CLR register. As a result, their values accumulate until they
    overflow.
    
    The expected behavior is for performance counters to reset to zero
    at the start of a job. When the job finishes and the perfmon is
    stopped, the counters should accurately reflect the values for that
    specific job.
    
    To ensure this behavior, the performance counters are now enabled
    before being cleared. This allows the CLR register to function as
    intended, zeroing the counter values when the job begins.
    
    Fixes: 26a4dc29b74a ("drm/v3d: Expose performance counters to userspace")
    Signed-off-by: Maíra Canal <mcanal@igalia.com>
    Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241204122831.17015-1-mcanal@igalia.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/vc4: hdmi: Avoid log spam for audio start failure [+ + +]
Author: Dom Cobley <popcornmix@gmail.com>
Date:   Fri Jun 21 16:20:28 2024 +0100

    drm/vc4: hdmi: Avoid log spam for audio start failure
    
    [ Upstream commit b4e5646178e86665f5caef2894578600f597098a ]
    
    We regularly get dmesg error reports of:
    [   18.184066] hdmi-audio-codec hdmi-audio-codec.3.auto: ASoC: error at snd_soc_dai_startup on i2s-hifi: -19
    [   18.184098]  MAI: soc_pcm_open() failed (-19)
    
    These are generated for any disconnected hdmi interface when pulseaudio
    attempts to open the associated ALSA device (numerous times). Each open
    generates a kernel error message, generating general log spam.
    
    The error messages all come from _soc_pcm_ret in sound/soc/soc-pcm.c#L39
    which suggests returning ENOTSUPP, rather that ENODEV will be quiet.
    And indeed it is.
    
    Signed-off-by: Dom Cobley <popcornmix@gmail.com>
    Reviewed-by: Maxime Ripard <mripard@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240621152055.4180873-5-dave.stevenson@raspberrypi.com
    Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/vc4: hvs: Set AXI panic modes for the HVS [+ + +]
Author: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date:   Fri Jun 21 16:20:30 2024 +0100

    drm/vc4: hvs: Set AXI panic modes for the HVS
    
    [ Upstream commit 014eccc9da7bfc76a3107fceea37dd60f1d63630 ]
    
    The HVS can change AXI request mode based on how full the COB
    FIFOs are.
    Until now the vc4 driver has been relying on the firmware to
    have set these to sensible values.
    
    With HVS channel 2 now being used for live video, change the
    panic mode for all channels to be explicitly set by the driver,
    and the same for all channels.
    
    Reviewed-by: Maxime Ripard <mripard@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240621152055.4180873-7-dave.stevenson@raspberrypi.com
    Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm: panel-orientation-quirks: Add quirk for AYA NEO 2 model [+ + +]
Author: Joaquín Ignacio Aramendía <samsagax@gmail.com>
Date:   Mon Sep 16 15:18:51 2024 +0200

    drm: panel-orientation-quirks: Add quirk for AYA NEO 2 model
    
    [ Upstream commit 361ebf5ef843b0aa1704c72eb26b91cf76c3c5b7 ]
    
    Add quirk orientation for AYA NEO 2. The name appears without spaces in
    DMI strings. That made it difficult to reuse the 2021 match. Also the
    display is larger in resolution.
    
    Tested by the JELOS team that has been patching their own kernel for a
    while now and confirmed by users in the AYA NEO and ChimeraOS discord
    servers.
    
    Signed-off-by: Joaquín Ignacio Aramendía <samsagax@gmail.com>
    Signed-off-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/2b35545b77a9fd8c9699b751ca282226dcecb1dd.1726492131.git.tjakobi@math.uni-bielefeld.de
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm: panel-orientation-quirks: Add quirk for AYA NEO Founder edition [+ + +]
Author: Joaquín Ignacio Aramendía <samsagax@gmail.com>
Date:   Mon Sep 16 15:18:53 2024 +0200

    drm: panel-orientation-quirks: Add quirk for AYA NEO Founder edition
    
    [ Upstream commit d7972d735ca80a40a571bf753c138263981a5698 ]
    
    Add quirk orientation for AYA NEO Founder. The name appears with spaces in
    DMI strings as other devices of the brand. The panel is the same as the
    NEXT and 2021 models. Those could not be reused as the former has VENDOR
    name as "AYANEO" without spaces and the latter has "AYADEVICE".
    
    Tested by the JELOS team that has been patching their own kernel for a
    while now and confirmed by users in the AYA NEO and ChimeraOS discord
    servers.
    
    Signed-off-by: Joaquín Ignacio Aramendía <samsagax@gmail.com>
    Signed-off-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/f71889a0b39f13f4b78481bd030377ca15035680.1726492131.git.tjakobi@math.uni-bielefeld.de
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm: panel-orientation-quirks: Add quirk for AYA NEO GEEK [+ + +]
Author: Joaquín Ignacio Aramendía <samsagax@gmail.com>
Date:   Mon Sep 16 15:18:55 2024 +0200

    drm: panel-orientation-quirks: Add quirk for AYA NEO GEEK
    
    [ Upstream commit 428656feb972ca99200fc127b5aecb574efd9d3d ]
    
    Add quirk orientation for AYA NEO GEEK. The name appears without
    spaces in DMI strings. The board name is completely different to
    the previous models making it difficult to reuse their quirks
    despite being the same resolution and using the same orientation.
    
    Tested by the JELOS team that has been patching their own kernel for a
    while now and confirmed by users in the AYA NEO and ChimeraOS discord
    servers.
    
    Signed-off-by: Joaquín Ignacio Aramendía <samsagax@gmail.com>
    Signed-off-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/40350b0d63fe2b54e7cba1e14be50917203f0079.1726492131.git.tjakobi@math.uni-bielefeld.de
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dsa: qca8k: Use nested lock to avoid splat [+ + +]
Author: Andrew Lunn <andrew@lunn.ch>
Date:   Sun Nov 10 18:59:55 2024 +0100

    dsa: qca8k: Use nested lock to avoid splat
    
    [ Upstream commit 078e0d596f7b5952dad8662ace8f20ed2165e2ce ]
    
    qca8k_phy_eth_command() is used to probe the child MDIO bus while the
    parent MDIO is locked. This causes lockdep splat, reporting a possible
    deadlock. It is not an actually deadlock, because different locks are
    used. By making use of mutex_lock_nested() we can avoid this false
    positive.
    
    Signed-off-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://patch.msgid.link/20241110175955.3053664-1-andrew@lunn.ch
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
epoll: annotate racy check [+ + +]
Author: Christian Brauner <brauner@kernel.org>
Date:   Wed Sep 25 11:05:16 2024 +0200

    epoll: annotate racy check
    
    [ Upstream commit 6474353a5e3d0b2cf610153cea0c61f576a36d0a ]
    
    Epoll relies on a racy fastpath check during __fput() in
    eventpoll_release() to avoid the hit of pointlessly acquiring a
    semaphore. Annotate that race by using WRITE_ONCE() and READ_ONCE().
    
    Link: https://lore.kernel.org/r/66edfb3c.050a0220.3195df.001a.GAE@google.com
    Link: https://lore.kernel.org/r/20240925-fungieren-anbauen-79b334b00542@brauner
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reported-by: syzbot+3b6b32dc50537a49bb4a@syzkaller.appspotmail.com
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ethtool: Fix wrong mod state in case of verbose and no_mask bitset [+ + +]
Author: Kory Maincent <kory.maincent@bootlin.com>
Date:   Mon Dec 2 16:33:57 2024 +0100

    ethtool: Fix wrong mod state in case of verbose and no_mask bitset
    
    [ Upstream commit 910c4788d6155b2202ec88273376cd7ecdc24f0a ]
    
    A bitset without mask in a _SET request means we want exactly the bits in
    the bitset to be set. This works correctly for compact format but when
    verbose format is parsed, ethnl_update_bitset32_verbose() only sets the
    bits present in the request bitset but does not clear the rest. The commit
    6699170376ab ("ethtool: fix application of verbose no_mask bitset") fixes
    this issue by clearing the whole target bitmap before we start iterating.
    The solution proposed brought an issue with the behavior of the mod
    variable. As the bitset is always cleared the old value will always
    differ to the new value.
    
    Fix it by adding a new function to compare bitmaps and a temporary variable
    which save the state of the old bitmap.
    
    Fixes: 6699170376ab ("ethtool: fix application of verbose no_mask bitset")
    Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
    Link: https://patch.msgid.link/20241202153358.1142095-1-kory.maincent@bootlin.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
f2fs: fix f2fs_bug_on when uninstalling filesystem call f2fs_evict_inode. [+ + +]
Author: Qi Han <hanqi@vivo.com>
Date:   Wed Sep 18 02:44:00 2024 -0600

    f2fs: fix f2fs_bug_on when uninstalling filesystem call f2fs_evict_inode.
    
    [ Upstream commit d5c367ef8287fb4d235c46a2f8c8d68715f3a0ca ]
    
    creating a large files during checkpoint disable until it runs out of
    space and then delete it, then remount to enable checkpoint again, and
    then unmount the filesystem triggers the f2fs_bug_on as below:
    
    ------------[ cut here ]------------
    kernel BUG at fs/f2fs/inode.c:896!
    CPU: 2 UID: 0 PID: 1286 Comm: umount Not tainted 6.11.0-rc7-dirty #360
    Oops: invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
    RIP: 0010:f2fs_evict_inode+0x58c/0x610
    Call Trace:
     __die_body+0x15/0x60
     die+0x33/0x50
     do_trap+0x10a/0x120
     f2fs_evict_inode+0x58c/0x610
     do_error_trap+0x60/0x80
     f2fs_evict_inode+0x58c/0x610
     exc_invalid_op+0x53/0x60
     f2fs_evict_inode+0x58c/0x610
     asm_exc_invalid_op+0x16/0x20
     f2fs_evict_inode+0x58c/0x610
     evict+0x101/0x260
     dispose_list+0x30/0x50
     evict_inodes+0x140/0x190
     generic_shutdown_super+0x2f/0x150
     kill_block_super+0x11/0x40
     kill_f2fs_super+0x7d/0x140
     deactivate_locked_super+0x2a/0x70
     cleanup_mnt+0xb3/0x140
     task_work_run+0x61/0x90
    
    The root cause is: creating large files during disable checkpoint
    period results in not enough free segments, so when writing back root
    inode will failed in f2fs_enable_checkpoint. When umount the file
    system after enabling checkpoint, the root inode is dirty in
    f2fs_evict_inode function, which triggers BUG_ON. The steps to
    reproduce are as follows:
    
    dd if=/dev/zero of=f2fs.img bs=1M count=55
    mount f2fs.img f2fs_dir -o checkpoint=disable:10%
    dd if=/dev/zero of=big bs=1M count=50
    sync
    rm big
    mount -o remount,checkpoint=enable f2fs_dir
    umount f2fs_dir
    
    Let's redirty inode when there is not free segments during checkpoint
    is disable.
    
    Signed-off-by: Qi Han <hanqi@vivo.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

f2fs: fix to drop all discards after creating snapshot on lvm device [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Thu Nov 21 22:17:16 2024 +0800

    f2fs: fix to drop all discards after creating snapshot on lvm device
    
    [ Upstream commit bc8aeb04fd80cb8cfae3058445c84410fd0beb5e ]
    
    Piergiorgio reported a bug in bugzilla as below:
    
    ------------[ cut here ]------------
    WARNING: CPU: 2 PID: 969 at fs/f2fs/segment.c:1330
    RIP: 0010:__submit_discard_cmd+0x27d/0x400 [f2fs]
    Call Trace:
     __issue_discard_cmd+0x1ca/0x350 [f2fs]
     issue_discard_thread+0x191/0x480 [f2fs]
     kthread+0xcf/0x100
     ret_from_fork+0x31/0x50
     ret_from_fork_asm+0x1a/0x30
    
    w/ below testcase, it can reproduce this bug quickly:
    - pvcreate /dev/vdb
    - vgcreate myvg1 /dev/vdb
    - lvcreate -L 1024m -n mylv1 myvg1
    - mount /dev/myvg1/mylv1 /mnt/f2fs
    - dd if=/dev/zero of=/mnt/f2fs/file bs=1M count=20
    - sync
    - rm /mnt/f2fs/file
    - sync
    - lvcreate -L 1024m -s -n mylv1-snapshot /dev/myvg1/mylv1
    - umount /mnt/f2fs
    
    The root cause is: it will update discard_max_bytes of mounted lvm
    device to zero after creating snapshot on this lvm device, then,
    __submit_discard_cmd() will pass parameter @nr_sects w/ zero value
    to __blkdev_issue_discard(), it returns a NULL bio pointer, result
    in panic.
    
    This patch changes as below for fixing:
    1. Let's drop all remained discards in f2fs_unfreeze() if snapshot
    of lvm device is created.
    2. Checking discard_max_bytes before submitting discard during
    __submit_discard_cmd().
    
    Cc: stable@vger.kernel.org
    Fixes: 35ec7d574884 ("f2fs: split discard command in prior to block layer")
    Reported-by: Piergiorgio Sartor <piergiorgio.sartor@nexgo.de>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219484
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

f2fs: fix to shrink read extent node in batches [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Thu Nov 21 09:57:50 2024 +0800

    f2fs: fix to shrink read extent node in batches
    
    [ Upstream commit 3fc5d5a182f6a1f8bd4dc775feb54c369dd2c343 ]
    
    We use rwlock to protect core structure data of extent tree during
    its shrink, however, if there is a huge number of extent nodes in
    extent tree, during shrink of extent tree, it may hold rwlock for
    a very long time, which may trigger kernel hang issue.
    
    This patch fixes to shrink read extent node in batches, so that,
    critical region of the rwlock can be shrunk to avoid its extreme
    long time hold.
    
    Reported-by: Xiuhong Wang <xiuhong.wang@unisoc.com>
    Closes: https://lore.kernel.org/linux-f2fs-devel/20241112110627.1314632-1-xiuhong.wang@unisoc.com/
    Signed-off-by: Xiuhong Wang <xiuhong.wang@unisoc.com>
    Signed-off-by: Zhiguo Niu <zhiguo.niu@unisoc.com>
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

f2fs: print message if fscorrupted was found in f2fs_new_node_page() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Wed Nov 20 14:58:50 2024 +0800

    f2fs: print message if fscorrupted was found in f2fs_new_node_page()
    
    [ Upstream commit 81520c684ca67aea6a589461a3caebb9b11dcc90 ]
    
    If fs corruption occurs in f2fs_new_node_page(), let's print
    more information about corrupted metadata into kernel log.
    
    Meanwhile, it updates to record ERROR_INCONSISTENT_NAT instead
    of ERROR_INVALID_BLKADDR if blkaddr in nat entry is not
    NULL_ADDR which means nat bitmap and nat entry is inconsistent.
    
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fanotify: allow reporting errors on failure to open fd [+ + +]
Author: Amir Goldstein <amir73il@gmail.com>
Date:   Thu Oct 3 16:29:22 2024 +0200

    fanotify: allow reporting errors on failure to open fd
    
    [ Upstream commit 522249f05c5551aec9ec0ba9b6438f1ec19c138d ]
    
    When working in "fd mode", fanotify_read() needs to open an fd
    from a dentry to report event->fd to userspace.
    
    Opening an fd from dentry can fail for several reasons.
    For example, when tasks are gone and we try to open their
    /proc files or we try to open a WRONLY file like in sysfs
    or when trying to open a file that was deleted on the
    remote network server.
    
    Add a new flag FAN_REPORT_FD_ERROR for fanotify_init().
    For a group with FAN_REPORT_FD_ERROR, we will send the
    event with the error instead of the open fd, otherwise
    userspace may not get the error at all.
    
    For an overflow event, we report -EBADF to avoid confusing FAN_NOFD
    with -EPERM.  Similarly for pidfd open errors we report either -ESRCH
    or the open error instead of FAN_NOPIDFD and FAN_EPIDFD.
    
    In any case, userspace will not know which file failed to
    open, so add a debug print for further investigation.
    
    Reported-by: Krishna Vivek Vitta <kvitta@microsoft.com>
    Link: https://lore.kernel.org/linux-fsdevel/SI2P153MB07182F3424619EDDD1F393EED46D2@SI2P153MB0718.APCP153.PROD.OUTLOOK.COM/
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20241003142922.111539-1-amir73il@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs/ntfs3: Fix case when unmarked clusters intersect with zone [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Thu Oct 10 20:09:24 2024 +0300

    fs/ntfs3: Fix case when unmarked clusters intersect with zone
    
    [ Upstream commit 5fc982fe7eca9d0cf7b25832450ebd4f7c8e1c36 ]
    
    Reported-by: syzbot+7f3761b790fa41d0f3d5@syzkaller.appspotmail.com
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs/smb/client: avoid querying SMB2_OP_QUERY_WSL_EA for SMB3 POSIX [+ + +]
Author: Ralph Boehme <slow@samba.org>
Date:   Fri Nov 15 13:15:50 2024 +0100

    fs/smb/client: avoid querying SMB2_OP_QUERY_WSL_EA for SMB3 POSIX
    
    commit ca4b2c4607433033e9c4f4659f809af4261d8992 upstream.
    
    Avoid extra roundtrip
    
    Cc: stable@vger.kernel.org
    Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
    Signed-off-by: Ralph Boehme <slow@samba.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fs/smb/client: cifs_prime_dcache() for SMB3 POSIX reparse points [+ + +]
Author: Ralph Boehme <slow@samba.org>
Date:   Mon Nov 25 16:19:56 2024 +0100

    fs/smb/client: cifs_prime_dcache() for SMB3 POSIX reparse points
    
    commit 8cb0bc5436351de8a11eef13b7367d64cc0d6c68 upstream.
    
    Spares an extra revalidation request
    
    Cc: stable@vger.kernel.org
    Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
    Signed-off-by: Ralph Boehme <slow@samba.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fs/smb/client: Implement new SMB3 POSIX type [+ + +]
Author: Ralph Boehme <slow@samba.org>
Date:   Fri Nov 15 19:21:04 2024 +0100

    fs/smb/client: Implement new SMB3 POSIX type
    
    commit 6a832bc8bbb22350f7ffe6ecb2d36f261bb96023 upstream.
    
    Fixes special files against current Samba.
    
    On the Samba server:
    
    insgesamt 20
    131958 brw-r--r--  1 root  root  0, 0 15. Nov 12:04 blockdev
    131965 crw-r--r--  1 root  root  1, 1 15. Nov 12:04 chardev
    131966 prw-r--r--  1 samba samba    0 15. Nov 12:05 fifo
    131953 -rw-rwxrw-+ 2 samba samba    4 18. Nov 11:37 file
    131953 -rw-rwxrw-+ 2 samba samba    4 18. Nov 11:37 hardlink
    131957 lrwxrwxrwx  1 samba samba    4 15. Nov 12:03 symlink -> file
    131954 -rwxrwxr-x+ 1 samba samba    0 18. Nov 15:28 symlinkoversmb
    
    Before:
    
    ls: cannot access '/mnt/smb3unix/posix/blockdev': No data available
    ls: cannot access '/mnt/smb3unix/posix/chardev': No data available
    ls: cannot access '/mnt/smb3unix/posix/symlinkoversmb': No data available
    ls: cannot access '/mnt/smb3unix/posix/fifo': No data available
    ls: cannot access '/mnt/smb3unix/posix/symlink': No data available
    total 16
         ? -????????? ? ?    ?     ?            ? blockdev
         ? -????????? ? ?    ?     ?            ? chardev
         ? -????????? ? ?    ?     ?            ? fifo
    131953 -rw-rwxrw- 2 root samba 4 Nov 18 11:37 file
    131953 -rw-rwxrw- 2 root samba 4 Nov 18 11:37 hardlink
         ? -????????? ? ?    ?     ?            ? symlink
         ? -????????? ? ?    ?     ?            ? symlinkoversmb
    
    After:
    
    insgesamt 21
    131958 brw-r--r-- 1 root root  0, 0 15. Nov 12:04 blockdev
    131965 crw-r--r-- 1 root root  1, 1 15. Nov 12:04 chardev
    131966 prw-r--r-- 1 root samba    0 15. Nov 12:05 fifo
    131953 -rw-rwxrw- 2 root samba    4 18. Nov 11:37 file
    131953 -rw-rwxrw- 2 root samba    4 18. Nov 11:37 hardlink
    131957 lrwxrwxrwx 1 root samba    4 15. Nov 12:03 symlink -> file
    131954 lrwxrwxr-x 1 root samba   23 18. Nov 15:28 symlinkoversmb -> mnt/smb3unix/posix/file
    
    Cc: stable@vger.kernel.org
    Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
    Signed-off-by: Ralph Boehme <slow@samba.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fsl/fman: Validate cell-index value obtained from Device Tree [+ + +]
Author: Aleksandr Mishin <amishin@t-argos.ru>
Date:   Mon Oct 28 09:58:24 2024 +0300

    fsl/fman: Validate cell-index value obtained from Device Tree
    
    [ Upstream commit bd50c4125c98bd1a86f8e514872159700a9c678c ]
    
    Cell-index value is obtained from Device Tree and then used to calculate
    the index for accessing arrays port_mfl[], mac_mfl[] and intr_mng[].
    In case of broken DT due to any error cell-index can contain any value
    and it is possible to go beyond the array boundaries which can lead
    at least to memory corruption.
    
    Validate cell-index value obtained from Device Tree.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Reviewed-by: Sean Anderson <sean.anderson@seco.com>
    Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
    Link: https://patch.msgid.link/20241028065824.15452-1-amishin@t-argos.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
geneve: do not assume mac header is set in geneve_xmit_skb() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Dec 3 18:21:21 2024 +0000

    geneve: do not assume mac header is set in geneve_xmit_skb()
    
    [ Upstream commit 8588c99c7d47448fcae39e3227d6e2bb97aad86d ]
    
    We should not assume mac header is set in output path.
    
    Use skb_eth_hdr() instead of eth_hdr() to fix the issue.
    
    sysbot reported the following :
    
     WARNING: CPU: 0 PID: 11635 at include/linux/skbuff.h:3052 skb_mac_header include/linux/skbuff.h:3052 [inline]
     WARNING: CPU: 0 PID: 11635 at include/linux/skbuff.h:3052 eth_hdr include/linux/if_ether.h:24 [inline]
     WARNING: CPU: 0 PID: 11635 at include/linux/skbuff.h:3052 geneve_xmit_skb drivers/net/geneve.c:898 [inline]
     WARNING: CPU: 0 PID: 11635 at include/linux/skbuff.h:3052 geneve_xmit+0x4c38/0x5730 drivers/net/geneve.c:1039
    Modules linked in:
    CPU: 0 UID: 0 PID: 11635 Comm: syz.4.1423 Not tainted 6.12.0-syzkaller-10296-gaaf20f870da0 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
     RIP: 0010:skb_mac_header include/linux/skbuff.h:3052 [inline]
     RIP: 0010:eth_hdr include/linux/if_ether.h:24 [inline]
     RIP: 0010:geneve_xmit_skb drivers/net/geneve.c:898 [inline]
     RIP: 0010:geneve_xmit+0x4c38/0x5730 drivers/net/geneve.c:1039
    Code: 21 c6 02 e9 35 d4 ff ff e8 a5 48 4c fb 90 0f 0b 90 e9 fd f5 ff ff e8 97 48 4c fb 90 0f 0b 90 e9 d8 f5 ff ff e8 89 48 4c fb 90 <0f> 0b 90 e9 41 e4 ff ff e8 7b 48 4c fb 90 0f 0b 90 e9 cd e7 ff ff
    RSP: 0018:ffffc90003b2f870 EFLAGS: 00010283
    RAX: 000000000000037a RBX: 000000000000ffff RCX: ffffc9000dc3d000
    RDX: 0000000000080000 RSI: ffffffff86428417 RDI: 0000000000000003
    RBP: ffffc90003b2f9f0 R08: 0000000000000003 R09: 000000000000ffff
    R10: 000000000000ffff R11: 0000000000000002 R12: ffff88806603c000
    R13: 0000000000000000 R14: ffff8880685b2780 R15: 0000000000000e23
    FS:  00007fdc2deed6c0(0000) GS:ffff8880b8600000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000001b30a1dff8 CR3: 0000000056b8c000 CR4: 00000000003526f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
      __netdev_start_xmit include/linux/netdevice.h:5002 [inline]
      netdev_start_xmit include/linux/netdevice.h:5011 [inline]
      __dev_direct_xmit+0x58a/0x720 net/core/dev.c:4490
      dev_direct_xmit include/linux/netdevice.h:3181 [inline]
      packet_xmit+0x1e4/0x360 net/packet/af_packet.c:285
      packet_snd net/packet/af_packet.c:3146 [inline]
      packet_sendmsg+0x2700/0x5660 net/packet/af_packet.c:3178
      sock_sendmsg_nosec net/socket.c:711 [inline]
      __sock_sendmsg net/socket.c:726 [inline]
      __sys_sendto+0x488/0x4f0 net/socket.c:2197
      __do_sys_sendto net/socket.c:2204 [inline]
      __se_sys_sendto net/socket.c:2200 [inline]
      __x64_sys_sendto+0xe0/0x1c0 net/socket.c:2200
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: a025fb5f49ad ("geneve: Allow configuration of DF behaviour")
    Reported-by: syzbot+3ec5271486d7cb2d242a@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/674f4b72.050a0220.17bd51.004a.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Link: https://patch.msgid.link/20241203182122.2725517-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gpio: grgpio: Add NULL check in grgpio_probe [+ + +]
Author: Charles Han <hanchunchao@inspur.com>
Date:   Thu Nov 14 17:18:22 2024 +0800

    gpio: grgpio: Add NULL check in grgpio_probe
    
    [ Upstream commit 050b23d081da0f29474de043e9538c1f7a351b3b ]
    
    devm_kasprintf() can return a NULL pointer on failure,but this
    returned value in grgpio_probe is not checked.
    Add NULL check in grgpio_probe, to handle kernel NULL
    pointer dereference error.
    
    Cc: stable@vger.kernel.org
    Fixes: 7eb6ce2f2723 ("gpio: Convert to using %pOF instead of full_name")
    Signed-off-by: Charles Han <hanchunchao@inspur.com>
    Link: https://lore.kernel.org/r/20241114091822.78199-1-hanchunchao@inspur.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gpio: grgpio: use a helper variable to store the address of ofdev->dev [+ + +]
Author: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Date:   Tue Oct 15 15:18:31 2024 +0200

    gpio: grgpio: use a helper variable to store the address of ofdev->dev
    
    [ Upstream commit d036ae41cebdfae92666024163c109b8fef516fa ]
    
    Instead of dereferencing the platform device pointer repeatedly, just
    store its address in a helper variable.
    
    Link: https://lore.kernel.org/r/20241015131832.44678-3-brgl@bgdev.pl
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Stable-dep-of: 050b23d081da ("gpio: grgpio: Add NULL check in grgpio_probe")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
HID: add per device quirk to force bind to hid-generic [+ + +]
Author: Benjamin Tissoires <bentiss@kernel.org>
Date:   Tue Oct 1 16:30:12 2024 +0200

    HID: add per device quirk to force bind to hid-generic
    
    [ Upstream commit 645c224ac5f6e0013931c342ea707b398d24d410 ]
    
    We already have the possibility to force not binding to hid-generic and
    rely on a dedicated driver, but we couldn't do the other way around.
    
    This is useful for BPF programs where we are fixing the report descriptor
    and the events, but want to avoid a specialized driver to come after BPF
    which would unwind everything that is done there.
    
    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
    Link: https://patch.msgid.link/20241001-hid-bpf-hid-generic-v3-8-2ef1019468df@kernel.org
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: magicmouse: Apple Magic Trackpad 2 USB-C driver support [+ + +]
Author: Callahan Kovacs <callahankovacs@gmail.com>
Date:   Mon Nov 11 22:49:28 2024 +0100

    HID: magicmouse: Apple Magic Trackpad 2 USB-C driver support
    
    [ Upstream commit 87a2f10395c82c2b4687bb8611a6c5663a12f9e7 ]
    
    Adds driver support for the USB-C model of Apple's Magic Trackpad 2.
    
    The 2024 USB-C model is compatible with the existing Magic Trackpad 2
    driver but has a different hardware ID.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219470
    Signed-off-by: Callahan Kovacs <callahankovacs@gmail.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: wacom: fix when get product name maybe null pointer [+ + +]
Author: WangYuli <wangyuli@uniontech.com>
Date:   Mon Nov 25 13:26:16 2024 +0800

    HID: wacom: fix when get product name maybe null pointer
    
    commit 59548215b76be98cf3422eea9a67d6ea578aca3d upstream.
    
    Due to incorrect dev->product reporting by certain devices, null
    pointer dereferences occur when dev->product is empty, leading to
    potential system crashes.
    
    This issue was found on EXCELSIOR DL37-D05 device with
    Loongson-LS3A6000-7A2000-DL37 motherboard.
    
    Kernel logs:
    [   56.470885] usb 4-3: new full-speed USB device number 4 using ohci-pci
    [   56.671638] usb 4-3: string descriptor 0 read error: -22
    [   56.671644] usb 4-3: New USB device found, idVendor=056a, idProduct=0374, bcdDevice= 1.07
    [   56.671647] usb 4-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    [   56.678839] hid-generic 0003:056A:0374.0004: hiddev0,hidraw3: USB HID v1.10 Device [HID 056a:0374] on usb-0000:00:05.0-3/input0
    [   56.697719] CPU 2 Unable to handle kernel paging request at virtual address 0000000000000000, era == 90000000066e35c8, ra == ffff800004f98a80
    [   56.697732] Oops[#1]:
    [   56.697734] CPU: 2 PID: 2742 Comm: (udev-worker) Tainted: G           OE      6.6.0-loong64-desktop #25.00.2000.015
    [   56.697737] Hardware name: Inspur CE520L2/C09901N000000000, BIOS 2.09.00 10/11/2024
    [   56.697739] pc 90000000066e35c8 ra ffff800004f98a80 tp 9000000125478000 sp 900000012547b8a0
    [   56.697741] a0 0000000000000000 a1 ffff800004818b28 a2 0000000000000000 a3 0000000000000000
    [   56.697743] a4 900000012547b8f0 a5 0000000000000000 a6 0000000000000000 a7 0000000000000000
    [   56.697745] t0 ffff800004818b2d t1 0000000000000000 t2 0000000000000003 t3 0000000000000005
    [   56.697747] t4 0000000000000000 t5 0000000000000000 t6 0000000000000000 t7 0000000000000000
    [   56.697748] t8 0000000000000000 u0 0000000000000000 s9 0000000000000000 s0 900000011aa48028
    [   56.697750] s1 0000000000000000 s2 0000000000000000 s3 ffff800004818e80 s4 ffff800004810000
    [   56.697751] s5 90000001000b98d0 s6 ffff800004811f88 s7 ffff800005470440 s8 0000000000000000
    [   56.697753]    ra: ffff800004f98a80 wacom_update_name+0xe0/0x300 [wacom]
    [   56.697802]   ERA: 90000000066e35c8 strstr+0x28/0x120
    [   56.697806]  CRMD: 000000b0 (PLV0 -IE -DA +PG DACF=CC DACM=CC -WE)
    [   56.697816]  PRMD: 0000000c (PPLV0 +PIE +PWE)
    [   56.697821]  EUEN: 00000000 (-FPE -SXE -ASXE -BTE)
    [   56.697827]  ECFG: 00071c1d (LIE=0,2-4,10-12 VS=7)
    [   56.697831] ESTAT: 00010000 [PIL] (IS= ECode=1 EsubCode=0)
    [   56.697835]  BADV: 0000000000000000
    [   56.697836]  PRID: 0014d000 (Loongson-64bit, Loongson-3A6000)
    [   56.697838] Modules linked in: wacom(+) bnep bluetooth rfkill qrtr nls_iso8859_1 nls_cp437 snd_hda_codec_conexant snd_hda_codec_generic ledtrig_audio snd_hda_codec_hdmi snd_hda_intel snd_intel_dspcfg snd_hda_codec snd_hda_core snd_hwdep snd_pcm snd_timer snd soundcore input_leds mousedev led_class joydev deepin_netmonitor(OE) fuse nfnetlink dmi_sysfs ip_tables x_tables overlay amdgpu amdxcp drm_exec gpu_sched drm_buddy radeon drm_suballoc_helper i2c_algo_bit drm_ttm_helper r8169 ttm drm_display_helper spi_loongson_pci xhci_pci cec xhci_pci_renesas spi_loongson_core hid_generic realtek gpio_loongson_64bit
    [   56.697887] Process (udev-worker) (pid: 2742, threadinfo=00000000aee0d8b4, task=00000000a9eff1f3)
    [   56.697890] Stack : 0000000000000000 ffff800004817e00 0000000000000000 0000251c00000000
    [   56.697896]         0000000000000000 00000011fffffffd 0000000000000000 0000000000000000
    [   56.697901]         0000000000000000 1b67a968695184b9 0000000000000000 90000001000b98d0
    [   56.697906]         90000001000bb8d0 900000011aa48028 0000000000000000 ffff800004f9d74c
    [   56.697911]         90000001000ba000 ffff800004f9ce58 0000000000000000 ffff800005470440
    [   56.697916]         ffff800004811f88 90000001000b98d0 9000000100da2aa8 90000001000bb8d0
    [   56.697921]         0000000000000000 90000001000ba000 900000011aa48028 ffff800004f9d74c
    [   56.697926]         ffff8000054704e8 90000001000bb8b8 90000001000ba000 0000000000000000
    [   56.697931]         90000001000bb8d0 9000000006307564 9000000005e666e0 90000001752359b8
    [   56.697936]         9000000008cbe400 900000000804d000 9000000005e666e0 0000000000000000
    [   56.697941]         ...
    [   56.697944] Call Trace:
    [   56.697945] [<90000000066e35c8>] strstr+0x28/0x120
    [   56.697950] [<ffff800004f98a80>] wacom_update_name+0xe0/0x300 [wacom]
    [   56.698000] [<ffff800004f9ce58>] wacom_parse_and_register+0x338/0x900 [wacom]
    [   56.698050] [<ffff800004f9d74c>] wacom_probe+0x32c/0x420 [wacom]
    [   56.698099] [<9000000006307564>] hid_device_probe+0x144/0x260
    [   56.698103] [<9000000005e65d68>] really_probe+0x208/0x540
    [   56.698109] [<9000000005e661dc>] __driver_probe_device+0x13c/0x1e0
    [   56.698112] [<9000000005e66620>] driver_probe_device+0x40/0x100
    [   56.698116] [<9000000005e6680c>] __device_attach_driver+0x12c/0x180
    [   56.698119] [<9000000005e62bc8>] bus_for_each_drv+0x88/0x160
    [   56.698123] [<9000000005e66468>] __device_attach+0x108/0x260
    [   56.698126] [<9000000005e63918>] device_reprobe+0x78/0x100
    [   56.698129] [<9000000005e62a68>] bus_for_each_dev+0x88/0x160
    [   56.698132] [<9000000006304e54>] __hid_bus_driver_added+0x34/0x80
    [   56.698134] [<9000000005e62bc8>] bus_for_each_drv+0x88/0x160
    [   56.698137] [<9000000006304df0>] __hid_register_driver+0x70/0xa0
    [   56.698142] [<9000000004e10fe4>] do_one_initcall+0x104/0x320
    [   56.698146] [<9000000004f38150>] do_init_module+0x90/0x2c0
    [   56.698151] [<9000000004f3a3d8>] init_module_from_file+0xb8/0x120
    [   56.698155] [<9000000004f3a590>] idempotent_init_module+0x150/0x3a0
    [   56.698159] [<9000000004f3a890>] sys_finit_module+0xb0/0x140
    [   56.698163] [<900000000671e4e8>] do_syscall+0x88/0xc0
    [   56.698166] [<9000000004e12404>] handle_syscall+0xc4/0x160
    [   56.698171] Code: 0011958f  00150224  5800cd85 <2a00022c> 00150004  4000c180  0015022c  03400000  03400000
    [   56.698192] ---[ end trace 0000000000000000 ]---
    
    Fixes: 09dc28acaec7 ("HID: wacom: Improve generic name generation")
    Reported-by: Zhenxing Chen <chenzhenxing@uniontech.com>
    Co-developed-by: Xu Rao <raoxu@uniontech.com>
    Signed-off-by: Xu Rao <raoxu@uniontech.com>
    Signed-off-by: WangYuli <wangyuli@uniontech.com>
    Link: https://patch.msgid.link/B31757FE8E1544CF+20241125052616.18261-1-wangyuli@uniontech.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hwmon: (nct6775) Add 665-ACE/600M-CL to ASUS WMI monitoring list [+ + +]
Author: Sarah Maedel <sarah.maedel@hetzner-cloud.de>
Date:   Fri Oct 18 09:46:10 2024 +0200

    hwmon: (nct6775) Add 665-ACE/600M-CL to ASUS WMI monitoring list
    
    [ Upstream commit ccae49e5cf6ebda1a7fa5d2ca99500987c7420c4 ]
    
    Boards such as
    * Pro WS 665-ACE
    * Pro WS 600M-CL
    have got a nct6775 chip, but by default there's no use of it
    because of resource conflict with WMI method.
    
    Add affected boards to the WMI monitoring list.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=204807
    Co-developed-by: Tommy Giesler <tommy.giesler@hetzner.com>
    Signed-off-by: Tommy Giesler <tommy.giesler@hetzner.com>
    Signed-off-by: Sarah Maedel <sarah.maedel@hetzner-cloud.de>
    Message-ID: <20241018074611.358619-1-sarah.maedel@hetzner-cloud.de>
    [groeck: Change commit message to imperative mood]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i3c: master: add enable(disable) hot join in sys entry [+ + +]
Author: Frank Li <Frank.Li@nxp.com>
Date:   Fri Dec 1 17:25:27 2023 -0500

    i3c: master: add enable(disable) hot join in sys entry
    
    [ Upstream commit 317bacf960a4879af22d12175f47d284930b3273 ]
    
    Add hotjoin entry in sys file system allow user enable/disable hotjoin
    feature.
    
    Add (*enable(disable)_hotjoin)() to i3c_master_controller_ops.
    Add api i3c_master_enable(disable)_hotjoin();
    
    Signed-off-by: Frank Li <Frank.Li@nxp.com>
    Link: https://lore.kernel.org/r/20231201222532.2431484-2-Frank.Li@nxp.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Stable-dep-of: 25bc99be5fe5 ("i3c: master: svc: Modify enabled_events bit 7:0 to act as IBI enable counter")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i3c: master: Extend address status bit to 4 and add I3C_ADDR_SLOT_EXT_DESIRED [+ + +]
Author: Frank Li <Frank.Li@nxp.com>
Date:   Mon Oct 21 11:45:07 2024 -0400

    i3c: master: Extend address status bit to 4 and add I3C_ADDR_SLOT_EXT_DESIRED
    
    [ Upstream commit 2f552fa280590e61bd3dbe66a7b54b99caa642a4 ]
    
    Extend the address status bit to 4 and introduce the
    I3C_ADDR_SLOT_EXT_DESIRED macro to indicate that a device prefers a
    specific address. This is generally set by the 'assigned-address' in the
    device tree source (dts) file.
    
     ┌────┬─────────────┬───┬─────────┬───┐
     │S/Sr│ 7'h7E RnW=0 │ACK│ ENTDAA  │ T ├────┐
     └────┴─────────────┴───┴─────────┴───┘    │
     ┌─────────────────────────────────────────┘
     │  ┌──┬─────────────┬───┬─────────────────┬────────────────┬───┬─────────┐
     └─►│Sr│7'h7E RnW=1  │ACK│48bit UID BCR DCR│Assign 7bit Addr│PAR│ ACK/NACK│
        └──┴─────────────┴───┴─────────────────┴────────────────┴───┴─────────┘
    
    Some master controllers (such as HCI) need to prepare the entire above
    transaction before sending it out to the I3C bus. This means that a 7-bit
    dynamic address needs to be allocated before knowing the target device's
    UID information.
    
    However, some I3C targets may request specific addresses (called as
    "init_dyn_addr"), which is typically specified by the DT-'s
    assigned-address property. Lower addresses having higher IBI priority. If
    it is available, i3c_bus_get_free_addr() preferably return a free address
    that is not in the list of desired addresses (called as "init_dyn_addr").
    This allows the device with the "init_dyn_addr" to switch to its
    "init_dyn_addr" when it hot-joins the I3C bus. Otherwise, if the
    "init_dyn_addr" is already in use by another I3C device, the target device
    will not be able to switch to its desired address.
    
    If the previous step fails, fallback returning one of the remaining
    unassigned address, regardless of its state in the desired list.
    
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Frank Li <Frank.Li@nxp.com>
    Link: https://lore.kernel.org/r/20241021-i3c_dts_assign-v8-2-4098b8bde01e@nxp.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Stable-dep-of: 851bd21cdb55 ("i3c: master: Fix dynamic address leak when 'assigned-address' is present")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i3c: master: Fix dynamic address leak when 'assigned-address' is present [+ + +]
Author: Frank Li <Frank.Li@nxp.com>
Date:   Mon Oct 21 11:45:08 2024 -0400

    i3c: master: Fix dynamic address leak when 'assigned-address' is present
    
    [ Upstream commit 851bd21cdb55e727ab29280bc9f6b678164f802a ]
    
    If the DTS contains 'assigned-address', a dynamic address leak occurs
    during hotjoin events.
    
    Assume a device have assigned-address 0xb.
      - Device issue Hotjoin
      - Call i3c_master_do_daa()
      - Call driver xxx_do_daa()
      - Call i3c_master_get_free_addr() to get dynamic address 0x9
      - i3c_master_add_i3c_dev_locked(0x9)
      -     expected_dyn_addr  = newdev->boardinfo->init_dyn_addr (0xb);
      -     i3c_master_reattach_i3c_dev(newdev(0xb), old_dyn_addr(0x9));
      -         if (dev->info.dyn_addr != old_dyn_addr &&
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 0xb != 0x9 -> TRUE
                    (!dev->boardinfo ||
                     ^^^^^^^^^^^^^^^ ->  FALSE
                     dev->info.dyn_addr != dev->boardinfo->init_dyn_addr)) {
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                     0xb != 0xb      ->  FALSE
                     ...
                     i3c_bus_set_addr_slot_status(&master->bus, old_dyn_addr,
                                                         I3C_ADDR_SLOT_FREE);
                     ^^^
                     This will be skipped. So old_dyn_addr never free
                }
    
      - i3c_master_get_free_addr() will return increased sequence number.
    
    Remove dev->info.dyn_addr != dev->boardinfo->init_dyn_addr condition check.
    dev->info.dyn_addr should be checked before calling this function because
    i3c_master_setnewda_locked() has already been called and the target device
    has already accepted dyn_addr. It is too late to check if dyn_addr is free
    in i3c_master_reattach_i3c_dev().
    
    Add check to ensure expected_dyn_addr is free before
    i3c_master_setnewda_locked().
    
    Fixes: cc3a392d69b6 ("i3c: master: fix for SETDASA and DAA process")
    Cc: stable@kernel.org
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Frank Li <Frank.Li@nxp.com>
    Link: https://lore.kernel.org/r/20241021-i3c_dts_assign-v8-3-4098b8bde01e@nxp.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i3c: master: fix kernel-doc check warning [+ + +]
Author: Frank Li <Frank.Li@nxp.com>
Date:   Tue Jan 9 00:25:48 2024 -0500

    i3c: master: fix kernel-doc check warning
    
    [ Upstream commit 34d946b723b53488ab39d8ac540ddf9db255317a ]
    
    Fix warning found by
            'scripts/kernel-doc -v -none include/linux/i3c/master.h'
    
    include/linux/i3c/master.h:457: warning: Function parameter or member 'enable_hotjoin' not described in 'i3c_master_controller_ops'
    include/linux/i3c/master.h:457: warning: Function parameter or member 'disable_hotjoin' not described in 'i3c_master_controller_ops'
    include/linux/i3c/master.h:499: warning: Function parameter or member 'hotjoin' not described in 'i3c_master_controller'
    
    Signed-off-by: Frank Li <Frank.Li@nxp.com>
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Link: https://lore.kernel.org/r/20240109052548.2128133-1-Frank.Li@nxp.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Stable-dep-of: 25bc99be5fe5 ("i3c: master: svc: Modify enabled_events bit 7:0 to act as IBI enable counter")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i3c: master: Remove i3c_dev_disable_ibi_locked(olddev) on device hotjoin [+ + +]
Author: Frank Li <Frank.Li@nxp.com>
Date:   Tue Oct 1 12:22:32 2024 -0400

    i3c: master: Remove i3c_dev_disable_ibi_locked(olddev) on device hotjoin
    
    commit 36faa04ce3d9c962b4b29d285ad07ca29e2988e4 upstream.
    
    When a new device hotjoins, a new dynamic address is assigned.
    i3c_master_add_i3c_dev_locked() identifies that the device was previously
    attached to the bus and locates the olddev.
    
    i3c_master_add_i3c_dev_locked()
    {
        ...
        olddev = i3c_master_search_i3c_dev_duplicate(newdev);
        ...
        if (olddev) {
            ...
            i3c_dev_disable_ibi_locked(olddev);
            ^^^^^^
            The olddev should not receive any commands on the i3c bus as it
            does not exist and has been assigned a new address. This will
            result in NACK or timeout. So remove it.
        }
    
        i3c_dev_free_ibi_locked(olddev);
        ^^^^^^^^
        This function internally calls i3c_dev_disable_ibi_locked() function
        causing to send DISEC command with old Address.
    
        The olddev should not receive any commands on the i3c bus as it
        does not exist and has been assigned a new address. This will
        result in NACK or timeout. So, update the olddev->ibi->enabled
        flag to false to avoid DISEC with OldAddr.
    }
    
    Include part of Ravindra Yashvant Shinde's work:
    https://lore.kernel.org/linux-i3c/20240820151917.3904956-1-ravindra.yashvant.shinde@nxp.com/T/#u
    
    Fixes: 317bacf960a4 ("i3c: master: add enable(disable) hot join in sys entry")
    Co-developed-by: Ravindra Yashvant Shinde <ravindra.yashvant.shinde@nxp.com>
    Signed-off-by: Ravindra Yashvant Shinde <ravindra.yashvant.shinde@nxp.com>
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Frank Li <Frank.Li@nxp.com>
    Link: https://lore.kernel.org/r/20241001162232.223724-1-Frank.Li@nxp.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i3c: master: Replace hard code 2 with macro I3C_ADDR_SLOT_STATUS_BITS [+ + +]
Author: Frank Li <Frank.Li@nxp.com>
Date:   Mon Oct 21 11:45:06 2024 -0400

    i3c: master: Replace hard code 2 with macro I3C_ADDR_SLOT_STATUS_BITS
    
    [ Upstream commit 16aed0a6520ba01b7d22c32e193fc1ec674f92d4 ]
    
    Replace the hardcoded value 2, which indicates 2 bits for I3C address
    status, with the predefined macro I3C_ADDR_SLOT_STATUS_BITS.
    
    Improve maintainability and extensibility of the code.
    
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Frank Li <Frank.Li@nxp.com>
    Link: https://lore.kernel.org/r/20241021-i3c_dts_assign-v8-1-4098b8bde01e@nxp.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Stable-dep-of: 851bd21cdb55 ("i3c: master: Fix dynamic address leak when 'assigned-address' is present")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i3c: master: support to adjust first broadcast address speed [+ + +]
Author: Carlos Song <carlos.song@nxp.com>
Date:   Tue Sep 10 13:16:25 2024 +0800

    i3c: master: support to adjust first broadcast address speed
    
    [ Upstream commit aef79e189ba2b32f78bd35daf2c0b41f3868a321 ]
    
    According to I3C spec 6.2 Timing Specification, the Open Drain High Period
    of SCL Clock timing for first broadcast address should be adjusted to 200ns
    at least. I3C device working as i2c device will see the broadcast to close
    its Spike Filter then change to work at I3C mode. After that I3C open drain
    SCL high level should be adjusted back.
    
    Signed-off-by: Carlos Song <carlos.song@nxp.com>
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://lore.kernel.org/r/20240910051626.4052552-1-carlos.song@nxp.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Stable-dep-of: 25bc99be5fe5 ("i3c: master: svc: Modify enabled_events bit 7:0 to act as IBI enable counter")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i3c: master: svc: add hot join support [+ + +]
Author: Frank Li <Frank.Li@nxp.com>
Date:   Fri Dec 1 17:25:28 2023 -0500

    i3c: master: svc: add hot join support
    
    [ Upstream commit 05b26c31a4859af9e75b7de77458e99358364fe1 ]
    
    Add hot join support for svc master controller. Disable hot join by
    default.
    User can use sysfs entry to enable hot join.
    
    Signed-off-by: Frank Li <Frank.Li@nxp.com>
    Link: https://lore.kernel.org/r/20231201222532.2431484-3-Frank.Li@nxp.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Stable-dep-of: 25bc99be5fe5 ("i3c: master: svc: Modify enabled_events bit 7:0 to act as IBI enable counter")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i3c: master: svc: fix possible assignment of the same address to two devices [+ + +]
Author: Frank Li <Frank.Li@nxp.com>
Date:   Wed Oct 2 10:50:38 2024 -0400

    i3c: master: svc: fix possible assignment of the same address to two devices
    
    commit 3b2ac810d86eb96e882db80a3320a3848b133208 upstream.
    
    svc_i3c_master_do_daa() {
        ...
        for (i = 0; i < dev_nb; i++) {
            ret = i3c_master_add_i3c_dev_locked(m, addrs[i]);
            if (ret)
                goto rpm_out;
        }
    }
    
    If two devices (A and B) are detected in DAA and address 0xa is assigned to
    device A and 0xb to device B, a failure in i3c_master_add_i3c_dev_locked()
    for device A (addr: 0xa) could prevent device B (addr: 0xb) from being
    registered on the bus. The I3C stack might still consider 0xb a free
    address. If a subsequent Hotjoin occurs, 0xb might be assigned to Device A,
    causing both devices A and B to use the same address 0xb, violating the I3C
    specification.
    
    The return value for i3c_master_add_i3c_dev_locked() should not be checked
    because subsequent steps will scan the entire I3C bus, independent of
    whether i3c_master_add_i3c_dev_locked() returns success.
    
    If device A registration fails, there is still a chance to register device
    B. i3c_master_add_i3c_dev_locked() can reset DAA if a failure occurs while
    retrieving device information.
    
    Cc: stable@kernel.org
    Fixes: 317bacf960a4 ("i3c: master: add enable(disable) hot join in sys entry")
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Frank Li <Frank.Li@nxp.com>
    Link: https://lore.kernel.org/r/20241002-svc-i3c-hj-v6-6-7e6e1d3569ae@nxp.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i3c: master: svc: Modify enabled_events bit 7:0 to act as IBI enable counter [+ + +]
Author: Frank Li <Frank.Li@nxp.com>
Date:   Fri Nov 1 12:50:02 2024 -0400

    i3c: master: svc: Modify enabled_events bit 7:0 to act as IBI enable counter
    
    [ Upstream commit 25bc99be5fe53853053ceeaa328068c49dc1e799 ]
    
    Fix issue where disabling IBI on one device disables the entire IBI
    interrupt. Modify bit 7:0 of enabled_events to serve as an IBI enable
    counter, ensuring that the system IBI interrupt is disabled only when all
    I3C devices have IBI disabled.
    
    Cc: stable@kernel.org
    Fixes: 7ff730ca458e ("i3c: master: svc: enable the interrupt in the enable ibi function")
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Frank Li <Frank.Li@nxp.com>
    Link: https://lore.kernel.org/r/20241101165002.2479794-1-Frank.Li@nxp.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i3c: master: svc: use slow speed for first broadcast address [+ + +]
Author: Carlos Song <carlos.song@nxp.com>
Date:   Tue Sep 10 13:16:26 2024 +0800

    i3c: master: svc: use slow speed for first broadcast address
    
    [ Upstream commit 20ade67bb1645f5ce8f37fa79ddfebbc5b5b24ef ]
    
    I3C controller should support adjusting open drain timing for the first
    broadcast address to make I3C device working as a i2c device can see slow
    broadcast address to close its Spike Filter to change working at i3c mode.
    
    Signed-off-by: Carlos Song <carlos.song@nxp.com>
    Reviewed-by: Frank Li <frank.li@nxp.com>
    Link: https://lore.kernel.org/r/20240910051626.4052552-2-carlos.song@nxp.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Stable-dep-of: 25bc99be5fe5 ("i3c: master: svc: Modify enabled_events bit 7:0 to act as IBI enable counter")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i3c: mipi-i3c-hci: Mask ring interrupts before ring stop request [+ + +]
Author: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Date:   Fri Sep 20 17:44:31 2024 +0300

    i3c: mipi-i3c-hci: Mask ring interrupts before ring stop request
    
    [ Upstream commit 6ca2738174e4ee44edb2ab2d86ce74f015a0cc32 ]
    
    Bus cleanup path in DMA mode may trigger a RING_OP_STAT interrupt when
    the ring is being stopped. Depending on timing between ring stop request
    completion, interrupt handler removal and code execution this may lead
    to a NULL pointer dereference in hci_dma_irq_handler() if it gets to run
    after the io_data pointer is set to NULL in hci_dma_cleanup().
    
    Prevent this my masking the ring interrupts before ring stop request.
    
    Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
    Link: https://lore.kernel.org/r/20240920144432.62370-2-jarkko.nikula@linux.intel.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i3c: Use i3cdev->desc->info instead of calling i3c_device_get_info() to avoid deadlock [+ + +]
Author: Defa Li <defa.li@mediatek.com>
Date:   Thu Nov 7 21:25:39 2024 +0800

    i3c: Use i3cdev->desc->info instead of calling i3c_device_get_info() to avoid deadlock
    
    [ Upstream commit 6cf7b65f7029914dc0cd7db86fac9ee5159008c6 ]
    
    A deadlock may happen since the i3c_master_register() acquires
    &i3cbus->lock twice. See the log below.
    Use i3cdev->desc->info instead of calling i3c_device_info() to
    avoid acquiring the lock twice.
    
    v2:
      - Modified the title and commit message
    
    ============================================
    WARNING: possible recursive locking detected
    6.11.0-mainline
    --------------------------------------------
    init/1 is trying to acquire lock:
    f1ffff80a6a40dc0 (&i3cbus->lock){++++}-{3:3}, at: i3c_bus_normaluse_lock
    
    but task is already holding lock:
    f1ffff80a6a40dc0 (&i3cbus->lock){++++}-{3:3}, at: i3c_master_register
    
    other info that might help us debug this:
     Possible unsafe locking scenario:
    
           CPU0
           ----
      lock(&i3cbus->lock);
      lock(&i3cbus->lock);
    
     *** DEADLOCK ***
    
     May be due to missing lock nesting notation
    
    2 locks held by init/1:
     #0: fcffff809b6798f8 (&dev->mutex){....}-{3:3}, at: __driver_attach
     #1: f1ffff80a6a40dc0 (&i3cbus->lock){++++}-{3:3}, at: i3c_master_register
    
    stack backtrace:
    CPU: 6 UID: 0 PID: 1 Comm: init
    Call trace:
     dump_backtrace+0xfc/0x17c
     show_stack+0x18/0x28
     dump_stack_lvl+0x40/0xc0
     dump_stack+0x18/0x24
     print_deadlock_bug+0x388/0x390
     __lock_acquire+0x18bc/0x32ec
     lock_acquire+0x134/0x2b0
     down_read+0x50/0x19c
     i3c_bus_normaluse_lock+0x14/0x24
     i3c_device_get_info+0x24/0x58
     i3c_device_uevent+0x34/0xa4
     dev_uevent+0x310/0x384
     kobject_uevent_env+0x244/0x414
     kobject_uevent+0x14/0x20
     device_add+0x278/0x460
     device_register+0x20/0x34
     i3c_master_register_new_i3c_devs+0x78/0x154
     i3c_master_register+0x6a0/0x6d4
     mtk_i3c_master_probe+0x3b8/0x4d8
     platform_probe+0xa0/0xe0
     really_probe+0x114/0x454
     __driver_probe_device+0xa0/0x15c
     driver_probe_device+0x3c/0x1ac
     __driver_attach+0xc4/0x1f0
     bus_for_each_dev+0x104/0x160
     driver_attach+0x24/0x34
     bus_add_driver+0x14c/0x294
     driver_register+0x68/0x104
     __platform_driver_register+0x20/0x30
     init_module+0x20/0xfe4
     do_one_initcall+0x184/0x464
     do_init_module+0x58/0x1ec
     load_module+0xefc/0x10c8
     __arm64_sys_finit_module+0x238/0x33c
     invoke_syscall+0x58/0x10c
     el0_svc_common+0xa8/0xdc
     do_el0_svc+0x1c/0x28
     el0_svc+0x50/0xac
     el0t_64_sync_handler+0x70/0xbc
     el0t_64_sync+0x1a8/0x1ac
    
    Signed-off-by: Defa Li <defa.li@mediatek.com>
    Link: https://lore.kernel.org/r/20241107132549.25439-1-defa.li@mediatek.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
igb: Fix potential invalid memory access in igb_init_module() [+ + +]
Author: Yuan Can <yuancan@huawei.com>
Date:   Wed Oct 23 20:10:48 2024 +0800

    igb: Fix potential invalid memory access in igb_init_module()
    
    [ Upstream commit 0566f83d206c7a864abcd741fe39d6e0ae5eef29 ]
    
    The pci_register_driver() can fail and when this happened, the dca_notifier
    needs to be unregistered, otherwise the dca_notifier can be called when
    igb fails to install, resulting to invalid memory access.
    
    Fixes: bbd98fe48a43 ("igb: Fix DCA errors and do not use context index for 82576")
    Signed-off-by: Yuan Can <yuancan@huawei.com>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iio: invensense: fix multiple odr switch when FIFO is off [+ + +]
Author: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Date:   Mon Oct 21 10:38:42 2024 +0200

    iio: invensense: fix multiple odr switch when FIFO is off
    
    commit ef5f5e7b6f73f79538892a8be3a3bee2342acc9f upstream.
    
    When multiple ODR switch happens during FIFO off, the change could
    not be taken into account if you get back to previous FIFO on value.
    For example, if you run sensor buffer at 50Hz, stop, change to
    200Hz, then back to 50Hz and restart buffer, data will be timestamped
    at 200Hz. This due to testing against mult and not new_mult.
    
    To prevent this, let's just run apply_odr automatically when FIFO is
    off. It will also simplify driver code.
    
    Update inv_mpu6050 and inv_icm42600 to delete now useless apply_odr.
    
    Fixes: 95444b9eeb8c ("iio: invensense: fix odr switching to same value")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
    Link: https://patch.msgid.link/20241021-invn-inv-sensors-timestamp-fix-switch-fifo-off-v2-1-39ffd43edcc4@tdk.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: light: ltr501: Add LTER0303 to the supported devices [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Thu Oct 24 22:05:12 2024 +0300

    iio: light: ltr501: Add LTER0303 to the supported devices
    
    [ Upstream commit c26acb09ccbef47d1fddaf0783c1392d0462122c ]
    
    It has been found that the (non-vendor issued) ACPI ID for Lite-On
    LTR303 is present in Microsoft catalog. Add it to the list of the
    supported devices.
    
    Link: https://www.catalog.update.microsoft.com/Search.aspx?q=lter0303
    Closes: https://lore.kernel.org/r/9cdda3e0-d56e-466f-911f-96ffd6f602c8@redhat.com
    Reported-by: Hans de Goede <hdegoede@redhat.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://patch.msgid.link/20241024191200.229894-24-andriy.shevchenko@linux.intel.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: magnetometer: yas530: use signed integer type for clamp limits [+ + +]
Author: Jakob Hauser <jahau@rocketmail.com>
Date:   Fri Nov 29 22:25:07 2024 +0100

    iio: magnetometer: yas530: use signed integer type for clamp limits
    
    [ Upstream commit f1ee5483e40881d8ad5a63aa148b753b5c6a839b ]
    
    In the function yas537_measure() there is a clamp_val() with limits of
    -BIT(13) and BIT(13) - 1.  The input clamp value h[] is of type s32.  The
    BIT() is of type unsigned long integer due to its define in
    include/vdso/bits.h.  The lower limit -BIT(13) is recognized as -8192 but
    expressed as an unsigned long integer.  The size of an unsigned long
    integer differs between 32-bit and 64-bit architectures.  Converting this
    to type s32 may lead to undesired behavior.
    
    Additionally, in the calculation lines h[0], h[1] and h[2] the unsigned
    long integer divisor BIT(13) causes an unsigned division, shifting the
    left-hand side of the equation back and forth, possibly ending up in large
    positive values instead of negative values on 32-bit architectures.
    
    To solve those two issues, declare a signed integer with a value of
    BIT(13).
    
    There is another omission in the clamp line: clamp_val() returns a value
    and it's going nowhere here.  Self-assign it to h[i] to make use of the
    clamp macro.
    
    Finally, replace clamp_val() macro by clamp() because after changing the
    limits from type unsigned long integer to signed integer it's fine that
    way.
    
    Link: https://lkml.kernel.org/r/11609b2243c295d65ab4d47e78c239d61ad6be75.1732914810.git.jahau@rocketmail.com
    Fixes: 65f79b501030 ("iio: magnetometer: yas530: Add YAS537 variant")
    Signed-off-by: Jakob Hauser <jahau@rocketmail.com>
    
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202411230458.dhZwh3TT-lkp@intel.com/
    Closes: https://lore.kernel.org/oe-kbuild-all/202411282222.oF0B4110-lkp@intel.com/
    Reviewed-by: David Laight <david.laight@aculab.com>
    Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Cc: Lars-Peter Clausen <lars@metafoo.de>
    Cc: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
io_uring/tctx: work around xa_store() allocation error issue [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Fri Nov 29 07:20:28 2024 -0700

    io_uring/tctx: work around xa_store() allocation error issue
    
    [ Upstream commit 7eb75ce7527129d7f1fee6951566af409a37a1c4 ]
    
    syzbot triggered the following WARN_ON:
    
    WARNING: CPU: 0 PID: 16 at io_uring/tctx.c:51 __io_uring_free+0xfa/0x140 io_uring/tctx.c:51
    
    which is the
    
    WARN_ON_ONCE(!xa_empty(&tctx->xa));
    
    sanity check in __io_uring_free() when a io_uring_task is going through
    its final put. The syzbot test case includes injecting memory allocation
    failures, and it very much looks like xa_store() can fail one of its
    memory allocations and end up with ->head being non-NULL even though no
    entries exist in the xarray.
    
    Until this issue gets sorted out, work around it by attempting to
    iterate entries in our xarray, and WARN_ON_ONCE() if one is found.
    
    Reported-by: syzbot+cc36d44ec9f368e443d3@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/io-uring/673c1643.050a0220.87769.0066.GAE@google.com/
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iommu/arm-smmu: Defer probe of clients after smmu device bound [+ + +]
Author: Pratyush Brahma <quic_pbrahma@quicinc.com>
Date:   Fri Oct 4 14:34:28 2024 +0530

    iommu/arm-smmu: Defer probe of clients after smmu device bound
    
    commit 229e6ee43d2a160a1592b83aad620d6027084aad upstream.
    
    Null pointer dereference occurs due to a race between smmu
    driver probe and client driver probe, when of_dma_configure()
    for client is called after the iommu_device_register() for smmu driver
    probe has executed but before the driver_bound() for smmu driver
    has been called.
    
    Following is how the race occurs:
    
    T1:Smmu device probe            T2: Client device probe
    
    really_probe()
    arm_smmu_device_probe()
    iommu_device_register()
                                            really_probe()
                                            platform_dma_configure()
                                            of_dma_configure()
                                            of_dma_configure_id()
                                            of_iommu_configure()
                                            iommu_probe_device()
                                            iommu_init_device()
                                            arm_smmu_probe_device()
                                            arm_smmu_get_by_fwnode()
                                                    driver_find_device_by_fwnode()
                                                    driver_find_device()
                                                    next_device()
                                                    klist_next()
                                                        /* null ptr
                                                           assigned to smmu */
                                            /* null ptr dereference
                                               while smmu->streamid_mask */
    driver_bound()
            klist_add_tail()
    
    When this null smmu pointer is dereferenced later in
    arm_smmu_probe_device, the device crashes.
    
    Fix this by deferring the probe of the client device
    until the smmu device has bound to the arm smmu driver.
    
    Fixes: 021bb8420d44 ("iommu/arm-smmu: Wire up generic configuration support")
    Cc: stable@vger.kernel.org
    Co-developed-by: Prakash Gupta <quic_guptap@quicinc.com>
    Signed-off-by: Prakash Gupta <quic_guptap@quicinc.com>
    Signed-off-by: Pratyush Brahma <quic_pbrahma@quicinc.com>
    Link: https://lore.kernel.org/r/20241004090428.2035-1-quic_pbrahma@quicinc.com
    [will: Add comment]
    Signed-off-by: Will Deacon <will@kernel.org>
    [rm: backport for context conflict prior to 6.8]
    Signed-off-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipv6: introduce dst_rt6_info() helper [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Apr 26 15:19:52 2024 +0000

    ipv6: introduce dst_rt6_info() helper
    
    [ Upstream commit e8dfd42c17faf183415323db1ef0c977be0d6489 ]
    
    Instead of (struct rt6_info *)dst casts, we can use :
    
     #define dst_rt6_info(_ptr) \
             container_of_const(_ptr, struct rt6_info, dst)
    
    Some places needed missing const qualifiers :
    
    ip6_confirm_neigh(), ipv6_anycast_destination(),
    ipv6_unicast_destination(), has_gateway()
    
    v2: added missing parts (David Ahern)
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 3301ab7d5aeb ("net/ipv6: release expired exception dst cached in socket")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipvs: fix UB due to uninitialized stack access in ip_vs_protocol_init() [+ + +]
Author: Jinghao Jia <jinghao7@illinois.edu>
Date:   Sat Nov 23 03:42:56 2024 -0600

    ipvs: fix UB due to uninitialized stack access in ip_vs_protocol_init()
    
    [ Upstream commit 146b6f1112eb30a19776d6c323c994e9d67790db ]
    
    Under certain kernel configurations when building with Clang/LLVM, the
    compiler does not generate a return or jump as the terminator
    instruction for ip_vs_protocol_init(), triggering the following objtool
    warning during build time:
    
      vmlinux.o: warning: objtool: ip_vs_protocol_init() falls through to next function __initstub__kmod_ip_vs_rr__935_123_ip_vs_rr_init6()
    
    At runtime, this either causes an oops when trying to load the ipvs
    module or a boot-time panic if ipvs is built-in. This same issue has
    been reported by the Intel kernel test robot previously.
    
    Digging deeper into both LLVM and the kernel code reveals this to be a
    undefined behavior problem. ip_vs_protocol_init() uses a on-stack buffer
    of 64 chars to store the registered protocol names and leaves it
    uninitialized after definition. The function calls strnlen() when
    concatenating protocol names into the buffer. With CONFIG_FORTIFY_SOURCE
    strnlen() performs an extra step to check whether the last byte of the
    input char buffer is a null character (commit 3009f891bb9f ("fortify:
    Allow strlen() and strnlen() to pass compile-time known lengths")).
    This, together with possibly other configurations, cause the following
    IR to be generated:
    
      define hidden i32 @ip_vs_protocol_init() local_unnamed_addr #5 section ".init.text" align 16 !kcfi_type !29 {
        %1 = alloca [64 x i8], align 16
        ...
    
      14:                                               ; preds = %11
        %15 = getelementptr inbounds i8, ptr %1, i64 63
        %16 = load i8, ptr %15, align 1
        %17 = tail call i1 @llvm.is.constant.i8(i8 %16)
        %18 = icmp eq i8 %16, 0
        %19 = select i1 %17, i1 %18, i1 false
        br i1 %19, label %20, label %23
    
      20:                                               ; preds = %14
        %21 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %1) #23
        ...
    
      23:                                               ; preds = %14, %11, %20
        %24 = call i64 @strnlen(ptr noundef nonnull dereferenceable(1) %1, i64 noundef 64) #24
        ...
      }
    
    The above code calculates the address of the last char in the buffer
    (value %15) and then loads from it (value %16). Because the buffer is
    never initialized, the LLVM GVN pass marks value %16 as undefined:
    
      %13 = getelementptr inbounds i8, ptr %1, i64 63
      br i1 undef, label %14, label %17
    
    This gives later passes (SCCP, in particular) more DCE opportunities by
    propagating the undef value further, and eventually removes everything
    after the load on the uninitialized stack location:
    
      define hidden i32 @ip_vs_protocol_init() local_unnamed_addr #0 section ".init.text" align 16 !kcfi_type !11 {
        %1 = alloca [64 x i8], align 16
        ...
    
      12:                                               ; preds = %11
        %13 = getelementptr inbounds i8, ptr %1, i64 63
        unreachable
      }
    
    In this way, the generated native code will just fall through to the
    next function, as LLVM does not generate any code for the unreachable IR
    instruction and leaves the function without a terminator.
    
    Zero the on-stack buffer to avoid this possible UB.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202402100205.PWXIz1ZK-lkp@intel.com/
    Co-developed-by: Ruowen Qin <ruqin@redhat.com>
    Signed-off-by: Ruowen Qin <ruqin@redhat.com>
    Signed-off-by: Jinghao Jia <jinghao7@illinois.edu>
    Acked-by: Julian Anastasov <ja@ssi.bg>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iTCO_wdt: mask NMI_NOW bit for update_no_reboot_bit() call [+ + +]
Author: Oleksandr Ocheretnyi <oocheret@cisco.com>
Date:   Fri Sep 13 12:14:03 2024 -0700

    iTCO_wdt: mask NMI_NOW bit for update_no_reboot_bit() call
    
    [ Upstream commit daa814d784ac034c62ab3fb0ef83daeafef527e2 ]
    
    Commit da23b6faa8bf ("watchdog: iTCO: Add support for Cannon Lake
    PCH iTCO") does not mask NMI_NOW bit during TCO1_CNT register's
    value comparison for update_no_reboot_bit() call causing following
    failure:
    
       ...
       iTCO_vendor_support: vendor-support=0
       iTCO_wdt iTCO_wdt: unable to reset NO_REBOOT flag, device
                                        disabled by hardware/BIOS
       ...
    
    and this can lead to unexpected NMIs later during regular
    crashkernel's workflow because of watchdog probe call failures.
    
    This change masks NMI_NOW bit for TCO1_CNT register values to
    avoid unexpected NMI_NOW bit inversions.
    
    Fixes: da23b6faa8bf ("watchdog: iTCO: Add support for Cannon Lake PCH iTCO")
    Signed-off-by: Oleksandr Ocheretnyi <oocheret@cisco.com>
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Link: https://lore.kernel.org/r/20240913191403.2560805-1-oocheret@cisco.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
 
ixgbe: downgrade logging of unsupported VF API version to debug [+ + +]
Author: Jacob Keller <jacob.e.keller@intel.com>
Date:   Fri Nov 1 16:05:43 2024 -0700

    ixgbe: downgrade logging of unsupported VF API version to debug
    
    [ Upstream commit 15915b43a7fb938934bb7fc4290127218859d795 ]
    
    The ixgbe PF driver logs an info message when a VF attempts to negotiate an
    API version which it does not support:
    
      VF 0 requested invalid api version 6
    
    The ixgbevf driver attempts to load with mailbox API v1.5, which is
    required for best compatibility with other hosts such as the ESX VMWare PF.
    
    The Linux PF only supports API v1.4, and does not currently have support
    for the v1.5 API.
    
    The logged message can confuse users, as the v1.5 API is valid, but just
    happens to not currently be supported by the Linux PF.
    
    Downgrade the info message to a debug message, and fix the language to
    use 'unsupported' instead of 'invalid' to improve message clarity.
    
    Long term, we should investigate whether the improvements in the v1.5 API
    make sense for the Linux PF, and if so implement them properly. This may
    require yet another API version to resolve issues with negotiating IPSEC
    offload support.
    
    Fixes: 339f28964147 ("ixgbevf: Add support for new mailbox communication between PF and VF")
    Reported-by: Yifei Liu <yifei.l.liu@oracle.com>
    Link: https://lore.kernel.org/intel-wired-lan/20240301235837.3741422-1-yifei.l.liu@oracle.com/
    Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ixgbevf: stop attempting IPSEC offload on Mailbox API 1.5 [+ + +]
Author: Jacob Keller <jacob.e.keller@intel.com>
Date:   Fri Nov 1 16:05:42 2024 -0700

    ixgbevf: stop attempting IPSEC offload on Mailbox API 1.5
    
    [ Upstream commit d0725312adf5a803de8f621bd1b12ba7a6464a29 ]
    
    Commit 339f28964147 ("ixgbevf: Add support for new mailbox communication
    between PF and VF") added support for v1.5 of the PF to VF mailbox
    communication API. This commit mistakenly enabled IPSEC offload for API
    v1.5.
    
    No implementation of the v1.5 API has support for IPSEC offload. This
    offload is only supported by the Linux PF as mailbox API v1.4. In fact, the
    v1.5 API is not implemented in any Linux PF.
    
    Attempting to enable IPSEC offload on a PF which supports v1.5 API will not
    work. Only the Linux upstream ixgbe and ixgbevf support IPSEC offload, and
    only as part of the v1.4 API.
    
    Fix the ixgbevf Linux driver to stop attempting IPSEC offload when
    the mailbox API does not support it.
    
    The existing API design choice makes it difficult to support future API
    versions, as other non-Linux hosts do not implement IPSEC offload. If we
    add support for v1.5 to the Linux PF, then we lose support for IPSEC
    offload.
    
    A full solution likely requires a new mailbox API with a proper negotiation
    to check that IPSEC is actually supported by the host.
    
    Fixes: 339f28964147 ("ixgbevf: Add support for new mailbox communication between PF and VF")
    Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
jffs2: Fix rtime decompressor [+ + +]
Author: Richard Weinberger <richard@nod.at>
Date:   Tue Dec 3 12:27:15 2024 +0100

    jffs2: Fix rtime decompressor
    
    commit b29bf7119d6bbfd04aabb8d82b060fe2a33ef890 upstream.
    
    The fix for a memory corruption contained a off-by-one error and
    caused the compressor to fail in legit cases.
    
    Cc: Kinsey Moore <kinsey.moore@oarcorp.com>
    Cc: stable@vger.kernel.org
    Fixes: fe051552f5078 ("jffs2: Prevent rtime decompress memory corruption")
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

jffs2: Prevent rtime decompress memory corruption [+ + +]
Author: Kinsey Moore <kinsey.moore@oarcorp.com>
Date:   Tue Jul 23 15:58:05 2024 -0500

    jffs2: Prevent rtime decompress memory corruption
    
    commit fe051552f5078fa02d593847529a3884305a6ffe upstream.
    
    The rtime decompression routine does not fully check bounds during the
    entirety of the decompression pass and can corrupt memory outside the
    decompression buffer if the compressed data is corrupted. This adds the
    required check to prevent this failure mode.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Kinsey Moore <kinsey.moore@oarcorp.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
jfs: add a check to prevent array-index-out-of-bounds in dbAdjTree [+ + +]
Author: Nihar Chaithanya <niharchaithanya@gmail.com>
Date:   Wed Oct 9 01:51:38 2024 +0530

    jfs: add a check to prevent array-index-out-of-bounds in dbAdjTree
    
    [ Upstream commit a174706ba4dad895c40b1d2277bade16dfacdcd9 ]
    
    When the value of lp is 0 at the beginning of the for loop, it will
    become negative in the next assignment and we should bail out.
    
    Reported-by: syzbot+412dea214d8baa3f7483@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=412dea214d8baa3f7483
    Tested-by: syzbot+412dea214d8baa3f7483@syzkaller.appspotmail.com
    Signed-off-by: Nihar Chaithanya <niharchaithanya@gmail.com>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

jfs: array-index-out-of-bounds fix in dtReadFirst [+ + +]
Author: Ghanshyam Agrawal <ghanshyam1898@gmail.com>
Date:   Sat Sep 28 14:07:22 2024 +0530

    jfs: array-index-out-of-bounds fix in dtReadFirst
    
    [ Upstream commit ca84a2c9be482836b86d780244f0357e5a778c46 ]
    
    The value of stbl can be sometimes out of bounds due
    to a bad filesystem. Added a check with appopriate return
    of error code in that case.
    
    Reported-by: syzbot+65fa06e29859e41a83f3@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=65fa06e29859e41a83f3
    Signed-off-by: Ghanshyam Agrawal <ghanshyam1898@gmail.com>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

jfs: fix array-index-out-of-bounds in jfs_readdir [+ + +]
Author: Ghanshyam Agrawal <ghanshyam1898@gmail.com>
Date:   Tue Oct 1 11:35:47 2024 +0530

    jfs: fix array-index-out-of-bounds in jfs_readdir
    
    [ Upstream commit 839f102efb168f02dfdd46717b7c6dddb26b015e ]
    
    The stbl might contain some invalid values. Added a check to
    return error code in that case.
    
    Reported-by: syzbot+0315f8fe99120601ba88@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=0315f8fe99120601ba88
    Signed-off-by: Ghanshyam Agrawal <ghanshyam1898@gmail.com>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

jfs: fix shift-out-of-bounds in dbSplit [+ + +]
Author: Ghanshyam Agrawal <ghanshyam1898@gmail.com>
Date:   Mon Sep 30 13:42:18 2024 +0530

    jfs: fix shift-out-of-bounds in dbSplit
    
    [ Upstream commit a5f5e4698f8abbb25fe4959814093fb5bfa1aa9d ]
    
    When dmt_budmin is less than zero, it causes errors
    in the later stages. Added a check to return an error beforehand
    in dbAllocCtl itself.
    
    Reported-by: syzbot+b5ca8a249162c4b9a7d0@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=b5ca8a249162c4b9a7d0
    Signed-off-by: Ghanshyam Agrawal <ghanshyam1898@gmail.com>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kasan: make report_lock a raw spinlock [+ + +]
Author: Jared Kangas <jkangas@redhat.com>
Date:   Tue Nov 19 13:02:34 2024 -0800

    kasan: make report_lock a raw spinlock
    
    commit e30a0361b8515d424c73c67de1a43e45a13b8ba2 upstream.
    
    If PREEMPT_RT is enabled, report_lock is a sleeping spinlock and must not
    be locked when IRQs are disabled.  However, KASAN reports may be triggered
    in such contexts.  For example:
    
            char *s = kzalloc(1, GFP_KERNEL);
            kfree(s);
            local_irq_disable();
            char c = *s;  /* KASAN report here leads to spin_lock() */
            local_irq_enable();
    
    Make report_spinlock a raw spinlock to prevent rescheduling when
    PREEMPT_RT is enabled.
    
    Link: https://lkml.kernel.org/r/20241119210234.1602529-1-jkangas@redhat.com
    Fixes: 342a93247e08 ("locking/spinlock: Provide RT variant header: <linux/spinlock_rt.h>")
    Signed-off-by: Jared Kangas <jkangas@redhat.com>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Andrey Konovalov <andreyknvl@gmail.com>
    Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kcsan: Turn report_filterlist_lock into a raw_spinlock [+ + +]
Author: Marco Elver <elver@google.com>
Date:   Tue Oct 1 16:00:45 2024 +0200

    kcsan: Turn report_filterlist_lock into a raw_spinlock
    
    [ Upstream commit 59458fa4ddb47e7891c61b4a928d13d5f5b00aa0 ]
    
    Ran Xiaokai reports that with a KCSAN-enabled PREEMPT_RT kernel, we can see
    splats like:
    
    | BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
    | in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 0, name: swapper/1
    | preempt_count: 10002, expected: 0
    | RCU nest depth: 0, expected: 0
    | no locks held by swapper/1/0.
    | irq event stamp: 156674
    | hardirqs last  enabled at (156673): [<ffffffff81130bd9>] do_idle+0x1f9/0x240
    | hardirqs last disabled at (156674): [<ffffffff82254f84>] sysvec_apic_timer_interrupt+0x14/0xc0
    | softirqs last  enabled at (0): [<ffffffff81099f47>] copy_process+0xfc7/0x4b60
    | softirqs last disabled at (0): [<0000000000000000>] 0x0
    | Preemption disabled at:
    | [<ffffffff814a3e2a>] paint_ptr+0x2a/0x90
    | CPU: 1 UID: 0 PID: 0 Comm: swapper/1 Not tainted 6.11.0+ #3
    | Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-0-ga698c8995f-prebuilt.qemu.org 04/01/2014
    | Call Trace:
    |  <IRQ>
    |  dump_stack_lvl+0x7e/0xc0
    |  dump_stack+0x1d/0x30
    |  __might_resched+0x1a2/0x270
    |  rt_spin_lock+0x68/0x170
    |  kcsan_skip_report_debugfs+0x43/0xe0
    |  print_report+0xb5/0x590
    |  kcsan_report_known_origin+0x1b1/0x1d0
    |  kcsan_setup_watchpoint+0x348/0x650
    |  __tsan_unaligned_write1+0x16d/0x1d0
    |  hrtimer_interrupt+0x3d6/0x430
    |  __sysvec_apic_timer_interrupt+0xe8/0x3a0
    |  sysvec_apic_timer_interrupt+0x97/0xc0
    |  </IRQ>
    
    On a detected data race, KCSAN's reporting logic checks if it should
    filter the report. That list is protected by the report_filterlist_lock
    *non-raw* spinlock which may sleep on RT kernels.
    
    Since KCSAN may report data races in any context, convert it to a
    raw_spinlock.
    
    This requires being careful about when to allocate memory for the filter
    list itself which can be done via KCSAN's debugfs interface. Concurrent
    modification of the filter list via debugfs should be rare: the chosen
    strategy is to optimistically pre-allocate memory before the critical
    section and discard if unused.
    
    Link: https://lore.kernel.org/all/20240925143154.2322926-1-ranxiaokai627@163.com/
    Reported-by: Ran Xiaokai <ran.xiaokai@zte.com.cn>
    Tested-by: Ran Xiaokai <ran.xiaokai@zte.com.cn>
    Signed-off-by: Marco Elver <elver@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
KMSAN: uninit-value in inode_go_dump (5) [+ + +]
Author: Qianqiang Liu <qianqiang.liu@163.com>
Date:   Mon Oct 21 22:58:01 2024 +0200

    KMSAN: uninit-value in inode_go_dump (5)
    
    [ Upstream commit f9417fcfca3c5e30a0b961e7250fab92cfa5d123 ]
    
    When mounting of a corrupted disk image fails, the error message printed
    can reference uninitialized inode fields.  To prevent that from happening,
    always initialize those fields.
    
    Reported-by: syzbot+aa0730b0a42646eb1359@syzkaller.appspotmail.com
    Signed-off-by: Qianqiang Liu <qianqiang.liu@163.com>
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kselftest/arm64: Don't leak pipe fds in pac.exec_sign_all() [+ + +]
Author: Mark Brown <broonie@kernel.org>
Date:   Mon Nov 11 16:18:55 2024 +0000

    kselftest/arm64: Don't leak pipe fds in pac.exec_sign_all()
    
    [ Upstream commit 27141b690547da5650a420f26ec369ba142a9ebb ]
    
    The PAC exec_sign_all() test spawns some child processes, creating pipes
    to be stdin and stdout for the child. It cleans up most of the file
    descriptors that are created as part of this but neglects to clean up the
    parent end of the child stdin and stdout. Add the missing close() calls.
    
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Link: https://lore.kernel.org/r/20241111-arm64-pac-test-collisions-v1-1-171875f37e44@kernel.org
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

kselftest/arm64: Log fp-stress child startup errors to stdout [+ + +]
Author: Mark Brown <broonie@kernel.org>
Date:   Wed Oct 23 00:20:45 2024 +0100

    kselftest/arm64: Log fp-stress child startup errors to stdout
    
    [ Upstream commit dca93d29845dfed60910ba13dbfb6ae6a0e19f6d ]
    
    Currently if we encounter an error between fork() and exec() of a child
    process we log the error to stderr. This means that the errors don't get
    annotated with the child information which makes diagnostics harder and
    means that if we miss the exit signal from the child we can deadlock
    waiting for output from the child. Improve robustness and output quality
    by logging to stdout instead.
    
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Link: https://lore.kernel.org/r/20241023-arm64-fp-stress-exec-fail-v1-1-ee3c62932c15@kernel.org
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ksmbd: fix Out-of-Bounds Read in ksmbd_vfs_stream_read [+ + +]
Author: Jordy Zomer <jordyzomer@google.com>
Date:   Thu Nov 28 09:32:45 2024 +0900

    ksmbd: fix Out-of-Bounds Read in ksmbd_vfs_stream_read
    
    commit fc342cf86e2dc4d2edb0fc2ff5e28b6c7845adb9 upstream.
    
    An offset from client could be a negative value, It could lead
    to an out-of-bounds read from the stream_buf.
    Note that this issue is coming when setting
    'vfs objects = streams_xattr parameter' in ksmbd.conf.
    
    Cc: stable@vger.kernel.org # v5.15+
    Reported-by: Jordy Zomer <jordyzomer@google.com>
    Signed-off-by: Jordy Zomer <jordyzomer@google.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: fix Out-of-Bounds Write in ksmbd_vfs_stream_write [+ + +]
Author: Jordy Zomer <jordyzomer@google.com>
Date:   Thu Nov 28 09:33:25 2024 +0900

    ksmbd: fix Out-of-Bounds Write in ksmbd_vfs_stream_write
    
    commit 313dab082289e460391c82d855430ec8a28ddf81 upstream.
    
    An offset from client could be a negative value, It could allows
    to write data outside the bounds of the allocated buffer.
    Note that this issue is coming when setting
    'vfs objects = streams_xattr parameter' in ksmbd.conf.
    
    Cc: stable@vger.kernel.org # v5.15+
    Reported-by: Jordy Zomer <jordyzomer@google.com>
    Signed-off-by: Jordy Zomer <jordyzomer@google.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
KVM: arm64: Change kvm_handle_mmio_return() return polarity [+ + +]
Author: Fuad Tabba <tabba@google.com>
Date:   Tue Apr 23 16:05:22 2024 +0100

    KVM: arm64: Change kvm_handle_mmio_return() return polarity
    
    [ Upstream commit cc81b6dfc3bc82c3a2600eefbd3823bdb2190197 ]
    
    Most exit handlers return <= 0 to indicate that the host needs to
    handle the exit. Make kvm_handle_mmio_return() consistent with
    the exit handlers in handle_exit(). This makes the code easier to
    reason about, and makes it easier to add other handlers in future
    patches.
    
    No functional change intended.
    
    Signed-off-by: Fuad Tabba <tabba@google.com>
    Acked-by: Oliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20240423150538.2103045-15-tabba@google.com
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Stable-dep-of: e735a5da6442 ("KVM: arm64: Don't retire aborted MMIO instruction")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: arm64: Don't retire aborted MMIO instruction [+ + +]
Author: Oliver Upton <oliver.upton@linux.dev>
Date:   Fri Oct 25 20:31:03 2024 +0000

    KVM: arm64: Don't retire aborted MMIO instruction
    
    [ Upstream commit e735a5da64420a86be370b216c269b5dd8e830e2 ]
    
    Returning an abort to the guest for an unsupported MMIO access is a
    documented feature of the KVM UAPI. Nevertheless, it's clear that this
    plumbing has seen limited testing, since userspace can trivially cause a
    WARN in the MMIO return:
    
      WARNING: CPU: 0 PID: 30558 at arch/arm64/include/asm/kvm_emulate.h:536 kvm_handle_mmio_return+0x46c/0x5c4 arch/arm64/include/asm/kvm_emulate.h:536
      Call trace:
       kvm_handle_mmio_return+0x46c/0x5c4 arch/arm64/include/asm/kvm_emulate.h:536
       kvm_arch_vcpu_ioctl_run+0x98/0x15b4 arch/arm64/kvm/arm.c:1133
       kvm_vcpu_ioctl+0x75c/0xa78 virt/kvm/kvm_main.c:4487
       __do_sys_ioctl fs/ioctl.c:51 [inline]
       __se_sys_ioctl fs/ioctl.c:893 [inline]
       __arm64_sys_ioctl+0x14c/0x1c8 fs/ioctl.c:893
       __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline]
       invoke_syscall+0x98/0x2b8 arch/arm64/kernel/syscall.c:49
       el0_svc_common+0x1e0/0x23c arch/arm64/kernel/syscall.c:132
       do_el0_svc+0x48/0x58 arch/arm64/kernel/syscall.c:151
       el0_svc+0x38/0x68 arch/arm64/kernel/entry-common.c:712
       el0t_64_sync_handler+0x90/0xfc arch/arm64/kernel/entry-common.c:730
       el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:598
    
    The splat is complaining that KVM is advancing PC while an exception is
    pending, i.e. that KVM is retiring the MMIO instruction despite a
    pending synchronous external abort. Womp womp.
    
    Fix the glaring UAPI bug by skipping over all the MMIO emulation in
    case there is a pending synchronous exception. Note that while userspace
    is capable of pending an asynchronous exception (SError, IRQ, or FIQ),
    it is still safe to retire the MMIO instruction in this case as (1) they
    are by definition asynchronous, and (2) KVM relies on hardware support
    for pending/delivering these exceptions instead of the software state
    machine for advancing PC.
    
    Cc: stable@vger.kernel.org
    Fixes: da345174ceca ("KVM: arm/arm64: Allow user injection of external data aborts")
    Reported-by: Alexander Potapenko <glider@google.com>
    Reviewed-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20241025203106.3529261-2-oliver.upton@linux.dev
    Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: x86/mmu: Ensure that kvm_release_pfn_clean() takes exact pfn from kvm_faultin_pfn() [+ + +]
Author: Nikolay Kuratov <kniv@yandex-team.ru>
Date:   Sun Dec 8 11:38:30 2024 +0300

    KVM: x86/mmu: Ensure that kvm_release_pfn_clean() takes exact pfn from kvm_faultin_pfn()
    
    Since 5.16 and prior to 6.13 KVM can't be used with FSDAX
    guest memory (PMD pages). To reproduce the issue you need to reserve
    guest memory with `memmap=` cmdline, create and mount FS in DAX mode
    (tested both XFS and ext4), see doc link below. ndctl command for test:
    ndctl create-namespace -v -e namespace1.0 --map=dev --mode=fsdax -a 2M
    Then pass memory object to qemu like:
    -m 8G -object memory-backend-file,id=ram0,size=8G,\
    mem-path=/mnt/pmem/guestmem,share=on,prealloc=on,dump=off,align=2097152 \
    -numa node,memdev=ram0,cpus=0-1
    QEMU fails to run guest with error: kvm run failed Bad address
    and there are two warnings in dmesg:
    WARN_ON_ONCE(!page_count(page)) in kvm_is_zone_device_page() and
    WARN_ON_ONCE(folio_ref_count(folio) <= 0) in try_grab_folio() (v6.6.63)
    
    It looks like in the past assumption was made that pfn won't change from
    faultin_pfn() to release_pfn_clean(), e.g. see
    commit 4cd071d13c5c ("KVM: x86/mmu: Move calls to thp_adjust() down a level")
    But kvm_page_fault structure made pfn part of mutable state, so
    now release_pfn_clean() can take hugepage-adjusted pfn.
    And it works for all cases (/dev/shm, hugetlb, devdax) except fsdax.
    Apparently in fsdax mode faultin-pfn and adjusted-pfn may refer to
    different folios, so we're getting get_page/put_page imbalance.
    
    To solve this preserve faultin pfn in separate local variable
    and pass it in kvm_release_pfn_clean().
    
    Patch tested for all mentioned guest memory backends with tdp_mmu={0,1}.
    
    No bug in upstream as it was solved fundamentally by
    commit 8dd861cc07e2 ("KVM: x86/mmu: Put refcounted pages instead of blindly releasing pfns")
    and related patch series.
    
    Link: https://nvdimm.docs.kernel.org/2mib_fs_dax.html
    Fixes: 2f6305dd5676 ("KVM: MMU: change kvm_tdp_mmu_map() arguments to kvm_page_fault")
    Co-developed-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Reviewed-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Nikolay Kuratov <kniv@yandex-team.ru>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
leds: class: Protect brightness_show() with led_cdev->led_access mutex [+ + +]
Author: Mukesh Ojha <quic_mojha@quicinc.com>
Date:   Sun Nov 3 21:35:27 2024 +0530

    leds: class: Protect brightness_show() with led_cdev->led_access mutex
    
    [ Upstream commit 4ca7cd938725a4050dcd62ae9472e931d603118d ]
    
    There is NULL pointer issue observed if from Process A where hid device
    being added which results in adding a led_cdev addition and later a
    another call to access of led_cdev attribute from Process B can result
    in NULL pointer issue.
    
    Use mutex led_cdev->led_access to protect access to led->cdev and its
    attribute inside brightness_show() and max_brightness_show() and also
    update the comment for mutex that it should be used to protect the led
    class device fields.
    
            Process A                               Process B
    
     kthread+0x114
     worker_thread+0x244
     process_scheduled_works+0x248
     uhid_device_add_worker+0x24
     hid_add_device+0x120
     device_add+0x268
     bus_probe_device+0x94
     device_initial_probe+0x14
     __device_attach+0xfc
     bus_for_each_drv+0x10c
     __device_attach_driver+0x14c
     driver_probe_device+0x3c
     __driver_probe_device+0xa0
     really_probe+0x190
     hid_device_probe+0x130
     ps_probe+0x990
     ps_led_register+0x94
     devm_led_classdev_register_ext+0x58
     led_classdev_register_ext+0x1f8
     device_create_with_groups+0x48
     device_create_groups_vargs+0xc8
     device_add+0x244
     kobject_uevent+0x14
     kobject_uevent_env[jt]+0x224
     mutex_unlock[jt]+0xc4
     __mutex_unlock_slowpath+0xd4
     wake_up_q+0x70
     try_to_wake_up[jt]+0x48c
     preempt_schedule_common+0x28
     __schedule+0x628
     __switch_to+0x174
                                                    el0t_64_sync+0x1a8/0x1ac
                                                    el0t_64_sync_handler+0x68/0xbc
                                                    el0_svc+0x38/0x68
                                                    do_el0_svc+0x1c/0x28
                                                    el0_svc_common+0x80/0xe0
                                                    invoke_syscall+0x58/0x114
                                                    __arm64_sys_read+0x1c/0x2c
                                                    ksys_read+0x78/0xe8
                                                    vfs_read+0x1e0/0x2c8
                                                    kernfs_fop_read_iter+0x68/0x1b4
                                                    seq_read_iter+0x158/0x4ec
                                                    kernfs_seq_show+0x44/0x54
                                                    sysfs_kf_seq_show+0xb4/0x130
                                                    dev_attr_show+0x38/0x74
                                                    brightness_show+0x20/0x4c
                                                    dualshock4_led_get_brightness+0xc/0x74
    
    [ 3313.874295][ T4013] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000060
    [ 3313.874301][ T4013] Mem abort info:
    [ 3313.874303][ T4013]   ESR = 0x0000000096000006
    [ 3313.874305][ T4013]   EC = 0x25: DABT (current EL), IL = 32 bits
    [ 3313.874307][ T4013]   SET = 0, FnV = 0
    [ 3313.874309][ T4013]   EA = 0, S1PTW = 0
    [ 3313.874311][ T4013]   FSC = 0x06: level 2 translation fault
    [ 3313.874313][ T4013] Data abort info:
    [ 3313.874314][ T4013]   ISV = 0, ISS = 0x00000006, ISS2 = 0x00000000
    [ 3313.874316][ T4013]   CM = 0, WnR = 0, TnD = 0, TagAccess = 0
    [ 3313.874318][ T4013]   GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
    [ 3313.874320][ T4013] user pgtable: 4k pages, 39-bit VAs, pgdp=00000008f2b0a000
    ..
    
    [ 3313.874332][ T4013] Dumping ftrace buffer:
    [ 3313.874334][ T4013]    (ftrace buffer empty)
    ..
    ..
    [ dd3313.874639][ T4013] CPU: 6 PID: 4013 Comm: InputReader
    [ 3313.874648][ T4013] pc : dualshock4_led_get_brightness+0xc/0x74
    [ 3313.874653][ T4013] lr : led_update_brightness+0x38/0x60
    [ 3313.874656][ T4013] sp : ffffffc0b910bbd0
    ..
    ..
    [ 3313.874685][ T4013] Call trace:
    [ 3313.874687][ T4013]  dualshock4_led_get_brightness+0xc/0x74
    [ 3313.874690][ T4013]  brightness_show+0x20/0x4c
    [ 3313.874692][ T4013]  dev_attr_show+0x38/0x74
    [ 3313.874696][ T4013]  sysfs_kf_seq_show+0xb4/0x130
    [ 3313.874700][ T4013]  kernfs_seq_show+0x44/0x54
    [ 3313.874703][ T4013]  seq_read_iter+0x158/0x4ec
    [ 3313.874705][ T4013]  kernfs_fop_read_iter+0x68/0x1b4
    [ 3313.874708][ T4013]  vfs_read+0x1e0/0x2c8
    [ 3313.874711][ T4013]  ksys_read+0x78/0xe8
    [ 3313.874714][ T4013]  __arm64_sys_read+0x1c/0x2c
    [ 3313.874718][ T4013]  invoke_syscall+0x58/0x114
    [ 3313.874721][ T4013]  el0_svc_common+0x80/0xe0
    [ 3313.874724][ T4013]  do_el0_svc+0x1c/0x28
    [ 3313.874727][ T4013]  el0_svc+0x38/0x68
    [ 3313.874730][ T4013]  el0t_64_sync_handler+0x68/0xbc
    [ 3313.874732][ T4013]  el0t_64_sync+0x1a8/0x1ac
    
    Signed-off-by: Mukesh Ojha <quic_mojha@quicinc.com>
    Reviewed-by: Anish Kumar <yesanishhere@gmail.com>
    Link: https://lore.kernel.org/r/20241103160527.82487-1-quic_mojha@quicinc.com
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
lib: stackinit: hide never-taken branch from compiler [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Sun Nov 17 03:38:13 2024 -0800

    lib: stackinit: hide never-taken branch from compiler
    
    commit 5c3793604f91123bf49bc792ce697a0bef4c173c upstream.
    
    The never-taken branch leads to an invalid bounds condition, which is by
    design. To avoid the unwanted warning from the compiler, hide the
    variable from the optimizer.
    
    ../lib/stackinit_kunit.c: In function 'do_nothing_u16_zero':
    ../lib/stackinit_kunit.c:51:49: error: array subscript 1 is outside array bounds of 'u16[0]' {aka 'short unsigned int[]'} [-Werror=array-bounds=]
       51 | #define DO_NOTHING_RETURN_SCALAR(ptr)           *(ptr)
          |                                                 ^~~~~~
    ../lib/stackinit_kunit.c:219:24: note: in expansion of macro 'DO_NOTHING_RETURN_SCALAR'
      219 |                 return DO_NOTHING_RETURN_ ## which(ptr + 1);    \
          |                        ^~~~~~~~~~~~~~~~~~
    
    Link: https://lkml.kernel.org/r/20241117113813.work.735-kees@kernel.org
    Signed-off-by: Kees Cook <kees@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.6.66 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Sat Dec 14 20:00:23 2024 +0100

    Linux 6.6.66
    
    Link: https://lore.kernel.org/r/20241212144244.601729511@linuxfoundation.org
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Hardik Garg <hargar@linux.microsoft.com>
    Tested-by: Hardik Garg <hargar@linux.microsoft.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: SeongJae Park <sj@kernel.org>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: kernelci.org bot <bot@kernelci.org>
    Tested-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
LoongArch: Add architecture specific huge_pte_clear() [+ + +]
Author: Bibo Mao <maobibo@loongson.cn>
Date:   Mon Dec 2 16:42:08 2024 +0800

    LoongArch: Add architecture specific huge_pte_clear()
    
    commit 7cd1f5f77925ae905a57296932f0f9ef0dc364f8 upstream.
    
    When executing mm selftests run_vmtests.sh, there is such an error:
    
     BUG: Bad page state in process uffd-unit-tests  pfn:00000
     page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x0
     flags: 0xffff0000002000(reserved|node=0|zone=0|lastcpupid=0xffff)
     raw: 00ffff0000002000 ffffbf0000000008 ffffbf0000000008 0000000000000000
     raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000
     page dumped because: PAGE_FLAGS_CHECK_AT_FREE flag(s) set
     Modules linked in: snd_seq_dummy snd_seq snd_seq_device rfkill vfat fat
        virtio_balloon efi_pstore virtio_net pstore net_failover failover fuse
        nfnetlink virtio_scsi virtio_gpu virtio_dma_buf dm_multipath efivarfs
     CPU: 2 UID: 0 PID: 1913 Comm: uffd-unit-tests Not tainted 6.12.0 #184
     Hardware name: QEMU QEMU Virtual Machine, BIOS unknown 2/2/2022
     Stack : 900000047c8ac000 0000000000000000 9000000000223a7c 900000047c8ac000
             900000047c8af690 900000047c8af698 0000000000000000 900000047c8af7d8
             900000047c8af7d0 900000047c8af7d0 900000047c8af5b0 0000000000000001
             0000000000000001 900000047c8af698 10b3c7d53da40d26 0000010000000000
             0000000000000022 0000000fffffffff fffffffffe000000 ffff800000000000
             000000000000002f 0000800000000000 000000017a6d4000 90000000028f8940
             0000000000000000 0000000000000000 90000000025aa5e0 9000000002905000
             0000000000000000 90000000028f8940 ffff800000000000 0000000000000000
             0000000000000000 0000000000000000 9000000000223a94 000000012001839c
             00000000000000b0 0000000000000004 0000000000000000 0000000000071c1d
             ...
     Call Trace:
     [<9000000000223a94>] show_stack+0x5c/0x180
     [<9000000001c3fd64>] dump_stack_lvl+0x6c/0xa0
     [<900000000056aa08>] bad_page+0x1a0/0x1f0
     [<9000000000574978>] free_unref_folios+0xbf0/0xd20
     [<90000000004e65cc>] folios_put_refs+0x1a4/0x2b8
     [<9000000000599a0c>] free_pages_and_swap_cache+0x164/0x260
     [<9000000000547698>] tlb_batch_pages_flush+0xa8/0x1c0
     [<9000000000547f30>] tlb_finish_mmu+0xa8/0x218
     [<9000000000543cb8>] exit_mmap+0x1a0/0x360
     [<9000000000247658>] __mmput+0x78/0x200
     [<900000000025583c>] do_exit+0x43c/0xde8
     [<9000000000256490>] do_group_exit+0x68/0x110
     [<9000000000256554>] sys_exit_group+0x1c/0x20
     [<9000000001c413b4>] do_syscall+0x94/0x130
     [<90000000002216d8>] handle_syscall+0xb8/0x158
     Disabling lock debugging due to kernel taint
     BUG: non-zero pgtables_bytes on freeing mm: -16384
    
    On LoongArch system, invalid huge pte entry should be invalid_pte_table
    or a single _PAGE_HUGE bit rather than a zero value. And it should be
    the same with invalid pmd entry, since pmd_none() is called by function
    free_pgd_range() and pmd_none() return 0 by huge_pte_clear(). So single
    _PAGE_HUGE bit is also treated as a valid pte table and free_pte_range()
    will be called in free_pmd_range().
    
      free_pmd_range()
            pmd = pmd_offset(pud, addr);
            do {
                    next = pmd_addr_end(addr, end);
                    if (pmd_none_or_clear_bad(pmd))
                            continue;
                    free_pte_range(tlb, pmd, addr);
            } while (pmd++, addr = next, addr != end);
    
    Here invalid_pte_table is used for both invalid huge pte entry and
    pmd entry.
    
    Cc: stable@vger.kernel.org
    Fixes: 09cfefb7fa70 ("LoongArch: Add memory management")
    Signed-off-by: Bibo Mao <maobibo@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: Fix sleeping in atomic context for PREEMPT_RT [+ + +]
Author: Huacai Chen <chenhuacai@kernel.org>
Date:   Fri Nov 22 15:47:48 2024 +0800

    LoongArch: Fix sleeping in atomic context for PREEMPT_RT
    
    [ Upstream commit 88fd2b70120d52c1010257d36776876941375490 ]
    
    Commit bab1c299f3945ffe79 ("LoongArch: Fix sleeping in atomic context in
    setup_tlb_handler()") changes the gfp flag from GFP_KERNEL to GFP_ATOMIC
    for alloc_pages_node(). However, for PREEMPT_RT kernels we can still get
    a "sleeping in atomic context" error:
    
    [    0.372259] BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
    [    0.372266] in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 0, name: swapper/1
    [    0.372268] preempt_count: 1, expected: 0
    [    0.372270] RCU nest depth: 1, expected: 1
    [    0.372272] 3 locks held by swapper/1/0:
    [    0.372274]  #0: 900000000c9f5e60 (&pcp->lock){+.+.}-{3:3}, at: get_page_from_freelist+0x524/0x1c60
    [    0.372294]  #1: 90000000087013b8 (rcu_read_lock){....}-{1:3}, at: rt_spin_trylock+0x50/0x140
    [    0.372305]  #2: 900000047fffd388 (&zone->lock){+.+.}-{3:3}, at: __rmqueue_pcplist+0x30c/0xea0
    [    0.372314] irq event stamp: 0
    [    0.372316] hardirqs last  enabled at (0): [<0000000000000000>] 0x0
    [    0.372322] hardirqs last disabled at (0): [<9000000005947320>] copy_process+0x9c0/0x26e0
    [    0.372329] softirqs last  enabled at (0): [<9000000005947320>] copy_process+0x9c0/0x26e0
    [    0.372335] softirqs last disabled at (0): [<0000000000000000>] 0x0
    [    0.372341] CPU: 1 UID: 0 PID: 0 Comm: swapper/1 Not tainted 6.12.0-rc7+ #1891
    [    0.372346] Hardware name: Loongson Loongson-3A5000-7A1000-1w-CRB/Loongson-LS3A5000-7A1000-1w-CRB, BIOS vUDK2018-LoongArch-V2.0.0-prebeta9 10/21/2022
    [    0.372349] Stack : 0000000000000089 9000000005a0db9c 90000000071519c8 9000000100388000
    [    0.372486]         900000010038b890 0000000000000000 900000010038b898 9000000007e53788
    [    0.372492]         900000000815bcc8 900000000815bcc0 900000010038b700 0000000000000001
    [    0.372498]         0000000000000001 4b031894b9d6b725 00000000055ec000 9000000100338fc0
    [    0.372503]         00000000000000c4 0000000000000001 000000000000002d 0000000000000003
    [    0.372509]         0000000000000030 0000000000000003 00000000055ec000 0000000000000003
    [    0.372515]         900000000806d000 9000000007e53788 00000000000000b0 0000000000000004
    [    0.372521]         0000000000000000 0000000000000000 900000000c9f5f10 0000000000000000
    [    0.372526]         90000000076f12d8 9000000007e53788 9000000005924778 0000000000000000
    [    0.372532]         00000000000000b0 0000000000000004 0000000000000000 0000000000070000
    [    0.372537]         ...
    [    0.372540] Call Trace:
    [    0.372542] [<9000000005924778>] show_stack+0x38/0x180
    [    0.372548] [<90000000071519c4>] dump_stack_lvl+0x94/0xe4
    [    0.372555] [<900000000599b880>] __might_resched+0x1a0/0x260
    [    0.372561] [<90000000071675cc>] rt_spin_lock+0x4c/0x140
    [    0.372565] [<9000000005cbb768>] __rmqueue_pcplist+0x308/0xea0
    [    0.372570] [<9000000005cbed84>] get_page_from_freelist+0x564/0x1c60
    [    0.372575] [<9000000005cc0d98>] __alloc_pages_noprof+0x218/0x1820
    [    0.372580] [<900000000593b36c>] tlb_init+0x1ac/0x298
    [    0.372585] [<9000000005924b74>] per_cpu_trap_init+0x114/0x140
    [    0.372589] [<9000000005921964>] cpu_probe+0x4e4/0xa60
    [    0.372592] [<9000000005934874>] start_secondary+0x34/0xc0
    [    0.372599] [<900000000715615c>] smpboot_entry+0x64/0x6c
    
    This is because in PREEMPT_RT kernels normal spinlocks are replaced by
    rt spinlocks and rt_spin_lock() will cause sleeping. Fix it by disabling
    NUMA optimization completely for PREEMPT_RT kernels.
    
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
media: cx231xx: Add support for Dexatek USB Video Grabber 1d19:6108 [+ + +]
Author: Rohan Barar <rohan.barar@gmail.com>
Date:   Thu Oct 3 19:40:40 2024 +1000

    media: cx231xx: Add support for Dexatek USB Video Grabber 1d19:6108
    
    [ Upstream commit 61a830bc0ea69a05d8a4534f825c6aa618263649 ]
    
    Add Dexatek Technology Ltd USB Video Grabber 1d19:6108 to the cx231xx
    driver. This device is sold under the name "BAUHN DVD Maker (DK8723)" by
    ALDI in Australia.
    
    This device is similar to 1d19:6109, which is already included in cx231xx.
    
    Both video and audio capture function correctly after installing the
    patched cx231xx driver.
    
    Patch Changelog
    v1:
     - Initial submission.
    v2:
     - Fix SoB + Improve subject.
    v3:
     - Rephrase message to not exceed 75 characters per line.
     - Removed reference to external GitHub URL.
    
    Signed-off-by: Rohan Barar <rohan.barar@gmail.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: uvcvideo: Add a quirk for the Kaiweets KTI-W02 infrared camera [+ + +]
Author: David Given <dg@cowlark.com>
Date:   Wed Sep 18 20:05:40 2024 +0200

    media: uvcvideo: Add a quirk for the Kaiweets KTI-W02 infrared camera
    
    [ Upstream commit b2ec92bb5605452d539a7aa1e42345b95acd8583 ]
    
    Adds a quirk to make the NXP Semiconductors 1fc9:009b chipset work.
    
    lsusb for the device reports:
    
    Bus 003 Device 011: ID 1fc9:009b NXP Semiconductors IR VIDEO
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               2.00
      bDeviceClass          239 Miscellaneous Device
      bDeviceSubClass         2 [unknown]
      bDeviceProtocol         1 Interface Association
      bMaxPacketSize0        64
      idVendor           0x1fc9 NXP Semiconductors
      idProduct          0x009b IR VIDEO
      bcdDevice            1.01
      iManufacturer           1 Guide sensmart
      iProduct                2 IR VIDEO
      iSerial                 0
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength       0x00c2
        bNumInterfaces          2
        bConfigurationValue     1
        iConfiguration          0
        bmAttributes         0xc0
          Self Powered
        MaxPower              100mA
        Interface Association:
          bLength                 8
          bDescriptorType        11
          bFirstInterface         0
          bInterfaceCount         2
          bFunctionClass         14 Video
          bFunctionSubClass       3 Video Interface Collection
          bFunctionProtocol       0
          iFunction               3 IR Camera
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           1
          bInterfaceClass        14 Video
          bInterfaceSubClass      1 Video Control
          bInterfaceProtocol      0
          iInterface              0
          VideoControl Interface Descriptor:
            bLength                13
            bDescriptorType        36
            bDescriptorSubtype      1 (HEADER)
            bcdUVC               1.00
            wTotalLength       0x0033
            dwClockFrequency        6.000000MHz
            bInCollection           1
            baInterfaceNr( 0)       1
          VideoControl Interface Descriptor:
            bLength                18
            bDescriptorType        36
            bDescriptorSubtype      2 (INPUT_TERMINAL)
            bTerminalID             1
            wTerminalType      0x0201 Camera Sensor
            bAssocTerminal          0
            iTerminal               0
            wObjectiveFocalLengthMin      0
            wObjectiveFocalLengthMax      0
            wOcularFocalLength            0
            bControlSize                  3
            bmControls           0x00000000
          VideoControl Interface Descriptor:
            bLength                 9
            bDescriptorType        36
            bDescriptorSubtype      3 (OUTPUT_TERMINAL)
            bTerminalID             2
            wTerminalType      0x0101 USB Streaming
            bAssocTerminal          0
            bSourceID               1
            iTerminal               0
          VideoControl Interface Descriptor:
            bLength                11
            bDescriptorType        36
            bDescriptorSubtype      5 (PROCESSING_UNIT)
          Warning: Descriptor too short
            bUnitID                 3
            bSourceID               1
            wMaxMultiplier          0
            bControlSize            2
            bmControls     0x00000000
            iProcessing             0
            bmVideoStandards     0x62
              NTSC - 525/60
              PAL - 525/60
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x81  EP 1 IN
            bmAttributes            3
              Transfer Type            Interrupt
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0008  1x 8 bytes
            bInterval               1
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       0
          bNumEndpoints           0
          bInterfaceClass        14 Video
          bInterfaceSubClass      2 Video Streaming
          bInterfaceProtocol      0
          iInterface              0
          VideoStreaming Interface Descriptor:
            bLength                            14
            bDescriptorType                    36
            bDescriptorSubtype                  1 (INPUT_HEADER)
            bNumFormats                         1
            wTotalLength                   0x0055
            bEndpointAddress                 0x82  EP 2 IN
            bmInfo                              0
            bTerminalLink                       2
            bStillCaptureMethod                 2
            bTriggerSupport                     0
            bTriggerUsage                       0
            bControlSize                        1
            bmaControls( 0)                     0
          VideoStreaming Interface Descriptor:
            bLength                            27
            bDescriptorType                    36
            bDescriptorSubtype                  4 (FORMAT_UNCOMPRESSED)
            bFormatIndex                        1
            bNumFrameDescriptors                1
            guidFormat                            {e436eb7b-524f-11ce-9f53-0020af0ba770}
            bBitsPerPixel                      16
            bDefaultFrameIndex                  1
            bAspectRatioX                       0
            bAspectRatioY                       0
            bmInterlaceFlags                 0x00
              Interlaced stream or variable: No
              Fields per frame: 2 fields
              Field 1 first: No
              Field pattern: Field 1 only
            bCopyProtect                        0
          VideoStreaming Interface Descriptor:
            bLength                            34
            bDescriptorType                    36
            bDescriptorSubtype                  5 (FRAME_UNCOMPRESSED)
            bFrameIndex                         1
            bmCapabilities                   0x00
              Still image unsupported
            wWidth                            240
            wHeight                           322
            dwMinBitRate                 12364800
            dwMaxBitRate                 30912000
            dwMaxVideoFrameBufferSize      154560
            dwDefaultFrameInterval         400000
            bFrameIntervalType                  2
            dwFrameInterval( 0)            400000
            dwFrameInterval( 1)           1000000
          VideoStreaming Interface Descriptor:
            bLength                            10
            bDescriptorType                    36
            bDescriptorSubtype                  3 (STILL_IMAGE_FRAME)
            bEndpointAddress                 0x00  EP 0 OUT
            bNumImageSizePatterns               1
            wWidth( 0)                        240
            wHeight( 0)                       322
            bNumCompressionPatterns             0
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       1
          bNumEndpoints           1
          bInterfaceClass        14 Video
          bInterfaceSubClass      2 Video Streaming
          bInterfaceProtocol      0
          iInterface              0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x82  EP 2 IN
            bmAttributes            5
              Transfer Type            Isochronous
              Synch Type               Asynchronous
              Usage Type               Data
            wMaxPacketSize     0x0400  1x 1024 bytes
            bInterval               1
    Device Status:     0x0001
      Self Powered
    
    Signed-off-by: David Given <dg@cowlark.com>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
    Link: https://lore.kernel.org/r/20240918180540.10830-2-dg@cowlark.com
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: uvcvideo: RealSense D421 Depth module metadata [+ + +]
Author: Dmitry Perchanov <dmitry.perchanov@intel.com>
Date:   Mon Aug 26 17:27:50 2024 +0300

    media: uvcvideo: RealSense D421 Depth module metadata
    
    [ Upstream commit c6104297c965a5ee9d4b9d0d5d9cdd224d8fd59e ]
    
    RealSense(R) D421 Depth module is low cost solution for 3D-stereo
    vision. The module supports extended sensor metadata format D4XX.
    
    Signed-off-by: Dmitry Perchanov <dmitry.perchanov@intel.com>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Link: https://lore.kernel.org/r/d1fbfbbff5c8247a3130499985a53218c5b55c61.camel@intel.com
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mempolicy: fix migrate_pages(2) syscall return nr_failed [+ + +]
Author: Hugh Dickins <hughd@google.com>
Date:   Tue Oct 3 02:17:43 2023 -0700

    mempolicy: fix migrate_pages(2) syscall return nr_failed
    
    [ Upstream commit 1cb5d11a370f661c5d0d888bb0cfc2cdc5791382 ]
    
    "man 2 migrate_pages" says "On success migrate_pages() returns the number
    of pages that could not be moved".  Although 5.3 and 5.4 commits fixed
    mbind(MPOL_MF_STRICT|MPOL_MF_MOVE*) to fail with EIO when not all pages
    could be moved (because some could not be isolated for migration),
    migrate_pages(2) was left still reporting only those pages failing at the
    migration stage, forgetting those failing at the earlier isolation stage.
    
    Fix that by accumulating a long nr_failed count in struct queue_pages,
    returned by queue_pages_range() when it's not returning an error, for
    adding on to the nr_failed count from migrate_pages() in mm/migrate.c.  A
    count of pages?  It's more a count of folios, but changing it to pages
    would entail more work (also in mm/migrate.c): does not seem justified.
    
    queue_pages_range() itself should only return -EIO in the "strictly
    unmovable" case (STRICT without any MOVEs): in that case it's best to
    break out as soon as nr_failed gets set; but otherwise it should continue
    to isolate pages for MOVing even when nr_failed - as the mbind(2) manpage
    promises.
    
    There's a case when nr_failed should be incremented when it was missed:
    queue_folios_pte_range() and queue_folios_hugetlb() count the transient
    migration entries, like queue_folios_pmd() already did.  And there's a
    case when nr_failed should not be incremented when it would have been: in
    meeting later PTEs of the same large folio, which can only be isolated
    once: fixed by recording the current large folio in struct queue_pages.
    
    Clean up the affected functions, fixing or updating many comments.  Bool
    migrate_folio_add(), without -EIO: true if adding, or if skipping shared
    (but its arguable folio_estimated_sharers() heuristic left unchanged).
    Use MPOL_MF_WRLOCK flag to queue_pages_range(), instead of bool lock_vma.
    Use explicit STRICT|MOVE* flags where queue_pages_test_walk() checks for
    skipping, instead of hiding them behind MPOL_MF_VALID.
    
    Link: https://lkml.kernel.org/r/9a6b0b9-3bb-dbef-8adf-efab4397b8d@google.com
    Signed-off-by: Hugh Dickins <hughd@google.com>
    Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: "Huang, Ying" <ying.huang@intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Nhat Pham <nphamcs@gmail.com>
    Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Tejun heo <tj@kernel.org>
    Cc: Vishal Moola (Oracle) <vishal.moola@gmail.com>
    Cc: Yang Shi <shy828301@gmail.com>
    Cc: Yosry Ahmed <yosryahmed@google.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 091c1dd2d4df ("mm/mempolicy: fix migrate_to_node() assuming there is at least one VMA in a MM")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
MIPS: Loongson64: DTS: Really fix PCIe port nodes for ls7a [+ + +]
Author: Xi Ruoyao <xry111@xry111.site>
Date:   Sat Nov 23 11:57:37 2024 +0800

    MIPS: Loongson64: DTS: Really fix PCIe port nodes for ls7a
    
    [ Upstream commit 4fbd66d8254cedfd1218393f39d83b6c07a01917 ]
    
    Fix the dtc warnings:
    
        arch/mips/boot/dts/loongson/ls7a-pch.dtsi:68.16-416.5: Warning (interrupt_provider): /bus@10000000/pci@1a000000: '#interrupt-cells' found, but node is not an interrupt provider
        arch/mips/boot/dts/loongson/ls7a-pch.dtsi:68.16-416.5: Warning (interrupt_provider): /bus@10000000/pci@1a000000: '#interrupt-cells' found, but node is not an interrupt provider
        arch/mips/boot/dts/loongson/loongson64g_4core_ls7a.dtb: Warning (interrupt_map): Failed prerequisite 'interrupt_provider'
    
    And a runtime warning introduced in commit 045b14ca5c36 ("of: WARN on
    deprecated #address-cells/#size-cells handling"):
    
        WARNING: CPU: 0 PID: 1 at drivers/of/base.c:106 of_bus_n_addr_cells+0x9c/0xe0
        Missing '#address-cells' in /bus@10000000/pci@1a000000/pci_bridge@9,0
    
    The fix is similar to commit d89a415ff8d5 ("MIPS: Loongson64: DTS: Fix PCIe
    port nodes for ls7a"), which has fixed the issue for ls2k (despite its
    subject mentions ls7a).
    
    Signed-off-by: Xi Ruoyao <xry111@xry111.site>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
misc: eeprom: eeprom_93cx6: Add quirk for extra read clock cycle [+ + +]
Author: Parker Newman <pnewman@connecttech.com>
Date:   Wed Oct 2 11:12:33 2024 -0400

    misc: eeprom: eeprom_93cx6: Add quirk for extra read clock cycle
    
    [ Upstream commit 7738a7ab9d12c5371ed97114ee2132d4512e9fd5 ]
    
    Add a quirk similar to eeprom_93xx46 to add an extra clock cycle before
    reading data from the EEPROM.
    
    The 93Cx6 family of EEPROMs output a "dummy 0 bit" between the writing
    of the op-code/address from the host to the EEPROM and the reading of
    the actual data from the EEPROM.
    
    More info can be found on page 6 of the AT93C46 datasheet (linked below).
    Similar notes are found in other 93xx6 datasheets.
    
    In summary the read operation for a 93Cx6 EEPROM is:
    Write to EEPROM:        110[A5-A0]      (9 bits)
    Read from EEPROM:       0[D15-D0]       (17 bits)
    
    Where:
            110 is the start bit and READ OpCode
            [A5-A0] is the address to read from
            0 is a "dummy bit" preceding the actual data
            [D15-D0] is the actual data.
    
    Looking at the READ timing diagrams in the 93Cx6 datasheets the dummy
    bit should be clocked out on the last address bit clock cycle meaning it
    should be discarded naturally.
    
    However, depending on the hardware configuration sometimes this dummy
    bit is not discarded. This is the case with Exar PCI UARTs which require
    an extra clock cycle between sending the address and reading the data.
    
    Datasheet: https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-5193-SEEPROM-AT93C46D-Datasheet.pdf
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Parker Newman <pnewman@connecttech.com>
    Link: https://lore.kernel.org/r/0f23973efefccd2544705a0480b4ad4c2353e407.1727880931.git.pnewman@connecttech.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mlxsw: Add 'ipv4_5' flex key [+ + +]
Author: Amit Cohen <amcohen@nvidia.com>
Date:   Tue Sep 19 17:42:54 2023 +0200

    mlxsw: Add 'ipv4_5' flex key
    
    [ Upstream commit c2f3e10ac4ebf23e177226b9b4d297bfe2fb6b20 ]
    
    Currently virtual router ID element is broken to two sub-elements -
    'VIRT_ROUTER_LSB' and 'VIRT_ROUTER_MSB'. It was broken as this field is
    broken in 'ipv4_4' flex key which is used for IPv4 in Spectrum < 4.
    For Spectrum-4, we use 'ipv4_4b' flex key which contains one field for
    virtual router, this key is not supported in older ASICs.
    
    Add 'ipv4_5' flex key which is supported in all ASICs and contains one
    field for virtual router. Then there is no reason to use 'VIRT_ROUTER_LSB'
    and 'VIRT_ROUTER_MSB', remove them and add one element 'VIRT_ROUTER' for
    this field.
    
    The motivation is to get rid of 'ipv4_4' flex key, as it might be chosen
    for IPv6 multicast forwarding region. This will not allow the improvement
    in a following patch. See more details in the cover letter and in a
    following patch.
    
    Signed-off-by: Amit Cohen <amcohen@nvidia.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Signed-off-by: Petr Machata <petrm@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 217bbf156f93 ("mlxsw: spectrum_acl_flex_keys: Use correct key block on Spectrum-4")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mlxsw: Edit IPv6 key blocks to use one less block for multicast forwarding [+ + +]
Author: Amit Cohen <amcohen@nvidia.com>
Date:   Tue Sep 19 17:42:56 2023 +0200

    mlxsw: Edit IPv6 key blocks to use one less block for multicast forwarding
    
    [ Upstream commit 92953e7aab013719aa8974805614c0bc11361026 ]
    
    Two ACL regions that are configured by the driver during initialization are
    the ones used for IPv4 and IPv6 multicast forwarding. Entries residing
    in these two regions match on the {SIP, DIP, VRID} key elements.
    
    Currently for IPv6 region, 9 key blocks are used:
    * 4 for SIP - 'ipv4_1', 'ipv6_{3,4,5}'
    * 4 for DIP - 'ipv4_0', 'ipv6_{0,1,2/2b}'
    * 1 for VRID - 'ipv4_4b'
    
    This can be improved by reducing the amount key blocks needed for
    the IPv6 region to 8. It is possible to use key blocks that mix subsets of
    the VRID element with subsets of the DIP element.
    The following key blocks can be used:
    * 4 for SIP - 'ipv4_1', 'ipv6_{3,4,5}'
    * 1 for subset of DIP - 'ipv4_0'
    * 3 for the rest of DIP and subsets of VRID - 'ipv6_{0,1,2/2b}'
    
    To make this happen, add VRID sub-elements as part of existing keys -
    'ipv6_{0,1,2/2b}'. Note that one of the sub-elements is called
    VRID_ROUTER_MSB and does not contain bit numbers like the rest, as for
    Spectrum < 4 this element represents bits 8-10 and for Spectrum-4 it
    represents bits 8-11.
    
    Breaking VRID into 3 sub-elements makes the driver use one less block in
    IPv6 region for multicast forwarding. The sub-elements can be filled in
    blocks that are used for destination IP.
    
    The algorithm in the driver that chooses which key blocks will be used is
    lazy and not the optimal one. It searches the block that contains the most
    elements that are required, chooses it, removes the elements that appear
    in the chosen block and starts again searching the block that contains the
    most elements.
    
    When key block 'ipv4_4' is defined, the algorithm might choose it, as it
    contains 2 sub-elements of VRID, then 8 blocks must be chosen for SIP and
    DIP and we get 9 blocks to match on {SIP, DIP, VRID}. That is why we had to
    remove key block 'ipv4_4' in a previous patch and use key block that
    contains one field for VRID.
    
    This improvement was tested and indeed 8 blocks are used instead of 9.
    
    Signed-off-by: Amit Cohen <amcohen@nvidia.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Signed-off-by: Petr Machata <petrm@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 217bbf156f93 ("mlxsw: spectrum_acl_flex_keys: Use correct key block on Spectrum-4")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mlxsw: Mark high entropy key blocks [+ + +]
Author: Amit Cohen <amcohen@nvidia.com>
Date:   Tue Oct 3 13:25:26 2023 +0200

    mlxsw: Mark high entropy key blocks
    
    [ Upstream commit cad6431b867507779c41b00baaf18382467ef0a0 ]
    
    For 12 key blocks in the A-TCAM, rules are split into two records, which
    constitute two lookups. The two records are linked using a
    "large entry key ID".
    
    Due to a Spectrum-4 hardware issue, KVD entries that correspond to key
    blocks 0 to 5 of 12 key blocks A-TCAM entries will be placed in the same
    KVD pipe if they only differ in their "large entry key ID", as it is
    ignored. This results in a reduced scale. To reduce the probability of this
    issue, we can place key blocks with high entropy in blocks 0 to 5. The idea
    is to place blocks that are changed often in blocks 0 to 5, for
    example, key blocks that match on IPv4 addresses or the LSBs of IPv6
    addresses. Such placement will reduce the probability of these blocks to be
    same.
    
    Mark several blocks with 'high_entropy' flag, so later we will take into
    account this flag and place them in blocks 0 to 5.
    
    Signed-off-by: Amit Cohen <amcohen@nvidia.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Signed-off-by: Petr Machata <petrm@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 217bbf156f93 ("mlxsw: spectrum_acl_flex_keys: Use correct key block on Spectrum-4")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mlxsw: spectrum_acl_flex_keys: Add 'ipv4_5b' flex key [+ + +]
Author: Amit Cohen <amcohen@nvidia.com>
Date:   Tue Sep 19 17:42:55 2023 +0200

    mlxsw: spectrum_acl_flex_keys: Add 'ipv4_5b' flex key
    
    [ Upstream commit c6caabdf3e0cc50ba4a44bebc82cda5551d81d4f ]
    
    The previous patch replaced the key block 'ipv4_4' with 'ipv4_5'. The
    corresponding block for Spectrum-4 is 'ipv4_4b'. To be consistent, replace
    key block 'ipv4_4b' with 'ipv4_5b'.
    
    Signed-off-by: Amit Cohen <amcohen@nvidia.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Signed-off-by: Petr Machata <petrm@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 217bbf156f93 ("mlxsw: spectrum_acl_flex_keys: Use correct key block on Spectrum-4")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mlxsw: spectrum_acl_flex_keys: Constify struct mlxsw_afk_element_inst [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Fri Oct 4 07:26:05 2024 +0200

    mlxsw: spectrum_acl_flex_keys: Constify struct mlxsw_afk_element_inst
    
    [ Upstream commit bec2a32145d5cc066df29182fa0e5b0d4329b1a1 ]
    
    'struct mlxsw_afk_element_inst' are not modified in these drivers.
    
    Constifying these structures moves some data to a read-only section, so
    increases overall security.
    
    Update a few functions and struct mlxsw_afk_block accordingly.
    
    On a x86_64, with allmodconfig, as an example:
    Before:
    ======
       text    data     bss     dec     hex filename
       4278    4032       0    8310    2076 drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_flex_keys.o
    
    After:
    =====
       text    data     bss     dec     hex filename
       7934     352       0    8286    205e drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_flex_keys.o
    
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/8ccfc7bfb2365dcee5b03c81ebe061a927d6da2e.1727541677.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 217bbf156f93 ("mlxsw: spectrum_acl_flex_keys: Use correct key block on Spectrum-4")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mlxsw: spectrum_acl_flex_keys: Use correct key block on Spectrum-4 [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
Date:   Tue Dec 3 16:16:05 2024 +0100

    mlxsw: spectrum_acl_flex_keys: Use correct key block on Spectrum-4
    
    [ Upstream commit 217bbf156f93ada86b91617489e7ba8a0904233c ]
    
    The driver is currently using an ACL key block that is not supported by
    Spectrum-4. This works because the driver is only using a single field
    from this key block which is located in the same offset in the
    equivalent Spectrum-4 key block.
    
    The issue was discovered when the firmware started rejecting the use of
    the unsupported key block. The change has been reverted to avoid
    breaking users that only update their firmware.
    
    Nonetheless, fix the issue by using the correct key block.
    
    Fixes: 07ff135958dd ("mlxsw: Introduce flex key elements for Spectrum-4")
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Petr Machata <petrm@nvidia.com>
    Signed-off-by: Petr Machata <petrm@nvidia.com>
    Link: https://patch.msgid.link/35e72c97bdd3bc414fb8e4d747e5fb5d26c29658.1733237440.git.petrm@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm/damon/vaddr: fix issue in damon_va_evenly_split_region() [+ + +]
Author: Zheng Yejian <zhengyejian@huaweicloud.com>
Date:   Tue Oct 22 16:39:26 2024 +0800

    mm/damon/vaddr: fix issue in damon_va_evenly_split_region()
    
    commit f3c7a1ede435e2e45177d7a490a85fb0a0ec96d1 upstream.
    
    Patch series "mm/damon/vaddr: Fix issue in
    damon_va_evenly_split_region()".  v2.
    
    According to the logic of damon_va_evenly_split_region(), currently
    following split case would not meet the expectation:
    
      Suppose DAMON_MIN_REGION=0x1000,
      Case: Split [0x0, 0x3000) into 2 pieces, then the result would be
            acutually 3 regions:
              [0x0, 0x1000), [0x1000, 0x2000), [0x2000, 0x3000)
            but NOT the expected 2 regions:
              [0x0, 0x1000), [0x1000, 0x3000) !!!
    
    The root cause is that when calculating size of each split piece in
    damon_va_evenly_split_region():
    
      `sz_piece = ALIGN_DOWN(sz_orig / nr_pieces, DAMON_MIN_REGION);`
    
    both the dividing and the ALIGN_DOWN may cause loss of precision, then
    each time split one piece of size 'sz_piece' from origin 'start' to 'end'
    would cause more pieces are split out than expected!!!
    
    To fix it, count for each piece split and make sure no more than
    'nr_pieces'.  In addition, add above case into damon_test_split_evenly().
    
    And add 'nr_piece == 1' check in damon_va_evenly_split_region() for better
    code readability and add a corresponding kunit testcase.
    
    
    This patch (of 2):
    
    According to the logic of damon_va_evenly_split_region(), currently
    following split case would not meet the expectation:
    
      Suppose DAMON_MIN_REGION=0x1000,
      Case: Split [0x0, 0x3000) into 2 pieces, then the result would be
            acutually 3 regions:
              [0x0, 0x1000), [0x1000, 0x2000), [0x2000, 0x3000)
            but NOT the expected 2 regions:
              [0x0, 0x1000), [0x1000, 0x3000) !!!
    
    The root cause is that when calculating size of each split piece in
    damon_va_evenly_split_region():
    
      `sz_piece = ALIGN_DOWN(sz_orig / nr_pieces, DAMON_MIN_REGION);`
    
    both the dividing and the ALIGN_DOWN may cause loss of precision,
    then each time split one piece of size 'sz_piece' from origin 'start' to
    'end' would cause more pieces are split out than expected!!!
    
    To fix it, count for each piece split and make sure no more than
    'nr_pieces'. In addition, add above case into damon_test_split_evenly().
    
    After this patch, damon-operations test passed:
    
     # ./tools/testing/kunit/kunit.py run damon-operations
     [...]
     ============== damon-operations (6 subtests) ===============
     [PASSED] damon_test_three_regions_in_vmas
     [PASSED] damon_test_apply_three_regions1
     [PASSED] damon_test_apply_three_regions2
     [PASSED] damon_test_apply_three_regions3
     [PASSED] damon_test_apply_three_regions4
     [PASSED] damon_test_split_evenly
     ================ [PASSED] damon-operations =================
    
    Link: https://lkml.kernel.org/r/20241022083927.3592237-1-zhengyejian@huaweicloud.com
    Link: https://lkml.kernel.org/r/20241022083927.3592237-2-zhengyejian@huaweicloud.com
    Fixes: 3f49584b262c ("mm/damon: implement primitives for the virtual memory address spaces")
    Signed-off-by: Zheng Yejian <zhengyejian@huaweicloud.com>
    Reviewed-by: SeongJae Park <sj@kernel.org>
    Cc: Fernand Sieber <sieberf@amazon.com>
    Cc: Leonard Foerster <foersleo@amazon.de>
    Cc: Shakeel Butt <shakeel.butt@linux.dev>
    Cc: Ye Weihua <yeweihua4@huawei.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/mempolicy: fix migrate_to_node() assuming there is at least one VMA in a MM [+ + +]
Author: David Hildenbrand <david@redhat.com>
Date:   Wed Nov 20 21:11:51 2024 +0100

    mm/mempolicy: fix migrate_to_node() assuming there is at least one VMA in a MM
    
    [ Upstream commit 091c1dd2d4df6edd1beebe0e5863d4034ade9572 ]
    
    We currently assume that there is at least one VMA in a MM, which isn't
    true.
    
    So we might end up having find_vma() return NULL, to then de-reference
    NULL.  So properly handle find_vma() returning NULL.
    
    This fixes the report:
    
    Oops: general protection fault, probably for non-canonical address 0xdffffc0000000000: 0000 [#1] PREEMPT SMP KASAN PTI
    KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
    CPU: 1 UID: 0 PID: 6021 Comm: syz-executor284 Not tainted 6.12.0-rc7-syzkaller-00187-gf868cd251776 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/30/2024
    RIP: 0010:migrate_to_node mm/mempolicy.c:1090 [inline]
    RIP: 0010:do_migrate_pages+0x403/0x6f0 mm/mempolicy.c:1194
    Code: ...
    RSP: 0018:ffffc9000375fd08 EFLAGS: 00010246
    RAX: 0000000000000000 RBX: ffffc9000375fd78 RCX: 0000000000000000
    RDX: ffff88807e171300 RSI: dffffc0000000000 RDI: ffff88803390c044
    RBP: ffff88807e171428 R08: 0000000000000014 R09: fffffbfff2039ef1
    R10: ffffffff901cf78f R11: 0000000000000000 R12: 0000000000000003
    R13: ffffc9000375fe90 R14: ffffc9000375fe98 R15: ffffc9000375fdf8
    FS:  00005555919e1380(0000) GS:ffff8880b8700000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00005555919e1ca8 CR3: 000000007f12a000 CR4: 00000000003526f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     kernel_migrate_pages+0x5b2/0x750 mm/mempolicy.c:1709
     __do_sys_migrate_pages mm/mempolicy.c:1727 [inline]
     __se_sys_migrate_pages mm/mempolicy.c:1723 [inline]
     __x64_sys_migrate_pages+0x96/0x100 mm/mempolicy.c:1723
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    [akpm@linux-foundation.org: add unlikely()]
    Link: https://lkml.kernel.org/r/20241120201151.9518-1-david@redhat.com
    Fixes: 39743889aaf7 ("[PATCH] Swap Migration V5: sys_migrate_pages interface")
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Reported-by: syzbot+3511625422f7aa637f0d@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/lkml/673d2696.050a0220.3c9d61.012f.GAE@google.com/T/
    Reviewed-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
    Reviewed-by: Christoph Lameter <cl@linux.com>
    Cc: Liam R. Howlett <Liam.Howlett@Oracle.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm: page_alloc: move mlocked flag clearance into free_pages_prepare() [+ + +]
Author: Roman Gushchin <roman.gushchin@linux.dev>
Date:   Wed Nov 6 19:53:54 2024 +0000

    mm: page_alloc: move mlocked flag clearance into free_pages_prepare()
    
    commit 66edc3a5894c74f8887c8af23b97593a0dd0df4d upstream.
    
    Syzbot reported a bad page state problem caused by a page being freed
    using free_page() still having a mlocked flag at free_pages_prepare()
    stage:
    
      BUG: Bad page state in process syz.5.504  pfn:61f45
      page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x61f45
      flags: 0xfff00000080204(referenced|workingset|mlocked|node=0|zone=1|lastcpupid=0x7ff)
      raw: 00fff00000080204 0000000000000000 dead000000000122 0000000000000000
      raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000
      page dumped because: PAGE_FLAGS_CHECK_AT_FREE flag(s) set
      page_owner tracks the page as allocated
      page last allocated via order 0, migratetype Unmovable, gfp_mask 0x400dc0(GFP_KERNEL_ACCOUNT|__GFP_ZERO), pid 8443, tgid 8442 (syz.5.504), ts 201884660643, free_ts 201499827394
       set_page_owner include/linux/page_owner.h:32 [inline]
       post_alloc_hook+0x1f3/0x230 mm/page_alloc.c:1537
       prep_new_page mm/page_alloc.c:1545 [inline]
       get_page_from_freelist+0x303f/0x3190 mm/page_alloc.c:3457
       __alloc_pages_noprof+0x292/0x710 mm/page_alloc.c:4733
       alloc_pages_mpol_noprof+0x3e8/0x680 mm/mempolicy.c:2265
       kvm_coalesced_mmio_init+0x1f/0xf0 virt/kvm/coalesced_mmio.c:99
       kvm_create_vm virt/kvm/kvm_main.c:1235 [inline]
       kvm_dev_ioctl_create_vm virt/kvm/kvm_main.c:5488 [inline]
       kvm_dev_ioctl+0x12dc/0x2240 virt/kvm/kvm_main.c:5530
       __do_compat_sys_ioctl fs/ioctl.c:1007 [inline]
       __se_compat_sys_ioctl+0x510/0xc90 fs/ioctl.c:950
       do_syscall_32_irqs_on arch/x86/entry/common.c:165 [inline]
       __do_fast_syscall_32+0xb4/0x110 arch/x86/entry/common.c:386
       do_fast_syscall_32+0x34/0x80 arch/x86/entry/common.c:411
       entry_SYSENTER_compat_after_hwframe+0x84/0x8e
      page last free pid 8399 tgid 8399 stack trace:
       reset_page_owner include/linux/page_owner.h:25 [inline]
       free_pages_prepare mm/page_alloc.c:1108 [inline]
       free_unref_folios+0xf12/0x18d0 mm/page_alloc.c:2686
       folios_put_refs+0x76c/0x860 mm/swap.c:1007
       free_pages_and_swap_cache+0x5c8/0x690 mm/swap_state.c:335
       __tlb_batch_free_encoded_pages mm/mmu_gather.c:136 [inline]
       tlb_batch_pages_flush mm/mmu_gather.c:149 [inline]
       tlb_flush_mmu_free mm/mmu_gather.c:366 [inline]
       tlb_flush_mmu+0x3a3/0x680 mm/mmu_gather.c:373
       tlb_finish_mmu+0xd4/0x200 mm/mmu_gather.c:465
       exit_mmap+0x496/0xc40 mm/mmap.c:1926
       __mmput+0x115/0x390 kernel/fork.c:1348
       exit_mm+0x220/0x310 kernel/exit.c:571
       do_exit+0x9b2/0x28e0 kernel/exit.c:926
       do_group_exit+0x207/0x2c0 kernel/exit.c:1088
       __do_sys_exit_group kernel/exit.c:1099 [inline]
       __se_sys_exit_group kernel/exit.c:1097 [inline]
       __x64_sys_exit_group+0x3f/0x40 kernel/exit.c:1097
       x64_sys_call+0x2634/0x2640 arch/x86/include/generated/asm/syscalls_64.h:232
       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
      Modules linked in:
      CPU: 0 UID: 0 PID: 8442 Comm: syz.5.504 Not tainted 6.12.0-rc6-syzkaller #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
       bad_page+0x176/0x1d0 mm/page_alloc.c:501
       free_page_is_bad mm/page_alloc.c:918 [inline]
       free_pages_prepare mm/page_alloc.c:1100 [inline]
       free_unref_page+0xed0/0xf20 mm/page_alloc.c:2638
       kvm_destroy_vm virt/kvm/kvm_main.c:1327 [inline]
       kvm_put_kvm+0xc75/0x1350 virt/kvm/kvm_main.c:1386
       kvm_vcpu_release+0x54/0x60 virt/kvm/kvm_main.c:4143
       __fput+0x23f/0x880 fs/file_table.c:431
       task_work_run+0x24f/0x310 kernel/task_work.c:239
       exit_task_work include/linux/task_work.h:43 [inline]
       do_exit+0xa2f/0x28e0 kernel/exit.c:939
       do_group_exit+0x207/0x2c0 kernel/exit.c:1088
       __do_sys_exit_group kernel/exit.c:1099 [inline]
       __se_sys_exit_group kernel/exit.c:1097 [inline]
       __ia32_sys_exit_group+0x3f/0x40 kernel/exit.c:1097
       ia32_sys_call+0x2624/0x2630 arch/x86/include/generated/asm/syscalls_32.h:253
       do_syscall_32_irqs_on arch/x86/entry/common.c:165 [inline]
       __do_fast_syscall_32+0xb4/0x110 arch/x86/entry/common.c:386
       do_fast_syscall_32+0x34/0x80 arch/x86/entry/common.c:411
       entry_SYSENTER_compat_after_hwframe+0x84/0x8e
      RIP: 0023:0xf745d579
      Code: Unable to access opcode bytes at 0xf745d54f.
      RSP: 002b:00000000f75afd6c EFLAGS: 00000206 ORIG_RAX: 00000000000000fc
      RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 0000000000000000
      RDX: 0000000000000000 RSI: 00000000ffffff9c RDI: 00000000f744cff4
      RBP: 00000000f717ae61 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000206 R12: 0000000000000000
      R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
       </TASK>
    
    The problem was originally introduced by commit b109b87050df ("mm/munlock:
    replace clear_page_mlock() by final clearance"): it was focused on
    handling pagecache and anonymous memory and wasn't suitable for lower
    level get_page()/free_page() API's used for example by KVM, as with this
    reproducer.
    
    Fix it by moving the mlocked flag clearance down to free_page_prepare().
    
    The bug itself if fairly old and harmless (aside from generating these
    warnings), aside from a small memory leak - "bad" pages are stopped from
    being allocated again.
    
    Link: https://lkml.kernel.org/r/20241106195354.270757-1-roman.gushchin@linux.dev
    Fixes: b109b87050df ("mm/munlock: replace clear_page_mlock() by final clearance")
    Signed-off-by: Roman Gushchin <roman.gushchin@linux.dev>
    Reported-by: syzbot+e985d3026c4fd041578e@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/6729f475.050a0220.701a.0019.GAE@google.com
    Acked-by: Hugh Dickins <hughd@google.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Sean Christopherson <seanjc@google.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Hugh Dickins <hughd@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mmc: core: Add SD card quirk for broken poweroff notification [+ + +]
Author: Keita Aihara <keita.aihara@sony.com>
Date:   Fri Sep 13 18:44:17 2024 +0900

    mmc: core: Add SD card quirk for broken poweroff notification
    
    [ Upstream commit cd068d51594d9635bf6688fc78717572b78bce6a ]
    
    GIGASTONE Gaming Plus microSD cards manufactured on 02/2022 report that
    they support poweroff notification and cache, but they are not working
    correctly.
    
    Flush Cache bit never gets cleared in sd_flush_cache() and Poweroff
    Notification Ready bit also never gets set to 1 within 1 second from the
    end of busy of CMD49 in sd_poweroff_notify().
    
    This leads to I/O error and runtime PM error state.
    
    I observed that the same card manufactured on 01/2024 works as expected.
    
    This problem seems similar to the Kingston cards fixed with
    commit c467c8f08185 ("mmc: Add MMC_QUIRK_BROKEN_SD_CACHE for Kingston
    Canvas Go Plus from 11/2019") and should be handled using quirks.
    
    CID for the problematic card is here.
    12345641535443002000000145016200
    
    Manufacturer ID is 0x12 and defined as CID_MANFID_GIGASTONE as of now,
    but would like comments on what naming is appropriate because MID list
    is not public and not sure it's right.
    
    Signed-off-by: Keita Aihara <keita.aihara@sony.com>
    Link: https://lore.kernel.org/r/20240913094417.GA4191647@sony.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mmc: core: Further prevent card detect during shutdown [+ + +]
Author: Ulf Hansson <ulf.hansson@linaro.org>
Date:   Mon Nov 25 13:24:46 2024 +0100

    mmc: core: Further prevent card detect during shutdown
    
    commit 87a0d90fcd31c0f36da0332428c9e1a1e0f97432 upstream.
    
    Disabling card detect from the host's ->shutdown_pre() callback turned out
    to not be the complete solution. More precisely, beyond the point when the
    mmc_bus->shutdown() has been called, to gracefully power off the card, we
    need to prevent card detect. Otherwise the mmc_rescan work may poll for the
    card with a CMD13, to see if it's still alive, which then will fail and
    hang as the card has already been powered off.
    
    To fix this problem, let's disable mmc_rescan prior to power off the card
    during shutdown.
    
    Reported-by: Anthony Pighin <anthony.pighin@nokia.com>
    Fixes: 66c915d09b94 ("mmc: core: Disable card detect during shutdown")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
    Closes: https://lore.kernel.org/all/BN0PR08MB695133000AF116F04C3A9FFE83212@BN0PR08MB6951.namprd08.prod.outlook.com/
    Tested-by: Anthony Pighin <anthony.pighin@nokia.com>
    Message-ID: <20241125122446.18684-1-ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: mtk-sd: fix devm_clk_get_optional usage [+ + +]
Author: Rosen Penev <rosenp@gmail.com>
Date:   Mon Sep 30 15:49:19 2024 -0700

    mmc: mtk-sd: fix devm_clk_get_optional usage
    
    [ Upstream commit ed299eda8fbb37cb0e05c7001ab6a6b2627ec087 ]
    
    This already returns NULL when not found. However, it can return
    EPROBE_DEFER and should thus return here.
    
    Signed-off-by: Rosen Penev <rosenp@gmail.com>
    Link: https://lore.kernel.org/r/20240930224919.355359-4-rosenp@gmail.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Stable-dep-of: 2508925fb346 ("mmc: mtk-sd: Fix MMC_CAP2_CRYPTO flag setting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mmc: mtk-sd: Fix error handle of probe function [+ + +]
Author: Andy-ld Lu <andy-ld.lu@mediatek.com>
Date:   Thu Nov 7 20:11:21 2024 +0800

    mmc: mtk-sd: Fix error handle of probe function
    
    [ Upstream commit 291220451c775a054cedc4fab4578a1419eb6256 ]
    
    In the probe function, it goes to 'release_mem' label and returns after
    some procedure failure. But if the clocks (partial or all) have been
    enabled previously, they would not be disabled in msdc_runtime_suspend,
    since runtime PM is not yet enabled for this case.
    
    That cause mmc related clocks always on during system suspend and block
    suspend flow. Below log is from a SDCard issue of MT8196 chromebook, it
    returns -ETIMEOUT while polling clock stable in the msdc_ungate_clock()
    and probe failed, but the enabled clocks could not be disabled anyway.
    
    [  129.059253] clk_chk_dev_pm_suspend()
    [  129.350119] suspend warning: msdcpll is on
    [  129.354494] [ck_msdc30_1_sel : enabled, 1, 1, 191999939,   ck_msdcpll_d2]
    [  129.362787] [ck_msdcpll_d2   : enabled, 1, 1, 191999939,         msdcpll]
    [  129.371041] [ck_msdc30_1_ck  : enabled, 1, 1, 191999939, ck_msdc30_1_sel]
    [  129.379295] [msdcpll         : enabled, 1, 1, 383999878,          clk26m]
    
    Add a new 'release_clk' label and reorder the error handle functions to
    make sure the clocks be disabled after probe failure.
    
    Fixes: ffaea6ebfe9c ("mmc: mtk-sd: Use readl_poll_timeout instead of open-coded polling")
    Fixes: 7a2fa8eed936 ("mmc: mtk-sd: use devm_mmc_alloc_host")
    Signed-off-by: Andy-ld Lu <andy-ld.lu@mediatek.com>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Cc: stable@vger.kernel.org
    Message-ID: <20241107121215.5201-1-andy-ld.lu@mediatek.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mmc: mtk-sd: Fix MMC_CAP2_CRYPTO flag setting [+ + +]
Author: Andy-ld Lu <andy-ld.lu@mediatek.com>
Date:   Mon Nov 11 16:49:31 2024 +0800

    mmc: mtk-sd: Fix MMC_CAP2_CRYPTO flag setting
    
    [ Upstream commit 2508925fb346661bad9f50b497d7ac7d0b6085d0 ]
    
    Currently, the MMC_CAP2_CRYPTO flag is set by default for eMMC hosts.
    However, this flag should not be set for hosts that do not support inline
    encryption.
    
    The 'crypto' clock, as described in the documentation, is used for data
    encryption and decryption. Therefore, only hosts that are configured with
    this 'crypto' clock should have the MMC_CAP2_CRYPTO flag set.
    
    Fixes: 7b438d0377fb ("mmc: mtk-sd: add Inline Crypto Engine clock control")
    Fixes: ed299eda8fbb ("mmc: mtk-sd: fix devm_clk_get_optional usage")
    Signed-off-by: Andy-ld Lu <andy-ld.lu@mediatek.com>
    Cc: stable@vger.kernel.org
    Message-ID: <20241111085039.26527-1-andy-ld.lu@mediatek.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mmc: mtk-sd: use devm_mmc_alloc_host [+ + +]
Author: Rosen Penev <rosenp@gmail.com>
Date:   Mon Sep 30 15:49:17 2024 -0700

    mmc: mtk-sd: use devm_mmc_alloc_host
    
    [ Upstream commit 7a2fa8eed936b33b22e49b1d2349cd7d02f22710 ]
    
    Allows removing several gotos.
    
    Also fixed some wrong ones.
    
    Added dev_err_probe where EPROBE_DEFER is possible.
    
    Signed-off-by: Rosen Penev <rosenp@gmail.com>
    Link: https://lore.kernel.org/r/20240930224919.355359-2-rosenp@gmail.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Stable-dep-of: 291220451c77 ("mmc: mtk-sd: Fix error handle of probe function")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mmc: sdhci-esdhc-imx: enable quirks SDHCI_QUIRK_NO_LED [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Mon Sep 23 14:20:16 2024 +0800

    mmc: sdhci-esdhc-imx: enable quirks SDHCI_QUIRK_NO_LED
    
    [ Upstream commit 4dede2b76f4a760e948e1a49b1520881cb459bd3 ]
    
    Enable SDHCI_QUIRK_NO_LED for i.MX7ULP, i.MX8MM, i.MX8QXP and
    i.MXRT1050. Even there is LCTL register bit, there is no IOMUX PAD
    for it. So there is no sense to enable LED for SDHCI for these SoCs.
    
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Reviewed-by: Haibo Chen <haibo.chen@nxp.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Link: https://lore.kernel.org/r/20240923062016.1165868-1-peng.fan@oss.nxp.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mmc: sdhci-pci: Add DMI quirk for missing CD GPIO on Vexia Edu Atla 10 tablet [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Mon Nov 18 22:00:49 2024 +0100

    mmc: sdhci-pci: Add DMI quirk for missing CD GPIO on Vexia Edu Atla 10 tablet
    
    commit 7f0fa47ceebcff0e3591bb7e32a71a2cd7846149 upstream.
    
    The Vexia Edu Atla 10 tablet distributed to schools in the Spanish
    Andalucía region has no ACPI fwnode associated with the SDHCI controller
    for its microsd-slot and thus has no ACPI GPIO resource info.
    
    This causes the following error to be logged and the slot to not work:
    [   10.572113] sdhci-pci 0000:00:12.0: failed to setup card detect gpio
    
    Add a DMI quirk table for providing gpiod_lookup_tables with manually
    provided CD GPIO info and use this DMI table to provide the CD GPIO info
    on this tablet. This fixes the microsd-slot not working.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: stable@vger.kernel.org
    Message-ID: <20241118210049.311079-1-hdegoede@redhat.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
modpost: Add .irqentry.text to OTHER_SECTIONS [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Sun Dec 1 12:17:30 2024 +0100

    modpost: Add .irqentry.text to OTHER_SECTIONS
    
    commit 7912405643a14b527cd4a4f33c1d4392da900888 upstream.
    
    The compiler can fully inline the actual handler function of an interrupt
    entry into the .irqentry.text entry point. If such a function contains an
    access which has an exception table entry, modpost complains about a
    section mismatch:
    
      WARNING: vmlinux.o(__ex_table+0x447c): Section mismatch in reference ...
    
      The relocation at __ex_table+0x447c references section ".irqentry.text"
      which is not in the list of authorized sections.
    
    Add .irqentry.text to OTHER_SECTIONS to cure the issue.
    
    Reported-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org # needed for linux-5.4-y
    Link: https://lore.kernel.org/all/20241128111844.GE10431@google.com/
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net-timestamp: make sk_tskey more predictable in error path [+ + +]
Author: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Date:   Tue Feb 13 03:04:28 2024 -0800

    net-timestamp: make sk_tskey more predictable in error path
    
    [ Upstream commit 488b6d91b07112eaaaa4454332c1480894d4e06e ]
    
    When SOF_TIMESTAMPING_OPT_ID is used to ambiguate timestamped datagrams,
    the sk_tskey can become unpredictable in case of any error happened
    during sendmsg(). Move increment later in the code and make decrement of
    sk_tskey in error path. This solution is still racy in case of multiple
    threads doing snedmsg() over the very same socket in parallel, but still
    makes error path much more predictable.
    
    Fixes: 09c2d251b707 ("net-timestamp: add key to disambiguate concurrent datagrams")
    Reported-by: Andy Lutomirski <luto@amacapital.net>
    Signed-off-by: Vadim Fedorenko <vadfed@meta.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://lore.kernel.org/r/20240213110428.1681540-1-vadfed@meta.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: 3301ab7d5aeb ("net/ipv6: release expired exception dst cached in socket")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/ipv6: release expired exception dst cached in socket [+ + +]
Author: Jiri Wiesner <jwiesner@suse.de>
Date:   Thu Nov 28 09:59:50 2024 +0100

    net/ipv6: release expired exception dst cached in socket
    
    [ Upstream commit 3301ab7d5aeb0fe270f73a3d4810c9d1b6a9f045 ]
    
    Dst objects get leaked in ip6_negative_advice() when this function is
    executed for an expired IPv6 route located in the exception table. There
    are several conditions that must be fulfilled for the leak to occur:
    * an ICMPv6 packet indicating a change of the MTU for the path is received,
      resulting in an exception dst being created
    * a TCP connection that uses the exception dst for routing packets must
      start timing out so that TCP begins retransmissions
    * after the exception dst expires, the FIB6 garbage collector must not run
      before TCP executes ip6_negative_advice() for the expired exception dst
    
    When TCP executes ip6_negative_advice() for an exception dst that has
    expired and if no other socket holds a reference to the exception dst, the
    refcount of the exception dst is 2, which corresponds to the increment
    made by dst_init() and the increment made by the TCP socket for which the
    connection is timing out. The refcount made by the socket is never
    released. The refcount of the dst is decremented in sk_dst_reset() but
    that decrement is counteracted by a dst_hold() intentionally placed just
    before the sk_dst_reset() in ip6_negative_advice(). After
    ip6_negative_advice() has finished, there is no other object tied to the
    dst. The socket lost its reference stored in sk_dst_cache and the dst is
    no longer in the exception table. The exception dst becomes a leaked
    object.
    
    As a result of this dst leak, an unbalanced refcount is reported for the
    loopback device of a net namespace being destroyed under kernels that do
    not contain e5f80fcf869a ("ipv6: give an IPv6 dev to blackhole_netdev"):
    unregister_netdevice: waiting for lo to become free. Usage count = 2
    
    Fix the dst leak by removing the dst_hold() in ip6_negative_advice(). The
    patch that introduced the dst_hold() in ip6_negative_advice() was
    92f1655aa2b22 ("net: fix __dst_negative_advice() race"). But 92f1655aa2b22
    merely refactored the code with regards to the dst refcount so the issue
    was present even before 92f1655aa2b22. The bug was introduced in
    54c1a859efd9f ("ipv6: Don't drop cache route entry unless timer actually
    expired.") where the expired cached route is deleted and the sk_dst_cache
    member of the socket is set to NULL by calling dst_negative_advice() but
    the refcount belonging to the socket is left unbalanced.
    
    The IPv4 version - ipv4_negative_advice() - is not affected by this bug.
    When the TCP connection times out ipv4_negative_advice() merely resets the
    sk_dst_cache of the socket while decrementing the refcount of the
    exception dst.
    
    Fixes: 92f1655aa2b22 ("net: fix __dst_negative_advice() race")
    Fixes: 54c1a859efd9f ("ipv6: Don't drop cache route entry unless timer actually expired.")
    Link: https://lore.kernel.org/netdev/20241113105611.GA6723@incl/T/#u
    Signed-off-by: Jiri Wiesner <jwiesner@suse.de>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20241128085950.GA4505@incl
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5e: Remove workaround to avoid syndrome for internal port [+ + +]
Author: Jianbo Liu <jianbol@nvidia.com>
Date:   Tue Dec 3 22:49:20 2024 +0200

    net/mlx5e: Remove workaround to avoid syndrome for internal port
    
    [ Upstream commit 5085f861b414e4a51ce28a891dfa32a10a54b64e ]
    
    Previously a workaround was added to avoid syndrome 0xcdb051. It is
    triggered when offload a rule with tunnel encapsulation, and
    forwarding to another table, but not matching on the internal port in
    firmware steering mode. The original workaround skips internal tunnel
    port logic, which is not correct as not all cases are considered. As
    an example, if vlan is configured on the uplink port, traffic can't
    pass because vlan header is not added with this workaround. Besides,
    there is no such issue for software steering. So, this patch removes
    that, and returns error directly if trying to offload such rule for
    firmware steering.
    
    Fixes: 06b4eac9c4be ("net/mlx5e: Don't offload internal port if filter device is out device")
    Signed-off-by: Jianbo Liu <jianbol@nvidia.com>
    Tested-by: Frode Nordahl <frode.nordahl@canonical.com>
    Reviewed-by: Chris Mi <cmi@nvidia.com>
    Reviewed-by: Ariel Levkovich <lariel@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20241203204920.232744-7-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/neighbor: clear error in case strict check is not set [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Thu Nov 14 16:32:21 2024 -0800

    net/neighbor: clear error in case strict check is not set
    
    [ Upstream commit 0de6a472c3b38432b2f184bd64eb70d9ea36d107 ]
    
    Commit 51183d233b5a ("net/neighbor: Update neigh_dump_info for strict
    data checking") added strict checking. The err variable is not cleared,
    so if we find no table to dump we will return the validation error even
    if user did not want strict checking.
    
    I think the only way to hit this is to send an buggy request, and ask
    for a table which doesn't exist, so there's no point treating this
    as a real fix. I only noticed it because a syzbot repro depended on it
    to trigger another bug.
    
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20241115003221.733593-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/qed: allow old cards not supporting "num_images" to work [+ + +]
Author: Louis Leseur <louis.leseur@gmail.com>
Date:   Thu Nov 28 09:33:58 2024 +0100

    net/qed: allow old cards not supporting "num_images" to work
    
    [ Upstream commit 7a0ea70da56ee8c2716d0b79e9959d3c47efab62 ]
    
    Commit 43645ce03e00 ("qed: Populate nvm image attribute shadow.")
    added support for populating flash image attributes, notably
    "num_images". However, some cards were not able to return this
    information. In such cases, the driver would return EINVAL, causing the
    driver to exit.
    
    Add check to return EOPNOTSUPP instead of EINVAL when the card is not
    able to return these information. The caller function already handles
    EOPNOTSUPP without error.
    
    Fixes: 43645ce03e00 ("qed: Populate nvm image attribute shadow.")
    Co-developed-by: Florian Forestier <florian@forestier.re>
    Signed-off-by: Florian Forestier <florian@forestier.re>
    Signed-off-by: Louis Leseur <louis.leseur@gmail.com>
    Link: https://patch.msgid.link/20241128083633.26431-1-louis.leseur@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sched: cbs: Fix integer overflow in cbs_set_port_rate() [+ + +]
Author: Elena Salomatkina <esalomatkina@ispras.ru>
Date:   Sun Oct 13 15:45:29 2024 +0300

    net/sched: cbs: Fix integer overflow in cbs_set_port_rate()
    
    [ Upstream commit 397006ba5d918f9b74e734867e8fddbc36dc2282 ]
    
    The subsequent calculation of port_rate = speed * 1000 * BYTES_PER_KBIT,
    where the BYTES_PER_KBIT is of type LL, may cause an overflow.
    At least when speed = SPEED_20000, the expression to the left of port_rate
    will be greater than INT_MAX.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Signed-off-by: Elena Salomatkina <esalomatkina@ispras.ru>
    Link: https://patch.msgid.link/20241013124529.1043-1-esalomatkina@ispras.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: tbf: correct backlog statistic for GSO packets [+ + +]
Author: Martin Ottens <martin.ottens@fau.de>
Date:   Mon Nov 25 18:46:07 2024 +0100

    net/sched: tbf: correct backlog statistic for GSO packets
    
    [ Upstream commit 1596a135e3180c92e42dd1fbcad321f4fb3e3b17 ]
    
    When the length of a GSO packet in the tbf qdisc is larger than the burst
    size configured the packet will be segmented by the tbf_segment function.
    Whenever this function is used to enqueue SKBs, the backlog statistic of
    the tbf is not increased correctly. This can lead to underflows of the
    'backlog' byte-statistic value when these packets are dequeued from tbf.
    
    Reproduce the bug:
    Ensure that the sender machine has GSO enabled. Configured the tbf on
    the outgoing interface of the machine as follows (burstsize = 1 MTU):
    $ tc qdisc add dev <oif> root handle 1: tbf rate 50Mbit burst 1514 latency 50ms
    
    Send bulk TCP traffic out via this interface, e.g., by running an iPerf3
    client on this machine. Check the qdisc statistics:
    $ tc -s qdisc show dev <oif>
    
    The 'backlog' byte-statistic has incorrect values while traffic is
    transferred, e.g., high values due to u32 underflows. When the transfer
    is stopped, the value is != 0, which should never happen.
    
    This patch fixes this bug by updating the statistics correctly, even if
    single SKBs of a GSO SKB cannot be enqueued.
    
    Fixes: e43ac79a4bc6 ("sch_tbf: segment too big GSO packets")
    Signed-off-by: Martin Ottens <martin.ottens@fau.de>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20241125174608.1484356-1-martin.ottens@fau.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/smc: add operations to merge sndbuf with peer DMB [+ + +]
Author: Wen Gu <guwen@linux.alibaba.com>
Date:   Sun Apr 28 14:07:35 2024 +0800

    net/smc: add operations to merge sndbuf with peer DMB
    
    [ Upstream commit 4398888268582cb51b69c6ee94f551bb8d37d12f ]
    
    In some scenarios using Emulated-ISM device, sndbuf can share the same
    physical memory region with peer DMB to avoid data copy from one side
    to the other. In such case the sndbuf is only a descriptor that
    describes the shared memory and does not actually occupy memory, it's
    more like a ghost buffer.
    
          +----------+                     +----------+
          | socket A |                     | socket B |
          +----------+                     +----------+
                |                               |
           +--------+                       +--------+
           | sndbuf |                       |  DMB   |
           |  desc  |                       |  desc  |
           +--------+                       +--------+
                |                               |
                |                          +----v-----+
                +-------------------------->  memory  |
                                           +----------+
    
    So here introduces three new SMC-D device operations to check if this
    feature is supported by device, and to {attach|detach} ghost sndbuf to
    peer DMB. For now only loopback-ism supports this.
    
    Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
    Reviewed-and-tested-by: Jan Karcher <jaka@linux.ibm.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: 0541db8ee32c ("net/smc: initialize close_work early to avoid warning")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: compatible with 128-bits extended GID of virtual ISM device [+ + +]
Author: Wen Gu <guwen@linux.alibaba.com>
Date:   Tue Dec 19 22:26:13 2023 +0800

    net/smc: compatible with 128-bits extended GID of virtual ISM device
    
    [ Upstream commit b40584d145700addc70cc29e4f0850a4ed955b1c ]
    
    According to virtual ISM support feature defined by SMCv2.1, GIDs of
    virtual ISM device are UUIDs defined by RFC4122, which are 128-bits
    long. So some adaptation work is required. And note that the GIDs of
    existing platform firmware ISM devices still remain 64-bits long.
    
    Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 0541db8ee32c ("net/smc: initialize close_work early to avoid warning")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: define a reserved CHID range for virtual ISM devices [+ + +]
Author: Wen Gu <guwen@linux.alibaba.com>
Date:   Tue Dec 19 22:26:12 2023 +0800

    net/smc: define a reserved CHID range for virtual ISM devices
    
    [ Upstream commit 8dd512df3c98ce8081e3541990bf849157675723 ]
    
    According to virtual ISM support feature defined by SMCv2.1, CHIDs in
    the range 0xFF00 to 0xFFFF are reserved for use by virtual ISM devices.
    
    And two helpers are introduced to distinguish virtual ISM devices from
    the existing platform firmware ISM devices.
    
    Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-and-tested-by: Wenjia Zhang <wenjia@linux.ibm.com>
    Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 0541db8ee32c ("net/smc: initialize close_work early to avoid warning")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: fix incorrect SMC-D link group matching logic [+ + +]
Author: Wen Gu <guwen@linux.alibaba.com>
Date:   Thu Jan 25 20:39:16 2024 +0800

    net/smc: fix incorrect SMC-D link group matching logic
    
    commit c3dfcdb65ec1a4813ec1e0871c52c671ba9c71ac upstream.
    
    The logic to determine if SMC-D link group matches is incorrect. The
    correct logic should be that it only returns true when the GID is the
    same, and the SMC-D device is the same and the extended GID is the same
    (in the case of virtual ISM).
    
    It can be fixed by adding brackets around the conditional (or ternary)
    operator expression. But for better readability and maintainability, it
    has been changed to an if-else statement.
    
    Reported-by: Matthew Rosato <mjrosato@linux.ibm.com>
    Closes: https://lore.kernel.org/r/13579588-eb9d-4626-a063-c0b77ed80f11@linux.ibm.com
    Fixes: b40584d14570 ("net/smc: compatible with 128-bits extended GID of virtual ISM device")
    Link: https://lore.kernel.org/r/13579588-eb9d-4626-a063-c0b77ed80f11@linux.ibm.com
    Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
    Link: https://lore.kernel.org/r/20240125123916.77928-1-guwen@linux.alibaba.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net/smc: fix LGR and link use-after-free issue [+ + +]
Author: Wen Gu <guwen@linux.alibaba.com>
Date:   Wed Nov 27 21:30:14 2024 +0800

    net/smc: fix LGR and link use-after-free issue
    
    [ Upstream commit 2c7f14ed9c19ec0f149479d1c2842ec1f9bf76d7 ]
    
    We encountered a LGR/link use-after-free issue, which manifested as
    the LGR/link refcnt reaching 0 early and entering the clear process,
    making resource access unsafe.
    
     refcount_t: addition on 0; use-after-free.
     WARNING: CPU: 14 PID: 107447 at lib/refcount.c:25 refcount_warn_saturate+0x9c/0x140
     Workqueue: events smc_lgr_terminate_work [smc]
     Call trace:
      refcount_warn_saturate+0x9c/0x140
      __smc_lgr_terminate.part.45+0x2a8/0x370 [smc]
      smc_lgr_terminate_work+0x28/0x30 [smc]
      process_one_work+0x1b8/0x420
      worker_thread+0x158/0x510
      kthread+0x114/0x118
    
    or
    
     refcount_t: underflow; use-after-free.
     WARNING: CPU: 6 PID: 93140 at lib/refcount.c:28 refcount_warn_saturate+0xf0/0x140
     Workqueue: smc_hs_wq smc_listen_work [smc]
     Call trace:
      refcount_warn_saturate+0xf0/0x140
      smcr_link_put+0x1cc/0x1d8 [smc]
      smc_conn_free+0x110/0x1b0 [smc]
      smc_conn_abort+0x50/0x60 [smc]
      smc_listen_find_device+0x75c/0x790 [smc]
      smc_listen_work+0x368/0x8a0 [smc]
      process_one_work+0x1b8/0x420
      worker_thread+0x158/0x510
      kthread+0x114/0x118
    
    It is caused by repeated release of LGR/link refcnt. One suspect is that
    smc_conn_free() is called repeatedly because some smc_conn_free() from
    server listening path are not protected by sock lock.
    
    e.g.
    
    Calls under socklock        | smc_listen_work
    -------------------------------------------------------
    lock_sock(sk)               | smc_conn_abort
    smc_conn_free               | \- smc_conn_free
    \- smcr_link_put            |    \- smcr_link_put (duplicated)
    release_sock(sk)
    
    So here add sock lock protection in smc_listen_work() path, making it
    exclusive with other connection operations.
    
    Fixes: 3b2dec2603d5 ("net/smc: restructure client and server code in af_smc")
    Co-developed-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
    Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
    Co-developed-by: Kai <KaiShen@linux.alibaba.com>
    Signed-off-by: Kai <KaiShen@linux.alibaba.com>
    Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: initialize close_work early to avoid warning [+ + +]
Author: Wen Gu <guwen@linux.alibaba.com>
Date:   Wed Nov 27 21:30:13 2024 +0800

    net/smc: initialize close_work early to avoid warning
    
    [ Upstream commit 0541db8ee32c09463a72d0987382b3a3336b0043 ]
    
    We encountered a warning that close_work was canceled before
    initialization.
    
      WARNING: CPU: 7 PID: 111103 at kernel/workqueue.c:3047 __flush_work+0x19e/0x1b0
      Workqueue: events smc_lgr_terminate_work [smc]
      RIP: 0010:__flush_work+0x19e/0x1b0
      Call Trace:
       ? __wake_up_common+0x7a/0x190
       ? work_busy+0x80/0x80
       __cancel_work_timer+0xe3/0x160
       smc_close_cancel_work+0x1a/0x70 [smc]
       smc_close_active_abort+0x207/0x360 [smc]
       __smc_lgr_terminate.part.38+0xc8/0x180 [smc]
       process_one_work+0x19e/0x340
       worker_thread+0x30/0x370
       ? process_one_work+0x340/0x340
       kthread+0x117/0x130
       ? __kthread_cancel_work+0x50/0x50
       ret_from_fork+0x22/0x30
    
    This is because when smc_close_cancel_work is triggered, e.g. the RDMA
    driver is rmmod and the LGR is terminated, the conn->close_work is
    flushed before initialization, resulting in WARN_ON(!work->func).
    
    __smc_lgr_terminate             | smc_connect_{rdma|ism}
    -------------------------------------------------------------
                                    | smc_conn_create
                                    | \- smc_lgr_register_conn
    for conn in lgr->conns_all      |
    \- smc_conn_kill                |
       \- smc_close_active_abort    |
          \- smc_close_cancel_work  |
             \- cancel_work_sync    |
                \- __flush_work     |
                     (close_work)   |
                                    | smc_close_init
                                    | \- INIT_WORK(&close_work)
    
    So fix this by initializing close_work before establishing the
    connection.
    
    Fixes: 46c28dbd4c23 ("net/smc: no socket state changes in tasklet context")
    Fixes: 413498440e30 ("net/smc: add SMC-D support in af_smc")
    Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
    Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: introduce sub-functions for smc_clc_send_confirm_accept() [+ + +]
Author: Wen Gu <guwen@linux.alibaba.com>
Date:   Tue Dec 19 22:26:08 2023 +0800

    net/smc: introduce sub-functions for smc_clc_send_confirm_accept()
    
    [ Upstream commit 5205ac4483b630e47c65f192a3ac19be7a8ea648 ]
    
    There is a large if-else block in smc_clc_send_confirm_accept() and it
    is better to split it into two sub-functions.
    
    Suggested-by: Alexandra Winter <wintera@linux.ibm.com>
    Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 0541db8ee32c ("net/smc: initialize close_work early to avoid warning")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: mark optional smcd_ops and check for support when called [+ + +]
Author: Wen Gu <guwen@linux.alibaba.com>
Date:   Sun Apr 28 14:07:32 2024 +0800

    net/smc: mark optional smcd_ops and check for support when called
    
    [ Upstream commit d1d8d0b6c7c68b0665456831fa779174ebd78f90 ]
    
    Some operations are not supported by new introduced Emulated-ISM, so
    mark them as optional and check if the device supports them when called.
    
    Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
    Reviewed-and-tested-by: Jan Karcher <jaka@linux.ibm.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: 0541db8ee32c ("net/smc: initialize close_work early to avoid warning")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: refactoring initialization of smc sock [+ + +]
Author: D. Wythe <alibuda@linux.alibaba.com>
Date:   Fri Jun 14 02:00:28 2024 +0800

    net/smc: refactoring initialization of smc sock
    
    [ Upstream commit d0e35656d83458d668593930f1568d464dde429c ]
    
    This patch aims to isolate the shared components of SMC socket
    allocation by introducing smc_sk_init() for sock initialization
    and __smc_create_clcsk() for the initialization of clcsock.
    
    This is in preparation for the subsequent implementation of the
    AF_INET version of SMC.
    
    Signed-off-by: D. Wythe <alibuda@linux.alibaba.com>
    Reviewed-by: Tony Lu <tonylu@linux.alibaba.com>
    Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
    Reviewed-by: Dust Li <dust.li@linux.alibaba.com>
    Tested-by: Niklas Schnelle <schnelle@linux.ibm.com>
    Tested-by: Wenjia Zhang <wenjia@linux.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 0541db8ee32c ("net/smc: initialize close_work early to avoid warning")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: rename some 'fce' to 'fce_v2x' for clarity [+ + +]
Author: Wen Gu <guwen@linux.alibaba.com>
Date:   Tue Dec 19 22:26:07 2023 +0800

    net/smc: rename some 'fce' to 'fce_v2x' for clarity
    
    [ Upstream commit ac053a169c71ceb0f25f784fce9ea720455097b4 ]
    
    Rename some functions or variables with 'fce' in their name but used in
    SMCv2.1 as 'fce_v2x' for clarity.
    
    Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 0541db8ee32c ("net/smc: initialize close_work early to avoid warning")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: unify the structs of accept or confirm message for v1 and v2 [+ + +]
Author: Wen Gu <guwen@linux.alibaba.com>
Date:   Tue Dec 19 22:26:09 2023 +0800

    net/smc: unify the structs of accept or confirm message for v1 and v2
    
    [ Upstream commit 9505450d55b0f7809fe63c36ad9339a909461c87 ]
    
    The structs of CLC accept and confirm messages for SMCv1 and SMCv2 are
    separately defined and often casted to each other in the code, which may
    increase the risk of errors caused by future divergence of them. So
    unify them into one struct for better maintainability.
    
    Suggested-by: Alexandra Winter <wintera@linux.ibm.com>
    Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 0541db8ee32c ("net/smc: initialize close_work early to avoid warning")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: {at|de}tach sndbuf to peer DMB if supported [+ + +]
Author: Wen Gu <guwen@linux.alibaba.com>
Date:   Sun Apr 28 14:07:36 2024 +0800

    net/smc: {at|de}tach sndbuf to peer DMB if supported
    
    [ Upstream commit ae2be35cbed2c8385e890147ea321a3fcc3ca5fa ]
    
    If the device used by SMC-D supports merging local sndbuf to peer DMB,
    then create sndbuf descriptor and attach it to peer DMB once peer
    token is obtained, and detach and free the sndbuf descriptor when the
    connection is freed.
    
    Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
    Reviewed-and-tested-by: Jan Karcher <jaka@linux.ibm.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: 0541db8ee32c ("net/smc: initialize close_work early to avoid warning")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: af_can: do not leave a dangling sk pointer in can_create() [+ + +]
Author: Ignat Korchagin <ignat@cloudflare.com>
Date:   Mon Oct 14 16:38:03 2024 +0100

    net: af_can: do not leave a dangling sk pointer in can_create()
    
    [ Upstream commit 811a7ca7320c062e15d0f5b171fe6ad8592d1434 ]
    
    On error can_create() frees the allocated sk object, but sock_init_data()
    has already attached it to the provided sock object. This will leave a
    dangling sk pointer in the sock object and may cause use-after-free later.
    
    Signed-off-by: Ignat Korchagin <ignat@cloudflare.com>
    Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Link: https://patch.msgid.link/20241014153808.51894-5-ignat@cloudflare.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: avoid potential UAF in default_operstate() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Dec 3 17:09:33 2024 +0000

    net: avoid potential UAF in default_operstate()
    
    [ Upstream commit 750e51603395e755537da08f745864c93e3ce741 ]
    
    syzbot reported an UAF in default_operstate() [1]
    
    Issue is a race between device and netns dismantles.
    
    After calling __rtnl_unlock() from netdev_run_todo(),
    we can not assume the netns of each device is still alive.
    
    Make sure the device is not in NETREG_UNREGISTERED state,
    and add an ASSERT_RTNL() before the call to
    __dev_get_by_index().
    
    We might move this ASSERT_RTNL() in __dev_get_by_index()
    in the future.
    
    [1]
    
    BUG: KASAN: slab-use-after-free in __dev_get_by_index+0x5d/0x110 net/core/dev.c:852
    Read of size 8 at addr ffff888043eba1b0 by task syz.0.0/5339
    
    CPU: 0 UID: 0 PID: 5339 Comm: syz.0.0 Not tainted 6.12.0-syzkaller-10296-gaaf20f870da0 #0
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
    Call Trace:
     <TASK>
      __dump_stack lib/dump_stack.c:94 [inline]
      dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120
      print_address_description mm/kasan/report.c:378 [inline]
      print_report+0x169/0x550 mm/kasan/report.c:489
      kasan_report+0x143/0x180 mm/kasan/report.c:602
      __dev_get_by_index+0x5d/0x110 net/core/dev.c:852
      default_operstate net/core/link_watch.c:51 [inline]
      rfc2863_policy+0x224/0x300 net/core/link_watch.c:67
      linkwatch_do_dev+0x3e/0x170 net/core/link_watch.c:170
      netdev_run_todo+0x461/0x1000 net/core/dev.c:10894
      rtnl_unlock net/core/rtnetlink.c:152 [inline]
      rtnl_net_unlock include/linux/rtnetlink.h:133 [inline]
      rtnl_dellink+0x760/0x8d0 net/core/rtnetlink.c:3520
      rtnetlink_rcv_msg+0x791/0xcf0 net/core/rtnetlink.c:6911
      netlink_rcv_skb+0x1e3/0x430 net/netlink/af_netlink.c:2541
      netlink_unicast_kernel net/netlink/af_netlink.c:1321 [inline]
      netlink_unicast+0x7f6/0x990 net/netlink/af_netlink.c:1347
      netlink_sendmsg+0x8e4/0xcb0 net/netlink/af_netlink.c:1891
      sock_sendmsg_nosec net/socket.c:711 [inline]
      __sock_sendmsg+0x221/0x270 net/socket.c:726
      ____sys_sendmsg+0x52a/0x7e0 net/socket.c:2583
      ___sys_sendmsg net/socket.c:2637 [inline]
      __sys_sendmsg+0x269/0x350 net/socket.c:2669
      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
    RIP: 0033:0x7f2a3cb80809
    Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007f2a3d9cd058 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    RAX: ffffffffffffffda RBX: 00007f2a3cd45fa0 RCX: 00007f2a3cb80809
    RDX: 0000000000000000 RSI: 0000000020000000 RDI: 0000000000000008
    RBP: 00007f2a3cbf393e R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 0000000000000000 R14: 00007f2a3cd45fa0 R15: 00007ffd03bc65c8
     </TASK>
    
    Allocated by task 5339:
      kasan_save_stack mm/kasan/common.c:47 [inline]
      kasan_save_track+0x3f/0x80 mm/kasan/common.c:68
      poison_kmalloc_redzone mm/kasan/common.c:377 [inline]
      __kasan_kmalloc+0x98/0xb0 mm/kasan/common.c:394
      kasan_kmalloc include/linux/kasan.h:260 [inline]
      __kmalloc_cache_noprof+0x243/0x390 mm/slub.c:4314
      kmalloc_noprof include/linux/slab.h:901 [inline]
      kmalloc_array_noprof include/linux/slab.h:945 [inline]
      netdev_create_hash net/core/dev.c:11870 [inline]
      netdev_init+0x10c/0x250 net/core/dev.c:11890
      ops_init+0x31e/0x590 net/core/net_namespace.c:138
      setup_net+0x287/0x9e0 net/core/net_namespace.c:362
      copy_net_ns+0x33f/0x570 net/core/net_namespace.c:500
      create_new_namespaces+0x425/0x7b0 kernel/nsproxy.c:110
      unshare_nsproxy_namespaces+0x124/0x180 kernel/nsproxy.c:228
      ksys_unshare+0x57d/0xa70 kernel/fork.c:3314
      __do_sys_unshare kernel/fork.c:3385 [inline]
      __se_sys_unshare kernel/fork.c:3383 [inline]
      __x64_sys_unshare+0x38/0x40 kernel/fork.c:3383
      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
    
    Freed by task 12:
      kasan_save_stack mm/kasan/common.c:47 [inline]
      kasan_save_track+0x3f/0x80 mm/kasan/common.c:68
      kasan_save_free_info+0x40/0x50 mm/kasan/generic.c:582
      poison_slab_object mm/kasan/common.c:247 [inline]
      __kasan_slab_free+0x59/0x70 mm/kasan/common.c:264
      kasan_slab_free include/linux/kasan.h:233 [inline]
      slab_free_hook mm/slub.c:2338 [inline]
      slab_free mm/slub.c:4598 [inline]
      kfree+0x196/0x420 mm/slub.c:4746
      netdev_exit+0x65/0xd0 net/core/dev.c:11992
      ops_exit_list net/core/net_namespace.c:172 [inline]
      cleanup_net+0x802/0xcc0 net/core/net_namespace.c:632
      process_one_work kernel/workqueue.c:3229 [inline]
      process_scheduled_works+0xa63/0x1850 kernel/workqueue.c:3310
      worker_thread+0x870/0xd30 kernel/workqueue.c:3391
      kthread+0x2f0/0x390 kernel/kthread.c:389
      ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147
      ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
    
    The buggy address belongs to the object at ffff888043eba000
     which belongs to the cache kmalloc-2k of size 2048
    The buggy address is located 432 bytes inside of
     freed 2048-byte region [ffff888043eba000, ffff888043eba800)
    
    The buggy address belongs to the physical page:
    page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x43eb8
    head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    flags: 0x4fff00000000040(head|node=1|zone=1|lastcpupid=0x7ff)
    page_type: f5(slab)
    raw: 04fff00000000040 ffff88801ac42000 dead000000000122 0000000000000000
    raw: 0000000000000000 0000000000080008 00000001f5000000 0000000000000000
    head: 04fff00000000040 ffff88801ac42000 dead000000000122 0000000000000000
    head: 0000000000000000 0000000000080008 00000001f5000000 0000000000000000
    head: 04fff00000000003 ffffea00010fae01 ffffffffffffffff 0000000000000000
    head: 0000000000000008 0000000000000000 00000000ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    page_owner tracks the page as allocated
    page last allocated via order 3, migratetype Unmovable, gfp_mask 0xd20c0(__GFP_IO|__GFP_FS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC), pid 5339, tgid 5338 (syz.0.0), ts 69674195892, free_ts 69663220888
      set_page_owner include/linux/page_owner.h:32 [inline]
      post_alloc_hook+0x1f3/0x230 mm/page_alloc.c:1556
      prep_new_page mm/page_alloc.c:1564 [inline]
      get_page_from_freelist+0x3649/0x3790 mm/page_alloc.c:3474
      __alloc_pages_noprof+0x292/0x710 mm/page_alloc.c:4751
      alloc_pages_mpol_noprof+0x3e8/0x680 mm/mempolicy.c:2265
      alloc_slab_page+0x6a/0x140 mm/slub.c:2408
      allocate_slab+0x5a/0x2f0 mm/slub.c:2574
      new_slab mm/slub.c:2627 [inline]
      ___slab_alloc+0xcd1/0x14b0 mm/slub.c:3815
      __slab_alloc+0x58/0xa0 mm/slub.c:3905
      __slab_alloc_node mm/slub.c:3980 [inline]
      slab_alloc_node mm/slub.c:4141 [inline]
      __do_kmalloc_node mm/slub.c:4282 [inline]
      __kmalloc_noprof+0x2e6/0x4c0 mm/slub.c:4295
      kmalloc_noprof include/linux/slab.h:905 [inline]
      sk_prot_alloc+0xe0/0x210 net/core/sock.c:2165
      sk_alloc+0x38/0x370 net/core/sock.c:2218
      __netlink_create+0x65/0x260 net/netlink/af_netlink.c:629
      __netlink_kernel_create+0x174/0x6f0 net/netlink/af_netlink.c:2015
      netlink_kernel_create include/linux/netlink.h:62 [inline]
      uevent_net_init+0xed/0x2d0 lib/kobject_uevent.c:783
      ops_init+0x31e/0x590 net/core/net_namespace.c:138
      setup_net+0x287/0x9e0 net/core/net_namespace.c:362
    page last free pid 1032 tgid 1032 stack trace:
      reset_page_owner include/linux/page_owner.h:25 [inline]
      free_pages_prepare mm/page_alloc.c:1127 [inline]
      free_unref_page+0xdf9/0x1140 mm/page_alloc.c:2657
      __slab_free+0x31b/0x3d0 mm/slub.c:4509
      qlink_free mm/kasan/quarantine.c:163 [inline]
      qlist_free_all+0x9a/0x140 mm/kasan/quarantine.c:179
      kasan_quarantine_reduce+0x14f/0x170 mm/kasan/quarantine.c:286
      __kasan_slab_alloc+0x23/0x80 mm/kasan/common.c:329
      kasan_slab_alloc include/linux/kasan.h:250 [inline]
      slab_post_alloc_hook mm/slub.c:4104 [inline]
      slab_alloc_node mm/slub.c:4153 [inline]
      kmem_cache_alloc_node_noprof+0x1d9/0x380 mm/slub.c:4205
      __alloc_skb+0x1c3/0x440 net/core/skbuff.c:668
      alloc_skb include/linux/skbuff.h:1323 [inline]
      alloc_skb_with_frags+0xc3/0x820 net/core/skbuff.c:6612
      sock_alloc_send_pskb+0x91a/0xa60 net/core/sock.c:2881
      sock_alloc_send_skb include/net/sock.h:1797 [inline]
      mld_newpack+0x1c3/0xaf0 net/ipv6/mcast.c:1747
      add_grhead net/ipv6/mcast.c:1850 [inline]
      add_grec+0x1492/0x19a0 net/ipv6/mcast.c:1988
      mld_send_initial_cr+0x228/0x4b0 net/ipv6/mcast.c:2234
      ipv6_mc_dad_complete+0x88/0x490 net/ipv6/mcast.c:2245
      addrconf_dad_completed+0x712/0xcd0 net/ipv6/addrconf.c:4342
     addrconf_dad_work+0xdc2/0x16f0
      process_one_work kernel/workqueue.c:3229 [inline]
      process_scheduled_works+0xa63/0x1850 kernel/workqueue.c:3310
    
    Memory state around the buggy address:
     ffff888043eba080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff888043eba100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    >ffff888043eba180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                         ^
     ffff888043eba200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff888043eba280: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    
    Fixes: 8c55facecd7a ("net: linkwatch: only report IF_OPER_LOWERLAYERDOWN if iflink is actually down")
    Reported-by: syzbot+1939f24bdb783e9e43d9@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/674f3a18.050a0220.48a03.0041.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Link: https://patch.msgid.link/20241203170933.2449307-1-edumazet@google.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: enetc: Do not configure preemptible TCs if SIs do not support [+ + +]
Author: Wei Fang <wei.fang@nxp.com>
Date:   Mon Nov 25 17:07:19 2024 +0800

    net: enetc: Do not configure preemptible TCs if SIs do not support
    
    [ Upstream commit b2420b8c81ec674552d00c55d46245e5c184b260 ]
    
    Both ENETC PF and VF drivers share enetc_setup_tc_mqprio() to configure
    MQPRIO. And enetc_setup_tc_mqprio() calls enetc_change_preemptible_tcs()
    to configure preemptible TCs. However, only PF is able to configure
    preemptible TCs. Because only PF has related registers, while VF does not
    have these registers. So for VF, its hw->port pointer is NULL. Therefore,
    VF will access an invalid pointer when accessing a non-existent register,
    which will cause a crash issue. The simplified log is as follows.
    
    root@ls1028ardb:~# tc qdisc add dev eno0vf0 parent root handle 100: \
    mqprio num_tc 4 map 0 0 1 1 2 2 3 3 queues 1@0 1@1 1@2 1@3 hw 1
    [  187.290775] Unable to handle kernel paging request at virtual address 0000000000001f00
    [  187.424831] pc : enetc_mm_commit_preemptible_tcs+0x1c4/0x400
    [  187.430518] lr : enetc_mm_commit_preemptible_tcs+0x30c/0x400
    [  187.511140] Call trace:
    [  187.513588]  enetc_mm_commit_preemptible_tcs+0x1c4/0x400
    [  187.518918]  enetc_setup_tc_mqprio+0x180/0x214
    [  187.523374]  enetc_vf_setup_tc+0x1c/0x30
    [  187.527306]  mqprio_enable_offload+0x144/0x178
    [  187.531766]  mqprio_init+0x3ec/0x668
    [  187.535351]  qdisc_create+0x15c/0x488
    [  187.539023]  tc_modify_qdisc+0x398/0x73c
    [  187.542958]  rtnetlink_rcv_msg+0x128/0x378
    [  187.547064]  netlink_rcv_skb+0x60/0x130
    [  187.550910]  rtnetlink_rcv+0x18/0x24
    [  187.554492]  netlink_unicast+0x300/0x36c
    [  187.558425]  netlink_sendmsg+0x1a8/0x420
    [  187.606759] ---[ end trace 0000000000000000 ]---
    
    In addition, some PFs also do not support configuring preemptible TCs,
    such as eno1 and eno3 on LS1028A. It won't crash like it does for VFs,
    but we should prevent these PFs from accessing these unimplemented
    registers.
    
    Fixes: 827145392a4a ("net: enetc: only commit preemptible TCs to hardware when MM TX is active")
    Signed-off-by: Wei Fang <wei.fang@nxp.com>
    Suggested-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: fs_enet: Use %pa to format resource_size_t [+ + +]
Author: Simon Horman <horms@kernel.org>
Date:   Mon Oct 14 11:48:08 2024 +0100

    net: ethernet: fs_enet: Use %pa to format resource_size_t
    
    [ Upstream commit 45fe45fada261e1e83fce2a07fa22835aec1cf0a ]
    
    The correct format string for resource_size_t is %pa which
    acts on the address of the variable to be formatted [1].
    
    [1] https://elixir.bootlin.com/linux/v6.11.3/source/Documentation/core-api/printk-formats.rst#L229
    
    Introduced by commit 9d9326d3bc0e ("phy: Change mii_bus id field to a string")
    
    Flagged by gcc-14 as:
    
    drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c: In function 'fs_mii_bitbang_init':
    drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c:126:46: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'resource_size_t' {aka 'long long unsigned int'} [-Wformat=]
      126 |         snprintf(bus->id, MII_BUS_ID_SIZE, "%x", res.start);
          |                                             ~^   ~~~~~~~~~
          |                                              |      |
          |                                              |      resource_size_t {aka long long unsigned int}
          |                                              unsigned int
          |                                             %llx
    
    No functional change intended.
    Compile tested only.
    
    Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Closes: https://lore.kernel.org/netdev/711d7f6d-b785-7560-f4dc-c6aad2cce99@linux-m68k.org/
    Signed-off-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Daniel Machon <daniel.machon@microchip.com>
    Link: https://patch.msgid.link/20241014-net-pa-fmt-v1-2-dcc9afb8858b@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: fec_mpc52xx_phy: Use %pa to format resource_size_t [+ + +]
Author: Simon Horman <horms@kernel.org>
Date:   Mon Oct 14 11:48:07 2024 +0100

    net: fec_mpc52xx_phy: Use %pa to format resource_size_t
    
    [ Upstream commit 020bfdc4ed94be472138c891bde4d14241cf00fd ]
    
    The correct format string for resource_size_t is %pa which
    acts on the address of the variable to be formatted [1].
    
    [1] https://elixir.bootlin.com/linux/v6.11.3/source/Documentation/core-api/printk-formats.rst#L229
    
    Introduced by commit 9d9326d3bc0e ("phy: Change mii_bus id field to a string")
    
    Flagged by gcc-14 as:
    
    drivers/net/ethernet/freescale/fec_mpc52xx_phy.c: In function 'mpc52xx_fec_mdio_probe':
    drivers/net/ethernet/freescale/fec_mpc52xx_phy.c:97:46: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'resource_size_t' {aka 'long long unsigned int'} [-Wformat=]
       97 |         snprintf(bus->id, MII_BUS_ID_SIZE, "%x", res.start);
          |                                             ~^   ~~~~~~~~~
          |                                              |      |
          |                                              |      resource_size_t {aka long long unsigned int}
          |                                              unsigned int
          |                                             %llx
    
    No functional change intended.
    Compile tested only.
    
    Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Closes: https://lore.kernel.org/netdev/711d7f6d-b785-7560-f4dc-c6aad2cce99@linux-m68k.org/
    Signed-off-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Daniel Machon <daniel.machon@microchip.com>
    Link: https://patch.msgid.link/20241014-net-pa-fmt-v1-1-dcc9afb8858b@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hsr: avoid potential out-of-bound access in fill_frame_info() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Nov 26 14:43:44 2024 +0000

    net: hsr: avoid potential out-of-bound access in fill_frame_info()
    
    [ Upstream commit b9653d19e556c6afd035602927a93d100a0d7644 ]
    
    syzbot is able to feed a packet with 14 bytes, pretending
    it is a vlan one.
    
    Since fill_frame_info() is relying on skb->mac_len already,
    extend the check to cover this case.
    
    BUG: KMSAN: uninit-value in fill_frame_info net/hsr/hsr_forward.c:709 [inline]
     BUG: KMSAN: uninit-value in hsr_forward_skb+0x9ee/0x3b10 net/hsr/hsr_forward.c:724
      fill_frame_info net/hsr/hsr_forward.c:709 [inline]
      hsr_forward_skb+0x9ee/0x3b10 net/hsr/hsr_forward.c:724
      hsr_dev_xmit+0x2f0/0x350 net/hsr/hsr_device.c:235
      __netdev_start_xmit include/linux/netdevice.h:5002 [inline]
      netdev_start_xmit include/linux/netdevice.h:5011 [inline]
      xmit_one net/core/dev.c:3590 [inline]
      dev_hard_start_xmit+0x247/0xa20 net/core/dev.c:3606
      __dev_queue_xmit+0x366a/0x57d0 net/core/dev.c:4434
      dev_queue_xmit include/linux/netdevice.h:3168 [inline]
      packet_xmit+0x9c/0x6c0 net/packet/af_packet.c:276
      packet_snd net/packet/af_packet.c:3146 [inline]
      packet_sendmsg+0x91ae/0xa6f0 net/packet/af_packet.c:3178
      sock_sendmsg_nosec net/socket.c:711 [inline]
      __sock_sendmsg+0x30f/0x380 net/socket.c:726
      __sys_sendto+0x594/0x750 net/socket.c:2197
      __do_sys_sendto net/socket.c:2204 [inline]
      __se_sys_sendto net/socket.c:2200 [inline]
      __x64_sys_sendto+0x125/0x1d0 net/socket.c:2200
      x64_sys_call+0x346a/0x3c30 arch/x86/include/generated/asm/syscalls_64.h:45
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Uninit was created at:
      slab_post_alloc_hook mm/slub.c:4091 [inline]
      slab_alloc_node mm/slub.c:4134 [inline]
      kmem_cache_alloc_node_noprof+0x6bf/0xb80 mm/slub.c:4186
      kmalloc_reserve+0x13d/0x4a0 net/core/skbuff.c:587
      __alloc_skb+0x363/0x7b0 net/core/skbuff.c:678
      alloc_skb include/linux/skbuff.h:1323 [inline]
      alloc_skb_with_frags+0xc8/0xd00 net/core/skbuff.c:6612
      sock_alloc_send_pskb+0xa81/0xbf0 net/core/sock.c:2881
      packet_alloc_skb net/packet/af_packet.c:2995 [inline]
      packet_snd net/packet/af_packet.c:3089 [inline]
      packet_sendmsg+0x74c6/0xa6f0 net/packet/af_packet.c:3178
      sock_sendmsg_nosec net/socket.c:711 [inline]
      __sock_sendmsg+0x30f/0x380 net/socket.c:726
      __sys_sendto+0x594/0x750 net/socket.c:2197
      __do_sys_sendto net/socket.c:2204 [inline]
      __se_sys_sendto net/socket.c:2200 [inline]
      __x64_sys_sendto+0x125/0x1d0 net/socket.c:2200
      x64_sys_call+0x346a/0x3c30 arch/x86/include/generated/asm/syscalls_64.h:45
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: 48b491a5cc74 ("net: hsr: fix mac_len checks")
    Reported-by: syzbot+671e2853f9851d039551@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/6745dc7f.050a0220.21d33d.0018.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: WingMan Kwok <w-kwok2@ti.com>
    Cc: Murali Karicheri <m-karicheri2@ti.com>
    Cc: MD Danish Anwar <danishanwar@ti.com>
    Cc: Jiri Pirko <jiri@nvidia.com>
    Cc: George McCollister <george.mccollister@gmail.com>
    Link: https://patch.msgid.link/20241126144344.4177332-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ieee802154: do not leave a dangling sk pointer in ieee802154_create() [+ + +]
Author: Ignat Korchagin <ignat@cloudflare.com>
Date:   Mon Oct 14 16:38:04 2024 +0100

    net: ieee802154: do not leave a dangling sk pointer in ieee802154_create()
    
    [ Upstream commit b4fcd63f6ef79c73cafae8cf4a114def5fc3d80d ]
    
    sock_init_data() attaches the allocated sk object to the provided sock
    object. If ieee802154_create() fails later, the allocated sk object is
    freed, but the dangling pointer remains in the provided sock object, which
    may allow use-after-free.
    
    Clear the sk pointer in the sock object on error.
    
    Signed-off-by: Ignat Korchagin <ignat@cloudflare.com>
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20241014153808.51894-6-ignat@cloudflare.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: inet6: do not leave a dangling sk pointer in inet6_create() [+ + +]
Author: Ignat Korchagin <ignat@cloudflare.com>
Date:   Mon Oct 14 16:38:06 2024 +0100

    net: inet6: do not leave a dangling sk pointer in inet6_create()
    
    [ Upstream commit 9df99c395d0f55fb444ef39f4d6f194ca437d884 ]
    
    sock_init_data() attaches the allocated sk pointer to the provided sock
    object. If inet6_create() fails later, the sk object is released, but the
    sock object retains the dangling sk pointer, which may cause use-after-free
    later.
    
    Clear the sock sk pointer on error.
    
    Signed-off-by: Ignat Korchagin <ignat@cloudflare.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20241014153808.51894-8-ignat@cloudflare.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: inet: do not leave a dangling sk pointer in inet_create() [+ + +]
Author: Ignat Korchagin <ignat@cloudflare.com>
Date:   Mon Oct 14 16:38:05 2024 +0100

    net: inet: do not leave a dangling sk pointer in inet_create()
    
    [ Upstream commit 9365fa510c6f82e3aa550a09d0c5c6b44dbc78ff ]
    
    sock_init_data() attaches the allocated sk object to the provided sock
    object. If inet_create() fails later, the sk object is freed, but the
    sock object retains the dangling pointer, which may create use-after-free
    later.
    
    Clear the sk pointer in the sock object on error.
    
    Signed-off-by: Ignat Korchagin <ignat@cloudflare.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20241014153808.51894-7-ignat@cloudflare.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sched: fix erspan_opt settings in cls_flower [+ + +]
Author: Xin Long <lucien.xin@gmail.com>
Date:   Mon Dec 2 10:21:38 2024 -0500

    net: sched: fix erspan_opt settings in cls_flower
    
    [ Upstream commit 292207809486d99c78068d3f459cbbbffde88415 ]
    
    When matching erspan_opt in cls_flower, only the (version, dir, hwid)
    fields are relevant. However, in fl_set_erspan_opt() it initializes
    all bits of erspan_opt and its mask to 1. This inadvertently requires
    packets to match not only the (version, dir, hwid) fields but also the
    other fields that are unexpectedly set to 1.
    
    This patch resolves the issue by ensuring that only the (version, dir,
    hwid) fields are configured in fl_set_erspan_opt(), leaving the other
    fields to 0 in erspan_opt.
    
    Fixes: 79b1011cb33d ("net: sched: allow flower to match erspan options")
    Reported-by: Shuang Li <shuali@redhat.com>
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Reviewed-by: Cong Wang <cong.wang@bytedance.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sfp: change quirks for Alcatel Lucent G-010S-P [+ + +]
Author: Shengyu Qu <wiagn233@outlook.com>
Date:   Sat Oct 12 01:39:17 2024 +0800

    net: sfp: change quirks for Alcatel Lucent G-010S-P
    
    [ Upstream commit 90cb5f1776ba371478e2b08fbf7018c7bd781a8d ]
    
    Seems Alcatel Lucent G-010S-P also have the same problem that it uses
    TX_FAULT pin for SOC uart. So apply sfp_fixup_ignore_tx_fault to it.
    
    Signed-off-by: Shengyu Qu <wiagn233@outlook.com>
    Link: https://patch.msgid.link/TYCPR01MB84373677E45A7BFA5A28232C98792@TYCPR01MB8437.jpnprd01.prod.outlook.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: Programming sequence for VLAN packets with split header [+ + +]
Author: Abhishek Chauhan <quic_abchauha@quicinc.com>
Date:   Wed Oct 16 16:43:13 2024 -0700

    net: stmmac: Programming sequence for VLAN packets with split header
    
    [ Upstream commit d10f1a4e44c3bf874701f86f8cc43490e1956acf ]
    
    Currently reset state configuration of split header works fine for
    non-tagged packets and we see no corruption in payload of any size
    
    We need additional programming sequence with reset configuration to
    handle VLAN tagged packets to avoid corruption in payload for packets
    of size greater than 256 bytes.
    
    Without this change ping application complains about corruption
    in payload when the size of the VLAN packet exceeds 256 bytes.
    
    With this change tagged and non-tagged packets of any size works fine
    and there is no corruption seen.
    
    Current configuration which has the issue for VLAN packet
    ----------------------------------------------------------
    
    Split happens at the position at Layer 3 header
    |MAC-DA|MAC-SA|Vlan Tag|Ether type|IP header|IP data|Rest of the payload|
                             2 bytes            ^
                                                |
    
    With the fix we are making sure that the split happens now at
    Layer 2 which is end of ethernet header and start of IP payload
    
    Ip traffic split
    -----------------
    
    Bits which take care of this are SPLM and SPLOFST
    SPLM = Split mode is set to Layer 2
    SPLOFST = These bits indicate the value of offset from the beginning
    of Length/Type field at which header split should take place when the
    appropriate SPLM is selected. Reset value is 2bytes.
    
    Un-tagged data (without VLAN)
    |MAC-DA|MAC-SA|Ether type|IP header|IP data|Rest of the payload|
                      2bytes ^
                             |
    
    Tagged data (with VLAN)
    |MAC-DA|MAC-SA|VLAN Tag|Ether type|IP header|IP data|Rest of the payload|
                              2bytes  ^
                                      |
    
    Non-IP traffic split such AV packet
    ------------------------------------
    
    Bits which take care of this are
    SAVE = Split AV Enable
    SAVO = Split AV Offset, similar to SPLOFST but this is for AVTP
    packets.
    
    |Preamble|MAC-DA|MAC-SA|VLAN tag|Ether type|IEEE 1722 payload|CRC|
                                        2bytes ^
                                               |
    
    Signed-off-by: Abhishek Chauhan <quic_abchauha@quicinc.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20241016234313.3992214-1-quic_abchauha@quicinc.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: ipset: Hold module reference while requesting a module [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Fri Nov 29 16:30:38 2024 +0100

    netfilter: ipset: Hold module reference while requesting a module
    
    [ Upstream commit 456f010bfaefde84d3390c755eedb1b0a5857c3c ]
    
    User space may unload ip_set.ko while it is itself requesting a set type
    backend module, leading to a kernel crash. The race condition may be
    provoked by inserting an mdelay() right after the nfnl_unlock() call.
    
    Fixes: a7b4f989a629 ("netfilter: ipset: IP set core support")
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Acked-by: Jozsef Kadlecsik <kadlec@netfilter.org>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_inner: incorrect percpu area handling under softirq [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed Nov 27 12:46:54 2024 +0100

    netfilter: nft_inner: incorrect percpu area handling under softirq
    
    [ Upstream commit 7b1d83da254be3bf054965c8f3b1ad976f460ae5 ]
    
    Softirq can interrupt ongoing packet from process context that is
    walking over the percpu area that contains inner header offsets.
    
    Disable bh and perform three checks before restoring the percpu inner
    header offsets to validate that the percpu area is valid for this
    skbuff:
    
    1) If the NFT_PKTINFO_INNER_FULL flag is set on, then this skbuff
       has already been parsed before for inner header fetching to
       register.
    
    2) Validate that the percpu area refers to this skbuff using the
       skbuff pointer as a cookie. If there is a cookie mismatch, then
       this skbuff needs to be parsed again.
    
    3) Finally, validate if the percpu area refers to this tunnel type.
    
    Only after these three checks the percpu area is restored to a on-stack
    copy and bh is enabled again.
    
    After inner header fetching, the on-stack copy is stored back to the
    percpu area.
    
    Fixes: 3a07327d10a0 ("netfilter: nft_inner: support for inner tunnel header matching")
    Reported-by: syzbot+84d0441b9860f0d63285@syzkaller.appspotmail.com
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_set_hash: skip duplicated elements pending gc run [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Mon Dec 2 00:04:49 2024 +0100

    netfilter: nft_set_hash: skip duplicated elements pending gc run
    
    [ Upstream commit 7ffc7481153bbabf3332c6a19b289730c7e1edf5 ]
    
    rhashtable does not provide stable walk, duplicated elements are
    possible in case of resizing. I considered that checking for errors when
    calling rhashtable_walk_next() was sufficient to detect the resizing.
    However, rhashtable_walk_next() returns -EAGAIN only at the end of the
    iteration, which is too late, because a gc work containing duplicated
    elements could have been already scheduled for removal to the worker.
    
    Add a u32 gc worker sequence number per set, bump it on every workqueue
    run. Annotate gc worker sequence number on the expired element. Use it
    to skip those already seen in this gc workqueue run.
    
    Note that this new field is never reset in case gc transaction fails, so
    next gc worker run on the expired element overrides it. Wraparound of gc
    worker sequence number should not be an issue with stale gc worker
    sequence number in the element, that would just postpone the element
    removal in one gc run.
    
    Note that it is not possible to use flags to annotate that element is
    pending gc run to detect duplicates, given that gc transaction can be
    invalidated in case of update from the control plane, therefore, not
    allowing to clear such flag.
    
    On x86_64, pahole reports no changes in the size of nft_rhash_elem.
    
    Fixes: f6c383b8c31a ("netfilter: nf_tables: adapt set backend to use GC transaction API")
    Reported-by: Laurent Fasnacht <laurent.fasnacht@proton.ch>
    Tested-by: Laurent Fasnacht <laurent.fasnacht@proton.ch>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_socket: remove WARN_ON_ONCE on maximum cgroup level [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Tue Nov 26 11:59:06 2024 +0100

    netfilter: nft_socket: remove WARN_ON_ONCE on maximum cgroup level
    
    [ Upstream commit b7529880cb961d515642ce63f9d7570869bbbdc3 ]
    
    cgroup maximum depth is INT_MAX by default, there is a cgroup toggle to
    restrict this maximum depth to a more reasonable value not to harm
    performance. Remove unnecessary WARN_ON_ONCE which is reachable from
    userspace.
    
    Fixes: 7f3287db6543 ("netfilter: nft_socket: make cgroupsv2 matching work with namespaces")
    Reported-by: syzbot+57bac0866ddd99fe47c0@syzkaller.appspotmail.com
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: x_tables: fix LED ID check in led_tg_check() [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Thu Nov 21 09:55:42 2024 +0300

    netfilter: x_tables: fix LED ID check in led_tg_check()
    
    [ Upstream commit 04317f4eb2aad312ad85c1a17ad81fe75f1f9bc7 ]
    
    Syzbot has reported the following BUG detected by KASAN:
    
    BUG: KASAN: slab-out-of-bounds in strlen+0x58/0x70
    Read of size 1 at addr ffff8881022da0c8 by task repro/5879
    ...
    Call Trace:
     <TASK>
     dump_stack_lvl+0x241/0x360
     ? __pfx_dump_stack_lvl+0x10/0x10
     ? __pfx__printk+0x10/0x10
     ? _printk+0xd5/0x120
     ? __virt_addr_valid+0x183/0x530
     ? __virt_addr_valid+0x183/0x530
     print_report+0x169/0x550
     ? __virt_addr_valid+0x183/0x530
     ? __virt_addr_valid+0x183/0x530
     ? __virt_addr_valid+0x45f/0x530
     ? __phys_addr+0xba/0x170
     ? strlen+0x58/0x70
     kasan_report+0x143/0x180
     ? strlen+0x58/0x70
     strlen+0x58/0x70
     kstrdup+0x20/0x80
     led_tg_check+0x18b/0x3c0
     xt_check_target+0x3bb/0xa40
     ? __pfx_xt_check_target+0x10/0x10
     ? stack_depot_save_flags+0x6e4/0x830
     ? nft_target_init+0x174/0xc30
     nft_target_init+0x82d/0xc30
     ? __pfx_nft_target_init+0x10/0x10
     ? nf_tables_newrule+0x1609/0x2980
     ? nf_tables_newrule+0x1609/0x2980
     ? rcu_is_watching+0x15/0xb0
     ? nf_tables_newrule+0x1609/0x2980
     ? nf_tables_newrule+0x1609/0x2980
     ? __kmalloc_noprof+0x21a/0x400
     nf_tables_newrule+0x1860/0x2980
     ? __pfx_nf_tables_newrule+0x10/0x10
     ? __nla_parse+0x40/0x60
     nfnetlink_rcv+0x14e5/0x2ab0
     ? __pfx_validate_chain+0x10/0x10
     ? __pfx_nfnetlink_rcv+0x10/0x10
     ? __lock_acquire+0x1384/0x2050
     ? netlink_deliver_tap+0x2e/0x1b0
     ? __pfx_lock_release+0x10/0x10
     ? netlink_deliver_tap+0x2e/0x1b0
     netlink_unicast+0x7f8/0x990
     ? __pfx_netlink_unicast+0x10/0x10
     ? __virt_addr_valid+0x183/0x530
     ? __check_object_size+0x48e/0x900
     netlink_sendmsg+0x8e4/0xcb0
     ? __pfx_netlink_sendmsg+0x10/0x10
     ? aa_sock_msg_perm+0x91/0x160
     ? __pfx_netlink_sendmsg+0x10/0x10
     __sock_sendmsg+0x223/0x270
     ____sys_sendmsg+0x52a/0x7e0
     ? __pfx_____sys_sendmsg+0x10/0x10
     __sys_sendmsg+0x292/0x380
     ? __pfx___sys_sendmsg+0x10/0x10
     ? lockdep_hardirqs_on_prepare+0x43d/0x780
     ? __pfx_lockdep_hardirqs_on_prepare+0x10/0x10
     ? exc_page_fault+0x590/0x8c0
     ? do_syscall_64+0xb6/0x230
     do_syscall_64+0xf3/0x230
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    ...
     </TASK>
    
    Since an invalid (without '\0' byte at all) byte sequence may be passed
    from userspace, add an extra check to ensure that such a sequence is
    rejected as possible ID and so never passed to 'kstrdup()' and further.
    
    Reported-by: syzbot+6c8215822f35fdb35667@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=6c8215822f35fdb35667
    Fixes: 268cb38e1802 ("netfilter: x_tables: add LED trigger target")
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netlink: specs: Add missing bitset attrs to ethtool spec [+ + +]
Author: Donald Hunter <donald.hunter@gmail.com>
Date:   Fri Oct 18 10:06:30 2024 +0100

    netlink: specs: Add missing bitset attrs to ethtool spec
    
    [ Upstream commit b0b3683419b45e2971b6d413c506cb818b268d35 ]
    
    There are a couple of attributes missing from the 'bitset' attribute-set
    in the ethtool netlink spec. Add them to the spec.
    
    Reported-by: Kory Maincent <kory.maincent@bootlin.com>
    Closes: https://lore.kernel.org/netdev/20241017180551.1259bf5c@kmaincent-XPS-13-7390/
    Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
    Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
    Tested-by: Kory Maincent <kory.maincent@bootlin.com>
    Link: https://patch.msgid.link/20241018090630.22212-1-donald.hunter@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netpoll: Use rcu_access_pointer() in __netpoll_setup [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Mon Nov 18 03:15:17 2024 -0800

    netpoll: Use rcu_access_pointer() in __netpoll_setup
    
    [ Upstream commit c69c5e10adb903ae2438d4f9c16eccf43d1fcbc1 ]
    
    The ndev->npinfo pointer in __netpoll_setup() is RCU-protected but is being
    accessed directly for a NULL check. While no RCU read lock is held in this
    context, we should still use proper RCU primitives for consistency and
    correctness.
    
    Replace the direct NULL check with rcu_access_pointer(), which is the
    appropriate primitive when only checking for NULL without dereferencing
    the pointer. This function provides the necessary ordering guarantees
    without requiring RCU read-side protection.
    
    Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Link: https://patch.msgid.link/20241118-netpoll_rcu-v1-1-a1888dcb4a02@debian.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nilfs2: fix potential out-of-bounds memory access in nilfs_find_entry() [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Wed Nov 20 02:23:37 2024 +0900

    nilfs2: fix potential out-of-bounds memory access in nilfs_find_entry()
    
    commit 985ebec4ab0a28bb5910c3b1481a40fbf7f9e61d upstream.
    
    Syzbot reported that when searching for records in a directory where the
    inode's i_size is corrupted and has a large value, memory access outside
    the folio/page range may occur, or a use-after-free bug may be detected if
    KASAN is enabled.
    
    This is because nilfs_last_byte(), which is called by nilfs_find_entry()
    and others to calculate the number of valid bytes of directory data in a
    page from i_size and the page index, loses the upper 32 bits of the 64-bit
    size information due to an inappropriate type of local variable to which
    the i_size value is assigned.
    
    This caused a large byte offset value due to underflow in the end address
    calculation in the calling nilfs_find_entry(), resulting in memory access
    that exceeds the folio/page size.
    
    Fix this issue by changing the type of the local variable causing the bit
    loss from "unsigned int" to "u64".  The return value of nilfs_last_byte()
    is also of type "unsigned int", but it is truncated so as not to exceed
    PAGE_SIZE and no bit loss occurs, so no change is required.
    
    Link: https://lkml.kernel.org/r/20241119172403.9292-1-konishi.ryusuke@gmail.com
    Fixes: 2ba466d74ed7 ("nilfs2: directory entry operations")
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Reported-by: syzbot+96d5d14c47d97015c624@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=96d5d14c47d97015c624
    Tested-by: syzbot+96d5d14c47d97015c624@syzkaller.appspotmail.com
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ntp: Remove invalid cast in time offset math [+ + +]
Author: Marcelo Dalmas <marcelo.dalmas@ge.com>
Date:   Mon Nov 25 12:16:09 2024 +0000

    ntp: Remove invalid cast in time offset math
    
    commit f5807b0606da7ac7c1b74a386b22134ec7702d05 upstream.
    
    Due to an unsigned cast, adjtimex() returns the wrong offest when using
    ADJ_MICRO and the offset is negative. In this case a small negative offset
    returns approximately 4.29 seconds (~ 2^32/1000 milliseconds) due to the
    unsigned cast of the negative offset.
    
    This cast was added when the kernel internal struct timex was changed to
    use type long long for the time offset value to address the problem of a
    64bit/32bit division on 32bit systems.
    
    The correct cast would have been (s32), which is correct as time_offset can
    only be in the range of [INT_MIN..INT_MAX] because the shift constant used
    for calculating it is 32. But that's non-obvious.
    
    Remove the cast and use div_s64() to cure the issue.
    
    [ tglx: Fix white space damage, use div_s64() and amend the change log ]
    
    Fixes: ead25417f82e ("timex: use __kernel_timex internally")
    Signed-off-by: Marcelo Dalmas <marcelo.dalmas@ge.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/SJ0P101MB03687BF7D5A10FD3C49C51E5F42E2@SJ0P101MB0368.NAMP101.PROD.OUTLOOK.COM
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nvdimm: rectify the illogical code within nd_dax_probe() [+ + +]
Author: Yi Yang <yiyang13@huawei.com>
Date:   Fri Nov 8 08:55:26 2024 +0000

    nvdimm: rectify the illogical code within nd_dax_probe()
    
    [ Upstream commit b61352101470f8b68c98af674e187cfaa7c43504 ]
    
    When nd_dax is NULL, nd_pfn is consequently NULL as well. Nevertheless,
    it is inadvisable to perform pointer arithmetic or address-taking on a
    NULL pointer.
    Introduce the nd_dax_devinit() function to enhance the code's logic and
    improve its readability.
    
    Signed-off-by: Yi Yang <yiyang13@huawei.com>
    Reviewed-by: Dave Jiang <dave.jiang@intel.com>
    Link: https://patch.msgid.link/20241108085526.527957-1-yiyang13@huawei.com
    Signed-off-by: Ira Weiny <ira.weiny@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ocfs2: free inode when ocfs2_get_init_inode() fails [+ + +]
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Sat Nov 23 22:28:34 2024 +0900

    ocfs2: free inode when ocfs2_get_init_inode() fails
    
    [ Upstream commit 965b5dd1894f4525f38c1b5f99b0106a07dbb5db ]
    
    syzbot is reporting busy inodes after unmount, for commit 9c89fe0af826
    ("ocfs2: Handle error from dquot_initialize()") forgot to call iput() when
    new_inode() succeeded and dquot_initialize() failed.
    
    Link: https://lkml.kernel.org/r/e68c0224-b7c6-4784-b4fa-a9fc8c675525@I-love.SAKURA.ne.jp
    Fixes: 9c89fe0af826 ("ocfs2: Handle error from dquot_initialize()")
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Reported-by: syzbot+0af00f6a2cba2058b5db@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=0af00f6a2cba2058b5db
    Tested-by: syzbot+0af00f6a2cba2058b5db@syzkaller.appspotmail.com
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.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>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ocfs2: Revert "ocfs2: fix the la space leak when unmounting an ocfs2 volume" [+ + +]
Author: Heming Zhao <heming.zhao@suse.com>
Date:   Thu Dec 12 19:31:05 2024 +0800

    ocfs2: Revert "ocfs2: fix the la space leak when unmounting an ocfs2 volume"
    
    This reverts commit dfe6c5692fb5 ("ocfs2: fix the la space leak when
    unmounting an ocfs2 volume").
    
    In commit dfe6c5692fb5, the commit log "This bug has existed since the
    initial OCFS2 code." is wrong. The correct introduction commit is
    30dd3478c3cd ("ocfs2: correctly use ocfs2_find_next_zero_bit()").
    
    The influence of commit dfe6c5692fb5 is that it provides a correct
    fix for the latest kernel. however, it shouldn't be pushed to stable
    branches. Let's use this commit to revert all branches that include
    dfe6c5692fb5 and use a new fix method to fix commit 30dd3478c3cd.
    
    Fixes: dfe6c5692fb5 ("ocfs2: fix the la space leak when unmounting an ocfs2 volume")
    Signed-off-by: Heming Zhao <heming.zhao@suse.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ocfs2: update seq_file index in ocfs2_dlm_seq_next [+ + +]
Author: Wengang Wang <wen.gang.wang@oracle.com>
Date:   Tue Nov 19 09:45:00 2024 -0800

    ocfs2: update seq_file index in ocfs2_dlm_seq_next
    
    commit 914eec5e980171bc128e7e24f7a22aa1d803570e upstream.
    
    The following INFO level message was seen:
    
    seq_file: buggy .next function ocfs2_dlm_seq_next [ocfs2] did not
    update position index
    
    Fix:
    Update *pos (so m->index) to make seq_read_iter happy though the index its
    self makes no sense to ocfs2_dlm_seq_next.
    
    Link: https://lkml.kernel.org/r/20241119174500.9198-1-wen.gang.wang@oracle.com
    Signed-off-by: Wengang Wang <wen.gang.wang@oracle.com>
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.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: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI: Add 'reset_subordinate' to reset hierarchy below bridge [+ + +]
Author: Keith Busch <kbusch@kernel.org>
Date:   Fri Oct 25 15:27:54 2024 -0700

    PCI: Add 'reset_subordinate' to reset hierarchy below bridge
    
    [ Upstream commit 2fa046449a82a7d0f6d9721dd83e348816038444 ]
    
    The "bus" and "cxl_bus" reset methods reset a device by asserting Secondary
    Bus Reset on the bridge leading to the device.  These only work if the
    device is the only device below the bridge.
    
    Add a sysfs 'reset_subordinate' attribute on bridges that can assert
    Secondary Bus Reset regardless of how many devices are below the bridge.
    
    This resets all the devices below a bridge in a single command, including
    the locking and config space save/restore that reset methods normally do.
    
    This may be the only way to reset devices that don't support other reset
    methods (ACPI, FLR, PM reset, etc).
    
    Link: https://lore.kernel.org/r/20241025222755.3756162-1-kbusch@meta.com
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    [bhelgaas: commit log, add capable(CAP_SYS_ADMIN) check]
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
    Reviewed-by: Amey Narkhede <ameynarkhede03@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: Add ACS quirk for Wangxun FF5xxx NICs [+ + +]
Author: Mengyuan Lou <mengyuanlou@net-swift.com>
Date:   Fri Nov 15 10:46:04 2024 +0800

    PCI: Add ACS quirk for Wangxun FF5xxx NICs
    
    [ Upstream commit aa46a3736afcb7b0793766d22479b8b99fc1b322 ]
    
    Wangxun FF5xxx NICs are similar to SFxxx, RP1000 and RP2000 NICs.  They may
    be multi-function devices, but they do not advertise an ACS capability.
    
    But the hardware does isolate FF5xxx functions as though it had an ACS
    capability and PCI_ACS_RR and PCI_ACS_CR were set in the ACS Control
    register, i.e., all peer-to-peer traffic is directed upstream instead of
    being routed internally.
    
    Add ACS quirk for FF5xxx NICs in pci_quirk_wangxun_nic_acs() so the
    functions can be in independent IOMMU groups.
    
    Link: https://lore.kernel.org/r/E16053DB2B80E9A5+20241115024604.30493-1-mengyuanlou@net-swift.com
    Signed-off-by: Mengyuan Lou <mengyuanlou@net-swift.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: Detect and trust built-in Thunderbolt chips [+ + +]
Author: Esther Shimanovich <eshimanovich@chromium.org>
Date:   Tue Sep 10 17:57:45 2024 +0000

    PCI: Detect and trust built-in Thunderbolt chips
    
    [ Upstream commit 3b96b895127b7c0aed63d82c974b46340e8466c1 ]
    
    Some computers with CPUs that lack Thunderbolt features use discrete
    Thunderbolt chips to add Thunderbolt functionality. These Thunderbolt
    chips are located within the chassis; between the Root Port labeled
    ExternalFacingPort and the USB-C port.
    
    These Thunderbolt PCIe devices should be labeled as fixed and trusted, as
    they are built into the computer. Otherwise, security policies that rely on
    those flags may have unintended results, such as preventing USB-C ports
    from enumerating.
    
    Detect the above scenario through the process of elimination.
    
      1) Integrated Thunderbolt host controllers already have Thunderbolt
         implemented, so anything outside their external facing Root Port is
         removable and untrusted.
    
         Detect them using the following properties:
    
           - Most integrated host controllers have the "usb4-host-interface"
             ACPI property, as described here:
    
             https://learn.microsoft.com/en-us/windows-hardware/drivers/pci/dsd-for-pcie-root-ports#mapping-native-protocols-pcie-displayport-tunneled-through-usb4-to-usb4-host-routers
    
           - Integrated Thunderbolt PCIe Root Ports before Alder Lake do not
             have the "usb4-host-interface" ACPI property. Identify those by
             their PCI IDs instead.
    
      2) If a Root Port does not have integrated Thunderbolt capabilities, but
         has the "ExternalFacingPort" ACPI property, that means the
         manufacturer has opted to use a discrete Thunderbolt host controller
         that is built into the computer.
    
         This host controller can be identified by virtue of being located
         directly below an external-facing Root Port that lacks integrated
         Thunderbolt. Label it as trusted and fixed.
    
         Everything downstream from it is untrusted and removable.
    
    The "ExternalFacingPort" ACPI property is described here:
    https://learn.microsoft.com/en-us/windows-hardware/drivers/pci/dsd-for-pcie-root-ports#identifying-externally-exposed-pcie-root-ports
    
    Link: https://lore.kernel.org/r/20240910-trust-tbt-fix-v5-1-7a7a42a5f496@chromium.org
    Suggested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Esther Shimanovich <eshimanovich@chromium.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Tested-by: Mario Limonciello <mario.limonciello@amd.com>
    Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: qcom: Add support for IPQ9574 [+ + +]
Author: devi priya <quic_devipriy@quicinc.com>
Date:   Thu Aug 1 11:18:03 2024 +0530

    PCI: qcom: Add support for IPQ9574
    
    [ Upstream commit a63b74f2e35be3829f256922037ae5cee6bb844a ]
    
    Add the new IPQ9574 platform which is based on the Qcom IP rev. 1.27.0
    and Synopsys IP rev. 5.80a.
    
    The platform itself has four PCIe Gen3 controllers: two single-lane and
    two dual-lane, all are based on Synopsys IP rev. 5.70a. As such, reuse
    all the members of 'ops_2_9_0'.
    
    Link: https://lore.kernel.org/r/20240801054803.3015572-5-quic_srichara@quicinc.com
    Co-developed-by: Anusha Rao <quic_anusha@quicinc.com>
    Signed-off-by: Anusha Rao <quic_anusha@quicinc.com>
    Signed-off-by: devi priya <quic_devipriy@quicinc.com>
    Signed-off-by: Sricharan Ramabadhran <quic_srichara@quicinc.com>
    [kwilczynski: commit log]
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: vmd: Add DID 8086:B06F and 8086:B60B for Intel client SKUs [+ + +]
Author: Nirmal Patel <nirmal.patel@linux.ntel.com>
Date:   Fri Oct 11 10:56:57 2024 -0700

    PCI: vmd: Add DID 8086:B06F and 8086:B60B for Intel client SKUs
    
    [ Upstream commit b727484cace4be22be9321cc0bc9487648ba447b ]
    
    Add support for this VMD device which supports the bus restriction mode.
    The feature that turns off vector 0 for MSI-X remapping is also enabled.
    
    Link: https://lore.kernel.org/r/20241011175657.249948-1-nirmal.patel@linux.intel.com
    Signed-off-by: Nirmal Patel <nirmal.patel@linux.ntel.com>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: vmd: Set devices to D0 before enabling PM L1 Substates [+ + +]
Author: Jian-Hong Pan <jhp@endlessos.org>
Date:   Tue Oct 1 16:34:38 2024 +0800

    PCI: vmd: Set devices to D0 before enabling PM L1 Substates
    
    [ Upstream commit d66041063192497a4a97d21dbf86b79a03a7f4fb ]
    
    The remapped PCIe Root Port and the child device have PM L1 Substates
    capability, but they are disabled originally.
    
    Here is a failed example on ASUS B1400CEAE:
    
      Capabilities: [900 v1] L1 PM Substates
            L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1- ASPM_L1.2+ ASPM_L1.1- L1_PM_Substates+
                      PortCommonModeRestoreTime=32us PortTPowerOnTime=10us
            L1SubCtl1: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2+ ASPM_L1.1-
                       T_CommonMode=0us LTR1.2_Threshold=101376ns
            L1SubCtl2: T_PwrOn=50us
    
    Enable PCI-PM L1 PM Substates for devices below VMD while they are in D0
    (see PCIe r6.0, sec 5.5.4).
    
    Link: https://lore.kernel.org/r/20241001083438.10070-4-jhp@endlessos.org
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=218394
    Signed-off-by: Jian-Hong Pan <jhp@endlessos.org>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf/x86/amd: Warn only on new bits set [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Tue Oct 1 07:10:19 2024 -0700

    perf/x86/amd: Warn only on new bits set
    
    [ Upstream commit de20037e1b3c2f2ca97b8c12b8c7bca8abd509a7 ]
    
    Warning at every leaking bits can cause a flood of message, triggering
    various stall-warning mechanisms to fire, including CSD locks, which
    makes the machine to be unusable.
    
    Track the bits that are being leaked, and only warn when a new bit is
    set.
    
    That said, this patch will help with the following issues:
    
    1) It will tell us which bits are being set, so, it is easy to
       communicate it back to vendor, and to do a root-cause analyzes.
    
    2) It avoid the machine to be unusable, because, worst case
       scenario, the user gets less than 60 WARNs (one per unhandled bit).
    
    Suggested-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Sandipan Das <sandipan.das@amd.com>
    Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
    Link: https://lkml.kernel.org/r/20241001141020.2620361-1-leitao@debian.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pinctrl: freescale: fix COMPILE_TEST error with PINCTRL_IMX_SCU [+ + +]
Author: Esben Haabendal <esben@geanix.com>
Date:   Thu Oct 3 11:23:09 2024 +0200

    pinctrl: freescale: fix COMPILE_TEST error with PINCTRL_IMX_SCU
    
    [ Upstream commit 58414a31c5713afb5449fd74a26a843d34cc62e8 ]
    
    When PINCTRL_IMX_SCU was selected by PINCTRL_IMX8DXL or PINCTRL_IMX8QM
    combined with COMPILE_TEST on a non-arm platforms, the IMX_SCU
    dependency could not be enabled.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202410031439.GyTSa0kX-lkp@intel.com/
    Closes: https://lore.kernel.org/oe-kbuild-all/202410030852.q0Hukplf-lkp@intel.com/
    Signed-off-by: Esben Haabendal <esben@geanix.com>
    Link: https://lore.kernel.org/20241003-imx-pinctrl-compile-test-fix-v1-1-145ca1948cc3@geanix.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: qcom-pmic-gpio: add support for PM8937 [+ + +]
Author: Barnabás Czémán <barnabas.czeman@mainlining.org>
Date:   Thu Oct 31 02:19:43 2024 +0100

    pinctrl: qcom-pmic-gpio: add support for PM8937
    
    [ Upstream commit 89265a58ff24e3885c2c9ca722bc3aaa47018be9 ]
    
    PM8937 has 8 GPIO-s with holes on GPIO3, GPIO4 and GPIO6.
    
    Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://lore.kernel.org/20241031-msm8917-v2-2-8a075faa89b1@mainlining.org
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: qcom: spmi-mpp: Add PM8937 compatible [+ + +]
Author: Barnabás Czémán <barnabas.czeman@mainlining.org>
Date:   Thu Oct 31 02:19:45 2024 +0100

    pinctrl: qcom: spmi-mpp: Add PM8937 compatible
    
    [ Upstream commit f755261190e88f5d19fe0a3b762f0bbaff6bd438 ]
    
    The PM8937 provides 4 MPPs.
    Add a compatible to support them.
    
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org>
    Link: https://lore.kernel.org/20241031-msm8917-v2-4-8a075faa89b1@mainlining.org
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pinmux: Use sequential access to access desc->pinmux data [+ + +]
Author: Mukesh Ojha <quic_mojha@quicinc.com>
Date:   Tue Oct 15 00:59:30 2024 +0530

    pinmux: Use sequential access to access desc->pinmux data
    
    [ Upstream commit 5a3e85c3c397c781393ea5fb2f45b1f60f8a4e6e ]
    
    When two client of the same gpio call pinctrl_select_state() for the
    same functionality, we are seeing NULL pointer issue while accessing
    desc->mux_owner.
    
    Let's say two processes A, B executing in pin_request() for the same pin
    and process A updates the desc->mux_usecount but not yet updated the
    desc->mux_owner while process B see the desc->mux_usecount which got
    updated by A path and further executes strcmp and while accessing
    desc->mux_owner it crashes with NULL pointer.
    
    Serialize the access to mux related setting with a mutex lock.
    
            cpu0 (process A)                        cpu1(process B)
    
    pinctrl_select_state() {                  pinctrl_select_state() {
      pin_request() {                               pin_request() {
      ...
                                                     ....
        } else {
             desc->mux_usecount++;
                                                    desc->mux_usecount && strcmp(desc->mux_owner, owner)) {
    
             if (desc->mux_usecount > 1)
                   return 0;
             desc->mux_owner = owner;
    
      }                                             }
    
    Signed-off-by: Mukesh Ojha <quic_mojha@quicinc.com>
    Link: https://lore.kernel.org/20241014192930.1539673-1-quic_mojha@quicinc.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86: asus-wmi: add support for vivobook fan profiles [+ + +]
Author: Mohamed Ghanmi <mohamed.ghanmi@supcom.tn>
Date:   Sun Jun 9 15:48:49 2024 +0100

    platform/x86: asus-wmi: add support for vivobook fan profiles
    
    [ Upstream commit bcbfcebda2cbc6a10a347d726e4a4f69e43a864e ]
    
    Add support for vivobook fan profiles wmi call on the ASUS VIVOBOOK
    to adjust power limits.
    
    These fan profiles have a different device id than the ROG series
    and different order. This reorders the existing modes.
    
    As part of keeping the patch clean the throttle_thermal_policy_available
    boolean stored in the driver struct is removed and
    throttle_thermal_policy_dev is used in place (as on init it is zeroed).
    
    Co-developed-by: Luke D. Jones <luke@ljones.dev>
    Signed-off-by: Luke D. Jones <luke@ljones.dev>
    Signed-off-by: Mohamed Ghanmi <mohamed.ghanmi@supcom.tn>
    Reviewed-by: Luke D. Jones <luke@ljones.dev>
    Link: https://lore.kernel.org/r/20240609144849.2532-2-mohamed.ghanmi@supcom.tn
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Stable-dep-of: 25fb5f47f34d ("platform/x86: asus-wmi: Ignore return value when writing thermal policy")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: asus-wmi: Fix inconsistent use of thermal policies [+ + +]
Author: Armin Wolf <W_Armin@gmx.de>
Date:   Thu Nov 7 01:38:10 2024 +0100

    platform/x86: asus-wmi: Fix inconsistent use of thermal policies
    
    [ Upstream commit 895085ec3f2ed7a26389943729e2904df1f88dc0 ]
    
    When changing the thermal policy using the platform profile API,
    a Vivobook thermal policy is stored in throttle_thermal_policy_mode.
    
    However everywhere else a normal thermal policy is stored inside this
    variable, potentially confusing the platform profile.
    
    Fix this by always storing normal thermal policy values inside
    throttle_thermal_policy_mode and only do the conversion when writing
    the thermal policy to hardware. This also fixes the order in which
    throttle_thermal_policy_switch_next() steps through the thermal modes
    on Vivobook machines.
    
    Tested-by: Casey G Bowman <casey.g.bowman@intel.com>
    Fixes: bcbfcebda2cb ("platform/x86: asus-wmi: add support for vivobook fan profiles")
    Signed-off-by: Armin Wolf <W_Armin@gmx.de>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20241107003811.615574-2-W_Armin@gmx.de
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Stable-dep-of: 25fb5f47f34d ("platform/x86: asus-wmi: Ignore return value when writing thermal policy")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: asus-wmi: Fix thermal profile initialization [+ + +]
Author: Armin Wolf <W_Armin@gmx.de>
Date:   Fri Oct 25 21:15:13 2024 +0200

    platform/x86: asus-wmi: Fix thermal profile initialization
    
    commit b012170fed282151f7ba8988a347670c299f5ab3 upstream.
    
    When support for vivobook fan profiles was added, the initial
    call to throttle_thermal_policy_set_default() was removed, which
    however is necessary for full initialization.
    
    Fix this by calling throttle_thermal_policy_set_default() again
    when setting up the platform profile.
    
    Fixes: bcbfcebda2cb ("platform/x86: asus-wmi: add support for vivobook fan profiles")
    Reported-by: Michael Larabel <Michael@phoronix.com>
    Closes: https://www.phoronix.com/review/lunar-lake-xe2/5
    Signed-off-by: Armin Wolf <W_Armin@gmx.de>
    Link: https://lore.kernel.org/r/20241025191514.15032-2-W_Armin@gmx.de
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

platform/x86: asus-wmi: Ignore return value when writing thermal policy [+ + +]
Author: Armin Wolf <W_Armin@gmx.de>
Date:   Sun Nov 24 18:19:41 2024 +0100

    platform/x86: asus-wmi: Ignore return value when writing thermal policy
    
    [ Upstream commit 25fb5f47f34d90aceda2c47a4230315536e97fa8 ]
    
    On some machines like the ASUS Vivobook S14 writing the thermal policy
    returns the currently writen thermal policy instead of an error code.
    
    Ignore the return code to avoid falsely returning an error when the
    thermal policy was written successfully.
    
    Reported-by: auslands-kv@gmx.de
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219517
    Fixes: 2daa86e78c49 ("platform/x86: asus_wmi: Support throttle thermal policy")
    Signed-off-by: Armin Wolf <W_Armin@gmx.de>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20241124171941.29789-1-W_Armin@gmx.de
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/prom_init: Fixup missing powermac #size-cells [+ + +]
Author: Michael Ellerman <mpe@ellerman.id.au>
Date:   Tue Nov 26 13:57:10 2024 +1100

    powerpc/prom_init: Fixup missing powermac #size-cells
    
    [ Upstream commit cf89c9434af122f28a3552e6f9cc5158c33ce50a ]
    
    On some powermacs `escc` nodes are missing `#size-cells` properties,
    which is deprecated and now triggers a warning at boot since commit
    045b14ca5c36 ("of: WARN on deprecated #address-cells/#size-cells
    handling").
    
    For example:
    
      Missing '#size-cells' in /pci@f2000000/mac-io@c/escc@13000
      WARNING: CPU: 0 PID: 0 at drivers/of/base.c:133 of_bus_n_size_cells+0x98/0x108
      Hardware name: PowerMac3,1 7400 0xc0209 PowerMac
      ...
      Call Trace:
        of_bus_n_size_cells+0x98/0x108 (unreliable)
        of_bus_default_count_cells+0x40/0x60
        __of_get_address+0xc8/0x21c
        __of_address_to_resource+0x5c/0x228
        pmz_init_port+0x5c/0x2ec
        pmz_probe.isra.0+0x144/0x1e4
        pmz_console_init+0x10/0x48
        console_init+0xcc/0x138
        start_kernel+0x5c4/0x694
    
    As powermacs boot via prom_init it's possible to add the missing
    properties to the device tree during boot, avoiding the warning. Note
    that `escc-legacy` nodes are also missing `#size-cells` properties, but
    they are skipped by the macio driver, so leave them alone.
    
    Depends-on: 045b14ca5c36 ("of: WARN on deprecated #address-cells/#size-cells handling")
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/20241126025710.591683-1-mpe@ellerman.id.au
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/vdso: Drop -mstack-protector-guard flags in 32-bit files with clang [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Wed Oct 30 11:41:37 2024 -0700

    powerpc/vdso: Drop -mstack-protector-guard flags in 32-bit files with clang
    
    [ Upstream commit d677ce521334d8f1f327cafc8b1b7854b0833158 ]
    
    Under certain conditions, the 64-bit '-mstack-protector-guard' flags may
    end up in the 32-bit vDSO flags, resulting in build failures due to the
    structure of clang's argument parsing of the stack protector options,
    which validates the arguments of the stack protector guard flags
    unconditionally in the frontend, choking on the 64-bit values when
    targeting 32-bit:
    
      clang: error: invalid value 'r13' in 'mstack-protector-guard-reg=', expected one of: r2
      clang: error: invalid value 'r13' in 'mstack-protector-guard-reg=', expected one of: r2
      make[3]: *** [arch/powerpc/kernel/vdso/Makefile:85: arch/powerpc/kernel/vdso/vgettimeofday-32.o] Error 1
      make[3]: *** [arch/powerpc/kernel/vdso/Makefile:87: arch/powerpc/kernel/vdso/vgetrandom-32.o] Error 1
    
    Remove these flags by adding them to the CC32FLAGSREMOVE variable, which
    already handles situations similar to this. Additionally, reformat and
    align a comment better for the expanding CONFIG_CC_IS_CLANG block.
    
    Cc: stable@vger.kernel.org # v6.1+
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://patch.msgid.link/20241030-powerpc-vdso-drop-stackp-flags-clang-v1-1-d95e7376d29c@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

powerpc/vdso: Refactor CFLAGS for CVDSO build [+ + +]
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Mon Sep 2 21:17:20 2024 +0200

    powerpc/vdso: Refactor CFLAGS for CVDSO build
    
    [ Upstream commit a6b67eb09963af29991625862cbb4f56b85954ed ]
    
    In order to avoid two much duplication when we add new VDSO
    functionnalities in C like getrandom, refactor common CFLAGS.
    
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Acked-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Stable-dep-of: d677ce521334 ("powerpc/vdso: Drop -mstack-protector-guard flags in 32-bit files with clang")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ptp: Add error handling for adjfine callback in ptp_clock_adjtime [+ + +]
Author: Ajay Kaher <ajay.kaher@broadcom.com>
Date:   Mon Nov 25 10:59:54 2024 +0000

    ptp: Add error handling for adjfine callback in ptp_clock_adjtime
    
    [ Upstream commit 98337d7c87577ded71114f6976edb70a163e27bc ]
    
    ptp_clock_adjtime sets ptp->dialed_frequency even when adjfine
    callback returns an error. This causes subsequent reads to return
    an incorrect value.
    
    Fix this by adding error check before ptp->dialed_frequency is set.
    
    Fixes: 39a8cbd9ca05 ("ptp: remember the adjusted frequency")
    Signed-off-by: Ajay Kaher <ajay.kaher@broadcom.com>
    Acked-by: Richard Cochran <richardcochran@gmail.com>
    Link: https://patch.msgid.link/20241125105954.1509971-1-ajay.kaher@broadcom.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
r8169: don't apply UDP padding quirk on RTL8126A [+ + +]
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Wed Oct 9 07:44:23 2024 +0200

    r8169: don't apply UDP padding quirk on RTL8126A
    
    [ Upstream commit 87e26448dbda4523b73a894d96f0f788506d3795 ]
    
    Vendor drivers r8125/r8126 indicate that this quirk isn't needed
    any longer for RTL8126A. Mimic this in r8169.
    
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/d1317187-aa81-4a69-b831-678436e4de62@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
regmap: detach regmap from dev on regmap_exit [+ + +]
Author: Cosmin Tanislav <demonsingur@gmail.com>
Date:   Thu Nov 28 15:16:23 2024 +0200

    regmap: detach regmap from dev on regmap_exit
    
    commit 3061e170381af96d1e66799d34264e6414d428a7 upstream.
    
    At the end of __regmap_init(), if dev is not NULL, regmap_attach_dev()
    is called, which adds a devres reference to the regmap, to be able to
    retrieve a dev's regmap by name using dev_get_regmap().
    
    When calling regmap_exit, the opposite does not happen, and the
    reference is kept until the dev is detached.
    
    Add a regmap_detach_dev() function and call it in regmap_exit() to make
    sure that the devres reference is not kept.
    
    Cc: stable@vger.kernel.org
    Fixes: 72b39f6f2b5a ("regmap: Implement dev_get_regmap()")
    Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
    Rule: add
    Link: https://lore.kernel.org/stable/20241128130554.362486-1-demonsingur%40gmail.com
    Link: https://patch.msgid.link/20241128131625.363835-1-demonsingur@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

regmap: maple: Provide lockdep (sub)class for maple tree's internal lock [+ + +]
Author: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Date:   Thu Oct 31 18:37:04 2024 +0200

    regmap: maple: Provide lockdep (sub)class for maple tree's internal lock
    
    [ Upstream commit 1ed9b927e7dd8b8cff13052efe212a8ff72ec51d ]
    
    In some cases when using the maple tree register cache, the lockdep
    validator might complain about invalid deadlocks:
    
    [7.131886]  Possible interrupt unsafe locking scenario:
    
    [7.131890]        CPU0                    CPU1
    [7.131893]        ----                    ----
    [7.131896]   lock(&mt->ma_lock);
    [7.131904]                                local_irq_disable();
    [7.131907]                                lock(rockchip_drm_vop2:3114:(&vop2_regmap_config)->lock);
    [7.131916]                                lock(&mt->ma_lock);
    [7.131925]   <Interrupt>
    [7.131928]     lock(rockchip_drm_vop2:3114:(&vop2_regmap_config)->lock);
    [7.131936]
                    *** DEADLOCK ***
    
    [7.131939] no locks held by swapper/0/0.
    [7.131944]
                   the shortest dependencies between 2nd lock and 1st lock:
    [7.131950]  -> (&mt->ma_lock){+.+.}-{2:2} {
    [7.131966]     HARDIRQ-ON-W at:
    [7.131973]                       lock_acquire+0x200/0x330
    [7.131986]                       _raw_spin_lock+0x50/0x70
    [7.131998]                       regcache_maple_write+0x68/0xe0
    [7.132010]                       regcache_write+0x6c/0x90
    [7.132019]                       _regmap_read+0x19c/0x1d0
    [7.132029]                       _regmap_update_bits+0xc0/0x148
    [7.132038]                       regmap_update_bits_base+0x6c/0xa8
    [7.132048]                       rk8xx_probe+0x22c/0x3d8
    [7.132057]                       rk8xx_spi_probe+0x74/0x88
    [7.132065]                       spi_probe+0xa8/0xe0
    
    [...]
    
    [7.132675]   }
    [7.132678]   ... key      at: [<ffff800082943c20>] __key.0+0x0/0x10
    [7.132691]   ... acquired at:
    [7.132695]    _raw_spin_lock+0x50/0x70
    [7.132704]    regcache_maple_write+0x68/0xe0
    [7.132714]    regcache_write+0x6c/0x90
    [7.132724]    _regmap_read+0x19c/0x1d0
    [7.132732]    _regmap_update_bits+0xc0/0x148
    [7.132741]    regmap_field_update_bits_base+0x74/0xb8
    [7.132751]    vop2_plane_atomic_update+0x480/0x14d8 [rockchipdrm]
    [7.132820]    drm_atomic_helper_commit_planes+0x1a0/0x320 [drm_kms_helper]
    
    [...]
    
    [7.135112] -> (rockchip_drm_vop2:3114:(&vop2_regmap_config)->lock){-...}-{2:2} {
    [7.135130]    IN-HARDIRQ-W at:
    [7.135136]                     lock_acquire+0x200/0x330
    [7.135147]                     _raw_spin_lock_irqsave+0x6c/0x98
    [7.135157]                     regmap_lock_spinlock+0x20/0x40
    [7.135166]                     regmap_read+0x44/0x90
    [7.135175]                     vop2_isr+0x90/0x290 [rockchipdrm]
    [7.135225]                     __handle_irq_event_percpu+0x124/0x2d0
    
    In the example above, the validator seems to get the scope of
    dependencies wrong, since the regmap instance used in rk8xx-spi driver
    has nothing to do with the instance from vop2.
    
    Improve validation by sharing the regmap's lockdep class with the maple
    tree's internal lock, while also providing a subclass for the latter.
    
    Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
    Link: https://patch.msgid.link/20241031-regmap-maple-lockdep-fix-v2-1-06a3710f3623@collabora.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "unicode: Don't special case ignorable code points" [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Wed Dec 11 14:11:23 2024 -0800

    Revert "unicode: Don't special case ignorable code points"
    
    [ Upstream commit 231825b2e1ff6ba799c5eaf396d3ab2354e37c6b ]
    
    This reverts commit 5c26d2f1d3f5e4be3e196526bead29ecb139cf91.
    
    It turns out that we can't do this, because while the old behavior of
    ignoring ignorable code points was most definitely wrong, we have
    case-folding filesystems with on-disk hash values with that wrong
    behavior.
    
    So now you can't look up those names, because they hash to something
    different.
    
    Of course, it's also entirely possible that in the meantime people have
    created *new* files with the new ("more correct") case folding logic,
    and reverting will just make other things break.
    
    The correct solution is to not do case folding in filesystems, but
    sadly, people seem to never really understand that.  People still see it
    as a feature, not a bug.
    
    Reported-by: Qi Han <hanqi@vivo.com>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219586
    Cc: Gabriel Krisman Bertazi <krisman@suse.de>
    Requested-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rocker: fix link status detection in rocker_carrier_init() [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Thu Nov 14 18:19:46 2024 +0300

    rocker: fix link status detection in rocker_carrier_init()
    
    [ Upstream commit e64285ff41bb7a934bd815bd38f31119be62ac37 ]
    
    Since '1 << rocker_port->pport' may be undefined for port >= 32,
    cast the left operand to 'unsigned long long' like it's done in
    'rocker_port_set_enable()' above. Compile tested only.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Link: https://patch.msgid.link/20241114151946.519047-1-dmantipov@yandex.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rtc: cmos: avoid taking rtc_lock for extended period of time [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Fri Oct 25 13:14:57 2024 -0700

    rtc: cmos: avoid taking rtc_lock for extended period of time
    
    [ Upstream commit 0a6efab33eab4e973db26d9f90c3e97a7a82e399 ]
    
    On my device reading entirety of /sys/devices/pnp0/00:03/cmos_nvram0/nvmem
    takes about 9 msec during which time interrupts are off on the CPU that
    does the read and the thread that performs the read can not be migrated
    or preempted by another higher priority thread (RT or not).
    
    Allow readers and writers be preempted by taking and releasing rtc_lock
    spinlock for each individual byte read or written rather than once per
    read/write request.
    
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Reviewed-by: Mateusz Jończyk <mat.jonczyk@o2.pl>
    Link: https://lore.kernel.org/r/Zxv8QWR21AV4ztC5@google.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rtla/timerlat: Make timerlat_top_cpu->*_count unsigned long long [+ + +]
Author: Tomas Glozar <tglozar@redhat.com>
Date:   Fri Oct 11 14:10:14 2024 +0200

    rtla/timerlat: Make timerlat_top_cpu->*_count unsigned long long
    
    [ Upstream commit 4eba4723c5254ba8251ecb7094a5078d5c300646 ]
    
    Most fields of struct timerlat_top_cpu are unsigned long long, but the
    fields {irq,thread,user}_count are int (32-bit signed).
    
    This leads to overflow when tracing on a large number of CPUs for a long
    enough time:
    $ rtla timerlat top -a20 -c 1-127 -d 12h
    ...
      0 12:00:00   |          IRQ Timer Latency (us)        |         Thread Timer Latency (us)
    CPU COUNT      |      cur       min       avg       max |      cur       min       avg       max
     1 #43200096  |        0         0         1         2 |        3         2         6        12
    ...
    127 #43200096  |        0         0         1         2 |        3         2         5        11
    ALL #119144 e4 |                  0         5         4 |                  2        28        16
    
    The average latency should be 0-1 for IRQ and 5-6 for thread, but is
    reported as 5 and 28, about 4 to 5 times more, due to the count
    overflowing when summed over all CPUs: 43200096 * 127 = 5486412192,
    however, 1191444898 (= 5486412192 mod MAX_INT) is reported instead, as
    seen on the last line of the output, and the averages are thus ~4.6
    times higher than they should be (5486412192 / 1191444898 = ~4.6).
    
    Fix the issue by changing {irq,thread,user}_count fields to unsigned
    long long, similarly to other fields in struct timerlat_top_cpu and to
    the count variable in timerlat_top_print_sum.
    
    Link: https://lore.kernel.org/20241011121015.2868751-1-tglozar@redhat.com
    Reported-by: Attila Fazekas <afazekas@redhat.com>
    Signed-off-by: Tomas Glozar <tglozar@redhat.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/cpum_sf: Handle CPU hotplug remove during sampling [+ + +]
Author: Thomas Richter <tmricht@linux.ibm.com>
Date:   Fri Oct 25 12:27:53 2024 +0200

    s390/cpum_sf: Handle CPU hotplug remove during sampling
    
    [ Upstream commit a0bd7dacbd51c632b8e2c0500b479af564afadf3 ]
    
    CPU hotplug remove handling triggers the following function
    call sequence:
    
       CPUHP_AP_PERF_S390_SF_ONLINE  --> s390_pmu_sf_offline_cpu()
       ...
       CPUHP_AP_PERF_ONLINE          --> perf_event_exit_cpu()
    
    The s390 CPUMF sampling CPU hotplug handler invokes:
    
     s390_pmu_sf_offline_cpu()
     +-->  cpusf_pmu_setup()
           +--> setup_pmc_cpu()
                +--> deallocate_buffers()
    
    This function de-allocates all sampling data buffers (SDBs) allocated
    for that CPU at event initialization. It also clears the
    PMU_F_RESERVED bit. The CPU is gone and can not be sampled.
    
    With the event still being active on the removed CPU, the CPU event
    hotplug support in kernel performance subsystem triggers the
    following function calls on the removed CPU:
    
      perf_event_exit_cpu()
      +--> perf_event_exit_cpu_context()
           +--> __perf_event_exit_context()
                +--> __perf_remove_from_context()
                     +--> event_sched_out()
                          +--> cpumsf_pmu_del()
                               +--> cpumsf_pmu_stop()
                                    +--> hw_perf_event_update()
    
    to stop and remove the event. During removal of the event, the
    sampling device driver tries to read out the remaining samples from
    the sample data buffers (SDBs). But they have already been freed
    (and may have been re-assigned). This may lead to a use after free
    situation in which case the samples are most likely invalid. In the
    best case the memory has not been reassigned and still contains
    valid data.
    
    Remedy this situation and check if the CPU is still in reserved
    state (bit PMU_F_RESERVED set). In this case the SDBs have not been
    released an contain valid data. This is always the case when
    the event is removed (and no CPU hotplug off occured).
    If the PMU_F_RESERVED bit is not set, the SDB buffers are gone.
    
    Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
    Reviewed-by: Hendrik Brueckner <brueckner@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
samples/bpf: Fix a resource leak [+ + +]
Author: Zhu Jun <zhujun2@cmss.chinamobile.com>
Date:   Wed Oct 9 18:41:26 2024 -0700

    samples/bpf: Fix a resource leak
    
    [ Upstream commit f3ef53174b23246fe9bc2bbc2542f3a3856fa1e2 ]
    
    The opened file should be closed in show_sockopts(), otherwise resource
    leak will occur that this problem was discovered by reading code
    
    Signed-off-by: Zhu Jun <zhujun2@cmss.chinamobile.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20241010014126.2573-1-zhujun2@cmss.chinamobile.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scatterlist: fix incorrect func name in kernel-doc [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Fri Nov 29 18:24:06 2024 -0800

    scatterlist: fix incorrect func name in kernel-doc
    
    [ Upstream commit d89c8ec0546184267cb211b579514ebaf8916100 ]
    
    Fix a kernel-doc warning by making the kernel-doc function description
    match the function name:
    
    include/linux/scatterlist.h:323: warning: expecting prototype for sg_unmark_bus_address(). Prototype was for sg_dma_unmark_bus_address() instead
    
    Link: https://lkml.kernel.org/r/20241130022406.537973-1-rdunlap@infradead.org
    Fixes: 42399301203e ("lib/scatterlist: add flag for indicating P2PDMA segments in an SGL")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Cc: Logan Gunthorpe <logang@deltatee.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/core: Prevent wakeup of ksoftirqd during idle load balance [+ + +]
Author: K Prateek Nayak <kprateek.nayak@amd.com>
Date:   Tue Nov 19 05:44:32 2024 +0000

    sched/core: Prevent wakeup of ksoftirqd during idle load balance
    
    [ Upstream commit e932c4ab38f072ce5894b2851fea8bc5754bb8e5 ]
    
    Scheduler raises a SCHED_SOFTIRQ to trigger a load balancing event on
    from the IPI handler on the idle CPU. If the SMP function is invoked
    from an idle CPU via flush_smp_call_function_queue() then the HARD-IRQ
    flag is not set and raise_softirq_irqoff() needlessly wakes ksoftirqd
    because soft interrupts are handled before ksoftirqd get on the CPU.
    
    Adding a trace_printk() in nohz_csd_func() at the spot of raising
    SCHED_SOFTIRQ and enabling trace events for sched_switch, sched_wakeup,
    and softirq_entry (for SCHED_SOFTIRQ vector alone) helps observing the
    current behavior:
    
           <idle>-0   [000] dN.1.:  nohz_csd_func: Raising SCHED_SOFTIRQ from nohz_csd_func
           <idle>-0   [000] dN.4.:  sched_wakeup: comm=ksoftirqd/0 pid=16 prio=120 target_cpu=000
           <idle>-0   [000] .Ns1.:  softirq_entry: vec=7 [action=SCHED]
           <idle>-0   [000] .Ns1.:  softirq_exit: vec=7  [action=SCHED]
           <idle>-0   [000] d..2.:  sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=16 next_prio=120
      ksoftirqd/0-16  [000] d..2.:  sched_switch: prev_comm=ksoftirqd/0 prev_pid=16 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
           ...
    
    Use __raise_softirq_irqoff() to raise the softirq. The SMP function call
    is always invoked on the requested CPU in an interrupt handler. It is
    guaranteed that soft interrupts are handled at the end.
    
    Following are the observations with the changes when enabling the same
    set of events:
    
           <idle>-0       [000] dN.1.: nohz_csd_func: Raising SCHED_SOFTIRQ for nohz_idle_balance
           <idle>-0       [000] dN.1.: softirq_raise: vec=7 [action=SCHED]
           <idle>-0       [000] .Ns1.: softirq_entry: vec=7 [action=SCHED]
    
    No unnecessary ksoftirqd wakeups are seen from idle task's context to
    service the softirq.
    
    Fixes: b2a02fc43a1f ("smp: Optimize send_call_function_single_ipi()")
    Closes: https://lore.kernel.org/lkml/fcf823f-195e-6c9a-eac3-25f870cb35ac@inria.fr/ [1]
    Reported-by: Julia Lawall <julia.lawall@inria.fr>
    Suggested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: K Prateek Nayak <kprateek.nayak@amd.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Link: https://lore.kernel.org/r/20241119054432.6405-5-kprateek.nayak@amd.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sched/core: Remove the unnecessary need_resched() check in nohz_csd_func() [+ + +]
Author: K Prateek Nayak <kprateek.nayak@amd.com>
Date:   Tue Nov 19 05:44:30 2024 +0000

    sched/core: Remove the unnecessary need_resched() check in nohz_csd_func()
    
    [ Upstream commit ea9cffc0a154124821531991d5afdd7e8b20d7aa ]
    
    The need_resched() check currently in nohz_csd_func() can be tracked
    to have been added in scheduler_ipi() back in 2011 via commit
    ca38062e57e9 ("sched: Use resched IPI to kick off the nohz idle balance")
    
    Since then, it has travelled quite a bit but it seems like an idle_cpu()
    check currently is sufficient to detect the need to bail out from an
    idle load balancing. To justify this removal, consider all the following
    case where an idle load balancing could race with a task wakeup:
    
    o Since commit f3dd3f674555b ("sched: Remove the limitation of WF_ON_CPU
      on wakelist if wakee cpu is idle") a target perceived to be idle
      (target_rq->nr_running == 0) will return true for
      ttwu_queue_cond(target) which will offload the task wakeup to the idle
      target via an IPI.
    
      In all such cases target_rq->ttwu_pending will be set to 1 before
      queuing the wake function.
    
      If an idle load balance races here, following scenarios are possible:
    
      - The CPU is not in TIF_POLLING_NRFLAG mode in which case an actual
        IPI is sent to the CPU to wake it out of idle. If the
        nohz_csd_func() queues before sched_ttwu_pending(), the idle load
        balance will bail out since idle_cpu(target) returns 0 since
        target_rq->ttwu_pending is 1. If the nohz_csd_func() is queued after
        sched_ttwu_pending() it should see rq->nr_running to be non-zero and
        bail out of idle load balancing.
    
      - The CPU is in TIF_POLLING_NRFLAG mode and instead of an actual IPI,
        the sender will simply set TIF_NEED_RESCHED for the target to put it
        out of idle and flush_smp_call_function_queue() in do_idle() will
        execute the call function. Depending on the ordering of the queuing
        of nohz_csd_func() and sched_ttwu_pending(), the idle_cpu() check in
        nohz_csd_func() should either see target_rq->ttwu_pending = 1 or
        target_rq->nr_running to be non-zero if there is a genuine task
        wakeup racing with the idle load balance kick.
    
    o The waker CPU perceives the target CPU to be busy
      (targer_rq->nr_running != 0) but the CPU is in fact going idle and due
      to a series of unfortunate events, the system reaches a case where the
      waker CPU decides to perform the wakeup by itself in ttwu_queue() on
      the target CPU but target is concurrently selected for idle load
      balance (XXX: Can this happen? I'm not sure, but we'll consider the
      mother of all coincidences to estimate the worst case scenario).
    
      ttwu_do_activate() calls enqueue_task() which would increment
      "rq->nr_running" post which it calls wakeup_preempt() which is
      responsible for setting TIF_NEED_RESCHED (via a resched IPI or by
      setting TIF_NEED_RESCHED on a TIF_POLLING_NRFLAG idle CPU) The key
      thing to note in this case is that rq->nr_running is already non-zero
      in case of a wakeup before TIF_NEED_RESCHED is set which would
      lead to idle_cpu() check returning false.
    
    In all cases, it seems that need_resched() check is unnecessary when
    checking for idle_cpu() first since an impending wakeup racing with idle
    load balancer will either set the "rq->ttwu_pending" or indicate a newly
    woken task via "rq->nr_running".
    
    Chasing the reason why this check might have existed in the first place,
    I came across  Peter's suggestion on the fist iteration of Suresh's
    patch from 2011 [1] where the condition to raise the SCHED_SOFTIRQ was:
    
            sched_ttwu_do_pending(list);
    
            if (unlikely((rq->idle == current) &&
                rq->nohz_balance_kick &&
                !need_resched()))
                    raise_softirq_irqoff(SCHED_SOFTIRQ);
    
    Since the condition to raise the SCHED_SOFIRQ was preceded by
    sched_ttwu_do_pending() (which is equivalent of sched_ttwu_pending()) in
    the current upstream kernel, the need_resched() check was necessary to
    catch a newly queued task. Peter suggested modifying it to:
    
            if (idle_cpu() && rq->nohz_balance_kick && !need_resched())
                    raise_softirq_irqoff(SCHED_SOFTIRQ);
    
    where idle_cpu() seems to have replaced "rq->idle == current" check.
    
    Even back then, the idle_cpu() check would have been sufficient to catch
    a new task being enqueued. Since commit b2a02fc43a1f ("smp: Optimize
    send_call_function_single_ipi()") overloads the interpretation of
    TIF_NEED_RESCHED for TIF_POLLING_NRFLAG idling, remove the
    need_resched() check in nohz_csd_func() to raise SCHED_SOFTIRQ based
    on Peter's suggestion.
    
    Fixes: b2a02fc43a1f ("smp: Optimize send_call_function_single_ipi()")
    Suggested-by: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: K Prateek Nayak <kprateek.nayak@amd.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20241119054432.6405-3-kprateek.nayak@amd.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/deadline: Collect sched_dl_entity initialization [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Sat Nov 4 11:59:19 2023 +0100

    sched/deadline: Collect sched_dl_entity initialization
    
    [ Upstream commit 9e07d45c5210f5dd6701c00d55791983db7320fa ]
    
    Create a single function that initializes a sched_dl_entity.
    
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Phil Auld <pauld@redhat.com>
    Reviewed-by: Valentin Schneider <vschneid@redhat.com>
    Link: https://lkml.kernel.org/r/51acc695eecf0a1a2f78f9a044e11ffd9b316bcf.1699095159.git.bristot@kernel.org
    Stable-dep-of: 0664e2c311b9 ("sched/deadline: Fix warning in migrate_enable for boosted tasks")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sched/deadline: Fix warning in migrate_enable for boosted tasks [+ + +]
Author: Wander Lairson Costa <wander@redhat.com>
Date:   Wed Jul 24 11:22:47 2024 -0300

    sched/deadline: Fix warning in migrate_enable for boosted tasks
    
    [ Upstream commit 0664e2c311b9fa43b33e3e81429cd0c2d7f9c638 ]
    
    When running the following command:
    
    while true; do
        stress-ng --cyclic 30 --timeout 30s --minimize --quiet
    done
    
    a warning is eventually triggered:
    
    WARNING: CPU: 43 PID: 2848 at kernel/sched/deadline.c:794
    setup_new_dl_entity+0x13e/0x180
    ...
    Call Trace:
     <TASK>
     ? show_trace_log_lvl+0x1c4/0x2df
     ? enqueue_dl_entity+0x631/0x6e0
     ? setup_new_dl_entity+0x13e/0x180
     ? __warn+0x7e/0xd0
     ? report_bug+0x11a/0x1a0
     ? handle_bug+0x3c/0x70
     ? exc_invalid_op+0x14/0x70
     ? asm_exc_invalid_op+0x16/0x20
     enqueue_dl_entity+0x631/0x6e0
     enqueue_task_dl+0x7d/0x120
     __do_set_cpus_allowed+0xe3/0x280
     __set_cpus_allowed_ptr_locked+0x140/0x1d0
     __set_cpus_allowed_ptr+0x54/0xa0
     migrate_enable+0x7e/0x150
     rt_spin_unlock+0x1c/0x90
     group_send_sig_info+0xf7/0x1a0
     ? kill_pid_info+0x1f/0x1d0
     kill_pid_info+0x78/0x1d0
     kill_proc_info+0x5b/0x110
     __x64_sys_kill+0x93/0xc0
     do_syscall_64+0x5c/0xf0
     entry_SYSCALL_64_after_hwframe+0x6e/0x76
     RIP: 0033:0x7f0dab31f92b
    
    This warning occurs because set_cpus_allowed dequeues and enqueues tasks
    with the ENQUEUE_RESTORE flag set. If the task is boosted, the warning
    is triggered. A boosted task already had its parameters set by
    rt_mutex_setprio, and a new call to setup_new_dl_entity is unnecessary,
    hence the WARN_ON call.
    
    Check if we are requeueing a boosted task and avoid calling
    setup_new_dl_entity if that's the case.
    
    Fixes: 295d6d5e3736 ("sched/deadline: Fix switching to -deadline")
    Signed-off-by: Wander Lairson Costa <wander@redhat.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: Juri Lelli <juri.lelli@redhat.com>
    Link: https://lore.kernel.org/r/20240724142253.27145-2-wander@redhat.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sched/deadline: Move bandwidth accounting into {en,de}queue_dl_entity [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Sat Nov 4 11:59:20 2023 +0100

    sched/deadline: Move bandwidth accounting into {en,de}queue_dl_entity
    
    [ Upstream commit 2f7a0f58948d8231236e2facecc500f1930fb996 ]
    
    In preparation of introducing !task sched_dl_entity; move the
    bandwidth accounting into {en.de}queue_dl_entity().
    
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Phil Auld <pauld@redhat.com>
    Reviewed-by: Valentin Schneider <vschneid@redhat.com>
    Link: https://lkml.kernel.org/r/a86dccbbe44e021b8771627e1dae01a69b73466d.1699095159.git.bristot@kernel.org
    Stable-dep-of: 0664e2c311b9 ("sched/deadline: Fix warning in migrate_enable for boosted tasks")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/fair: Check idle_cpu() before need_resched() to detect ilb CPU turning busy [+ + +]
Author: K Prateek Nayak <kprateek.nayak@amd.com>
Date:   Tue Nov 19 05:44:31 2024 +0000

    sched/fair: Check idle_cpu() before need_resched() to detect ilb CPU turning busy
    
    [ Upstream commit ff47a0acfcce309cf9e175149c75614491953c8f ]
    
    Commit b2a02fc43a1f ("smp: Optimize send_call_function_single_ipi()")
    optimizes IPIs to idle CPUs in TIF_POLLING_NRFLAG mode by setting the
    TIF_NEED_RESCHED flag in idle task's thread info and relying on
    flush_smp_call_function_queue() in idle exit path to run the
    call-function. A softirq raised by the call-function is handled shortly
    after in do_softirq_post_smp_call_flush() but the TIF_NEED_RESCHED flag
    remains set and is only cleared later when schedule_idle() calls
    __schedule().
    
    need_resched() check in _nohz_idle_balance() exists to bail out of load
    balancing if another task has woken up on the CPU currently in-charge of
    idle load balancing which is being processed in SCHED_SOFTIRQ context.
    Since the optimization mentioned above overloads the interpretation of
    TIF_NEED_RESCHED, check for idle_cpu() before going with the existing
    need_resched() check which can catch a genuine task wakeup on an idle
    CPU processing SCHED_SOFTIRQ from do_softirq_post_smp_call_flush(), as
    well as the case where ksoftirqd needs to be preempted as a result of
    new task wakeup or slice expiry.
    
    In case of PREEMPT_RT or threadirqs, although the idle load balancing
    may be inhibited in some cases on the ilb CPU, the fact that ksoftirqd
    is the only fair task going back to sleep will trigger a newidle balance
    on the CPU which will alleviate some imbalance if it exists if idle
    balance fails to do so.
    
    Fixes: b2a02fc43a1f ("smp: Optimize send_call_function_single_ipi()")
    Signed-off-by: K Prateek Nayak <kprateek.nayak@amd.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20241119054432.6405-4-kprateek.nayak@amd.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sched/fair: Rename check_preempt_curr() to wakeup_preempt() [+ + +]
Author: Ingo Molnar <mingo@kernel.org>
Date:   Tue Sep 19 10:38:21 2023 +0200

    sched/fair: Rename check_preempt_curr() to wakeup_preempt()
    
    [ Upstream commit e23edc86b09df655bf8963bbcb16647adc787395 ]
    
    The name is a bit opaque - make it clear that this is about wakeup
    preemption.
    
    Also rename the ->check_preempt_curr() methods similarly.
    
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Stable-dep-of: 0664e2c311b9 ("sched/deadline: Fix warning in migrate_enable for boosted tasks")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sched/fair: Rename check_preempt_wakeup() to check_preempt_wakeup_fair() [+ + +]
Author: Ingo Molnar <mingo@kernel.org>
Date:   Tue Sep 19 10:31:15 2023 +0200

    sched/fair: Rename check_preempt_wakeup() to check_preempt_wakeup_fair()
    
    [ Upstream commit 82845683ca6a15fe8c7912c6264bb0e84ec6f5fb ]
    
    Other scheduling classes already postfix their similar methods
    with the class name.
    
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Stable-dep-of: 0664e2c311b9 ("sched/deadline: Fix warning in migrate_enable for boosted tasks")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/headers: Move 'struct sched_param' out of uapi, to work around glibc/musl breakage [+ + +]
Author: Kir Kolyshkin <kolyshkin@gmail.com>
Date:   Mon Aug 7 20:03:57 2023 -0700

    sched/headers: Move 'struct sched_param' out of uapi, to work around glibc/musl breakage
    
    [ Upstream commit d844fe65f0957024c3e1b0bf2a0615246184d9bc ]
    
    Both glibc and musl define 'struct sched_param' in sched.h, while kernel
    has it in uapi/linux/sched/types.h, making it cumbersome to use
    sched_getattr(2) or sched_setattr(2) from userspace.
    
    For example, something like this:
    
            #include <sched.h>
            #include <linux/sched/types.h>
    
            struct sched_attr sa;
    
    will result in "error: redefinition of ‘struct sched_param’" (note the
    code doesn't need sched_param at all -- it needs struct sched_attr
    plus some stuff from sched.h).
    
    The situation is, glibc is not going to provide a wrapper for
    sched_{get,set}attr, thus the need to include linux/sched_types.h
    directly, which leads to the above problem.
    
    Thus, the userspace is left with a few sub-par choices when it wants to
    use e.g. sched_setattr(2), such as maintaining a copy of struct
    sched_attr definition, or using some other ugly tricks.
    
    OTOH, 'struct sched_param' is well known, defined in POSIX, and it won't
    be ever changed (as that would break backward compatibility).
    
    So, while 'struct sched_param' is indeed part of the kernel uapi,
    exposing it the way it's done now creates an issue, and hiding it
    (like this patch does) fixes that issue, hopefully without creating
    another one: common userspace software rely on libc headers, and as
    for "special" software (like libc), it looks like glibc and musl
    do not rely on kernel headers for 'struct sched_param' definition
    (but let's Cc their mailing lists in case it's otherwise).
    
    The alternative to this patch would be to move struct sched_attr to,
    say, linux/sched.h, or linux/sched/attr.h (the new file).
    
    Oh, and here is the previous attempt to fix the issue:
    
      https://lore.kernel.org/all/20200528135552.GA87103@google.com/
    
    While I support Linus arguments, the issue is still here
    and needs to be fixed.
    
    [ mingo: Linus is right, this shouldn't be needed - but on the other
             hand I agree that this header is not really helpful to
             user-space as-is. So let's pretend that
             <uapi/linux/sched/types.h> is only about sched_attr, and
             call this commit a workaround for user-space breakage
             that it in reality is ... Also, remove the Fixes tag. ]
    
    Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20230808030357.1213829-1-kolyshkin@gmail.com
    Stable-dep-of: 0664e2c311b9 ("sched/deadline: Fix warning in migrate_enable for boosted tasks")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/numa: fix memory leak due to the overwritten vma->numab_state [+ + +]
Author: Adrian Huang <ahuang12@lenovo.com>
Date:   Wed Nov 13 18:21:46 2024 +0800

    sched/numa: fix memory leak due to the overwritten vma->numab_state
    
    [ Upstream commit 5f1b64e9a9b7ee9cfd32c6b2fab796e29bfed075 ]
    
    [Problem Description]
    When running the hackbench program of LTP, the following memory leak is
    reported by kmemleak.
    
      # /opt/ltp/testcases/bin/hackbench 20 thread 1000
      Running with 20*40 (== 800) tasks.
    
      # dmesg | grep kmemleak
      ...
      kmemleak: 480 new suspected memory leaks (see /sys/kernel/debug/kmemleak)
      kmemleak: 665 new suspected memory leaks (see /sys/kernel/debug/kmemleak)
    
      # cat /sys/kernel/debug/kmemleak
      unreferenced object 0xffff888cd8ca2c40 (size 64):
        comm "hackbench", pid 17142, jiffies 4299780315
        hex dump (first 32 bytes):
          ac 74 49 00 01 00 00 00 4c 84 49 00 01 00 00 00  .tI.....L.I.....
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        backtrace (crc bff18fd4):
          [<ffffffff81419a89>] __kmalloc_cache_noprof+0x2f9/0x3f0
          [<ffffffff8113f715>] task_numa_work+0x725/0xa00
          [<ffffffff8110f878>] task_work_run+0x58/0x90
          [<ffffffff81ddd9f8>] syscall_exit_to_user_mode+0x1c8/0x1e0
          [<ffffffff81dd78d5>] do_syscall_64+0x85/0x150
          [<ffffffff81e0012b>] entry_SYSCALL_64_after_hwframe+0x76/0x7e
      ...
    
    This issue can be consistently reproduced on three different servers:
      * a 448-core server
      * a 256-core server
      * a 192-core server
    
    [Root Cause]
    Since multiple threads are created by the hackbench program (along with
    the command argument 'thread'), a shared vma might be accessed by two or
    more cores simultaneously. When two or more cores observe that
    vma->numab_state is NULL at the same time, vma->numab_state will be
    overwritten.
    
    Although current code ensures that only one thread scans the VMAs in a
    single 'numa_scan_period', there might be a chance for another thread
    to enter in the next 'numa_scan_period' while we have not gotten till
    numab_state allocation [1].
    
    Note that the command `/opt/ltp/testcases/bin/hackbench 50 process 1000`
    cannot the reproduce the issue. It is verified with 200+ test runs.
    
    [Solution]
    Use the cmpxchg atomic operation to ensure that only one thread executes
    the vma->numab_state assignment.
    
    [1] https://lore.kernel.org/lkml/1794be3c-358c-4cdc-a43d-a1f841d91ef7@amd.com/
    
    Link: https://lkml.kernel.org/r/20241113102146.2384-1-ahuang12@lenovo.com
    Fixes: ef6a22b70f6d ("sched/numa: apply the scan delay to every new vma")
    Signed-off-by: Adrian Huang <ahuang12@lenovo.com>
    Reported-by: Jiwei Sun <sunjw10@lenovo.com>
    Reviewed-by: Raghavendra K T <raghavendra.kt@amd.com>
    Reviewed-by: Vlastimil Babka <vbabka@suse.cz>
    Cc: Ben Segall <bsegall@google.com>
    Cc: Dietmar Eggemann <dietmar.eggemann@arm.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Valentin Schneider <vschneid@redhat.com>
    Cc: Vincent Guittot <vincent.guittot@linaro.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sched/numa: Fix mm numa_scan_seq based unconditional scan [+ + +]
Author: Raghavendra K T <raghavendra.kt@amd.com>
Date:   Fri Oct 20 21:27:46 2023 +0530

    sched/numa: Fix mm numa_scan_seq based unconditional scan
    
    [ Upstream commit 84db47ca7146d7bd00eb5cf2b93989a971c84650 ]
    
    Since commit fc137c0ddab2 ("sched/numa: enhance vma scanning logic")
    
    NUMA Balancing allows updating PTEs to trap NUMA hinting faults if the
    task had previously accessed VMA. However unconditional scan of VMAs are
    allowed during initial phase of VMA creation until process's
    mm numa_scan_seq reaches 2 even though current task had not accessed VMA.
    
    Rationale:
     - Without initial scan subsequent PTE update may never happen.
     - Give fair opportunity to all the VMAs to be scanned and subsequently
    understand the access pattern of all the VMAs.
    
    But it has a corner case where, if a VMA is created after some time,
    process's mm numa_scan_seq could be already greater than 2.
    
    For e.g., values of mm numa_scan_seq when VMAs are created by running
    mmtest autonuma benchmark briefly looks like:
    start_seq=0 : 459
    start_seq=2 : 138
    start_seq=3 : 144
    start_seq=4 : 8
    start_seq=8 : 1
    start_seq=9 : 1
    This results in no unconditional PTE updates for those VMAs created after
    some time.
    
    Fix:
     - Note down the initial value of mm numa_scan_seq in per VMA start_seq.
     - Allow unconditional scan till start_seq + 2.
    
    Result:
    SUT: AMD EPYC Milan with 2 NUMA nodes 256 cpus.
    base kernel: upstream 6.6-rc6 with Mels patches [1] applied.
    
    kernbench
    ==========              base                  patched %gain
    Amean    elsp-128      165.09 ( 0.00%)      164.78 *   0.19%*
    
    Duration User       41404.28    41375.08
    Duration System      9862.22     9768.48
    Duration Elapsed      519.87      518.72
    
    Ops NUMA PTE updates           1041416.00      831536.00
    Ops NUMA hint faults            263296.00      220966.00
    Ops NUMA pages migrated         258021.00      212769.00
    Ops AutoNUMA cost                 1328.67        1114.69
    
    autonumabench
    
    NUMA01_THREADLOCAL
    ==================
    Amean  elsp-NUMA01_THREADLOCAL   81.79 (0.00%)  67.74 *  17.18%*
    
    Duration User       54832.73    47379.67
    Duration System        75.00      185.75
    Duration Elapsed      576.72      476.09
    
    Ops NUMA PTE updates                  394429.00    11121044.00
    Ops NUMA hint faults                    1001.00     8906404.00
    Ops NUMA pages migrated                  288.00     2998694.00
    Ops AutoNUMA cost                          7.77       44666.84
    
    Signed-off-by: Raghavendra K T <raghavendra.kt@amd.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: Mel Gorman <mgorman@suse.de>
    Link: https://lore.kernel.org/r/2ea7cbce80ac7c62e90cbfb9653a7972f902439f.1697816692.git.raghavendra.kt@amd.com
    Stable-dep-of: 5f1b64e9a9b7 ("sched/numa: fix memory leak due to the overwritten vma->numab_state")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched: Remove vruntime from trace_sched_stat_runtime() [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Mon Nov 6 13:41:43 2023 +0100

    sched: Remove vruntime from trace_sched_stat_runtime()
    
    [ Upstream commit 5fe6ec8f6ab549b6422e41551abb51802bd48bc7 ]
    
    Tracing the runtime delta makes sense, observer can sum over time.
    Tracing the absolute vruntime makes less sense, inconsistent:
    absolute-vs-delta, but also vruntime delta can be computed from
    runtime delta.
    
    Removing the vruntime thing also makes the two tracepoint sites
    identical, allowing to unify the code in a later patch.
    
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Stable-dep-of: 0664e2c311b9 ("sched/deadline: Fix warning in migrate_enable for boosted tasks")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sched: Unify more update_curr*() [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Mon Nov 6 14:04:01 2023 +0100

    sched: Unify more update_curr*()
    
    [ Upstream commit c708a4dc5ab547edc3d6537233ca9e79ea30ce47 ]
    
    Now that trace_sched_stat_runtime() no longer takes a vruntime
    argument, the task specific bits are identical between
    update_curr_common() and update_curr().
    
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Stable-dep-of: 0664e2c311b9 ("sched/deadline: Fix warning in migrate_enable for boosted tasks")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sched: Unify runtime accounting across classes [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Sat Nov 4 11:59:18 2023 +0100

    sched: Unify runtime accounting across classes
    
    [ Upstream commit 5d69eca542ee17c618f9a55da52191d5e28b435f ]
    
    All classes use sched_entity::exec_start to track runtime and have
    copies of the exact same code around to compute runtime.
    
    Collapse all that.
    
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Phil Auld <pauld@redhat.com>
    Reviewed-by: Valentin Schneider <vschneid@redhat.com>
    Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Link: https://lkml.kernel.org/r/54d148a144f26d9559698c4dd82d8859038a7380.1699095159.git.bristot@kernel.org
    Stable-dep-of: 0664e2c311b9 ("sched/deadline: Fix warning in migrate_enable for boosted tasks")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scsi: hisi_sas: Add cond_resched() for no forced preemption model [+ + +]
Author: Yihang Li <liyihang9@huawei.com>
Date:   Tue Oct 8 10:18:16 2024 +0800

    scsi: hisi_sas: Add cond_resched() for no forced preemption model
    
    [ Upstream commit 2233c4a0b948211743659b24c13d6bd059fa75fc ]
    
    For no forced preemption model kernel, in the scenario where the
    expander is connected to 12 high performance SAS SSDs, the following
    call trace may occur:
    
    [  214.409199][  C240] watchdog: BUG: soft lockup - CPU#240 stuck for 22s! [irq/149-hisi_sa:3211]
    [  214.568533][  C240] pstate: 60400009 (nZCv daif +PAN -UAO -TCO BTYPE=--)
    [  214.575224][  C240] pc : fput_many+0x8c/0xdc
    [  214.579480][  C240] lr : fput+0x1c/0xf0
    [  214.583302][  C240] sp : ffff80002de2b900
    [  214.587298][  C240] x29: ffff80002de2b900 x28: ffff1082aa412000
    [  214.593291][  C240] x27: ffff3062a0348c08 x26: ffff80003a9f6000
    [  214.599284][  C240] x25: ffff1062bbac5c40 x24: 0000000000001000
    [  214.605277][  C240] x23: 000000000000000a x22: 0000000000000001
    [  214.611270][  C240] x21: 0000000000001000 x20: 0000000000000000
    [  214.617262][  C240] x19: ffff3062a41ae580 x18: 0000000000010000
    [  214.623255][  C240] x17: 0000000000000001 x16: ffffdb3a6efe5fc0
    [  214.629248][  C240] x15: ffffffffffffffff x14: 0000000003ffffff
    [  214.635241][  C240] x13: 000000000000ffff x12: 000000000000029c
    [  214.641234][  C240] x11: 0000000000000006 x10: ffff80003a9f7fd0
    [  214.647226][  C240] x9 : ffffdb3a6f0482fc x8 : 0000000000000001
    [  214.653219][  C240] x7 : 0000000000000002 x6 : 0000000000000080
    [  214.659212][  C240] x5 : ffff55480ee9b000 x4 : fffffde7f94c6554
    [  214.665205][  C240] x3 : 0000000000000002 x2 : 0000000000000020
    [  214.671198][  C240] x1 : 0000000000000021 x0 : ffff3062a41ae5b8
    [  214.677191][  C240] Call trace:
    [  214.680320][  C240]  fput_many+0x8c/0xdc
    [  214.684230][  C240]  fput+0x1c/0xf0
    [  214.687707][  C240]  aio_complete_rw+0xd8/0x1fc
    [  214.692225][  C240]  blkdev_bio_end_io+0x98/0x140
    [  214.696917][  C240]  bio_endio+0x160/0x1bc
    [  214.701001][  C240]  blk_update_request+0x1c8/0x3bc
    [  214.705867][  C240]  scsi_end_request+0x3c/0x1f0
    [  214.710471][  C240]  scsi_io_completion+0x7c/0x1a0
    [  214.715249][  C240]  scsi_finish_command+0x104/0x140
    [  214.720200][  C240]  scsi_softirq_done+0x90/0x180
    [  214.724892][  C240]  blk_mq_complete_request+0x5c/0x70
    [  214.730016][  C240]  scsi_mq_done+0x48/0xac
    [  214.734194][  C240]  sas_scsi_task_done+0xbc/0x16c [libsas]
    [  214.739758][  C240]  slot_complete_v3_hw+0x260/0x760 [hisi_sas_v3_hw]
    [  214.746185][  C240]  cq_thread_v3_hw+0xbc/0x190 [hisi_sas_v3_hw]
    [  214.752179][  C240]  irq_thread_fn+0x34/0xa4
    [  214.756435][  C240]  irq_thread+0xc4/0x130
    [  214.760520][  C240]  kthread+0x108/0x13c
    [  214.764430][  C240]  ret_from_fork+0x10/0x18
    
    This is because in the hisi_sas driver, both the hardware interrupt
    handler and the interrupt thread are executed on the same CPU. In the
    performance test scenario, function irq_wait_for_interrupt() will always
    return 0 if lots of interrupts occurs and the CPU will be continuously
    consumed. As a result, the CPU cannot run the watchdog thread. When the
    watchdog time exceeds the specified time, call trace occurs.
    
    To fix it, add cond_resched() to execute the watchdog thread.
    
    Signed-off-by: Yihang Li <liyihang9@huawei.com>
    Link: https://lore.kernel.org/r/20241008021822.2617339-8-liyihang9@huawei.com
    Reviewed-by: Xiang Chen <chenxiang66@hisilicon.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: lpfc: Call lpfc_sli4_queue_unset() in restart and rmmod paths [+ + +]
Author: Justin Tee <justin.tee@broadcom.com>
Date:   Thu Oct 31 15:32:11 2024 -0700

    scsi: lpfc: Call lpfc_sli4_queue_unset() in restart and rmmod paths
    
    [ Upstream commit d35f7672715d1ff3e3ad9bb4ae6ac6cb484200fe ]
    
    During initialization, the driver allocates wq->pring in lpfc_wq_create
    and lpfc_sli4_queue_unset() is the only place where kfree(wq->pring) is
    called.
    
    There is a possible memory leak in lpfc_sli_brdrestart_s4() (restart)
    and lpfc_pci_remove_one_s4() (rmmod) paths because there are no calls to
    lpfc_sli4_queue_unset() to kfree() the wq->pring.
    
    Fix by inserting a call to lpfc_sli4_queue_unset() in
    lpfc_sli_brdrestart_s4() and lpfc_sli4_hba_unset() routines.  Also, add
    a check for the SLI_ACTIVE flag before issuing the Q_DESTROY mailbox
    command.  If not set, then the mailbox command will obviously fail.  In
    such cases, skip issuing the mailbox command and only execute the driver
    resource clean up portions of the lpfc_*q_destroy routines.
    
    Signed-off-by: Justin Tee <justin.tee@broadcom.com>
    Link: https://lore.kernel.org/r/20241031223219.152342-4-justintee8345@gmail.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: qla2xxx: Fix abort in bsg timeout [+ + +]
Author: Quinn Tran <qutran@marvell.com>
Date:   Fri Nov 15 18:33:07 2024 +0530

    scsi: qla2xxx: Fix abort in bsg timeout
    
    commit c423263082ee8ccfad59ab33e3d5da5dc004c21e upstream.
    
    Current abort of bsg on timeout prematurely clears the
    outstanding_cmds[]. Abort does not allow FW to return the IOCB/SRB. In
    addition, bsg_job_done() is not called to return the BSG (i.e. leak).
    
    Abort the outstanding bsg/SRB and wait for the completion. The
    completion IOCB will wake up the bsg_timeout thread. If abort is not
    successful, then driver will forcibly call bsg_job_done() and free the
    srb.
    
    Err Inject:
    
     - qaucli -z
     - assign CT Passthru IOCB's NportHandle with another initiator
       nport handle to trigger timeout.  Remote port will drop CT request.
     - bsg_job_done is properly called as part of cleanup
    
    kernel: qla2xxx [0000:21:00.1]-7012:7: qla2x00_process_ct : 286 : Error Inject.
    kernel: qla2xxx [0000:21:00.1]-7016:7: bsg rqst type: FC_BSG_HST_CT else type: 101 - loop-id=1 portid=fffffa.
    kernel: qla2xxx [0000:21:00.1]-70bb:7: qla24xx_bsg_timeout CMD timeout. bsg ptr ffff9971a42f0838 msgcode 80000004 vendor cmd fa010000
    kernel: qla2xxx [0000:21:00.1]-507c:7: Abort command issued - hdl=4b, type=5
    kernel: qla2xxx [0000:21:00.1]-5040:7: ELS-CT pass-through-ct pass-through error hdl=4b comp_status-status=0x5 error subcode 1=0x0 error subcode 2=0xaf882e80.
    kernel: qla2xxx [0000:21:00.1]-7009:7: qla2x00_bsg_job_done: sp hdl 4b, result=70000 bsg ptr ffff9971a42f0838
    kernel: qla2xxx [0000:21:00.1]-802c:7: Aborting bsg ffff9971a42f0838 sp=ffff99760b87ba80 handle=4b rval=0
    kernel: qla2xxx [0000:21:00.1]-708a:7: bsg abort success. bsg ffff9971a42f0838 sp=ffff99760b87ba80 handle=0x4b
    kernel: qla2xxx [0000:21:00.1]-7012:7: qla2x00_process_ct : 286 : Error Inject.
    kernel: qla2xxx [0000:21:00.1]-7016:7: bsg rqst type: FC_BSG_HST_CT else type: 101 - loop-id=1 portid=fffffa.
    kernel: qla2xxx [0000:21:00.1]-70bb:7: qla24xx_bsg_timeout CMD timeout. bsg ptr ffff9971a42f43b8 msgcode 80000004 vendor cmd fa010000
    kernel: qla2xxx [0000:21:00.1]-7012:7: qla_bsg_found : 2206 : Error Inject 2.
    kernel: qla2xxx [0000:21:00.1]-802c:7: Aborting bsg ffff9971a42f43b8 sp=ffff99762c304440 handle=5e rval=5
    kernel: qla2xxx [0000:21:00.1]-704f:7: bsg abort fail.  bsg=ffff9971a42f43b8 sp=ffff99762c304440 rval=5.
    kernel: qla2xxx [0000:21:00.1]-7051:7: qla_bsg_found bsg_job_done : bsg ffff9971a42f43b8 result 0xfffffffa sp ffff99762c304440.
    
    Cc: stable@vger.kernel.org
    Fixes: c449b4198701 ("scsi: qla2xxx: Use QP lock to search for bsg")
    Signed-off-by: Quinn Tran <qutran@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20241115130313.46826-2-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Fix NVMe and NPIV connect issue [+ + +]
Author: Quinn Tran <qutran@marvell.com>
Date:   Fri Nov 15 18:33:11 2024 +0530

    scsi: qla2xxx: Fix NVMe and NPIV connect issue
    
    commit 4812b7796c144f63a1094f79a5eb8fbdad8d7ebc upstream.
    
    NVMe controller fails to send connect command due to failure to locate
    hw context buffer for NVMe queue 0 (blk_mq_hw_ctx, hctx_idx=0). The
    cause of the issue is NPIV host did not initialize the vha->irq_offset
    field.  This field is given to blk-mq (blk_mq_pci_map_queues) to help
    locate the beginning of IO Queues which in turn help locate NVMe queue
    0.
    
    Initialize this field to allow NVMe to work properly with NPIV host.
    
     kernel: nvme nvme5: Connect command failed, errno: -18
     kernel: nvme nvme5: qid 0: secure concatenation is not supported
     kernel: nvme nvme5: NVME-FC{5}: create_assoc failed, assoc_id 2e9100 ret 401
     kernel: nvme nvme5: NVME-FC{5}: reset: Reconnect attempt failed (401)
     kernel: nvme nvme5: NVME-FC{5}: Reconnect attempt in 2 seconds
    
    Cc: stable@vger.kernel.org
    Fixes: f0783d43dde4 ("scsi: qla2xxx: Use correct number of vectors for online CPUs")
    Signed-off-by: Quinn Tran <qutran@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20241115130313.46826-6-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Fix use after free on unload [+ + +]
Author: Quinn Tran <qutran@marvell.com>
Date:   Fri Nov 15 18:33:08 2024 +0530

    scsi: qla2xxx: Fix use after free on unload
    
    commit 07c903db0a2ff84b68efa1a74a4de353ea591eb0 upstream.
    
    System crash is observed with stack trace warning of use after
    free. There are 2 signals to tell dpc_thread to terminate (UNLOADING
    flag and kthread_stop).
    
    On setting the UNLOADING flag when dpc_thread happens to run at the time
    and sees the flag, this causes dpc_thread to exit and clean up
    itself. When kthread_stop is called for final cleanup, this causes use
    after free.
    
    Remove UNLOADING signal to terminate dpc_thread.  Use the kthread_stop
    as the main signal to exit dpc_thread.
    
    [596663.812935] kernel BUG at mm/slub.c:294!
    [596663.812950] invalid opcode: 0000 [#1] SMP PTI
    [596663.812957] CPU: 13 PID: 1475935 Comm: rmmod Kdump: loaded Tainted: G          IOE    --------- -  - 4.18.0-240.el8.x86_64 #1
    [596663.812960] Hardware name: HP ProLiant DL380p Gen8, BIOS P70 08/20/2012
    [596663.812974] RIP: 0010:__slab_free+0x17d/0x360
    
    ...
    [596663.813008] Call Trace:
    [596663.813022]  ? __dentry_kill+0x121/0x170
    [596663.813030]  ? _cond_resched+0x15/0x30
    [596663.813034]  ? _cond_resched+0x15/0x30
    [596663.813039]  ? wait_for_completion+0x35/0x190
    [596663.813048]  ? try_to_wake_up+0x63/0x540
    [596663.813055]  free_task+0x5a/0x60
    [596663.813061]  kthread_stop+0xf3/0x100
    [596663.813103]  qla2x00_remove_one+0x284/0x440 [qla2xxx]
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Quinn Tran <qutran@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20241115130313.46826-3-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Remove check req_sg_cnt should be equal to rsp_sg_cnt [+ + +]
Author: Saurav Kashyap <skashyap@marvell.com>
Date:   Fri Nov 15 18:33:10 2024 +0530

    scsi: qla2xxx: Remove check req_sg_cnt should be equal to rsp_sg_cnt
    
    commit 833c70e212fc40d3e98da941796f4c7bcaecdf58 upstream.
    
    Firmware supports multiple sg_cnt for request and response for CT
    commands, so remove the redundant check. A check is there where sg_cnt
    for request and response should be same. This is not required as driver
    and FW have code to handle multiple and different sg_cnt on request and
    response.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Saurav Kashyap <skashyap@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20241115130313.46826-5-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Supported speed displayed incorrectly for VPorts [+ + +]
Author: Anil Gurumurthy <agurumurthy@marvell.com>
Date:   Fri Nov 15 18:33:12 2024 +0530

    scsi: qla2xxx: Supported speed displayed incorrectly for VPorts
    
    commit e4e268f898c8a08f0a1188677e15eadbc06e98f6 upstream.
    
    The fc_function_template for vports was missing the
    .show_host_supported_speeds. The base port had the same.
    
    Add .show_host_supported_speeds to the vport template as well.
    
    Cc: stable@vger.kernel.org
    Fixes: 2c3dfe3f6ad8 ("[SCSI] qla2xxx: add support for NPIV")
    Signed-off-by: Anil Gurumurthy <agurumurthy@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20241115130313.46826-7-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: scsi_debug: Fix hrtimer support for ndelay [+ + +]
Author: John Garry <john.g.garry@oracle.com>
Date:   Mon Dec 2 13:00:45 2024 +0000

    scsi: scsi_debug: Fix hrtimer support for ndelay
    
    [ Upstream commit 6918141d815acef056a0d10e966a027d869a922d ]
    
    Since commit 771f712ba5b0 ("scsi: scsi_debug: Fix cmd duration
    calculation"), ns_from_boot value is only evaluated in schedule_resp()
    for polled requests.
    
    However, ns_from_boot is also required for hrtimer support for when
    ndelay is less than INCLUSIVE_TIMING_MAX_NS, so fix up the logic to
    decide when to evaluate ns_from_boot.
    
    Fixes: 771f712ba5b0 ("scsi: scsi_debug: Fix cmd duration calculation")
    Signed-off-by: John Garry <john.g.garry@oracle.com>
    Link: https://lore.kernel.org/r/20241202130045.2335194-1-john.g.garry@oracle.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: sg: Fix slab-use-after-free read in sg_release() [+ + +]
Author: Suraj Sonawane <surajsonawane0215@gmail.com>
Date:   Wed Nov 20 18:29:44 2024 +0530

    scsi: sg: Fix slab-use-after-free read in sg_release()
    
    [ Upstream commit f10593ad9bc36921f623361c9e3dd96bd52d85ee ]
    
    Fix a use-after-free bug in sg_release(), detected by syzbot with KASAN:
    
    BUG: KASAN: slab-use-after-free in lock_release+0x151/0xa30
    kernel/locking/lockdep.c:5838
    __mutex_unlock_slowpath+0xe2/0x750 kernel/locking/mutex.c:912
    sg_release+0x1f4/0x2e0 drivers/scsi/sg.c:407
    
    In sg_release(), the function kref_put(&sfp->f_ref, sg_remove_sfp) is
    called before releasing the open_rel_lock mutex. The kref_put() call may
    decrement the reference count of sfp to zero, triggering its cleanup
    through sg_remove_sfp(). This cleanup includes scheduling deferred work
    via sg_remove_sfp_usercontext(), which ultimately frees sfp.
    
    After kref_put(), sg_release() continues to unlock open_rel_lock and may
    reference sfp or sdp. If sfp has already been freed, this results in a
    slab-use-after-free error.
    
    Move the kref_put(&sfp->f_ref, sg_remove_sfp) call after unlocking the
    open_rel_lock mutex. This ensures:
    
     - No references to sfp or sdp occur after the reference count is
       decremented.
    
     - Cleanup functions such as sg_remove_sfp() and
       sg_remove_sfp_usercontext() can safely execute without impacting the
       mutex handling in sg_release().
    
    The fix has been tested and validated by syzbot. This patch closes the
    bug reported at the following syzkaller link and ensures proper
    sequencing of resource cleanup and mutex operations, eliminating the
    risk of use-after-free errors in sg_release().
    
    Reported-by: syzbot+7efb5850a17ba6ce098b@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=7efb5850a17ba6ce098b
    Tested-by: syzbot+7efb5850a17ba6ce098b@syzkaller.appspotmail.com
    Fixes: cc833acbee9d ("sg: O_EXCL and other lock handling")
    Signed-off-by: Suraj Sonawane <surajsonawane0215@gmail.com>
    Link: https://lore.kernel.org/r/20241120125944.88095-1-surajsonawane0215@gmail.com
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: st: Add MTIOCGET and MTLOAD to ioctls allowed after device reset [+ + +]
Author: Kai Mäkisara <Kai.Makisara@kolumbus.fi>
Date:   Wed Nov 6 11:57:22 2024 +0200

    scsi: st: Add MTIOCGET and MTLOAD to ioctls allowed after device reset
    
    [ Upstream commit 0b120edb37dc9dd8ca82893d386922eb6b16f860 ]
    
    Most drives rewind the tape when the device is reset. Reading and writing
    are not allowed until something is done to make the tape position match the
    user's expectation (e.g., rewind the tape). Add MTIOCGET and MTLOAD to
    operations allowed after reset. MTIOCGET is modified to not touch the tape
    if pos_unknown is non-zero. The tape location is known after MTLOAD.
    
    Signed-off-by: Kai Mäkisara <Kai.Makisara@kolumbus.fi>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219419#c14
    Link: https://lore.kernel.org/r/20241106095723.63254-3-Kai.Makisara@kolumbus.fi
    Reviewed-by: John Meneghini <jmeneghi@redhat.com>
    Tested-by: John Meneghini <jmeneghi@redhat.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: st: Don't modify unknown block number in MTIOCGET [+ + +]
Author: Kai Mäkisara <Kai.Makisara@kolumbus.fi>
Date:   Wed Nov 6 11:57:21 2024 +0200

    scsi: st: Don't modify unknown block number in MTIOCGET
    
    [ Upstream commit 5bb2d6179d1a8039236237e1e94cfbda3be1ed9e ]
    
    Struct mtget field mt_blkno -1 means it is unknown. Don't add anything to
    it.
    
    Signed-off-by: Kai Mäkisara <Kai.Makisara@kolumbus.fi>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219419#c14
    Link: https://lore.kernel.org/r/20241106095723.63254-2-Kai.Makisara@kolumbus.fi
    Reviewed-by: John Meneghini <jmeneghi@redhat.com>
    Tested-by: John Meneghini <jmeneghi@redhat.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: core: Add missing post notify for power mode change [+ + +]
Author: Peter Wang <peter.wang@mediatek.com>
Date:   Fri Nov 22 10:49:43 2024 +0800

    scsi: ufs: core: Add missing post notify for power mode change
    
    commit 7f45ed5f0cd5ccbbec79adc6c48a67d6a85fba56 upstream.
    
    When the power mode change is successful but the power mode hasn't
    actually changed, the post notification was missed.  Similar to the
    approach with hibernate/clock scale/hce enable, having pre/post
    notifications in the same function will make it easier to maintain.
    
    Additionally, supplement the description of power parameters for the
    pwr_change_notify callback.
    
    Fixes: 7eb584db73be ("ufs: refactor configuring power mode")
    Cc: stable@vger.kernel.org #6.11.x
    Signed-off-by: Peter Wang <peter.wang@mediatek.com>
    Link: https://lore.kernel.org/r/20241122024943.30589-1-peter.wang@mediatek.com
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: ufs: core: Add ufshcd_send_bsg_uic_cmd() for UFS BSG [+ + +]
Author: Ziqi Chen <quic_ziqichen@quicinc.com>
Date:   Tue Nov 19 17:56:04 2024 +0800

    scsi: ufs: core: Add ufshcd_send_bsg_uic_cmd() for UFS BSG
    
    [ Upstream commit 60b4dd1460f6d65739acb0f28d12bd9abaeb34b4 ]
    
    User layer applications can send UIC GET/SET commands via the BSG
    framework, and if the user layer application sends a UIC SET command to the
    PA_PWRMODE attribute, a power mode change shall be initiated in UniPro and
    two interrupts shall be triggered if the power mode is successfully
    changed, i.e., UIC Command Completion interrupt and UIC Power Mode
    interrupt.
    
    The current UFS BSG code calls ufshcd_send_uic_cmd() directly, with which
    the second interrupt, i.e., UIC Power Mode interrupt, shall be treated as
    unhandled interrupt. In addition, after the UIC command is completed, user
    layer application has to poll UniPro and/or M-PHY state machine to confirm
    the power mode change is finished.
    
    Add a new wrapper function ufshcd_send_bsg_uic_cmd() and call it from
    ufs_bsg_request() so that if a UIC SET command is targeting the PA_PWRMODE
    attribute it can be redirected to ufshcd_uic_pwr_ctrl().
    
    Fixes: e77044c5a842 ("scsi: ufs-bsg: Add support for uic commands in ufs_bsg_request()")
    Co-developed-by: Can Guo <quic_cang@quicinc.com>
    Signed-off-by: Can Guo <quic_cang@quicinc.com>
    Signed-off-by: Ziqi Chen <quic_ziqichen@quicinc.com>
    Link: https://lore.kernel.org/r/20241119095613.121385-1-quic_ziqichen@quicinc.com
    Reviewed-by: Bean Huo <beanhuo@micron.com>
    Reviewed-by: Avri Altman <avri.altman@wdc.com>
    Reviewed-by: Peter Wang <peter.wang@mediatek.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: core: Always initialize the UIC done completion [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Thu Sep 12 15:30:05 2024 -0700

    scsi: ufs: core: Always initialize the UIC done completion
    
    [ Upstream commit b1e8c53749adb795bfb0bf4e2f7836e26684bb90 ]
    
    Simplify __ufshcd_send_uic_cmd() by always initializing the
    uic_cmd::done completion. This is fine since the time required to
    initialize a completion is small compared to the time required to
    process an UIC command.
    
    Reviewed-by: Peter Wang <peter.wang@mediatek.com>
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://lore.kernel.org/r/20240912223019.3510966-5-bvanassche@acm.org
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Stable-dep-of: 60b4dd1460f6 ("scsi: ufs: core: Add ufshcd_send_bsg_uic_cmd() for UFS BSG")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: core: Make DMA mask configuration more flexible [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Fri Oct 18 12:47:39 2024 -0700

    scsi: ufs: core: Make DMA mask configuration more flexible
    
    [ Upstream commit 78bc671bd1501e2f6c571e063301a4fdc5db53b2 ]
    
    Replace UFSHCD_QUIRK_BROKEN_64BIT_ADDRESS with
    ufs_hba_variant_ops::set_dma_mask.  Update the Renesas driver
    accordingly.  This patch enables supporting other configurations than
    32-bit or 64-bit DMA addresses, e.g. 36-bit DMA addresses.
    
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://lore.kernel.org/r/20241018194753.775074-1-bvanassche@acm.org
    Reviewed-by: Avri Altman <Avri.Altman@wdc.com>
    Reviewed-by: Peter Wang <peter.wang@mediatek.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: core: sysfs: Prevent div by zero [+ + +]
Author: Gwendal Grignou <gwendal@chromium.org>
Date:   Tue Nov 19 22:25:22 2024 -0800

    scsi: ufs: core: sysfs: Prevent div by zero
    
    commit eb48e9fc0028bed94a40a9352d065909f19e333c upstream.
    
    Prevent a division by 0 when monitoring is not enabled.
    
    Fixes: 1d8613a23f3c ("scsi: ufs: core: Introduce HBA performance monitor sysfs nodes")
    Cc: stable@vger.kernel.org
    Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
    Link: https://lore.kernel.org/r/20241120062522.917157-1-gwendal@chromium.org
    Reviewed-by: Can Guo <quic_cang@quicinc.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests/ftrace: adjust offset for kprobe syntax error test [+ + +]
Author: Hari Bathini <hbathini@linux.ibm.com>
Date:   Sat Nov 30 01:56:21 2024 +0530

    selftests/ftrace: adjust offset for kprobe syntax error test
    
    [ Upstream commit 777f290ab328de333b85558bb6807a69a59b36ba ]
    
    In 'NOFENTRY_ARGS' test case for syntax check, any offset X of
    `vfs_read+X` except function entry offset (0) fits the criterion,
    even if that offset is not at instruction boundary, as the parser
    comes before probing. But with "ENDBR64" instruction on x86, offset
    4 is treated as function entry. So, X can't be 4 as well. Thus, 8
    was used as offset for the test case. On 64-bit powerpc though, any
    offset <= 16 can be considered function entry depending on build
    configuration (see arch_kprobe_on_func_entry() for implementation
    details). So, use `vfs_read+20` to accommodate that scenario too.
    
    Link: https://lore.kernel.org/r/20241129202621.721159-1-hbathini@linux.ibm.com
    Fixes: 4231f30fcc34a ("selftests/ftrace: Add BTF arguments test cases")
    Suggested-by: Masami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: Hari Bathini <hbathini@linux.ibm.com>
    Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/resctrl: Protect against array overflow when reading strings [+ + +]
Author: Reinette Chatre <reinette.chatre@intel.com>
Date:   Thu Oct 24 14:18:42 2024 -0700

    selftests/resctrl: Protect against array overflow when reading strings
    
    [ Upstream commit 46058430fc5d39c114f7e1b9c6ff14c9f41bd531 ]
    
    resctrl selftests discover system properties via a variety of sysfs files.
    The MBM and MBA tests need to discover the event and umask with which to
    configure the performance event used to measure read memory bandwidth.
    This is done by parsing the contents of
    /sys/bus/event_source/devices/uncore_imc_<imc instance>/events/cas_count_read
    Similarly, the resctrl selftests discover the cache size via
    /sys/bus/cpu/devices/cpu<id>/cache/index<index>/size.
    
    Take care to do bounds checking when using fscanf() to read the
    contents of files into a string buffer because by default fscanf() assumes
    arbitrarily long strings. If the file contains more bytes than the array
    can accommodate then an overflow will occur.
    
    Provide a maximum field width to the conversion specifier to protect
    against array overflow. The maximum is one less than the array size because
    string input stores a terminating null byte that is not covered by the
    maximum field width.
    
    Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests: hid: fix typo and exit code [+ + +]
Author: Maximilian Heyne <mheyne@amazon.de>
Date:   Tue Nov 26 13:58:50 2024 +0000

    selftests: hid: fix typo and exit code
    
    [ Upstream commit e8f34747bddedaf3895e5d5066e0f71713fff811 ]
    
    The correct exit code to mark a test as skipped is 4.
    
    Fixes: ffb85d5c9e80 ("selftests: hid: import hid-tools hid-core tests")
    Signed-off-by: Maximilian Heyne <mheyne@amazon.de>
    Link: https://patch.msgid.link/20241126135850.76493-1-mheyne@amazon.de
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
serial: 8250_dw: Add Sophgo SG2044 quirk [+ + +]
Author: Inochi Amaoto <inochiama@gmail.com>
Date:   Thu Oct 24 14:21:03 2024 +0800

    serial: 8250_dw: Add Sophgo SG2044 quirk
    
    [ Upstream commit cad4dda82c7eedcfc22597267e710ccbcf39d572 ]
    
    SG2044 relys on an internal divisor when calculating bitrate, which
    means a wrong clock for the most common bitrates. So add a quirk for
    this uart device to skip the set rate call and only relys on the
    internal UART divisor.
    
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Inochi Amaoto <inochiama@gmail.com>
    Link: https://lore.kernel.org/r/20241024062105.782330-4-inochiama@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: amba-pl011: fix build regression [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Fri Nov 15 11:59:54 2024 +0100

    serial: amba-pl011: fix build regression
    
    commit b5a23a60e8ab5711f4952912424347bf3864ce8d upstream.
    
    When CONFIG_DMA_ENGINE is disabled, the driver now fails to build:
    
    drivers/tty/serial/amba-pl011.c: In function 'pl011_unthrottle_rx':
    drivers/tty/serial/amba-pl011.c:1822:16: error: 'struct uart_amba_port' has no member named 'using_rx_dma'
     1822 |         if (uap->using_rx_dma) {
          |                ^~
    drivers/tty/serial/amba-pl011.c:1823:20: error: 'struct uart_amba_port' has no member named 'dmacr'
     1823 |                 uap->dmacr |= UART011_RXDMAE;
          |                    ^~
    drivers/tty/serial/amba-pl011.c:1824:32: error: 'struct uart_amba_port' has no member named 'dmacr'
     1824 |                 pl011_write(uap->dmacr, uap, REG_DMACR);
          |                                ^~
    
    Add the missing #ifdef check around these field accesses, matching
    what other parts of this driver do.
    
    Fixes: 2bcacc1c87ac ("serial: amba-pl011: Fix RX stall when DMA is used")
    Cc: stable <stable@kernel.org>
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202411140617.nkjeHhsK-lkp@intel.com/
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20241115110021.744332-1-arnd@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: amba-pl011: Fix RX stall when DMA is used [+ + +]
Author: Kartik Rajput <kkartik@nvidia.com>
Date:   Wed Nov 13 14:56:29 2024 +0530

    serial: amba-pl011: Fix RX stall when DMA is used
    
    [ Upstream commit 2bcacc1c87acf9a8ebc17de18cb2b3cfeca547cf ]
    
    Function pl011_throttle_rx() calls pl011_stop_rx() to disable RX, which
    also disables the RX DMA by clearing the RXDMAE bit of the DMACR
    register. However, to properly unthrottle RX when DMA is used, the
    function pl011_unthrottle_rx() is expected to set the RXDMAE bit of
    the DMACR register, which it currently lacks. This causes RX to stall
    after the throttle API is called.
    
    Set RXDMAE bit in the DMACR register while unthrottling RX if RX DMA is
    used.
    
    Fixes: 211565b10099 ("serial: pl011: UPSTAT_AUTORTS requires .throttle/unthrottle")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kartik Rajput <kkartik@nvidia.com>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Link: https://lore.kernel.org/r/20241113092629.60226-1-kkartik@nvidia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: amba-pl011: Use port lock wrappers [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Thu Sep 14 20:43:34 2023 +0206

    serial: amba-pl011: Use port lock wrappers
    
    [ Upstream commit 68ca3e72d7463d79d29b6e4961d6028df2a88e25 ]
    
    When a serial port is used for kernel console output, then all
    modifications to the UART registers which are done from other contexts,
    e.g. getty, termios, are interference points for the kernel console.
    
    So far this has been ignored and the printk output is based on the
    principle of hope. The rework of the console infrastructure which aims to
    support threaded and atomic consoles, requires to mark sections which
    modify the UART registers as unsafe. This allows the atomic write function
    to make informed decisions and eventually to restore operational state. It
    also allows to prevent the regular UART code from modifying UART registers
    while printk output is in progress.
    
    All modifications of UART registers are guarded by the UART port lock,
    which provides an obvious synchronization point with the console
    infrastructure.
    
    To avoid adding this functionality to all UART drivers, wrap the
    spin_[un]lock*() invocations for uart_port::lock into helper functions
    which just contain the spin_[un]lock*() invocations for now. In a
    subsequent step these helpers will gain the console synchronization
    mechanisms.
    
    Converted with coccinelle. No functional change.
    
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: John Ogness <john.ogness@linutronix.de>
    Link: https://lore.kernel.org/r/20230914183831.587273-18-john.ogness@linutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 2bcacc1c87ac ("serial: amba-pl011: Fix RX stall when DMA is used")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
setlocalversion: work around "git describe" performance [+ + +]
Author: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Date:   Mon Nov 18 12:01:54 2024 +0100

    setlocalversion: work around "git describe" performance
    
    [ Upstream commit 523f3dbc187a9618d4fd80c2b438e4d490705dcd ]
    
    Contrary to expectations, passing a single candidate tag to "git
    describe" is slower than not passing any --match options.
    
      $ time git describe --debug
      ...
      traversed 10619 commits
      ...
      v6.12-rc5-63-g0fc810ae3ae1
    
      real    0m0.169s
    
      $ time git describe --match=v6.12-rc5 --debug
      ...
      traversed 1310024 commits
      v6.12-rc5-63-g0fc810ae3ae1
    
      real    0m1.281s
    
    In fact, the --debug output shows that git traverses all or most of
    history. For some repositories and/or git versions, those 1.3s are
    actually 10-15 seconds.
    
    This has been acknowledged as a performance bug in git [1], and a fix
    is on its way [2]. However, no solution is yet in git.git, and even
    when one lands, it will take quite a while before it finds its way to
    a release and for $random_kernel_developer to pick that up.
    
    So rewrite the logic to use plumbing commands. For each of the
    candidate values of $tag, we ask: (1) is $tag even an annotated
    tag? (2) Is it eligible to describe HEAD, i.e. an ancestor of
    HEAD? (3) If so, how many commits are in $tag..HEAD?
    
    I have tested that this produces the same output as the current script
    for ~700 random commits between v6.9..v6.10. For those 700 commits,
    and in my git repo, the 'make -s kernelrelease' command is on average
    ~4 times faster with this patch applied (geometric mean of ratios).
    
    For the commit mentioned in Josh's original report [3], the
    time-consuming part of setlocalversion goes from
    
    $ time git describe --match=v6.12-rc5 c1e939a21eb1
    v6.12-rc5-44-gc1e939a21eb1
    
    real    0m1.210s
    
    to
    
    $ time git rev-list --count --left-right v6.12-rc5..c1e939a21eb1
    0       44
    
    real    0m0.037s
    
    [1] https://lore.kernel.org/git/20241101113910.GA2301440@coredump.intra.peff.net/
    [2] https://lore.kernel.org/git/20241106192236.GC880133@coredump.intra.peff.net/
    [3] https://lore.kernel.org/lkml/309549cafdcfe50c4fceac3263220cc3d8b109b2.1730337435.git.jpoimboe@kernel.org/
    
    Reported-by: Sean Christopherson <seanjc@google.com>
    Closes: https://lore.kernel.org/lkml/ZPtlxmdIJXOe0sEy@google.com/
    Reported-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Closes: https://lore.kernel.org/lkml/309549cafdcfe50c4fceac3263220cc3d8b109b2.1730337435.git.jpoimboe@kernel.org/
    Tested-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
smb3.1.1: fix posix mounts to older servers [+ + +]
Author: Steve French <stfrench@microsoft.com>
Date:   Wed Dec 4 17:46:00 2024 -0600

    smb3.1.1: fix posix mounts to older servers
    
    commit ddca5023091588eb303e3c0097d95c325992d05f upstream.
    
    Some servers which implement the SMB3.1.1 POSIX extensions did not
    set the file type in the mode in the infolevel 100 response.
    With the recent changes for checking the file type via the mode field,
    this can cause the root directory to be reported incorrectly and
    mounts (e.g. to ksmbd) to fail.
    
    Fixes: 6a832bc8bbb2 ("fs/smb/client: Implement new SMB3 POSIX type")
    Cc: stable@vger.kernel.org
    Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
    Cc: Ralph Boehme <slow@samba.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
smb: client: don't try following DFS links in cifs_tree_connect() [+ + +]
Author: Paulo Alcantara <pc@manguebit.com>
Date:   Tue Nov 26 15:55:53 2024 -0300

    smb: client: don't try following DFS links in cifs_tree_connect()
    
    [ Upstream commit 36008fe6e3dc588e5e9ceae6e82c7f69399eb5d8 ]
    
    We can't properly support chasing DFS links in cifs_tree_connect()
    because
    
      (1) We don't support creating new sessions while we're reconnecting,
          which would be required for DFS interlinks.
    
      (2) ->is_path_accessible() can't be called from cifs_tree_connect()
         as it would deadlock with smb2_reconnect().  This is required for
         checking if new DFS target is a nested DFS link.
    
    By unconditionally trying to get an DFS referral from new DFS target
    isn't correct because if the new DFS target (interlink) is an DFS
    standalone namespace, then we would end up getting -ELOOP and then
    potentially leaving tcon disconnected.
    
    Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

smb: client: memcpy() with surrounding object base address [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Sun Nov 17 03:32:09 2024 -0800

    smb: client: memcpy() with surrounding object base address
    
    [ Upstream commit f69b0187f8745a7a9584f6b13f5e792594b88b2e ]
    
    Like commit f1f047bd7ce0 ("smb: client: Fix -Wstringop-overflow issues"),
    adjust the memcpy() destination address to be based off the surrounding
    object rather than based off the 4-byte "Protocol" member. This avoids a
    build-time warning when compiling under CONFIG_FORTIFY_SOURCE with GCC 15:
    
    In function 'fortify_memcpy_chk',
        inlined from 'CIFSSMBSetPathInfo' at ../fs/smb/client/cifssmb.c:5358:2:
    ../include/linux/fortify-string.h:571:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning]
      571 |                         __write_overflow_field(p_size_field, size);
          |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Signed-off-by: Kees Cook <kees@kernel.org>
    Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
soc/fsl: cpm: qmc: Convert to platform remove callback returning void [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date:   Mon Sep 25 11:54:57 2023 +0200

    soc/fsl: cpm: qmc: Convert to platform remove callback returning void
    
    [ Upstream commit 14914a115e807aa2f8025e451133627a64120ac3 ]
    
    The .remove() callback for a platform driver returns an int which makes
    many driver authors wrongly assume it's possible to do error handling by
    returning an error code. However the value returned is ignored (apart
    from emitting a warning) and this typically results in resource leaks.
    To improve here there is a quest to make the remove callback return
    void. In the first step of this quest all drivers are converted to
    .remove_new() which already returns void. Eventually after all drivers
    are converted, .remove_new() will be renamed to .remove().
    
    Trivially convert this driver from always returning zero in the remove
    callback to the void returning variant.
    
    Acked-by: Herve Codina <herve.codina@bootlin.com>
    Link: https://lore.kernel.org/r/20230925095532.1984344-7-u.kleine-koenig@pengutronix.de
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Stable-dep-of: cb3daa51db81 ("soc: fsl: cpm1: qmc: Set the ret error code on platform_get_irq() failure")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
soc: fsl: cpm1: qmc: Fix blank line and spaces [+ + +]
Author: Herve Codina <herve.codina@bootlin.com>
Date:   Thu Aug 8 09:11:12 2024 +0200

    soc: fsl: cpm1: qmc: Fix blank line and spaces
    
    [ Upstream commit f06ab938bcddcb3c3a0b458b03a827c701919c9e ]
    
    checkpatch.pl raises the following issues
      CHECK: Please don't use multiple blank lines
      CHECK: Alignment should match open parenthesis
    
    Fix them.
    
    Signed-off-by: Herve Codina <herve.codina@bootlin.com>
    Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Link: https://lore.kernel.org/r/20240808071132.149251-20-herve.codina@bootlin.com
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Stable-dep-of: cb3daa51db81 ("soc: fsl: cpm1: qmc: Set the ret error code on platform_get_irq() failure")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

soc: fsl: cpm1: qmc: Introduce qmc_init_resource() and its CPM1 version [+ + +]
Author: Herve Codina <herve.codina@bootlin.com>
Date:   Thu Aug 8 09:11:19 2024 +0200

    soc: fsl: cpm1: qmc: Introduce qmc_init_resource() and its CPM1 version
    
    [ Upstream commit 727b3ab490a5f5e74fb3f246c9fdfb339d309950 ]
    
    Current code handles the CPM1 version of QMC. Resources initialisations
    (i.e. retrieving base addresses and offsets of different parts) will
    be slightly different in the QUICC Engine (QE) version. Indeed, in QE
    version, some resources need to be allocated and are no more "staticaly"
    defined.
    
    In order to prepare the support for QE version, introduce
    qmc_init_resource() to initialize those resources and isolate the CPM1
    specific operations in a specific function.
    
    Signed-off-by: Herve Codina <herve.codina@bootlin.com>
    Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Link: https://lore.kernel.org/r/20240808071132.149251-27-herve.codina@bootlin.com
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Stable-dep-of: cb3daa51db81 ("soc: fsl: cpm1: qmc: Set the ret error code on platform_get_irq() failure")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

soc: fsl: cpm1: qmc: Introduce qmc_{init,exit}_xcc() and their CPM1 version [+ + +]
Author: Herve Codina <herve.codina@bootlin.com>
Date:   Thu Aug 8 09:11:20 2024 +0200

    soc: fsl: cpm1: qmc: Introduce qmc_{init,exit}_xcc() and their CPM1 version
    
    [ Upstream commit de5fdb7d14b34f7fea930f2d72cf0241ec679e72 ]
    
    Current code handles the CPM1 version of QMC and initialize the QMC used
    SCC. The QUICC Engine (QE) version uses an UCC (Unified Communication
    Controllers) instead of the SCC (Serial Communication Controllers) used
    in the CPM1 version. These controllers serve the same purpose and are
    used in the same way but their inializations are slightly different.
    
    In order to prepare the support for QE version of QMC, introduce
    qmc_init_xcc() to initialize theses controllers (UCC in QE and SCC in
    CPM1) and isolate the CPM1 specific SCC initialization in a specific
    function.
    
    Also introduce qmc_exit_xcc() for consistency to revert operations done
    in qmc_init_xcc().
    
    Signed-off-by: Herve Codina <herve.codina@bootlin.com>
    Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Link: https://lore.kernel.org/r/20240808071132.149251-28-herve.codina@bootlin.com
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Stable-dep-of: cb3daa51db81 ("soc: fsl: cpm1: qmc: Set the ret error code on platform_get_irq() failure")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

soc: fsl: cpm1: qmc: Re-order probe() operations [+ + +]
Author: Herve Codina <herve.codina@bootlin.com>
Date:   Thu Aug 8 09:11:18 2024 +0200

    soc: fsl: cpm1: qmc: Re-order probe() operations
    
    [ Upstream commit a13bf605342ea9df492b8159cadaa41862b53e15 ]
    
    Current code handles CPM1 version of QMC. In the QUICC Engine (QE)
    version, some operations done at probe() need to be done in a different
    order.
    
    In order to prepare the support for the QE version, changed the sequence
    of operation done at probe():
    - Retrieve the tsa_serial earlier, before initializing resources.
    - Group SCC initialisation and do this initialization when it is really
      needed in the probe() sequence.
    
    Having the QE compatible sequence in the CPM1 version does not lead to
    any issue and works correctly without any regressions.
    
    Signed-off-by: Herve Codina <herve.codina@bootlin.com>
    Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Link: https://lore.kernel.org/r/20240808071132.149251-26-herve.codina@bootlin.com
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Stable-dep-of: cb3daa51db81 ("soc: fsl: cpm1: qmc: Set the ret error code on platform_get_irq() failure")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

soc: fsl: cpm1: qmc: Set the ret error code on platform_get_irq() failure [+ + +]
Author: Herve Codina <herve.codina@bootlin.com>
Date:   Tue Nov 5 15:56:23 2024 +0100

    soc: fsl: cpm1: qmc: Set the ret error code on platform_get_irq() failure
    
    [ Upstream commit cb3daa51db819a172e9524e96e2ed96b4237e51a ]
    
    A kernel test robot detected a missing error code:
       qmc.c:1942 qmc_probe() warn: missing error code 'ret'
    
    Indeed, the error returned by platform_get_irq() is checked and the
    operation is aborted in case of failure but the ret error code is
    not set in that case.
    
    Set the ret error code.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Closes: https://lore.kernel.org/r/202411051350.KNy6ZIWA-lkp@intel.com/
    Fixes: 3178d58e0b97 ("soc: fsl: cpm1: Add support for QMC")
    Cc: stable@vger.kernel.org
    Signed-off-by: Herve Codina <herve.codina@bootlin.com>
    Link: https://lore.kernel.org/r/20241105145623.401528-1-herve.codina@bootlin.com
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

soc: imx8m: Probe the SoC driver as platform driver [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Sun Sep 29 20:49:16 2024 +0200

    soc: imx8m: Probe the SoC driver as platform driver
    
    [ Upstream commit 9cc832d37799dbea950c4c8a34721b02b8b5a8ff ]
    
    With driver_async_probe=* on kernel command line, the following trace is
    produced because on i.MX8M Plus hardware because the soc-imx8m.c driver
    calls of_clk_get_by_name() which returns -EPROBE_DEFER because the clock
    driver is not yet probed. This was not detected during regular testing
    without driver_async_probe.
    
    Convert the SoC code to platform driver and instantiate a platform device
    in its current device_initcall() to probe the platform driver. Rework
    .soc_revision callback to always return valid error code and return SoC
    revision via parameter. This way, if anything in the .soc_revision callback
    return -EPROBE_DEFER, it gets propagated to .probe and the .probe will get
    retried later.
    
    "
    ------------[ cut here ]------------
    WARNING: CPU: 1 PID: 1 at drivers/soc/imx/soc-imx8m.c:115 imx8mm_soc_revision+0xdc/0x180
    CPU: 1 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.11.0-next-20240924-00002-g2062bb554dea #603
    Hardware name: DH electronics i.MX8M Plus DHCOM Premium Developer Kit (3) (DT)
    pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : imx8mm_soc_revision+0xdc/0x180
    lr : imx8mm_soc_revision+0xd0/0x180
    sp : ffff8000821fbcc0
    x29: ffff8000821fbce0 x28: 0000000000000000 x27: ffff800081810120
    x26: ffff8000818a9970 x25: 0000000000000006 x24: 0000000000824311
    x23: ffff8000817f42c8 x22: ffff0000df8be210 x21: fffffffffffffdfb
    x20: ffff800082780000 x19: 0000000000000001 x18: ffffffffffffffff
    x17: ffff800081fff418 x16: ffff8000823e1000 x15: ffff0000c03b65e8
    x14: ffff0000c00051b0 x13: ffff800082790000 x12: 0000000000000801
    x11: ffff80008278ffff x10: ffff80008209d3a6 x9 : ffff80008062e95c
    x8 : ffff8000821fb9a0 x7 : 0000000000000000 x6 : 00000000000080e3
    x5 : ffff0000df8c03d8 x4 : 0000000000000000 x3 : 0000000000000000
    x2 : 0000000000000000 x1 : fffffffffffffdfb x0 : fffffffffffffdfb
    Call trace:
     imx8mm_soc_revision+0xdc/0x180
     imx8_soc_init+0xb0/0x1e0
     do_one_initcall+0x94/0x1a8
     kernel_init_freeable+0x240/0x2a8
     kernel_init+0x28/0x140
     ret_from_fork+0x10/0x20
    ---[ end trace 0000000000000000 ]---
    SoC: i.MX8MP revision 1.1
    "
    
    Signed-off-by: Marek Vasut <marex@denx.de>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
spi: mpc52xx: Add cancel_work_sync before module remove [+ + +]
Author: Pei Xiao <xiaopei01@kylinos.cn>
Date:   Thu Nov 28 16:38:17 2024 +0800

    spi: mpc52xx: Add cancel_work_sync before module remove
    
    [ Upstream commit 984836621aad98802d92c4a3047114cf518074c8 ]
    
    If we remove the module which will call mpc52xx_spi_remove
    it will free 'ms' through spi_unregister_controller.
    while the work ms->work will be used. The sequence of operations
    that may lead to a UAF bug.
    
    Fix it by ensuring that the work is canceled before proceeding with
    the cleanup in mpc52xx_spi_remove.
    
    Fixes: ca632f556697 ("spi: reorganize drivers")
    Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
    Link: https://patch.msgid.link/1f16f8ae0e50ca9adb1dc849bf2ac65a40c9ceb9.1732783000.git.xiaopei01@kylinos.cn
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: spi-fsl-lpspi: Adjust type of scldiv [+ + +]
Author: Stefan Wahren <wahrenst@gmx.net>
Date:   Mon Sep 30 11:30:54 2024 +0200

    spi: spi-fsl-lpspi: Adjust type of scldiv
    
    [ Upstream commit fa8ecda9876ac1e7b29257aa82af1fd0695496e2 ]
    
    The target value of scldiv is just a byte, but its calculation in
    fsl_lpspi_set_bitrate could be negative. So use an adequate type to store
    the result and avoid overflows. After that this needs range check
    adjustments, but this should make the code less opaque.
    
    Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20240930093056.93418-2-wahrenst@gmx.net
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tcp_bpf: Fix the sk_mem_uncharge logic in tcp_bpf_sendmsg [+ + +]
Author: Zijian Zhang <zijianzhang@bytedance.com>
Date:   Wed Oct 16 23:48:38 2024 +0000

    tcp_bpf: Fix the sk_mem_uncharge logic in tcp_bpf_sendmsg
    
    [ Upstream commit ca70b8baf2bd125b2a4d96e76db79375c07d7ff2 ]
    
    The current sk memory accounting logic in __SK_REDIRECT is pre-uncharging
    tosend bytes, which is either msg->sg.size or a smaller value apply_bytes.
    
    Potential problems with this strategy are as follows:
    
    - If the actual sent bytes are smaller than tosend, we need to charge some
      bytes back, as in line 487, which is okay but seems not clean.
    
    - When tosend is set to apply_bytes, as in line 417, and (ret < 0), we may
      miss uncharging (msg->sg.size - apply_bytes) bytes.
    
    [...]
    415 tosend = msg->sg.size;
    416 if (psock->apply_bytes && psock->apply_bytes < tosend)
    417   tosend = psock->apply_bytes;
    [...]
    443 sk_msg_return(sk, msg, tosend);
    444 release_sock(sk);
    446 origsize = msg->sg.size;
    447 ret = tcp_bpf_sendmsg_redir(sk_redir, redir_ingress,
    448                             msg, tosend, flags);
    449 sent = origsize - msg->sg.size;
    [...]
    454 lock_sock(sk);
    455 if (unlikely(ret < 0)) {
    456   int free = sk_msg_free_nocharge(sk, msg);
    458   if (!cork)
    459     *copied -= free;
    460 }
    [...]
    487 if (eval == __SK_REDIRECT)
    488   sk_mem_charge(sk, tosend - sent);
    [...]
    
    When running the selftest test_txmsg_redir_wait_sndmem with txmsg_apply,
    the following warning will be reported:
    
    ------------[ cut here ]------------
    WARNING: CPU: 6 PID: 57 at net/ipv4/af_inet.c:156 inet_sock_destruct+0x190/0x1a0
    Modules linked in:
    CPU: 6 UID: 0 PID: 57 Comm: kworker/6:0 Not tainted 6.12.0-rc1.bm.1-amd64+ #43
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
    Workqueue: events sk_psock_destroy
    RIP: 0010:inet_sock_destruct+0x190/0x1a0
    RSP: 0018:ffffad0a8021fe08 EFLAGS: 00010206
    RAX: 0000000000000011 RBX: ffff9aab4475b900 RCX: ffff9aab481a0800
    RDX: 0000000000000303 RSI: 0000000000000011 RDI: ffff9aab4475b900
    RBP: ffff9aab4475b990 R08: 0000000000000000 R09: ffff9aab40050ec0
    R10: 0000000000000000 R11: ffff9aae6fdb1d01 R12: ffff9aab49c60400
    R13: ffff9aab49c60598 R14: ffff9aab49c60598 R15: dead000000000100
    FS:  0000000000000000(0000) GS:ffff9aae6fd80000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007ffec7e47bd8 CR3: 00000001a1a1c004 CR4: 0000000000770ef0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    PKRU: 55555554
    Call Trace:
    <TASK>
    ? __warn+0x89/0x130
    ? inet_sock_destruct+0x190/0x1a0
    ? report_bug+0xfc/0x1e0
    ? handle_bug+0x5c/0xa0
    ? exc_invalid_op+0x17/0x70
    ? asm_exc_invalid_op+0x1a/0x20
    ? inet_sock_destruct+0x190/0x1a0
    __sk_destruct+0x25/0x220
    sk_psock_destroy+0x2b2/0x310
    process_scheduled_works+0xa3/0x3e0
    worker_thread+0x117/0x240
    ? __pfx_worker_thread+0x10/0x10
    kthread+0xcf/0x100
    ? __pfx_kthread+0x10/0x10
    ret_from_fork+0x31/0x40
    ? __pfx_kthread+0x10/0x10
    ret_from_fork_asm+0x1a/0x30
    </TASK>
    ---[ end trace 0000000000000000 ]---
    
    In __SK_REDIRECT, a more concise way is delaying the uncharging after sent
    bytes are finalized, and uncharge this value. When (ret < 0), we shall
    invoke sk_msg_free.
    
    Same thing happens in case __SK_DROP, when tosend is set to apply_bytes,
    we may miss uncharging (msg->sg.size - apply_bytes) bytes. The same
    warning will be reported in selftest.
    
    [...]
    468 case __SK_DROP:
    469 default:
    470 sk_msg_free_partial(sk, msg, tosend);
    471 sk_msg_apply_bytes(psock, tosend);
    472 *copied -= (tosend + delta);
    473 return -EACCES;
    [...]
    
    So instead of sk_msg_free_partial we can do sk_msg_free here.
    
    Fixes: 604326b41a6f ("bpf, sockmap: convert to generic sk_msg interface")
    Fixes: 8ec95b94716a ("bpf, sockmap: Fix the sk->sk_forward_alloc warning of sk_stream_kill_queues")
    Signed-off-by: Zijian Zhang <zijianzhang@bytedance.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/20241016234838.3167769-3-zijianzhang@bytedance.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
thermal/drivers/qcom/tsens-v1: Add support for MSM8937 tsens [+ + +]
Author: Barnabás Czémán <barnabas.czeman@mainlining.org>
Date:   Wed Nov 13 16:11:46 2024 +0100

    thermal/drivers/qcom/tsens-v1: Add support for MSM8937 tsens
    
    [ Upstream commit e2ffb6c3a40ee714160e35e61f0a984028b5d550 ]
    
    Add support for tsens v1.4 block what can be found in
    MSM8937 and MSM8917.
    
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org>
    Link: https://lore.kernel.org/r/20241113-msm8917-v6-5-c348fb599fef@mainlining.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tipc: Fix use-after-free of kernel socket in cleanup_bearer(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Wed Nov 27 14:05:12 2024 +0900

    tipc: Fix use-after-free of kernel socket in cleanup_bearer().
    
    [ Upstream commit 6a2fa13312e51a621f652d522d7e2df7066330b6 ]
    
    syzkaller reported a use-after-free of UDP kernel socket
    in cleanup_bearer() without repro. [0][1]
    
    When bearer_disable() calls tipc_udp_disable(), cleanup
    of the UDP kernel socket is deferred by work calling
    cleanup_bearer().
    
    tipc_net_stop() waits for such works to finish by checking
    tipc_net(net)->wq_count.  However, the work decrements the
    count too early before releasing the kernel socket,
    unblocking cleanup_net() and resulting in use-after-free.
    
    Let's move the decrement after releasing the socket in
    cleanup_bearer().
    
    [0]:
    ref_tracker: net notrefcnt@000000009b3d1faf has 1/1 users at
         sk_alloc+0x438/0x608
         inet_create+0x4c8/0xcb0
         __sock_create+0x350/0x6b8
         sock_create_kern+0x58/0x78
         udp_sock_create4+0x68/0x398
         udp_sock_create+0x88/0xc8
         tipc_udp_enable+0x5e8/0x848
         __tipc_nl_bearer_enable+0x84c/0xed8
         tipc_nl_bearer_enable+0x38/0x60
         genl_family_rcv_msg_doit+0x170/0x248
         genl_rcv_msg+0x400/0x5b0
         netlink_rcv_skb+0x1dc/0x398
         genl_rcv+0x44/0x68
         netlink_unicast+0x678/0x8b0
         netlink_sendmsg+0x5e4/0x898
         ____sys_sendmsg+0x500/0x830
    
    [1]:
    BUG: KMSAN: use-after-free in udp_hashslot include/net/udp.h:85 [inline]
    BUG: KMSAN: use-after-free in udp_lib_unhash+0x3b8/0x930 net/ipv4/udp.c:1979
     udp_hashslot include/net/udp.h:85 [inline]
     udp_lib_unhash+0x3b8/0x930 net/ipv4/udp.c:1979
     sk_common_release+0xaf/0x3f0 net/core/sock.c:3820
     inet_release+0x1e0/0x260 net/ipv4/af_inet.c:437
     inet6_release+0x6f/0xd0 net/ipv6/af_inet6.c:489
     __sock_release net/socket.c:658 [inline]
     sock_release+0xa0/0x210 net/socket.c:686
     cleanup_bearer+0x42d/0x4c0 net/tipc/udp_media.c:819
     process_one_work kernel/workqueue.c:3229 [inline]
     process_scheduled_works+0xcaf/0x1c90 kernel/workqueue.c:3310
     worker_thread+0xf6c/0x1510 kernel/workqueue.c:3391
     kthread+0x531/0x6b0 kernel/kthread.c:389
     ret_from_fork+0x60/0x80 arch/x86/kernel/process.c:147
     ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:244
    
    Uninit was created at:
     slab_free_hook mm/slub.c:2269 [inline]
     slab_free mm/slub.c:4580 [inline]
     kmem_cache_free+0x207/0xc40 mm/slub.c:4682
     net_free net/core/net_namespace.c:454 [inline]
     cleanup_net+0x16f2/0x19d0 net/core/net_namespace.c:647
     process_one_work kernel/workqueue.c:3229 [inline]
     process_scheduled_works+0xcaf/0x1c90 kernel/workqueue.c:3310
     worker_thread+0xf6c/0x1510 kernel/workqueue.c:3391
     kthread+0x531/0x6b0 kernel/kthread.c:389
     ret_from_fork+0x60/0x80 arch/x86/kernel/process.c:147
     ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:244
    
    CPU: 0 UID: 0 PID: 54 Comm: kworker/0:2 Not tainted 6.12.0-rc1-00131-gf66ebf37d69c #7 91723d6f74857f70725e1583cba3cf4adc716cfa
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
    Workqueue: events cleanup_bearer
    
    Fixes: 26abe14379f8 ("net: Modify sk_alloc to not reference count the netns of kernel sockets.")
    Reported-by: syzkaller <syzkaller@googlegroups.com>
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20241127050512.28438-1-kuniyu@amazon.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tools/rtla: fix collision with glibc sched_attr/sched_set_attr [+ + +]
Author: Jan Stancek <jstancek@redhat.com>
Date:   Thu Oct 10 17:09:48 2024 +0200

    tools/rtla: fix collision with glibc sched_attr/sched_set_attr
    
    [ Upstream commit 0eecee340672c4b512f6f4a8c6add26df05d130c ]
    
    glibc commit 21571ca0d703 ("Linux: Add the sched_setattr
    and sched_getattr functions") now also provides 'struct sched_attr'
    and sched_setattr() which collide with the ones from rtla.
    
      In file included from src/trace.c:11:
      src/utils.h:49:8: error: redefinition of ‘struct sched_attr’
         49 | struct sched_attr {
            |        ^~~~~~~~~~
      In file included from /usr/include/bits/sched.h:60,
                       from /usr/include/sched.h:43,
                       from /usr/include/tracefs/tracefs.h:10,
                       from src/trace.c:4:
      /usr/include/linux/sched/types.h:98:8: note: originally defined here
         98 | struct sched_attr {
            |        ^~~~~~~~~~
    
    Define 'struct sched_attr' conditionally, similar to what strace did:
      https://lore.kernel.org/all/20240930222913.3981407-1-raj.khem@gmail.com/
    and rename rtla's version of sched_setattr() to avoid collision.
    
    Link: https://lore.kernel.org/8088f66a7a57c1b209cd8ae0ae7c336a7f8c930d.1728572865.git.jstancek@redhat.com
    Signed-off-by: Jan Stancek <jstancek@redhat.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tools: Override makefile ARCH variable if defined, but empty [+ + +]
Author: Björn Töpel <bjorn@rivosinc.com>
Date:   Wed Nov 27 11:17:46 2024 +0100

    tools: Override makefile ARCH variable if defined, but empty
    
    [ Upstream commit 537a2525eaf76ea9b0dca62b994500d8670b39d5 ]
    
    There are a number of tools (bpftool, selftests), that require a
    "bootstrap" build. Here, a bootstrap build is a build host variant of
    a target. E.g., assume that you're performing a bpftool cross-build on
    x86 to riscv, a bootstrap build would then be an x86 variant of
    bpftool. The typical way to perform the host build variant, is to pass
    "ARCH=" in a sub-make. However, if a variable has been set with a
    command argument, then ordinary assignments in the makefile are
    ignored.
    
    This side-effect results in that ARCH, and variables depending on ARCH
    are not set. Workaround by overriding ARCH to the host arch, if ARCH
    is empty.
    
    Fixes: 8859b0da5aac ("tools/bpftool: Fix cross-build")
    Signed-off-by: Björn Töpel <bjorn@rivosinc.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Tested-by: Alexandre Ghiti <alexghiti@rivosinc.com>
    Reviewed-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
    Reviewed-by: Namhyung Kim <namhyung@kernel.org>
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Acked-by: Quentin Monnet <qmo@kernel.org>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Link: https://lore.kernel.org/bpf/20241127101748.165693-1-bjorn@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing/eprobe: Fix to release eprobe when failed to add dyn_event [+ + +]
Author: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Date:   Sat Nov 30 01:47:47 2024 +0900

    tracing/eprobe: Fix to release eprobe when failed to add dyn_event
    
    [ Upstream commit 494b332064c0ce2f7392fa92632bc50191c1b517 ]
    
    Fix eprobe event to unregister event call and release eprobe when it fails
    to add dynamic event correctly.
    
    Link: https://lore.kernel.org/all/173289886698.73724.1959899350183686006.stgit@devnote2/
    
    Fixes: 7491e2c44278 ("tracing: Add a probe that attaches to trace events")
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing/ftrace: disable preemption in syscall probe [+ + +]
Author: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Date:   Tue Oct 8 21:07:12 2024 -0400

    tracing/ftrace: disable preemption in syscall probe
    
    [ Upstream commit 13d750c2c03e9861e15268574ed2c239cca9c9d5 ]
    
    In preparation for allowing system call enter/exit instrumentation to
    handle page faults, make sure that ftrace can handle this change by
    explicitly disabling preemption within the ftrace system call tracepoint
    probes to respect the current expectations within ftrace ring buffer
    code.
    
    This change does not yet allow ftrace to take page faults per se within
    its probe, but allows its existing probes to adapt to the upcoming
    change.
    
    Cc: Michael Jeanson <mjeanson@efficios.com>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Yonghong Song <yhs@fb.com>
    Cc: Paul E. McKenney <paulmck@kernel.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com>
    Cc: bpf@vger.kernel.org
    Cc: Joel Fernandes <joel@joelfernandes.org>
    Link: https://lore.kernel.org/20241009010718.2050182-3-mathieu.desnoyers@efficios.com
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing: Fix cmp_entries_dup() to respect sort() comparison rules [+ + +]
Author: Kuan-Wei Chiu <visitorckw@gmail.com>
Date:   Wed Dec 4 04:22:28 2024 +0800

    tracing: Fix cmp_entries_dup() to respect sort() comparison rules
    
    commit e63fbd5f6810ed756bbb8a1549c7d4132968baa9 upstream.
    
    The cmp_entries_dup() function used as the comparator for sort()
    violated the symmetry and transitivity properties required by the
    sorting algorithm. Specifically, it returned 1 whenever memcmp() was
    non-zero, which broke the following expectations:
    
    * Symmetry: If x < y, then y > x.
    * Transitivity: If x < y and y < z, then x < z.
    
    These violations could lead to incorrect sorting and failure to
    correctly identify duplicate elements.
    
    Fix the issue by directly returning the result of memcmp(), which
    adheres to the required comparison properties.
    
    Cc: stable@vger.kernel.org
    Fixes: 08d43a5fa063 ("tracing: Add lock-free tracing_map")
    Link: https://lore.kernel.org/20241203202228.1274403-1-visitorckw@gmail.com
    Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing: Use atomic64_inc_return() in trace_clock_counter() [+ + +]
Author: Uros Bizjak <ubizjak@gmail.com>
Date:   Mon Oct 7 10:56:28 2024 +0200

    tracing: Use atomic64_inc_return() in trace_clock_counter()
    
    [ Upstream commit eb887c4567d1b0e7684c026fe7df44afa96589e6 ]
    
    Use atomic64_inc_return(&ref) instead of atomic64_add_return(1, &ref)
    to use optimized implementation and ease register pressure around
    the primitive for targets that implement optimized variant.
    
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://lore.kernel.org/20241007085651.48544-1-ubizjak@gmail.com
    Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
usb: chipidea: udc: handle USB Error Interrupt if IOC not set [+ + +]
Author: Xu Yang <xu.yang_2@nxp.com>
Date:   Thu Sep 26 10:29:04 2024 +0800

    usb: chipidea: udc: handle USB Error Interrupt if IOC not set
    
    [ Upstream commit 548f48b66c0c5d4b9795a55f304b7298cde2a025 ]
    
    As per USBSTS register description about UEI:
    
      When completion of a USB transaction results in an error condition, this
      bit is set by the Host/Device Controller. This bit is set along with the
      USBINT bit, if the TD on which the error interrupt occurred also had its
      interrupt on complete (IOC) bit set.
    
    UI is set only when IOC set. Add checking UEI to fix miss call
    isr_tr_complete_handler() when IOC have not set and transfer error happen.
    
    Acked-by: Peter Chen <peter.chen@kernel.com>
    Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
    Link: https://lore.kernel.org/r/20240926022906.473319-1-xu.yang_2@nxp.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: dwc3: ep0: Don't clear ep0 DWC3_EP_TRANSFER_STARTED [+ + +]
Author: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Date:   Thu Nov 14 01:02:06 2024 +0000

    usb: dwc3: ep0: Don't clear ep0 DWC3_EP_TRANSFER_STARTED
    
    [ Upstream commit 5d2fb074dea289c41f5aaf2c3f68286bee370634 ]
    
    The driver cannot issue the End Transfer command to the SETUP transfer.
    Don't clear DWC3_EP_TRANSFER_STARTED flag to make sure that the driver
    won't send Start Transfer command again, which can cause no-resource
    error. For example this can occur if the host issues a reset to the
    device.
    
    Cc: stable@vger.kernel.org
    Fixes: 76cb323f80ac ("usb: dwc3: ep0: clear all EP0 flags")
    Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/d3d618185fd614bb7426352a9fc1199641d3b5f5.1731545781.git.Thinh.Nguyen@synopsys.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: dwc3: ep0: Don't reset resource alloc flag [+ + +]
Author: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Date:   Tue Apr 16 01:23:07 2024 +0000

    usb: dwc3: ep0: Don't reset resource alloc flag
    
    commit f2e0eee4703869dc5edb5302a919861566ca7797 upstream.
    
    The DWC3_EP_RESOURCE_ALLOCATED flag ensures that the resource of an
    endpoint is only assigned once. Unless the endpoint is reset, don't
    clear this flag. Otherwise we may set endpoint resource again, which
    prevents the driver from initiate transfer after handling a STALL or
    endpoint halt to the control endpoint.
    
    Cc: stable@vger.kernel.org
    Fixes: b311048c174d ("usb: dwc3: gadget: Rewrite endpoint allocation flow")
    Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/00122b7cc5be06abef461776e7cc9f5ebc8bc1cb.1713229786.git.Thinh.Nguyen@synopsys.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: dwc3: ep0: Don't reset resource alloc flag (including ep0) [+ + +]
Author: Michael Grzeschik <m.grzeschik@pengutronix.de>
Date:   Thu Aug 15 08:40:29 2024 +0200

    usb: dwc3: ep0: Don't reset resource alloc flag (including ep0)
    
    [ Upstream commit 72fca8371f205d654f95b09cd023a71fd5307041 ]
    
    The DWC3_EP_RESOURCE_ALLOCATED flag ensures that the resource of an
    endpoint is only assigned once. Unless the endpoint is reset, don't
    clear this flag. Otherwise we may set endpoint resource again, which
    prevents the driver from initiate transfer after handling a STALL or
    endpoint halt to the control endpoint.
    
    Commit f2e0eee47038 ("usb: dwc3: ep0: Don't reset resource alloc flag")
    was fixing the initial issue, but did this only for physical ep1. Since
    the function dwc3_ep0_stall_and_restart is resetting the flags for both
    physical endpoints, this also has to be done for ep0.
    
    Cc: stable@vger.kernel.org
    Fixes: b311048c174d ("usb: dwc3: gadget: Rewrite endpoint allocation flow")
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
    Link: https://lore.kernel.org/r/20240814-dwc3hwep0reset-v2-1-29e1d7d923ea@pengutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 5d2fb074dea2 ("usb: dwc3: ep0: Don't clear ep0 DWC3_EP_TRANSFER_STARTED")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: dwc3: gadget: Rewrite endpoint allocation flow [+ + +]
Author: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Date:   Thu Feb 1 02:26:53 2024 +0000

    usb: dwc3: gadget: Rewrite endpoint allocation flow
    
    [ Upstream commit b311048c174da893f47fc09439bc1f6fa2a29589 ]
    
    The driver dwc3 deviates from the programming guide in regard to
    endpoint configuration. It does this command sequence:
    
    DEPSTARTCFG -> DEPXFERCFG -> DEPCFG
    
    Instead of the suggested flow:
    
    DEPSTARTCFG -> DEPCFG -> DEPXFERCFG
    
    The reasons for this deviation were as follow, quoted:
    
            1) The databook says to do %DWC3_DEPCMD_DEPSTARTCFG for every
               %USB_REQ_SET_CONFIGURATION and %USB_REQ_SET_INTERFACE
               (8.1.5). This is incorrect in the scenario of multiple
               interfaces.
    
            2) The databook does not mention doing more
               %DWC3_DEPCMD_DEPXFERCFG for new endpoint on alt setting
               (8.1.6).
    
    Regarding 1), DEPSTARTCFG resets the endpoints' resource and can be a
    problem if used with SET_INTERFACE request of a multiple interface
    configuration. But we can still satisfy the programming guide
    requirement by assigning the endpoint resource as part of
    usb_ep_enable(). We will only reset endpoint resources on controller
    initialization and SET_CONFIGURATION request.
    
    Regarding 2), the later versions of the programming guide were updated
    to clarify this flow (see "Alternate Initialization on SetInterface
    Request" of the programming guide). As long as the platform has enough
    physical endpoints, we can assign resource to a new endpoint.
    
    The order of the command sequence will not be a problem to most
    platforms for the current implementation of the dwc3 driver. However,
    this order is required in different scenarios (such as initialization
    during controller's hibernation restore). Let's keep the flow consistent
    and follow the programming guide.
    
    Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/c143583a5afb087deb8c3aa5eb227ee23515f272.1706754219.git.Thinh.Nguyen@synopsys.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 5d2fb074dea2 ("usb: dwc3: ep0: Don't clear ep0 DWC3_EP_TRANSFER_STARTED")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
verification/dot2: Improve dot parser robustness [+ + +]
Author: Gabriele Monaco <gmonaco@redhat.com>
Date:   Thu Oct 17 08:42:39 2024 +0200

    verification/dot2: Improve dot parser robustness
    
    [ Upstream commit 571f8b3f866a6d990a50fe5c89fe0ea78784d70b ]
    
    This patch makes the dot parser used by dot2c and dot2k slightly more
    robust, namely:
    * allows parsing files with the gv extension (GraphViz)
    * correctly parses edges with any indentation
        * used to work only with a single character (e.g. '\t')
    Additionally it fixes a couple of warnings reported by pylint such as
    wrong indentation and comparison to False instead of `not ...`
    
    Link: https://lore.kernel.org/20241017064238.41394-2-gmonaco@redhat.com
    Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vfio/mlx5: Align the page tracking max message size with the device capability [+ + +]
Author: Yishai Hadas <yishaih@nvidia.com>
Date:   Thu Dec 5 14:26:54 2024 +0200

    vfio/mlx5: Align the page tracking max message size with the device capability
    
    [ Upstream commit 9c7c5430bca36e9636eabbba0b3b53251479c7ab ]
    
    Align the page tracking maximum message size with the device's
    capability instead of relying on PAGE_SIZE.
    
    This adjustment resolves a mismatch on systems where PAGE_SIZE is 64K,
    but the firmware only supports a maximum message size of 4K.
    
    Now that we rely on the device's capability for max_message_size, we
    must account for potential future increases in its value.
    
    Key considerations include:
    - Supporting message sizes that exceed a single system page (e.g., an 8K
      message on a 4K system).
    - Ensuring the RQ size is adjusted to accommodate at least 4
      WQEs/messages, in line with the device specification.
    
    The above has been addressed as part of the patch.
    
    Fixes: 79c3cf279926 ("vfio/mlx5: Init QP based resources for dirty tracking")
    Reviewed-by: Cédric Le Goater <clg@redhat.com>
    Tested-by: Yingshun Cui <yicui@redhat.com>
    Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
    Link: https://lore.kernel.org/r/20241205122654.235619-1-yishaih@nvidia.com
    Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
virtio-net: fix overflow inside virtnet_rq_alloc [+ + +]
Author: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Date:   Tue Oct 29 16:46:12 2024 +0800

    virtio-net: fix overflow inside virtnet_rq_alloc
    
    [ Upstream commit 6aacd1484468361d1d04badfe75f264fa5314864 ]
    
    When the frag just got a page, then may lead to regression on VM.
    Specially if the sysctl net.core.high_order_alloc_disable value is 1,
    then the frag always get a page when do refill.
    
    Which could see reliable crashes or scp failure (scp a file 100M in size
    to VM).
    
    The issue is that the virtnet_rq_dma takes up 16 bytes at the beginning
    of a new frag. When the frag size is larger than PAGE_SIZE,
    everything is fine. However, if the frag is only one page and the
    total size of the buffer and virtnet_rq_dma is larger than one page, an
    overflow may occur.
    
    The commit f9dac92ba908 ("virtio_ring: enable premapped mode whatever
    use_dma_api") introduced this problem. And we reverted some commits to
    fix this in last linux version. Now we try to enable it and fix this
    bug directly.
    
    Here, when the frag size is not enough, we reduce the buffer len to fix
    this problem.
    
    Reported-by: "Si-Wei Liu" <si-wei.liu@oracle.com>
    Tested-by: Darren Kenny <darren.kenny@oracle.com>
    Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
watchdog: apple: Actually flush writes after requesting watchdog restart [+ + +]
Author: Nick Chan <towinchenmi@gmail.com>
Date:   Wed Oct 2 00:59:51 2024 +0800

    watchdog: apple: Actually flush writes after requesting watchdog restart
    
    [ Upstream commit 51dfe714c03c066aabc815a2bb2adcc998dfcb30 ]
    
    Although there is an existing code comment about flushing the writes,
    writes were not actually being flushed.
    
    Actually flush the writes by changing readl_relaxed() to readl().
    
    Fixes: 4ed224aeaf661 ("watchdog: Add Apple SoC watchdog driver")
    Suggested-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Nick Chan <towinchenmi@gmail.com>
    Reviewed-by: Guenter Roeck  <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/20241001170018.20139-2-towinchenmi@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

watchdog: mediatek: Make sure system reset gets asserted in mtk_wdt_restart() [+ + +]
Author: Yassine Oudjana <y.oudjana@protonmail.com>
Date:   Wed Nov 6 10:47:51 2024 +0000

    watchdog: mediatek: Make sure system reset gets asserted in mtk_wdt_restart()
    
    [ Upstream commit a1495a21e0b8aad92132dfcf9c6fffc1bde9d5b2 ]
    
    Clear the IRQ enable bit of WDT_MODE before asserting software reset
    in order to make TOPRGU issue a system reset signal instead of an IRQ.
    
    Fixes: a44a45536f7b ("watchdog: Add driver for Mediatek watchdog")
    Signed-off-by: Yassine Oudjana <y.oudjana@protonmail.com>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/20241106104738.195968-2-y.oudjana@protonmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

watchdog: rti: of: honor timeout-sec property [+ + +]
Author: Alexander Sverdlin <alexander.sverdlin@siemens.com>
Date:   Thu Nov 7 21:38:28 2024 +0100

    watchdog: rti: of: honor timeout-sec property
    
    commit 4962ee045d8f06638714d801ab0fb72f89c16690 upstream.
    
    Currently "timeout-sec" Device Tree property is being silently ignored:
    even though watchdog_init_timeout() is being used, the driver always passes
    "heartbeat" == DEFAULT_HEARTBEAT == 60 as argument.
    
    Fix this by setting struct watchdog_device::timeout to DEFAULT_HEARTBEAT
    and passing real module parameter value to watchdog_init_timeout() (which
    may now be 0 if not specified).
    
    Cc: stable@vger.kernel.org
    Fixes: 2d63908bdbfb ("watchdog: Add K3 RTI watchdog support")
    Signed-off-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>
    Reviewed-by: Vignesh Raghavendra <vigneshr@ti.com>
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/20241107203830.1068456-1-alexander.sverdlin@siemens.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

watchdog: xilinx_wwdt: Calculate max_hw_heartbeat_ms using clock frequency [+ + +]
Author: Harini T <harini.t@amd.com>
Date:   Fri Sep 13 17:02:30 2024 +0530

    watchdog: xilinx_wwdt: Calculate max_hw_heartbeat_ms using clock frequency
    
    [ Upstream commit 006778844c2c132c28cfa90e3570560351e01b9a ]
    
    In the current implementation, the value of max_hw_heartbeat_ms is set
    to the timeout period expressed in milliseconds and fails to verify if
    the close window percentage exceeds the maximum value that the hardware
    supports.
    
    1. Calculate max_hw_heartbeat_ms based on input clock frequency.
    2. Update frequency check to require a minimum frequency of 1Mhz.
    3. Limit the close and open window percent to hardware supported value
    to avoid truncation.
    4. If the user input timeout exceeds the maximum timeout supported, use
    only open window and the framework supports the higher timeouts.
    
    Fixes: 12984cea1b8c ("watchdog: xilinx_wwdt: Add Versal window watchdog support")
    Signed-off-by: Harini T <harini.t@amd.com>
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/20240913113230.1939373-1-harini.t@amd.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
wifi: ath5k: add PCI ID for Arcadyan devices [+ + +]
Author: Rosen Penev <rosenp@gmail.com>
Date:   Mon Sep 30 11:07:16 2024 -0700

    wifi: ath5k: add PCI ID for Arcadyan devices
    
    [ Upstream commit f3ced9bb90b0a287a1fa6184d16b0f104a78fa90 ]
    
    Arcadyan made routers with this PCI ID containing an AR2417.
    
    Signed-off-by: Rosen Penev <rosenp@gmail.com>
    Link: https://patch.msgid.link/20240930180716.139894-3-rosenp@gmail.com
    Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath5k: add PCI ID for SX76X [+ + +]
Author: Rosen Penev <rosenp@gmail.com>
Date:   Mon Sep 30 11:07:15 2024 -0700

    wifi: ath5k: add PCI ID for SX76X
    
    [ Upstream commit da0474012402d4729b98799d71a54c35dc5c5de3 ]
    
    This is in two devices made by Gigaset, SX762 and SX763.
    
    Signed-off-by: Rosen Penev <rosenp@gmail.com>
    Link: https://patch.msgid.link/20240930180716.139894-2-rosenp@gmail.com
    Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: brcmfmac: Fix oops due to NULL pointer dereference in brcmf_sdiod_sglist_rw() [+ + +]
Author: Norbert van Bolhuis <nvbolhuis@gmail.com>
Date:   Thu Nov 7 14:28:13 2024 +0100

    wifi: brcmfmac: Fix oops due to NULL pointer dereference in brcmf_sdiod_sglist_rw()
    
    [ Upstream commit 857282b819cbaa0675aaab1e7542e2c0579f52d7 ]
    
    This patch fixes a NULL pointer dereference bug in brcmfmac that occurs
    when a high 'sd_sgentry_align' value applies (e.g. 512) and a lot of queued SKBs
    are sent from the pkt queue.
    
    The problem is the number of entries in the pre-allocated sgtable, it is
    nents = max(rxglom_size, txglom_size) + max(rxglom_size, txglom_size) >> 4 + 1.
    Given the default [rt]xglom_size=32 it's actually 35 which is too small.
    Worst case, the pkt queue can end up with 64 SKBs. This occurs when a new SKB
    is added for each original SKB if tailroom isn't enough to hold tail_pad.
    At least one sg entry is needed for each SKB. So, eventually the "skb_queue_walk loop"
    in brcmf_sdiod_sglist_rw may run out of sg entries. This makes sg_next return
    NULL and this causes the oops.
    
    The patch sets nents to max(rxglom_size, txglom_size) * 2 to be able handle
    the worst-case.
    Btw. this requires only 64-35=29 * 16 (or 20 if CONFIG_NEED_SG_DMA_LENGTH) = 464
    additional bytes of memory.
    
    Signed-off-by: Norbert van Bolhuis <nvbolhuis@gmail.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://patch.msgid.link/20241107132903.13513-1-nvbolhuis@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ipw2x00: libipw_rx_any(): fix bad alignment [+ + +]
Author: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
Date:   Fri Nov 1 14:07:25 2024 +0800

    wifi: ipw2x00: libipw_rx_any(): fix bad alignment
    
    [ Upstream commit 4fa4f049dc0d9741b16c96bcbf0108c85368a2b9 ]
    
    This patch fixes incorrect code alignment.
    
    ./drivers/net/wireless/intel/ipw2x00/libipw_rx.c:871:2-3: code aligned with following code on line 882.
    ./drivers/net/wireless/intel/ipw2x00/libipw_rx.c:886:2-3: code aligned with following code on line 900.
    
    Reported-by: Abaci Robot <abaci@linux.alibaba.com>
    Closes: https://bugzilla.openanolis.cn/show_bug.cgi?id=11381
    Signed-off-by: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://patch.msgid.link/20241101060725.54640-1-jiapeng.chong@linux.alibaba.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: rtw89: check return value of ieee80211_probereq_get() for RNR [+ + +]
Author: Ping-Ke Shih <pkshih@realtek.com>
Date:   Thu Sep 19 16:12:14 2024 +0800

    wifi: rtw89: check return value of ieee80211_probereq_get() for RNR
    
    [ Upstream commit 630d5d8f2bf6b340202b6bc2c05d794bbd8e4c1c ]
    
    The return value of ieee80211_probereq_get() might be NULL, so check it
    before using to avoid NULL pointer access.
    
    Addresses-Coverity-ID: 1529805 ("Dereference null return value")
    
    Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
    Link: https://patch.msgid.link/20240919081216.28505-2-pkshih@realtek.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/CPU/AMD: WARN when setting EFER.AUTOIBRS if and only if the WRMSR fails [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Fri Dec 6 08:20:06 2024 -0800

    x86/CPU/AMD: WARN when setting EFER.AUTOIBRS if and only if the WRMSR fails
    
    [ Upstream commit 492077668fb453b8b16c842fcf3fafc2ebc190e9 ]
    
    When ensuring EFER.AUTOIBRS is set, WARN only on a negative return code
    from msr_set_bit(), as '1' is used to indicate the WRMSR was successful
    ('0' indicates the MSR bit was already set).
    
    Fixes: 8cc68c9c9e92 ("x86/CPU/AMD: Make sure EFER[AIBRSE] is set")
    Reported-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/r/Z1MkNofJjt7Oq0G6@google.com
    Closes: https://lore.kernel.org/all/20241205220604.GA2054199@thelio-3990X
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/kexec: Restore GDT on return from ::preserve_context kexec [+ + +]
Author: David Woodhouse <dwmw@amazon.co.uk>
Date:   Thu Dec 5 15:05:07 2024 +0000

    x86/kexec: Restore GDT on return from ::preserve_context kexec
    
    commit 07fa619f2a40c221ea27747a3323cabc59ab25eb upstream.
    
    The restore_processor_state() function explicitly states that "the asm code
    that gets us here will have restored a usable GDT". That wasn't true in the
    case of returning from a ::preserve_context kexec. Make it so.
    
    Without this, the kernel was depending on the called function to reload a
    GDT which is appropriate for the kernel before returning.
    
    Test program:
    
     #include <unistd.h>
     #include <errno.h>
     #include <stdio.h>
     #include <stdlib.h>
     #include <linux/kexec.h>
     #include <linux/reboot.h>
     #include <sys/reboot.h>
     #include <sys/syscall.h>
    
     int main (void)
     {
            struct kexec_segment segment = {};
            unsigned char purgatory[] = {
                    0x66, 0xba, 0xf8, 0x03, // mov $0x3f8, %dx
                    0xb0, 0x42,             // mov $0x42, %al
                    0xee,                   // outb %al, (%dx)
                    0xc3,                   // ret
            };
            int ret;
    
            segment.buf = &purgatory;
            segment.bufsz = sizeof(purgatory);
            segment.mem = (void *)0x400000;
            segment.memsz = 0x1000;
            ret = syscall(__NR_kexec_load, 0x400000, 1, &segment, KEXEC_PRESERVE_CONTEXT);
            if (ret) {
                    perror("kexec_load");
                    exit(1);
            }
    
            ret = syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_KEXEC);
            if (ret) {
                    perror("kexec reboot");
                    exit(1);
            }
            printf("Success\n");
            return 0;
     }
    
    Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20241205153343.3275139-2-dwmw2@infradead.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/mm: Add _PAGE_NOPTISHADOW bit to avoid updating userspace page tables [+ + +]
Author: David Woodhouse <dwmw@amazon.co.uk>
Date:   Wed Dec 4 11:27:14 2024 +0000

    x86/mm: Add _PAGE_NOPTISHADOW bit to avoid updating userspace page tables
    
    commit d0ceea662d459726487030237689835fcc0483e5 upstream.
    
    The set_p4d() and set_pgd() functions (in 4-level or 5-level page table setups
    respectively) assume that the root page table is actually a 8KiB allocation,
    with the userspace root immediately after the kernel root page table (so that
    the former can enforce NX on on all the subordinate page tables, which are
    actually shared).
    
    However, users of the kernel_ident_mapping_init() code do not give it an 8KiB
    allocation for its PGD. Both swsusp_arch_resume() and acpi_mp_setup_reset()
    allocate only a single 4KiB page. The kexec code on x86_64 currently gets
    away with it purely by chance, because it allocates 8KiB for its "control
    code page" and then actually uses the first half for the PGD, then copies the
    actual trampoline code into the second half only after the identmap code has
    finished scribbling over it.
    
    Fix this by defining a _PAGE_NOPTISHADOW bit (which can use the same bit as
    _PAGE_SAVED_DIRTY since one is only for the PGD/P4D root and the other is
    exclusively for leaf PTEs.). This instructs __pti_set_user_pgtbl() not to
    write to the userspace 'shadow' PGD.
    
    Strictly, the _PAGE_NOPTISHADOW bit doesn't need to be written out to the
    actual page tables; since __pti_set_user_pgtbl() returns the value to be
    written to the kernel page table, it could be filtered out. But there seems
    to be no benefit to actually doing so.
    
    Suggested-by: Dave Hansen <dave.hansen@intel.com>
    Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/r/412c90a4df7aef077141d9f68d19cbe5602d6c6d.camel@infradead.org
    Cc: stable@kernel.org
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Rik van Riel <riel@surriel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86: Fix build regression with CONFIG_KEXEC_JUMP enabled [+ + +]
Author: Damien Le Moal <dlemoal@kernel.org>
Date:   Mon Dec 9 08:53:32 2024 +0900

    x86: Fix build regression with CONFIG_KEXEC_JUMP enabled
    
    [ Upstream commit aeb68937614f4aeceaaa762bd7f0212ce842b797 ]
    
    Build 6.13-rc12 for x86_64 with gcc 14.2.1 fails with the error:
    
      ld: vmlinux.o: in function `virtual_mapped':
      linux/arch/x86/kernel/relocate_kernel_64.S:249:(.text+0x5915b): undefined reference to `saved_context_gdt_desc'
    
    when CONFIG_KEXEC_JUMP is enabled.
    
    This was introduced by commit 07fa619f2a40 ("x86/kexec: Restore GDT on
    return from ::preserve_context kexec") which introduced a use of
    saved_context_gdt_desc without a declaration for it.
    
    Fix that by including asm/asm-offsets.h where saved_context_gdt_desc
    is defined (indirectly in include/generated/asm-offsets.h which
    asm/asm-offsets.h includes).
    
    Fixes: 07fa619f2a40 ("x86/kexec: Restore GDT on return from ::preserve_context kexec")
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Acked-by: Borislav Petkov (AMD) <bp@alien8.de>
    Acked-by: David Woodhouse <dwmw@amazon.co.uk>
    Closes: https://lore.kernel.org/oe-kbuild-all/202411270006.ZyyzpYf8-lkp@intel.com/
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xhci: Allow RPM on the USB controller (1022:43f7) by default [+ + +]
Author: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
Date:   Mon Mar 4 11:13:27 2024 +0530

    xhci: Allow RPM on the USB controller (1022:43f7) by default
    
    [ Upstream commit 28cbed496059fe1868203b76e9e0ef285733524d ]
    
    Enable runtime PM by default for older AMD 1022:43f7 xHCI 1.1 host as it
    is proven to work.
    Driver enables runtime PM by default for newer xHCI 1.2 host.
    
    Link: https://lore.kernel.org/all/12335218.O9o76ZdvQC@natalenko.name/
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name>
    Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
    Acked-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20240304054327.2564500-1-Basavaraj.Natikar@amd.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: d7b11fe57902 ("xhci: Combine two if statements for Etron xHCI host")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xhci: Combine two if statements for Etron xHCI host [+ + +]
Author: Kuangyi Chiang <ki.chiang65@gmail.com>
Date:   Wed Nov 6 12:14:43 2024 +0200

    xhci: Combine two if statements for Etron xHCI host
    
    [ Upstream commit d7b11fe5790203fcc0db182249d7bfd945e44ccb ]
    
    Combine two if statements, because these hosts have the same
    quirk flags applied.
    
    [Mathias: has stable tag because other fixes in series depend on this]
    
    Fixes: 91f7a1524a92 ("xhci: Apply broken streams quirk to Etron EJ188 xHCI host")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kuangyi Chiang <ki.chiang65@gmail.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20241106101459.775897-18-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xhci: dbc: Fix STALL transfer event handling [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Thu Sep 5 17:32:49 2024 +0300

    xhci: dbc: Fix STALL transfer event handling
    
    commit 9044ad57b60b0556d42b6f8aa218a68865e810a4 upstream.
    
    Don't flush all pending DbC data requests when an endpoint halts.
    
    An endpoint may halt and xHC DbC triggers a STALL error event if there's
    an issue with a bulk data transfer. The transfer should restart once xHC
    DbC receives a ClearFeature(ENDPOINT_HALT) request from the host.
    
    Once xHC DbC restarts it will start from the TRB pointed to by dequeue
    field in the endpoint context, which might be the same TRB we got the
    STALL event for. Turn the TRB to a no-op in this case to make sure xHC
    DbC doesn't reuse and tries to retransmit this same TRB after we already
    handled it, and gave its corresponding data request back.
    
    Other STALL events might be completely bogus.
    Lukasz Bartosik discovered that xHC DbC might issue spurious STALL events
    if hosts sends a ClearFeature(ENDPOINT_HALT) request to non-halted
    endpoints even without any active bulk transfers.
    
    Assume STALL event is spurious if it reports 0 bytes transferred, and
    the endpoint stopped on the STALLED TRB.
    Don't give back the data request corresponding to the TRB in this case.
    
    The halted status is per endpoint. Track it with a per endpoint flag
    instead of the driver invented DbC wide DS_STALLED state.
    DbC remains in DbC-Configured state even if endpoints halt. There is no
    Stalled state in the DbC Port state Machine (xhci section 7.6.6)
    
    Reported-by: Łukasz Bartosik <ukaszb@chromium.org>
    Closes: https://lore.kernel.org/linux-usb/20240725074857.623299-1-ukaszb@chromium.org/
    Tested-by: Łukasz Bartosik <ukaszb@chromium.org>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20240905143300.1959279-2-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xhci: Don't issue Reset Device command to Etron xHCI host [+ + +]
Author: Kuangyi Chiang <ki.chiang65@gmail.com>
Date:   Wed Nov 6 12:14:44 2024 +0200

    xhci: Don't issue Reset Device command to Etron xHCI host
    
    [ Upstream commit 76d98856b1c6d06ce18f32c20527a4f9d283e660 ]
    
    Sometimes the hub driver does not recognize the USB device connected
    to the external USB2.0 hub when the system resumes from S4.
    
    After the SetPortFeature(PORT_RESET) request is completed, the hub
    driver calls the HCD reset_device callback, which will issue a Reset
    Device command and free all structures associated with endpoints
    that were disabled.
    
    This happens when the xHCI driver issue a Reset Device command to
    inform the Etron xHCI host that the USB device associated with a
    device slot has been reset. Seems that the Etron xHCI host can not
    perform this command correctly, affecting the USB device.
    
    To work around this, the xHCI driver should obtain a new device slot
    with reference to commit 651aaf36a7d7 ("usb: xhci: Handle USB transaction
    error on address command"), which is another way to inform the Etron
    xHCI host that the USB device has been reset.
    
    Add a new XHCI_ETRON_HOST quirk flag to invoke the workaround in
    xhci_discover_or_reset_device().
    
    Fixes: 2a8f82c4ceaf ("USB: xhci: Notify the xHC when a device is reset.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kuangyi Chiang <ki.chiang65@gmail.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20241106101459.775897-19-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xhci: Fix control transfer error on Etron xHCI host [+ + +]
Author: Kuangyi Chiang <ki.chiang65@gmail.com>
Date:   Wed Nov 6 12:14:45 2024 +0200

    xhci: Fix control transfer error on Etron xHCI host
    
    [ Upstream commit 5e1c67abc9301d05130b7e267c204e7005503b33 ]
    
    Performing a stability stress test on a USB3.0 2.5G ethernet adapter
    results in errors like this:
    
    [   91.441469] r8152 2-3:1.0 eth3: get_registers -71
    [   91.458659] r8152 2-3:1.0 eth3: get_registers -71
    [   91.475911] r8152 2-3:1.0 eth3: get_registers -71
    [   91.493203] r8152 2-3:1.0 eth3: get_registers -71
    [   91.510421] r8152 2-3:1.0 eth3: get_registers -71
    
    The r8152 driver will periodically issue lots of control-IN requests
    to access the status of ethernet adapter hardware registers during
    the test.
    
    This happens when the xHCI driver enqueue a control TD (which cross
    over the Link TRB between two ring segments, as shown) in the endpoint
    zero's transfer ring. Seems the Etron xHCI host can not perform this
    TD correctly, causing the USB transfer error occurred, maybe the upper
    driver retry that control-IN request can solve problem, but not all
    drivers do this.
    
    |     |
    -------
    | TRB | Setup Stage
    -------
    | TRB | Link
    -------
    -------
    | TRB | Data Stage
    -------
    | TRB | Status Stage
    -------
    |     |
    
    To work around this, the xHCI driver should enqueue a No Op TRB if
    next available TRB is the Link TRB in the ring segment, this can
    prevent the Setup and Data Stage TRB to be breaked by the Link TRB.
    
    Check if the XHCI_ETRON_HOST quirk flag is set before invoking the
    workaround in xhci_queue_ctrl_tx().
    
    Fixes: d0e96f5a71a0 ("USB: xhci: Control transfer support.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kuangyi Chiang <ki.chiang65@gmail.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20241106101459.775897-20-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xhci: remove XHCI_TRUST_TX_LENGTH quirk [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Mon Apr 29 17:02:36 2024 +0300

    xhci: remove XHCI_TRUST_TX_LENGTH quirk
    
    [ Upstream commit 34b67198244f2d7d8409fa4eb76204c409c0c97e ]
    
    If this quirk was set then driver would treat transfer events with
    'Success' completion code as 'Short packet' if there were untransferred
    bytes left.
    
    This is so common that turn it into default behavior.
    
    xhci_warn_ratelimited() is no longer used after this, so remove it.
    
    A success event with untransferred bytes left doesn't always mean a
    misbehaving controller. If there was an error mid a multi-TRB TD it's
    allowed to issue a success event for the last TRB in that TD.
    
    See xhci 1.2 spec 4.9.1 Transfer Descriptors
    
    "Note: If an error is detected while processing a multi-TRB TD, the xHC
     shall generate a Transfer Event for the TRB that the error was detected
     on with the appropriate error Condition Code, then may advance to the
     next TD. If in the process of advancing to the next TD, a Transfer TRB
     is encountered with its IOC flag set, then the Condition Code of the
     Transfer Event generated for that Transfer TRB should be Success,
     because there was no error actually associated with the TRB that
     generated the Event. However, an xHC implementation may redundantly
     assert the original error Condition Code."
    
    Co-developed-by: Niklas Neronin <niklas.neronin@linux.intel.com>
    Signed-off-by: Niklas Neronin <niklas.neronin@linux.intel.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20240429140245.3955523-10-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: d7b11fe57902 ("xhci: Combine two if statements for Etron xHCI host")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xsk: always clear DMA mapping information when unmapping the pool [+ + +]
Author: Larysa Zaremba <larysa.zaremba@intel.com>
Date:   Fri Nov 22 12:29:09 2024 +0100

    xsk: always clear DMA mapping information when unmapping the pool
    
    [ Upstream commit ac9a48a6f1610b094072b815e884e1668aea4401 ]
    
    When the umem is shared, the DMA mapping is also shared between the xsk
    pools, therefore it should stay valid as long as at least 1 user remains.
    However, the pool also keeps the copies of DMA-related information that are
    initialized in the same way in xp_init_dma_info(), but cleared by
    xp_dma_unmap() only for the last remaining pool, this causes the problems
    below.
    
    The first one is that the commit adbf5a42341f ("ice: remove af_xdp_zc_qps
    bitmap") relies on pool->dev to determine the presence of a ZC pool on a
    given queue, avoiding internal bookkeeping. This works perfectly fine if
    the UMEM is not shared, but reliably fails otherwise as stated in the
    linked report.
    
    The second one is pool->dma_pages which is dynamically allocated and
    only freed in xp_dma_unmap(), this leads to a small memory leak. kmemleak
    does not catch it, but by printing the allocation results after terminating
    the userspace program it is possible to see that all addresses except the
    one belonging to the last detached pool are still accessible through the
    kmemleak dump functionality.
    
    Always clear the DMA mapping information from the pool and free
    pool->dma_pages when unmapping the pool, so that the only difference
    between results of the last remaining user's call and the ones before would
    be the destruction of the DMA mapping.
    
    Fixes: adbf5a42341f ("ice: remove af_xdp_zc_qps bitmap")
    Fixes: 921b68692abb ("xsk: Enable sharing of dma mappings")
    Reported-by: Alasdair McWilliam <alasdair.mcwilliam@outlook.com>
    Closes: https://lore.kernel.org/PA4P194MB10056F208AF221D043F57A3D86512@PA4P194MB1005.EURP194.PROD.OUTLOOK.COM
    Acked-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Signed-off-by: Larysa Zaremba <larysa.zaremba@intel.com>
    Link: https://lore.kernel.org/r/20241122112912.89881-1-larysa.zaremba@intel.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xsk: fix OOB map writes when deleting elements [+ + +]
Author: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Date:   Fri Nov 22 13:10:29 2024 +0100

    xsk: fix OOB map writes when deleting elements
    
    commit 32cd3db7de97c0c7a018756ce66244342fd583f0 upstream.
    
    Jordy says:
    
    "
    In the xsk_map_delete_elem function an unsigned integer
    (map->max_entries) is compared with a user-controlled signed integer
    (k). Due to implicit type conversion, a large unsigned value for
    map->max_entries can bypass the intended bounds check:
    
            if (k >= map->max_entries)
                    return -EINVAL;
    
    This allows k to hold a negative value (between -2147483648 and -2),
    which is then used as an array index in m->xsk_map[k], which results
    in an out-of-bounds access.
    
            spin_lock_bh(&m->lock);
            map_entry = &m->xsk_map[k]; // Out-of-bounds map_entry
            old_xs = unrcu_pointer(xchg(map_entry, NULL));  // Oob write
            if (old_xs)
                    xsk_map_sock_delete(old_xs, map_entry);
            spin_unlock_bh(&m->lock);
    
    The xchg operation can then be used to cause an out-of-bounds write.
    Moreover, the invalid map_entry passed to xsk_map_sock_delete can lead
    to further memory corruption.
    "
    
    It indeed results in following splat:
    
    [76612.897343] BUG: unable to handle page fault for address: ffffc8fc2e461108
    [76612.904330] #PF: supervisor write access in kernel mode
    [76612.909639] #PF: error_code(0x0002) - not-present page
    [76612.914855] PGD 0 P4D 0
    [76612.917431] Oops: Oops: 0002 [#1] PREEMPT SMP
    [76612.921859] CPU: 11 UID: 0 PID: 10318 Comm: a.out Not tainted 6.12.0-rc1+ #470
    [76612.929189] Hardware name: Intel Corporation S2600WFT/S2600WFT, BIOS SE5C620.86B.02.01.0008.031920191559 03/19/2019
    [76612.939781] RIP: 0010:xsk_map_delete_elem+0x2d/0x60
    [76612.944738] Code: 00 00 41 54 55 53 48 63 2e 3b 6f 24 73 38 4c 8d a7 f8 00 00 00 48 89 fb 4c 89 e7 e8 2d bf 05 00 48 8d b4 eb 00 01 00 00 31 ff <48> 87 3e 48 85 ff 74 05 e8 16 ff ff ff 4c 89 e7 e8 3e bc 05 00 31
    [76612.963774] RSP: 0018:ffffc9002e407df8 EFLAGS: 00010246
    [76612.969079] RAX: 0000000000000000 RBX: ffffc9002e461000 RCX: 0000000000000000
    [76612.976323] RDX: 0000000000000001 RSI: ffffc8fc2e461108 RDI: 0000000000000000
    [76612.983569] RBP: ffffffff80000001 R08: 0000000000000000 R09: 0000000000000007
    [76612.990812] R10: ffffc9002e407e18 R11: ffff888108a38858 R12: ffffc9002e4610f8
    [76612.998060] R13: ffff888108a38858 R14: 00007ffd1ae0ac78 R15: ffffc9002e4610c0
    [76613.005303] FS:  00007f80b6f59740(0000) GS:ffff8897e0ec0000(0000) knlGS:0000000000000000
    [76613.013517] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [76613.019349] CR2: ffffc8fc2e461108 CR3: 000000011e3ef001 CR4: 00000000007726f0
    [76613.026595] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [76613.033841] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [76613.041086] PKRU: 55555554
    [76613.043842] Call Trace:
    [76613.046331]  <TASK>
    [76613.048468]  ? __die+0x20/0x60
    [76613.051581]  ? page_fault_oops+0x15a/0x450
    [76613.055747]  ? search_extable+0x22/0x30
    [76613.059649]  ? search_bpf_extables+0x5f/0x80
    [76613.063988]  ? exc_page_fault+0xa9/0x140
    [76613.067975]  ? asm_exc_page_fault+0x22/0x30
    [76613.072229]  ? xsk_map_delete_elem+0x2d/0x60
    [76613.076573]  ? xsk_map_delete_elem+0x23/0x60
    [76613.080914]  __sys_bpf+0x19b7/0x23c0
    [76613.084555]  __x64_sys_bpf+0x1a/0x20
    [76613.088194]  do_syscall_64+0x37/0xb0
    [76613.091832]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
    [76613.096962] RIP: 0033:0x7f80b6d1e88d
    [76613.100592] Code: 5b 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 73 b5 0f 00 f7 d8 64 89 01 48
    [76613.119631] RSP: 002b:00007ffd1ae0ac68 EFLAGS: 00000206 ORIG_RAX: 0000000000000141
    [76613.131330] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f80b6d1e88d
    [76613.142632] RDX: 0000000000000098 RSI: 00007ffd1ae0ad20 RDI: 0000000000000003
    [76613.153967] RBP: 00007ffd1ae0adc0 R08: 0000000000000000 R09: 0000000000000000
    [76613.166030] R10: 00007f80b6f77040 R11: 0000000000000206 R12: 00007ffd1ae0aed8
    [76613.177130] R13: 000055ddf42ce1e9 R14: 000055ddf42d0d98 R15: 00007f80b6fab040
    [76613.188129]  </TASK>
    
    Fix this by simply changing key type from int to u32.
    
    Fixes: fbfc504a24f5 ("bpf: introduce new bpf AF_XDP map type BPF_MAP_TYPE_XSKMAP")
    CC: stable@vger.kernel.org
    Reported-by: Jordy Zomer <jordyzomer@google.com>
    Suggested-by: Jordy Zomer <jordyzomer@google.com>
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Link: https://lore.kernel.org/r/20241122121030.716788-2-maciej.fijalkowski@intel.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
zram: clear IDLE flag in mark_idle() [+ + +]
Author: Sergey Senozhatsky <senozhatsky@chromium.org>
Date:   Tue Oct 29 00:36:15 2024 +0900

    zram: clear IDLE flag in mark_idle()
    
    [ Upstream commit d37da422edb0664a2037e6d7d42fe6d339aae78a ]
    
    If entry does not fulfill current mark_idle() parameters, e.g.  cutoff
    time, then we should clear its ZRAM_IDLE from previous mark_idle()
    invocations.
    
    Consider the following case:
    - mark_idle() cutoff time 8h
    - mark_idle() cutoff time 4h
    - writeback() idle - will writeback entries with cutoff time 8h,
      while it should only pick entries with cutoff time 4h
    
    The bug was reported by Shin Kawamura.
    
    Link: https://lkml.kernel.org/r/20241028153629.1479791-3-senozhatsky@chromium.org
    Fixes: 755804d16965 ("zram: introduce an aged idle interface")
    Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Reported-by: Shin Kawamura <kawasin@google.com>
    Acked-by: Brian Geffon <bgeffon@google.com>
    Cc: Minchan Kim <minchan@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

zram: do not mark idle slots that cannot be idle [+ + +]
Author: Sergey Senozhatsky <senozhatsky@chromium.org>
Date:   Tue Sep 17 11:09:10 2024 +0900

    zram: do not mark idle slots that cannot be idle
    
    [ Upstream commit b967fa1ba72b5da2b6d9bf95f0b13420a59e0701 ]
    
    ZRAM_SAME slots cannot be post-processed (writeback or recompress) so do
    not mark them ZRAM_IDLE.  Same with ZRAM_WB slots, they cannot be
    ZRAM_IDLE because they are not in zsmalloc pool anymore.
    
    Link: https://lkml.kernel.org/r/20240917021020.883356-6-senozhatsky@chromium.org
    Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: Minchan Kim <minchan@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: d37da422edb0 ("zram: clear IDLE flag in mark_idle()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

zram: split memory-tracking and ac-time tracking [+ + +]
Author: Sergey Senozhatsky <senozhatsky@chromium.org>
Date:   Wed Nov 15 11:42:12 2023 +0900

    zram: split memory-tracking and ac-time tracking
    
    [ Upstream commit a7a0350583ba51d8cde6180bb51d704b89a3b29e ]
    
    ZRAM_MEMORY_TRACKING enables two features:
    - per-entry ac-time tracking
    - debugfs interface
    
    The latter one is the reason why memory-tracking depends on DEBUG_FS,
    while the former one is used far beyond debugging these days.  Namely
    ac-time is used for fine grained writeback of idle entries (pages).
    
    Move ac-time tracking under its own config option so that it can be
    enabled (along with writeback) on systems without DEBUG_FS.
    
    [senozhatsky@chromium.org: ifdef fixup, per Dmytro]
      Link: https://lkml.kernel.org/r/20231117013543.540280-1-senozhatsky@chromium.org
    Link: https://lkml.kernel.org/r/20231115024223.4133148-1-senozhatsky@chromium.org
    Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Dmytro Maluka <dmaluka@chromium.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: d37da422edb0 ("zram: clear IDLE flag in mark_idle()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>