Changelog in Linux kernel 5.4.287

 
9p/xen: fix init sequence [+ + +]
Author: Alex Zenla <[email protected]>
Date:   Tue Nov 19 21:16:33 2024 +0000

    9p/xen: fix init sequence
    
    [ Upstream commit 7ef3ae82a6ebbf4750967d1ce43bcdb7e44ff74b ]
    
    Large amount of mount hangs observed during hotplugging of 9pfs devices. The
    9pfs Xen driver attempts to initialize itself more than once, causing the
    frontend and backend to disagree: the backend listens on a channel that the
    frontend does not send on, resulting in stalled processing.
    
    Only allow initialization of 9p frontend once.
    
    Fixes: c15fe55d14b3b ("9p/xen: fix connection sequence")
    Signed-off-by: Alex Zenla <[email protected]>
    Signed-off-by: Alexander Merritt <[email protected]>
    Signed-off-by: Ariadne Conill <[email protected]>
    Reviewed-by: Juergen Gross <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Dominique Martinet <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

9p/xen: fix release of IRQ [+ + +]
Author: Alex Zenla <[email protected]>
Date:   Thu Nov 21 22:51:00 2024 +0000

    9p/xen: fix release of IRQ
    
    [ Upstream commit e43c608f40c065b30964f0a806348062991b802d ]
    
    Kernel logs indicate an IRQ was double-freed.
    
    Pass correct device ID during IRQ release.
    
    Fixes: 71ebd71921e45 ("xen/9pfs: connect to the backend")
    Signed-off-by: Alex Zenla <[email protected]>
    Signed-off-by: Alexander Merritt <[email protected]>
    Signed-off-by: Ariadne Conill <[email protected]>
    Reviewed-by: Juergen Gross <[email protected]>
    Message-ID: <[email protected]>
    [Dominique: remove confusing variable reset to 0]
    Signed-off-by: Dominique Martinet <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
acpi/arm64: Adjust error handling procedure in gtdt_parse_timer_block() [+ + +]
Author: Aleksandr Mishin <[email protected]>
Date:   Tue Aug 27 13:12:39 2024 +0300

    acpi/arm64: Adjust error handling procedure in gtdt_parse_timer_block()
    
    [ Upstream commit 1a9de2f6fda69d5f105dd8af776856a66abdaa64 ]
    
    In case of error in gtdt_parse_timer_block() invalid 'gtdt_frame'
    will be used in 'do {} while (i-- >= 0 && gtdt_frame--);' statement block
    because do{} block will be executed even if 'i == 0'.
    
    Adjust error handling procedure by replacing 'i-- >= 0' with 'i-- > 0'.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: a712c3ed9b8a ("acpi/arm64: Add memory-mapped timer support in GTDT driver")
    Signed-off-by: Aleksandr Mishin <[email protected]>
    Acked-by: Hanjun Guo <[email protected]>
    Acked-by: Sudeep Holla <[email protected]>
    Acked-by: Aleksandr Mishin <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Catalin Marinas <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ad7780: fix division by zero in ad7780_write_raw() [+ + +]
Author: Zicheng Qu <[email protected]>
Date:   Mon Oct 28 14:20:27 2024 +0000

    ad7780: fix division by zero in ad7780_write_raw()
    
    commit c174b53e95adf2eece2afc56cd9798374919f99a upstream.
    
    In the ad7780_write_raw() , val2 can be zero, which might lead to a
    division by zero error in DIV_ROUND_CLOSEST(). The ad7780_write_raw()
    is based on iio_info's write_raw. While val is explicitly declared that
    can be zero (in read mode), val2 is not specified to be non-zero.
    
    Fixes: 9085daa4abcc ("staging: iio: ad7780: add gain & filter gpio support")
    Cc: [email protected]
    Signed-off-by: Zicheng Qu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
af_packet: avoid erroring out after sock_init_data() in packet_create() [+ + +]
Author: Ignat Korchagin <[email protected]>
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 <[email protected]>
    Signed-off-by: Ignat Korchagin <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: 6fire: Release resources at card release [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Wed Nov 13 12:10:39 2024 +0100

    ALSA: 6fire: Release resources at card release
    
    [ Upstream commit a0810c3d6dd2d29a9b92604d682eacd2902ce947 ]
    
    The current 6fire code tries to release the resources right after the
    call of usb6fire_chip_abort().  But at this moment, the card object
    might be still in use (as we're calling snd_card_free_when_closed()).
    
    For avoid potential UAFs, move the release of resources to the card's
    private_free instead of the manual call of usb6fire_chip_destroy() at
    the USB disconnect callback.
    
    Fixes: c6d43ba816d1 ("ALSA: usb/6fire - Driver for TerraTec DMX 6Fire USB")
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: caiaq: Use snd_card_free_when_closed() at disconnection [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Wed Nov 13 12:10:38 2024 +0100

    ALSA: caiaq: Use snd_card_free_when_closed() at disconnection
    
    [ Upstream commit b04dcbb7f7b1908806b7dc22671cdbe78ff2b82c ]
    
    The USB disconnect callback is supposed to be short and not too-long
    waiting.  OTOH, the current code uses snd_card_free() at
    disconnection, but this waits for the close of all used fds, hence it
    can take long.  It eventually blocks the upper layer USB ioctls, which
    may trigger a soft lockup.
    
    An easy workaround is to replace snd_card_free() with
    snd_card_free_when_closed().  This variant returns immediately while
    the release of resources is done asynchronously by the card device
    release at the last close.
    
    This patch also splits the code to the disconnect and the free phases;
    the former is called immediately at the USB disconnect callback while
    the latter is called from the card destructor.
    
    Fixes: 523f1dce3743 ("[ALSA] Add Native Instrument usb audio device support")
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: Add subwoofer quirk for Infinix ZERO BOOK 13 [+ + +]
Author: Piyush Raj Chouhan <[email protected]>
Date:   Mon Oct 28 15:55:16 2024 +0000

    ALSA: hda/realtek: Add subwoofer quirk for Infinix ZERO BOOK 13
    
    [ Upstream commit ef5fbdf732a158ec27eeba69d8be851351f29f73 ]
    
    Infinix ZERO BOOK 13 has a 2+2 speaker system which isn't probed correctly.
    This patch adds a quirk with the proper pin connections.
    Also The mic in this laptop suffers too high gain resulting in mostly
    fan noise being recorded,
    This patch Also limit mic boost.
    
    HW Probe for device; https://linux-hardware.org/?probe=a2e892c47b
    
    Test: All 4 speaker works, Mic has low noise.
    
    Signed-off-by: Piyush Raj Chouhan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: Apply quirk for Medion E15433 [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Thu Nov 28 08:26:45 2024 +0100

    ALSA: hda/realtek: Apply quirk for Medion E15433
    
    commit ca0f79f0286046f6a91c099dc941cf7afae198d6 upstream.
    
    Medion E15433 laptop wich ALC269VC (SSID 2782:1705) needs the same
    workaround for the missing speaker as another model.
    
    Link: https://bugzilla.suse.com/show_bug.cgi?id=1233298
    Cc: <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: hda/realtek: Fix Internal Speaker and Mic boost of Infinix Y4 Max [+ + +]
Author: Dinesh Kumar <[email protected]>
Date:   Mon Nov 25 14:58:42 2024 +0530

    ALSA: hda/realtek: Fix Internal Speaker and Mic boost of Infinix Y4 Max
    
    commit 5ebe792a5139f1ce6e4aed22bef12e7e2660df96 upstream.
    
    Internal Speaker of Infinix Y4 Max remains muted due to incorrect
    Pin configuration, and the Internal Mic records high noise. This patch
    corrects the Pin configuration for the Internal Speaker and limits
    the Internal Mic boost.
    HW Probe for device: https://linux-hardware.org/?probe=6d4386c347
    Test: Internal Speaker works fine, Mic has low noise.
    
    Signed-off-by: Dinesh Kumar <[email protected]>
    Cc: <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: hda/realtek: Set PCBeep to default value for ALC274 [+ + +]
Author: Kailang Yang <[email protected]>
Date:   Thu Nov 21 16:16:26 2024 +0800

    ALSA: hda/realtek: Set PCBeep to default value for ALC274
    
    commit 155699ccab7c78cbba69798242b68bc8ac66d5d2 upstream.
    
    BIOS Enable PC beep path cause pop noise via speaker during boot time.
    Set to default value from driver will solve the issue.
    
    Signed-off-by: Kailang Yang <[email protected]>
    Cc: <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: hda/realtek: Update ALC225 depop procedure [+ + +]
Author: Kailang Yang <[email protected]>
Date:   Thu Nov 14 15:08:07 2024 +0800

    ALSA: hda/realtek: Update ALC225 depop procedure
    
    commit 1fd50509fe14a9adc9329e0454b986157a4c155a upstream.
    
    Old procedure has a chance to meet Headphone no output.
    
    Fixes: da911b1f5e98 ("ALSA: hda/realtek - update ALC225 depop optimize")
    Signed-off-by: Kailang Yang <[email protected]>
    Cc: <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: us122l: Use snd_card_free_when_closed() at disconnection [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Wed Nov 13 12:10:36 2024 +0100

    ALSA: us122l: Use snd_card_free_when_closed() at disconnection
    
    [ Upstream commit b7df09bb348016943f56b09dcaafe221e3f73947 ]
    
    The USB disconnect callback is supposed to be short and not too-long
    waiting.  OTOH, the current code uses snd_card_free() at
    disconnection, but this waits for the close of all used fds, hence it
    can take long.  It eventually blocks the upper layer USB ioctls, which
    may trigger a soft lockup.
    
    An easy workaround is to replace snd_card_free() with
    snd_card_free_when_closed().  This variant returns immediately while
    the release of resources is done asynchronously by the card device
    release at the last close.
    
    The loop of us122l->mmap_count check is dropped as well.  The check is
    useless for the asynchronous operation with *_when_closed().
    
    Fixes: 030a07e44129 ("ALSA: Add USB US122L driver")
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: usb-audio: Fix out of bounds reads when finding clock sources [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Mon Nov 25 15:46:16 2024 +0100

    ALSA: usb-audio: Fix out of bounds reads when finding clock sources
    
    commit a3dd4d63eeb452cfb064a13862fb376ab108f6a6 upstream.
    
    The current USB-audio driver code doesn't check bLength of each
    descriptor at traversing for clock descriptors.  That is, when a
    device provides a bogus descriptor with a shorter bLength, the driver
    might hit out-of-bounds reads.
    
    For addressing it, this patch adds sanity checks to the validator
    functions for the clock descriptor traversal.  When the descriptor
    length is shorter than expected, it's skipped in the loop.
    
    For the clock source and clock multiplier descriptors, we can just
    check bLength against the sizeof() of each descriptor type.
    OTOH, the clock selector descriptor of UAC2 and UAC3 has an array
    of bNrInPins elements and two more fields at its tail, hence those
    have to be checked in addition to the sizeof() check.
    
    Reported-by: Benoît Sevens <[email protected]>
    Cc: <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Benoît Sevens <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: Fix potential out-of-bound accesses for Extigy and Mbox devices [+ + +]
Author: Benoît Sevens <[email protected]>
Date:   Wed Nov 20 12:41:44 2024 +0000

    ALSA: usb-audio: Fix potential out-of-bound accesses for Extigy and Mbox devices
    
    commit b909df18ce2a998afef81d58bbd1a05dc0788c40 upstream.
    
    A bogus device can provide a bNumConfigurations value that exceeds the
    initial value used in usb_get_configuration for allocating dev->config.
    
    This can lead to out-of-bounds accesses later, e.g. in
    usb_destroy_configuration.
    
    Signed-off-by: Benoît Sevens <[email protected]>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
apparmor: fix 'Do simple duplicate message elimination' [+ + +]
Author: chao liu <[email protected]>
Date:   Tue Jun 27 10:03:16 2023 +0800

    apparmor: fix 'Do simple duplicate message elimination'
    
    [ Upstream commit 9b897132424fe76bf6c61f22f9cf12af7f1d1e6a ]
    
    Multiple profiles shared 'ent->caps', so some logs missed.
    
    Fixes: 0ed3b28ab8bf ("AppArmor: mediation of non file objects")
    Signed-off-by: chao liu <[email protected]>
    Signed-off-by: John Johansen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64: tls: Fix context-switching of tpidrro_el0 when kpti is enabled [+ + +]
Author: Will Deacon <[email protected]>
Date:   Thu Nov 14 09:53:32 2024 +0000

    arm64: tls: Fix context-switching of tpidrro_el0 when kpti is enabled
    
    commit 67ab51cbdfee02ef07fb9d7d14cc0bf6cb5a5e5c upstream.
    
    Commit 18011eac28c7 ("arm64: tls: Avoid unconditional zeroing of
    tpidrro_el0 for native tasks") tried to optimise the context switching
    of tpidrro_el0 by eliding the clearing of the register when switching
    to a native task with kpti enabled, on the erroneous assumption that
    the kpti trampoline entry code would already have taken care of the
    write.
    
    Although the kpti trampoline does zero the register on entry from a
    native task, the check in tls_thread_switch() is on the *next* task and
    so we can end up leaving a stale, non-zero value in the register if the
    previous task was 32-bit.
    
    Drop the broken optimisation and zero tpidrro_el0 unconditionally when
    switching to a native 64-bit task.
    
    Cc: Mark Rutland <[email protected]>
    Cc: [email protected]
    Fixes: 18011eac28c7 ("arm64: tls: Avoid unconditional zeroing of tpidrro_el0 for native tasks")
    Signed-off-by: Will Deacon <[email protected]>
    Acked-by: Mark Rutland <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Catalin Marinas <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ARM: dts: cubieboard4: Fix DCDC5 regulator constraints [+ + +]
Author: Andre Przywara <[email protected]>
Date:   Mon Oct 7 23:29:16 2024 +0100

    ARM: dts: cubieboard4: Fix DCDC5 regulator constraints
    
    [ Upstream commit dd36ad71ad65968f97630808bc8d605c929b128e ]
    
    The DCDC5 voltage rail in the X-Powers AXP809 PMIC has a resolution of
    50mV, so the currently enforced limits of 1.475 and 1.525 volts cannot
    be set, when the existing regulator value is beyond this range.
    
    This will lead to the whole regulator driver to give up and fail
    probing, which in turn will hang the system, as essential devices depend
    on the PMIC.
    In this case a bug in U-Boot set the voltage to 1.75V (meant for DCDC4),
    and the AXP driver's attempt to correct this lead to this error:
    ==================
    [    4.447653] axp20x-rsb sunxi-rsb-3a3: AXP20X driver loaded
    [    4.450066] vcc-dram: Bringing 1750000uV into 1575000-1575000uV
    [    4.460272] vcc-dram: failed to apply 1575000-1575000uV constraint: -EINVAL
    [    4.474788] axp20x-regulator axp20x-regulator.0: Failed to register dcdc5
    [    4.482276] axp20x-regulator axp20x-regulator.0: probe with driver axp20x-regulator failed with error -22
    ==================
    
    Set the limits to values that can be programmed, so any correction will
    be successful.
    
    Signed-off-by: Andre Przywara <[email protected]>
    Fixes: 1e1dea72651b ("ARM: dts: sun9i: cubieboard4: Add AXP809 PMIC device node and regulators")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Chen-Yu Tsai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ASoC: codecs: Fix atomicity violation in snd_soc_component_get_drvdata() [+ + +]
Author: Qiu-ji Chen <[email protected]>
Date:   Mon Sep 30 18:12:16 2024 +0800

    ASoC: codecs: Fix atomicity violation in snd_soc_component_get_drvdata()
    
    commit 1157733344651ca505e259d6554591ff156922fa upstream.
    
    An atomicity violation occurs when the validity of the variables
    da7219->clk_src and da7219->mclk_rate is being assessed. Since the entire
    assessment is not protected by a lock, the da7219 variable might still be
    in flux during the assessment, rendering this check invalid.
    
    To fix this issue, we recommend adding a lock before the block
    if ((da7219->clk_src == clk_id) && (da7219->mclk_rate == freq)) so that
    the legitimacy check for da7219->clk_src and da7219->mclk_rate is
    protected by the lock, ensuring the validity of the check.
    
    This possible bug is found by an experimental static analysis tool
    developed by our team. This tool analyzes the locking APIs
    to extract function pairs that can be concurrently executed, and then
    analyzes the instructions in the paired functions to identify possible
    concurrency bugs including data races and atomicity violations.
    
    Fixes: 6d817c0e9fd7 ("ASoC: codecs: Add da7219 codec driver")
    Cc: [email protected]
    Signed-off-by: Qiu-ji Chen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: fsl_micfil: do not define SHIFT/MASK for single bits [+ + +]
Author: Sascha Hauer <[email protected]>
Date:   Thu Apr 14 18:22:32 2022 +0200

    ASoC: fsl_micfil: do not define SHIFT/MASK for single bits
    
    [ Upstream commit bd2cffd10d79eb9280cb8f5b7cb441f206c1e6ac ]
    
    No need to have defines for the mask of single bits. Also shift is
    unused. Drop all these unnecessary defines.
    
    Signed-off-by: Sascha Hauer <[email protected]>
    Acked-by: Shengjiu Wang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 06df673d2023 ("ASoC: fsl_micfil: fix regmap_write_bits usage")
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_micfil: Drop unnecessary register read [+ + +]
Author: Sascha Hauer <[email protected]>
Date:   Thu Apr 14 18:22:29 2022 +0200

    ASoC: fsl_micfil: Drop unnecessary register read
    
    [ Upstream commit c808e277bcdfce37aed80a443be305ac1aec1623 ]
    
    in get_pdm_clk() REG_MICFIL_CTRL2 is read twice. Drop second read.
    
    Signed-off-by: Sascha Hauer <[email protected]>
    Acked-by: Shengjiu Wang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 06df673d2023 ("ASoC: fsl_micfil: fix regmap_write_bits usage")
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_micfil: fix regmap_write_bits usage [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Fri Sep 27 16:00:29 2024 +0800

    ASoC: fsl_micfil: fix regmap_write_bits usage
    
    [ Upstream commit 06df673d20230afb0e383e39235a4fa8b9a62464 ]
    
    The last parameter 1 means BIT(0), which should be the
    correct BIT(X).
    
    Fixes: 47a70e6fc9a8 ("ASoC: Add MICFIL SoC Digital Audio Interface driver.")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Reviewed-by: Daniel Baluta <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_micfil: fix the naming style for mask definition [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Thu May 5 15:34:07 2022 +0800

    ASoC: fsl_micfil: fix the naming style for mask definition
    
    commit 101b096bc2549618f18bc08ae3a0e364b3c8fff1 upstream.
    
    Remove the _SHIFT for the mask definition.
    
    Fixes: 17f2142bae4b ("ASoC: fsl_micfil: use GENMASK to define register bit fields")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Acked-by: Sascha Hauer <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: fsl_micfil: use GENMASK to define register bit fields [+ + +]
Author: Sascha Hauer <[email protected]>
Date:   Thu Apr 14 18:22:33 2022 +0200

    ASoC: fsl_micfil: use GENMASK to define register bit fields
    
    [ Upstream commit 17f2142bae4b6f2e27f19ce57d79fc42ba5ef659 ]
    
    Use GENMASK along with FIELD_PREP and FIELD_GET to access bitfields in
    registers to straighten register access and to drop a lot of defines.
    
    Signed-off-by: Sascha Hauer <[email protected]>
    Acked-by: Shengjiu Wang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 06df673d2023 ("ASoC: fsl_micfil: fix regmap_write_bits usage")
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: hdmi-codec: reorder channel allocation list [+ + +]
Author: Jonas Karlman <[email protected]>
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 <[email protected]>
    Signed-off-by: Christian Hewitt <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: Intel: bytcr_rt5640: Add DMI quirk for Vexia Edu Atla 10 tablet [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Thu Oct 24 23:16:15 2024 +0200

    ASoC: Intel: bytcr_rt5640: Add DMI quirk for Vexia Edu Atla 10 tablet
    
    [ Upstream commit 0107f28f135231da22a9ad5756bb16bd5cada4d5 ]
    
    The Vexia Edu Atla 10 tablet mostly uses the BYTCR tablet defaults,
    but as happens on more models it is using IN1 instead of IN3 for
    its internal mic and JD_SRC_JD2_IN4N instead of JD_SRC_JD1_IN4P
    for jack-detection.
    
    Add a DMI quirk for this to fix the internal-mic and jack-detection.
    
    Signed-off-by: Hans de Goede <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: stm: Prevent potential division by zero in stm32_sai_get_clk_div() [+ + +]
Author: Luo Yifan <[email protected]>
Date:   Thu Nov 7 09:59:36 2024 +0800

    ASoC: stm: Prevent potential division by zero in stm32_sai_get_clk_div()
    
    [ Upstream commit 23569c8b314925bdb70dd1a7b63cfe6100868315 ]
    
    This patch checks if div is less than or equal to zero (div <= 0). If
    div is zero or negative, the function returns -EINVAL, ensuring the
    division operation is safe to perform.
    
    Signed-off-by: Luo Yifan <[email protected]>
    Reviewed-by: Olivier Moysan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: stm: Prevent potential division by zero in stm32_sai_mclk_round_rate() [+ + +]
Author: Luo Yifan <[email protected]>
Date:   Wed Nov 6 09:46:54 2024 +0800

    ASoC: stm: Prevent potential division by zero in stm32_sai_mclk_round_rate()
    
    [ Upstream commit 63c1c87993e0e5bb11bced3d8224446a2bc62338 ]
    
    This patch checks if div is less than or equal to zero (div <= 0). If
    div is zero or negative, the function returns -EINVAL, ensuring the
    division operation (*prate / div) is safe to perform.
    
    Signed-off-by: Luo Yifan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bcache: revert replacing IS_ERR_OR_NULL with IS_ERR again [+ + +]
Author: Liequan Che <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Cc: Zheng Wang <[email protected]>
    Reviewed-by: Mingzhe Zou <[email protected]>
    Signed-off-by: Coly Li <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
block: fix ordering between checking BLK_MQ_S_STOPPED request adding [+ + +]
Author: Muchun Song <[email protected]>
Date:   Mon Oct 14 17:29:34 2024 +0800

    block: fix ordering between checking BLK_MQ_S_STOPPED request adding
    
    commit 96a9fe64bfd486ebeeacf1e6011801ffe89dae18 upstream.
    
    Supposing first scenario with a virtio_blk driver.
    
    CPU0                        CPU1
    
    blk_mq_try_issue_directly()
      __blk_mq_issue_directly()
        q->mq_ops->queue_rq()
          virtio_queue_rq()
            blk_mq_stop_hw_queue()
                                virtblk_done()
      blk_mq_request_bypass_insert()  1) store
                                  blk_mq_start_stopped_hw_queue()
                                    clear_bit(BLK_MQ_S_STOPPED)       3) store
                                    blk_mq_run_hw_queue()
                                      if (!blk_mq_hctx_has_pending()) 4) load
                                        return
                                      blk_mq_sched_dispatch_requests()
      blk_mq_run_hw_queue()
        if (!blk_mq_hctx_has_pending())
          return
        blk_mq_sched_dispatch_requests()
          if (blk_mq_hctx_stopped())  2) load
            return
          __blk_mq_sched_dispatch_requests()
    
    Supposing another scenario.
    
    CPU0                        CPU1
    
    blk_mq_requeue_work()
      blk_mq_insert_request() 1) store
                                virtblk_done()
                                  blk_mq_start_stopped_hw_queue()
      blk_mq_run_hw_queues()        clear_bit(BLK_MQ_S_STOPPED)       3) store
                                    blk_mq_run_hw_queue()
                                      if (!blk_mq_hctx_has_pending()) 4) load
                                        return
                                      blk_mq_sched_dispatch_requests()
        if (blk_mq_hctx_stopped())  2) load
          continue
        blk_mq_run_hw_queue()
    
    Both scenarios are similar, the full memory barrier should be inserted
    between 1) and 2), as well as between 3) and 4) to make sure that either
    CPU0 sees BLK_MQ_S_STOPPED is cleared or CPU1 sees dispatch list.
    Otherwise, either CPU will not rerun the hardware queue causing
    starvation of the request.
    
    The easy way to fix it is to add the essential full memory barrier into
    helper of blk_mq_hctx_stopped(). In order to not affect the fast path
    (hardware queue is not stopped most of the time), we only insert the
    barrier into the slow path. Actually, only slow path needs to care about
    missing of dispatching the request to the low-level device driver.
    
    Fixes: 320ae51feed5 ("blk-mq: new multi-queue block IO queueing mechanism")
    Cc: [email protected]
    Cc: Muchun Song <[email protected]>
    Signed-off-by: Muchun Song <[email protected]>
    Reviewed-by: Ming Lei <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

block: return unsigned int from bdev_io_min [+ + +]
Author: Christoph Hellwig <[email protected]>
Date:   Tue Nov 19 08:26:02 2024 +0100

    block: return unsigned int from bdev_io_min
    
    [ Upstream commit 46fd48ab3ea3eb3bb215684bd66ea3d260b091a9 ]
    
    The underlying limit is defined as an unsigned int, so return that from
    bdev_io_min as well.
    
    Fixes: ac481c20ef8f ("block: Topology ioctls")
    Signed-off-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Martin K. Petersen <[email protected]>
    Reviewed-by: John Garry <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Bluetooth: btusb: Add RTL8852BE device 0489:e123 to device tables [+ + +]
Author: Hilda Wu <[email protected]>
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 <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: Fix type of len in rfcomm_sock_getsockopt{,_old}() [+ + +]
Author: Andrej Shadura <[email protected]>
Date:   Wed Oct 9 14:14:24 2024 +0200

    Bluetooth: Fix type of len in rfcomm_sock_getsockopt{,_old}()
    
    commit 5fe6caa62b07fd39cd6a28acc8f92ba2955e11a6 upstream.
    
    Commit 9bf4e919ccad worked around an issue introduced after an innocuous
    optimisation change in LLVM main:
    
    > len is defined as an 'int' because it is assigned from
    > '__user int *optlen'. However, it is clamped against the result of
    > sizeof(), which has a type of 'size_t' ('unsigned long' for 64-bit
    > platforms). This is done with min_t() because min() requires compatible
    > types, which results in both len and the result of sizeof() being casted
    > to 'unsigned int', meaning len changes signs and the result of sizeof()
    > is truncated. From there, len is passed to copy_to_user(), which has a
    > third parameter type of 'unsigned long', so it is widened and changes
    > signs again. This excessive casting in combination with the KCSAN
    > instrumentation causes LLVM to fail to eliminate the __bad_copy_from()
    > call, failing the build.
    
    The same issue occurs in rfcomm in functions rfcomm_sock_getsockopt and
    rfcomm_sock_getsockopt_old.
    
    Change the type of len to size_t in both rfcomm_sock_getsockopt and
    rfcomm_sock_getsockopt_old and replace min_t() with min().
    
    Cc: [email protected]
    Co-authored-by: Aleksei Vetrov <[email protected]>
    Improves: 9bf4e919ccad ("Bluetooth: Fix type of len in {l2cap,sco}_sock_getsockopt_old()")
    Link: https://github.com/ClangBuiltLinux/linux/issues/2007
    Link: https://github.com/llvm/llvm-project/issues/85647
    Signed-off-by: Andrej Shadura <[email protected]>
    Reviewed-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: L2CAP: do not leave dangling sk pointer on error in l2cap_sock_create() [+ + +]
Author: Ignat Korchagin <[email protected]>
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 <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf, sockmap: Fix sk_msg_reset_curr [+ + +]
Author: Zijian Zhang <[email protected]>
Date:   Wed Nov 6 22:25:20 2024 +0000

    bpf, sockmap: Fix sk_msg_reset_curr
    
    [ Upstream commit 955afd57dc4bf7e8c620a0a9e3af3c881c2c6dff ]
    
    Found in the test_txmsg_pull in test_sockmap,
    ```
    txmsg_cork = 512; // corking is importrant here
    opt->iov_length = 3;
    opt->iov_count = 1;
    opt->rate = 512; // sendmsg will be invoked 512 times
    ```
    The first sendmsg will send an sk_msg with size 3, and bpf_msg_pull_data
    will be invoked the first time. sk_msg_reset_curr will reset the copybreak
    from 3 to 0. In the second sendmsg, since we are in the stage of corking,
    psock->cork will be reused in func sk_msg_alloc. msg->sg.copybreak is 0
    now, the second msg will overwrite the first msg. As a result, we could
    not pass the data integrity test.
    
    The same problem happens in push and pop test. Thus, fix sk_msg_reset_curr
    to restore the correct copybreak.
    
    Fixes: bb9aefde5bba ("bpf: sockmap, updating the sg structure should also update curr")
    Signed-off-by: Zijian Zhang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf, sockmap: Several fixes to bpf_msg_pop_data [+ + +]
Author: Zijian Zhang <[email protected]>
Date:   Wed Nov 6 22:25:19 2024 +0000

    bpf, sockmap: Several fixes to bpf_msg_pop_data
    
    [ Upstream commit 5d609ba262475db450ba69b8e8a557bd768ac07a ]
    
    Several fixes to bpf_msg_pop_data,
    1. In sk_msg_shift_left, we should put_page
    2. if (len == 0), return early is better
    3. pop the entire sk_msg (last == msg->sg.size) should be supported
    4. Fix for the value of variable "a"
    5. In sk_msg_shift_left, after shifting, i has already pointed to the next
    element. Addtional sk_msg_iter_var_next may result in BUG.
    
    Fixes: 7246d8ed4dcc ("bpf: helper to pop data from messages")
    Signed-off-by: Zijian Zhang <[email protected]>
    Reviewed-by: John Fastabend <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf, sockmap: Several fixes to bpf_msg_push_data [+ + +]
Author: Zijian Zhang <[email protected]>
Date:   Wed Nov 6 22:25:18 2024 +0000

    bpf, sockmap: Several fixes to bpf_msg_push_data
    
    [ Upstream commit 15ab0548e3107665c34579ae523b2b6e7c22082a ]
    
    Several fixes to bpf_msg_push_data,
    1. test_sockmap has tests where bpf_msg_push_data is invoked to push some
    data at the end of a message, but -EINVAL is returned. In this case, in
    bpf_msg_push_data, after the first loop, i will be set to msg->sg.end, add
    the logic to handle it.
    2. In the code block of "if (start - offset)", it's possible that "i"
    points to the last of sk_msg_elem. In this case, "sk_msg_iter_next(msg,
    end)" might still be called twice, another invoking is in "if (!copy)"
    code block, but actually only one is needed. Add the logic to handle it,
    and reconstruct the code to make the logic more clear.
    
    Fixes: 6fff607e2f14 ("bpf: sk_msg program helper bpf_msg_push_data")
    Signed-off-by: Zijian Zhang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf, xdp: Update devmap comments to reflect napi/rcu usage [+ + +]
Author: John Fastabend <[email protected]>
Date:   Sun Jan 26 16:14:00 2020 -0800

    bpf, xdp: Update devmap comments to reflect napi/rcu usage
    
    commit 42a84a8cd0ff0cbff5a4595e1304c4567a30267d upstream.
    
    Now that we rely on synchronize_rcu and call_rcu waiting to
    exit perempt-disable regions (NAPI) lets update the comments
    to reflect this.
    
    Fixes: 0536b85239b84 ("xdp: Simplify devmap cleanup")
    Signed-off-by: John Fastabend <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: Björn Töpel <[email protected]>
    Acked-by: Song Liu <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bpf: Fix exact match conditions in trie_get_next_key() [+ + +]
Author: Hou Tao <[email protected]>
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 <[email protected]>
    Signed-off-by: Hou Tao <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: fix OOB devmap writes when deleting elements [+ + +]
Author: Maciej Fijalkowski <[email protected]>
Date:   Fri Nov 22 13:10:30 2024 +0100

    bpf: fix OOB devmap writes when deleting elements
    
    [ Upstream commit ab244dd7cf4c291f82faacdc50b45cc0f55b674d ]
    
    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: [email protected]
    Reported-by: Jordy Zomer <[email protected]>
    Suggested-by: Jordy Zomer <[email protected]>
    Reviewed-by: Toke Høiland-Jørgensen <[email protected]>
    Acked-by: John Fastabend <[email protected]>
    Signed-off-by: Maciej Fijalkowski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix the xdp_adjust_tail sample prog issue [+ + +]
Author: Yuan Chen <[email protected]>
Date:   Mon Sep 30 10:41:15 2024 +0800

    bpf: Fix the xdp_adjust_tail sample prog issue
    
    [ Upstream commit 4236f114a3ffbbfd217436c08852e94cae372f57 ]
    
    During the xdp_adjust_tail test, probabilistic failure occurs and SKB package
    is discarded by the kernel. After checking the issues by tracking SKB package,
    it is identified that they were caused by checksum errors. Refer to checksum
    of the arch/arm64/include/asm/checksum.h for fixing.
    
    v2: Based on Alexei Starovoitov's suggestions, it is necessary to keep the code
     implementation consistent.
    
    Fixes: c6ffd1ff7856 (bpf: add bpf_xdp_adjust_tail sample prog)
    Signed-off-by: Yuan Chen <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Handle BPF_EXIST and BPF_NOEXIST for LPM trie [+ + +]
Author: Hou Tao <[email protected]>
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 <[email protected]>
    Acked-by: Daniel Borkmann <[email protected]>
    Signed-off-by: Hou Tao <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
btrfs: ref-verify: fix use-after-free after invalid ref action [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Fri Nov 15 11:29:21 2024 +0000

    btrfs: ref-verify: fix use-after-free after invalid ref action
    
    [ Upstream commit 7c4e39f9d2af4abaf82ca0e315d1fd340456620f ]
    
    At btrfs_ref_tree_mod() after we successfully inserted the new ref entry
    (local variable 'ref') into the respective block entry's rbtree (local
    variable 'be'), if we find an unexpected action of BTRFS_DROP_DELAYED_REF,
    we error out and free the ref entry without removing it from the block
    entry's rbtree. Then in the error path of btrfs_ref_tree_mod() we call
    btrfs_free_ref_cache(), which iterates over all block entries and then
    calls free_block_entry() for each one, and there we will trigger a
    use-after-free when we are called against the block entry to which we
    added the freed ref entry to its rbtree, since the rbtree still points
    to the block entry, as we didn't remove it from the rbtree before freeing
    it in the error path at btrfs_ref_tree_mod(). Fix this by removing the
    new ref entry from the rbtree before freeing it.
    
    Syzbot report this with the following stack traces:
    
       BTRFS error (device loop0 state EA):   Ref action 2, root 5, ref_root 0, parent 8564736, owner 0, offset 0, num_refs 18446744073709551615
          __btrfs_mod_ref+0x7dd/0xac0 fs/btrfs/extent-tree.c:2523
          update_ref_for_cow+0x9cd/0x11f0 fs/btrfs/ctree.c:512
          btrfs_force_cow_block+0x9f6/0x1da0 fs/btrfs/ctree.c:594
          btrfs_cow_block+0x35e/0xa40 fs/btrfs/ctree.c:754
          btrfs_search_slot+0xbdd/0x30d0 fs/btrfs/ctree.c:2116
          btrfs_insert_empty_items+0x9c/0x1a0 fs/btrfs/ctree.c:4314
          btrfs_insert_empty_item fs/btrfs/ctree.h:669 [inline]
          btrfs_insert_orphan_item+0x1f1/0x320 fs/btrfs/orphan.c:23
          btrfs_orphan_add+0x6d/0x1a0 fs/btrfs/inode.c:3482
          btrfs_unlink+0x267/0x350 fs/btrfs/inode.c:4293
          vfs_unlink+0x365/0x650 fs/namei.c:4469
          do_unlinkat+0x4ae/0x830 fs/namei.c:4533
          __do_sys_unlinkat fs/namei.c:4576 [inline]
          __se_sys_unlinkat fs/namei.c:4569 [inline]
          __x64_sys_unlinkat+0xcc/0xf0 fs/namei.c:4569
          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
       BTRFS error (device loop0 state EA):   Ref action 1, root 5, ref_root 5, parent 0, owner 260, offset 0, num_refs 1
          __btrfs_mod_ref+0x76b/0xac0 fs/btrfs/extent-tree.c:2521
          update_ref_for_cow+0x96a/0x11f0
          btrfs_force_cow_block+0x9f6/0x1da0 fs/btrfs/ctree.c:594
          btrfs_cow_block+0x35e/0xa40 fs/btrfs/ctree.c:754
          btrfs_search_slot+0xbdd/0x30d0 fs/btrfs/ctree.c:2116
          btrfs_lookup_inode+0xdc/0x480 fs/btrfs/inode-item.c:411
          __btrfs_update_delayed_inode+0x1e7/0xb90 fs/btrfs/delayed-inode.c:1030
          btrfs_update_delayed_inode fs/btrfs/delayed-inode.c:1114 [inline]
          __btrfs_commit_inode_delayed_items+0x2318/0x24a0 fs/btrfs/delayed-inode.c:1137
          __btrfs_run_delayed_items+0x213/0x490 fs/btrfs/delayed-inode.c:1171
          btrfs_commit_transaction+0x8a8/0x3740 fs/btrfs/transaction.c:2313
          prepare_to_relocate+0x3c4/0x4c0 fs/btrfs/relocation.c:3586
          relocate_block_group+0x16c/0xd40 fs/btrfs/relocation.c:3611
          btrfs_relocate_block_group+0x77d/0xd90 fs/btrfs/relocation.c:4081
          btrfs_relocate_chunk+0x12c/0x3b0 fs/btrfs/volumes.c:3377
          __btrfs_balance+0x1b0f/0x26b0 fs/btrfs/volumes.c:4161
          btrfs_balance+0xbdc/0x10c0 fs/btrfs/volumes.c:4538
       BTRFS error (device loop0 state EA):   Ref action 2, root 5, ref_root 0, parent 8564736, owner 0, offset 0, num_refs 18446744073709551615
          __btrfs_mod_ref+0x7dd/0xac0 fs/btrfs/extent-tree.c:2523
          update_ref_for_cow+0x9cd/0x11f0 fs/btrfs/ctree.c:512
          btrfs_force_cow_block+0x9f6/0x1da0 fs/btrfs/ctree.c:594
          btrfs_cow_block+0x35e/0xa40 fs/btrfs/ctree.c:754
          btrfs_search_slot+0xbdd/0x30d0 fs/btrfs/ctree.c:2116
          btrfs_lookup_inode+0xdc/0x480 fs/btrfs/inode-item.c:411
          __btrfs_update_delayed_inode+0x1e7/0xb90 fs/btrfs/delayed-inode.c:1030
          btrfs_update_delayed_inode fs/btrfs/delayed-inode.c:1114 [inline]
          __btrfs_commit_inode_delayed_items+0x2318/0x24a0 fs/btrfs/delayed-inode.c:1137
          __btrfs_run_delayed_items+0x213/0x490 fs/btrfs/delayed-inode.c:1171
          btrfs_commit_transaction+0x8a8/0x3740 fs/btrfs/transaction.c:2313
          prepare_to_relocate+0x3c4/0x4c0 fs/btrfs/relocation.c:3586
          relocate_block_group+0x16c/0xd40 fs/btrfs/relocation.c:3611
          btrfs_relocate_block_group+0x77d/0xd90 fs/btrfs/relocation.c:4081
          btrfs_relocate_chunk+0x12c/0x3b0 fs/btrfs/volumes.c:3377
          __btrfs_balance+0x1b0f/0x26b0 fs/btrfs/volumes.c:4161
          btrfs_balance+0xbdc/0x10c0 fs/btrfs/volumes.c:4538
       ==================================================================
       BUG: KASAN: slab-use-after-free in rb_first+0x69/0x70 lib/rbtree.c:473
       Read of size 8 at addr ffff888042d1af38 by task syz.0.0/5329
    
       CPU: 0 UID: 0 PID: 5329 Comm: syz.0.0 Not tainted 6.12.0-rc7-syzkaller #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:377 [inline]
        print_report+0x169/0x550 mm/kasan/report.c:488
        kasan_report+0x143/0x180 mm/kasan/report.c:601
        rb_first+0x69/0x70 lib/rbtree.c:473
        free_block_entry+0x78/0x230 fs/btrfs/ref-verify.c:248
        btrfs_free_ref_cache+0xa3/0x100 fs/btrfs/ref-verify.c:917
        btrfs_ref_tree_mod+0x139f/0x15e0 fs/btrfs/ref-verify.c:898
        btrfs_free_extent+0x33c/0x380 fs/btrfs/extent-tree.c:3544
        __btrfs_mod_ref+0x7dd/0xac0 fs/btrfs/extent-tree.c:2523
        update_ref_for_cow+0x9cd/0x11f0 fs/btrfs/ctree.c:512
        btrfs_force_cow_block+0x9f6/0x1da0 fs/btrfs/ctree.c:594
        btrfs_cow_block+0x35e/0xa40 fs/btrfs/ctree.c:754
        btrfs_search_slot+0xbdd/0x30d0 fs/btrfs/ctree.c:2116
        btrfs_lookup_inode+0xdc/0x480 fs/btrfs/inode-item.c:411
        __btrfs_update_delayed_inode+0x1e7/0xb90 fs/btrfs/delayed-inode.c:1030
        btrfs_update_delayed_inode fs/btrfs/delayed-inode.c:1114 [inline]
        __btrfs_commit_inode_delayed_items+0x2318/0x24a0 fs/btrfs/delayed-inode.c:1137
        __btrfs_run_delayed_items+0x213/0x490 fs/btrfs/delayed-inode.c:1171
        btrfs_commit_transaction+0x8a8/0x3740 fs/btrfs/transaction.c:2313
        prepare_to_relocate+0x3c4/0x4c0 fs/btrfs/relocation.c:3586
        relocate_block_group+0x16c/0xd40 fs/btrfs/relocation.c:3611
        btrfs_relocate_block_group+0x77d/0xd90 fs/btrfs/relocation.c:4081
        btrfs_relocate_chunk+0x12c/0x3b0 fs/btrfs/volumes.c:3377
        __btrfs_balance+0x1b0f/0x26b0 fs/btrfs/volumes.c:4161
        btrfs_balance+0xbdc/0x10c0 fs/btrfs/volumes.c:4538
        btrfs_ioctl_balance+0x493/0x7c0 fs/btrfs/ioctl.c:3673
        vfs_ioctl fs/ioctl.c:51 [inline]
        __do_sys_ioctl fs/ioctl.c:907 [inline]
        __se_sys_ioctl+0xf9/0x170 fs/ioctl.c:893
        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:0x7f996df7e719
       RSP: 002b:00007f996ede7038 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
       RAX: ffffffffffffffda RBX: 00007f996e135f80 RCX: 00007f996df7e719
       RDX: 0000000020000180 RSI: 00000000c4009420 RDI: 0000000000000004
       RBP: 00007f996dff139e R08: 0000000000000000 R09: 0000000000000000
       R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
       R13: 0000000000000000 R14: 00007f996e135f80 R15: 00007fff79f32e68
        </TASK>
    
       Allocated by task 5329:
        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:257 [inline]
        __kmalloc_cache_noprof+0x19c/0x2c0 mm/slub.c:4295
        kmalloc_noprof include/linux/slab.h:878 [inline]
        kzalloc_noprof include/linux/slab.h:1014 [inline]
        btrfs_ref_tree_mod+0x264/0x15e0 fs/btrfs/ref-verify.c:701
        btrfs_free_extent+0x33c/0x380 fs/btrfs/extent-tree.c:3544
        __btrfs_mod_ref+0x7dd/0xac0 fs/btrfs/extent-tree.c:2523
        update_ref_for_cow+0x9cd/0x11f0 fs/btrfs/ctree.c:512
        btrfs_force_cow_block+0x9f6/0x1da0 fs/btrfs/ctree.c:594
        btrfs_cow_block+0x35e/0xa40 fs/btrfs/ctree.c:754
        btrfs_search_slot+0xbdd/0x30d0 fs/btrfs/ctree.c:2116
        btrfs_lookup_inode+0xdc/0x480 fs/btrfs/inode-item.c:411
        __btrfs_update_delayed_inode+0x1e7/0xb90 fs/btrfs/delayed-inode.c:1030
        btrfs_update_delayed_inode fs/btrfs/delayed-inode.c:1114 [inline]
        __btrfs_commit_inode_delayed_items+0x2318/0x24a0 fs/btrfs/delayed-inode.c:1137
        __btrfs_run_delayed_items+0x213/0x490 fs/btrfs/delayed-inode.c:1171
        btrfs_commit_transaction+0x8a8/0x3740 fs/btrfs/transaction.c:2313
        prepare_to_relocate+0x3c4/0x4c0 fs/btrfs/relocation.c:3586
        relocate_block_group+0x16c/0xd40 fs/btrfs/relocation.c:3611
        btrfs_relocate_block_group+0x77d/0xd90 fs/btrfs/relocation.c:4081
        btrfs_relocate_chunk+0x12c/0x3b0 fs/btrfs/volumes.c:3377
        __btrfs_balance+0x1b0f/0x26b0 fs/btrfs/volumes.c:4161
        btrfs_balance+0xbdc/0x10c0 fs/btrfs/volumes.c:4538
        btrfs_ioctl_balance+0x493/0x7c0 fs/btrfs/ioctl.c:3673
        vfs_ioctl fs/ioctl.c:51 [inline]
        __do_sys_ioctl fs/ioctl.c:907 [inline]
        __se_sys_ioctl+0xf9/0x170 fs/ioctl.c:893
        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 5329:
        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:579
        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:230 [inline]
        slab_free_hook mm/slub.c:2342 [inline]
        slab_free mm/slub.c:4579 [inline]
        kfree+0x1a0/0x440 mm/slub.c:4727
        btrfs_ref_tree_mod+0x136c/0x15e0
        btrfs_free_extent+0x33c/0x380 fs/btrfs/extent-tree.c:3544
        __btrfs_mod_ref+0x7dd/0xac0 fs/btrfs/extent-tree.c:2523
        update_ref_for_cow+0x9cd/0x11f0 fs/btrfs/ctree.c:512
        btrfs_force_cow_block+0x9f6/0x1da0 fs/btrfs/ctree.c:594
        btrfs_cow_block+0x35e/0xa40 fs/btrfs/ctree.c:754
        btrfs_search_slot+0xbdd/0x30d0 fs/btrfs/ctree.c:2116
        btrfs_lookup_inode+0xdc/0x480 fs/btrfs/inode-item.c:411
        __btrfs_update_delayed_inode+0x1e7/0xb90 fs/btrfs/delayed-inode.c:1030
        btrfs_update_delayed_inode fs/btrfs/delayed-inode.c:1114 [inline]
        __btrfs_commit_inode_delayed_items+0x2318/0x24a0 fs/btrfs/delayed-inode.c:1137
        __btrfs_run_delayed_items+0x213/0x490 fs/btrfs/delayed-inode.c:1171
        btrfs_commit_transaction+0x8a8/0x3740 fs/btrfs/transaction.c:2313
        prepare_to_relocate+0x3c4/0x4c0 fs/btrfs/relocation.c:3586
        relocate_block_group+0x16c/0xd40 fs/btrfs/relocation.c:3611
        btrfs_relocate_block_group+0x77d/0xd90 fs/btrfs/relocation.c:4081
        btrfs_relocate_chunk+0x12c/0x3b0 fs/btrfs/volumes.c:3377
        __btrfs_balance+0x1b0f/0x26b0 fs/btrfs/volumes.c:4161
        btrfs_balance+0xbdc/0x10c0 fs/btrfs/volumes.c:4538
        btrfs_ioctl_balance+0x493/0x7c0 fs/btrfs/ioctl.c:3673
        vfs_ioctl fs/ioctl.c:51 [inline]
        __do_sys_ioctl fs/ioctl.c:907 [inline]
        __se_sys_ioctl+0xf9/0x170 fs/ioctl.c:893
        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
    
       The buggy address belongs to the object at ffff888042d1af00
        which belongs to the cache kmalloc-64 of size 64
       The buggy address is located 56 bytes inside of
        freed 64-byte region [ffff888042d1af00, ffff888042d1af40)
    
       The buggy address belongs to the physical page:
       page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x42d1a
       anon flags: 0x4fff00000000000(node=1|zone=1|lastcpupid=0x7ff)
       page_type: f5(slab)
       raw: 04fff00000000000 ffff88801ac418c0 0000000000000000 dead000000000001
       raw: 0000000000000000 0000000000200020 00000001f5000000 0000000000000000
       page dumped because: kasan: bad access detected
       page_owner tracks the page as allocated
       page last allocated via order 0, migratetype Unmovable, gfp_mask 0x52c40(GFP_NOFS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP), pid 5055, tgid 5055 (dhcpcd-run-hook), ts 40377240074, free_ts 40376848335
        set_page_owner include/linux/page_owner.h:32 [inline]
        post_alloc_hook+0x1f3/0x230 mm/page_alloc.c:1541
        prep_new_page mm/page_alloc.c:1549 [inline]
        get_page_from_freelist+0x3649/0x3790 mm/page_alloc.c:3459
        __alloc_pages_noprof+0x292/0x710 mm/page_alloc.c:4735
        alloc_pages_mpol_noprof+0x3e8/0x680 mm/mempolicy.c:2265
        alloc_slab_page+0x6a/0x140 mm/slub.c:2412
        allocate_slab+0x5a/0x2f0 mm/slub.c:2578
        new_slab mm/slub.c:2631 [inline]
        ___slab_alloc+0xcd1/0x14b0 mm/slub.c:3818
        __slab_alloc+0x58/0xa0 mm/slub.c:3908
        __slab_alloc_node mm/slub.c:3961 [inline]
        slab_alloc_node mm/slub.c:4122 [inline]
        __do_kmalloc_node mm/slub.c:4263 [inline]
        __kmalloc_noprof+0x25a/0x400 mm/slub.c:4276
        kmalloc_noprof include/linux/slab.h:882 [inline]
        kzalloc_noprof include/linux/slab.h:1014 [inline]
        tomoyo_encode2 security/tomoyo/realpath.c:45 [inline]
        tomoyo_encode+0x26f/0x540 security/tomoyo/realpath.c:80
        tomoyo_realpath_from_path+0x59e/0x5e0 security/tomoyo/realpath.c:283
        tomoyo_get_realpath security/tomoyo/file.c:151 [inline]
        tomoyo_check_open_permission+0x255/0x500 security/tomoyo/file.c:771
        security_file_open+0x777/0x990 security/security.c:3109
        do_dentry_open+0x369/0x1460 fs/open.c:945
        vfs_open+0x3e/0x330 fs/open.c:1088
        do_open fs/namei.c:3774 [inline]
        path_openat+0x2c84/0x3590 fs/namei.c:3933
       page last free pid 5055 tgid 5055 stack trace:
        reset_page_owner include/linux/page_owner.h:25 [inline]
        free_pages_prepare mm/page_alloc.c:1112 [inline]
        free_unref_page+0xcfb/0xf20 mm/page_alloc.c:2642
        free_pipe_info+0x300/0x390 fs/pipe.c:860
        put_pipe_info fs/pipe.c:719 [inline]
        pipe_release+0x245/0x320 fs/pipe.c:742
        __fput+0x23f/0x880 fs/file_table.c:431
        __do_sys_close fs/open.c:1567 [inline]
        __se_sys_close fs/open.c:1552 [inline]
        __x64_sys_close+0x7f/0x110 fs/open.c:1552
        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
    
       Memory state around the buggy address:
        ffff888042d1ae00: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
        ffff888042d1ae80: 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc fc
       >ffff888042d1af00: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
                                               ^
        ffff888042d1af80: 00 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc
        ffff888042d1b000: 00 00 00 00 00 fc fc 00 00 00 00 00 fc fc 00 00
    
    Reported-by: [email protected]
    Link: https://lore.kernel.org/linux-btrfs/[email protected]/T/#u
    Fixes: fd708b81d972 ("Btrfs: add a extent ref verify tool")
    CC: [email protected] # 4.19+
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
can: j1939: j1939_session_new(): fix skb reference counting [+ + +]
Author: Dmitry Antipov <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=d4e8dc385d9258220c31
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Signed-off-by: Dmitry Antipov <[email protected]>
    Tested-by: Oleksij Rempel <[email protected]>
    Acked-by: Oleksij Rempel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [mkl: clean up commit message]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

can: sun4i_can: sun4i_can_err(): call can_change_state() even if cf is NULL [+ + +]
Author: Dario Binacchi <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

can: sun4i_can: sun4i_can_err(): fix {rx,tx}_errors statistics [+ + +]
Author: Dario Binacchi <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
cgroup: Make operations on the cgroup root_list RCU safe [+ + +]
Author: Yafang Shao <[email protected]>
Date:   Mon Dec 2 16:40:23 2024 +0530

    cgroup: Make operations on the cgroup root_list RCU safe
    
    commit d23b5c577715892c87533b13923306acc6243f93 upstream.
    
    At present, when we perform operations on the cgroup root_list, we must
    hold the cgroup_mutex, which is a relatively heavyweight lock. In reality,
    we can make operations on this list RCU-safe, eliminating the need to hold
    the cgroup_mutex during traversal. Modifications to the list only occur in
    the cgroup root setup and destroy paths, which should be infrequent in a
    production environment. In contrast, traversal may occur frequently.
    Therefore, making it RCU-safe would be beneficial.
    
    Signed-off-by: Yafang Shao <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    [fp: adapt to 5.10 mainly because of changes made by e210a89f5b07
     ("cgroup.c: add helper __cset_cgroup_from_root to cleanup duplicated
     codes")]
    Signed-off-by: Fedor Pchelkin <[email protected]>
    [Shivani: Modified to apply on v5.4.y]
    Signed-off-by: Shivani Agarwal <[email protected]>
    Reviewed-by: Siddh Raman Pant <[email protected]>
    Signed-off-by: Siddh Raman Pant <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cgroup: Move rcu_head up near the top of cgroup_root [+ + +]
Author: Waiman Long <[email protected]>
Date:   Mon Dec 2 16:40:24 2024 +0530

    cgroup: Move rcu_head up near the top of cgroup_root
    
    commit a7fb0423c201ba12815877a0b5a68a6a1710b23a upstream.
    
    Commit d23b5c577715 ("cgroup: Make operations on the cgroup root_list RCU
    safe") adds a new rcu_head to the cgroup_root structure and kvfree_rcu()
    for freeing the cgroup_root.
    
    The current implementation of kvfree_rcu(), however, has the limitation
    that the offset of the rcu_head structure within the larger data
    structure must be less than 4096 or the compilation will fail. See the
    macro definition of __is_kvfree_rcu_offset() in include/linux/rcupdate.h
    for more information.
    
    By putting rcu_head below the large cgroup structure, any change to the
    cgroup structure that makes it larger run the risk of causing build
    failure under certain configurations. Commit 77070eeb8821 ("cgroup:
    Avoid false cacheline sharing of read mostly rstat_cpu") happens to be
    the last straw that breaks it. Fix this problem by moving the rcu_head
    structure up before the cgroup structure.
    
    Fixes: d23b5c577715 ("cgroup: Make operations on the cgroup root_list RCU safe")
    Reported-by: Stephen Rothwell <[email protected]>
    Closes: https://lore.kernel.org/lkml/[email protected]/
    Signed-off-by: Waiman Long <[email protected]>
    Acked-by: Yafang Shao <[email protected]>
    Reviewed-by: Yosry Ahmed <[email protected]>
    Reviewed-by: Michal Koutný <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Fedor Pchelkin <[email protected]>
    [Shivani: Modified to apply on v5.4.y]
    Signed-off-by: Shivani Agarwal <[email protected]>
    Reviewed-by: Siddh Raman Pant <[email protected]>
    Signed-off-by: Siddh Raman Pant <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cifs: Fix buffer overflow when parsing NFS reparse points [+ + +]
Author: Pali Rohár <[email protected]>
Date:   Fri Nov 22 16:29:43 2024 +0100

    cifs: Fix buffer overflow when parsing NFS reparse points
    
    commit e2a8910af01653c1c268984855629d71fb81f404 upstream.
    
    ReparseDataLength is sum of the InodeType size and DataBuffer size.
    So to get DataBuffer size it is needed to subtract InodeType's size from
    ReparseDataLength.
    
    Function cifs_strndup_from_utf16() is currentlly accessing buf->DataBuffer
    at position after the end of the buffer because it does not subtract
    InodeType size from the length. Fix this problem and correctly subtract
    variable len.
    
    Member InodeType is present only when reparse buffer is large enough. Check
    for ReparseDataLength before accessing InodeType to prevent another invalid
    memory access.
    
    Major and minor rdev values are present also only when reparse buffer is
    large enough. Check for reparse buffer size before calling reparse_mkdev().
    
    Fixes: d5ecebc4900d ("smb3: Allow query of symlinks stored as reparse points")
    Reviewed-by: Paulo Alcantara (Red Hat) <[email protected]>
    Signed-off-by: Pali Rohár <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    [use variable name symlink_buf, the other buf->InodeType accesses are
    not used in current version so skip]
    Signed-off-by: Mahmoud Adam <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
clk: axi-clkgen: use devm_platform_ioremap_resource() short-hand [+ + +]
Author: Alexandru Ardelean <[email protected]>
Date:   Mon Feb 1 17:12:45 2021 +0200

    clk: axi-clkgen: use devm_platform_ioremap_resource() short-hand
    
    [ Upstream commit 6ba7ea7630fb03c1ce01508bdf89f5bb39b38e54 ]
    
    No major functional change. Noticed while checking the driver code that
    this could be used.
    Saves two lines.
    
    Signed-off-by: Alexandru Ardelean <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Stephen Boyd <[email protected]>
    Stable-dep-of: c64ef7e4851d ("clk: clk-axi-clkgen: make sure to enable the AXI bus clock")
    Signed-off-by: Sasha Levin <[email protected]>

clk: clk-axi-clkgen: make sure to enable the AXI bus clock [+ + +]
Author: Nuno Sa <[email protected]>
Date:   Tue Oct 29 14:59:42 2024 +0100

    clk: clk-axi-clkgen: make sure to enable the AXI bus clock
    
    [ Upstream commit c64ef7e4851d1a9abbb7f7833e4936973ac5ba79 ]
    
    In order to access the registers of the HW, we need to make sure that
    the AXI bus clock is enabled. Hence let's increase the number of clocks
    by one.
    
    In order to keep backward compatibility and make sure old DTs still work
    we check if clock-names is available or not. If it is, then we can
    disambiguate between really having the AXI clock or a parent clock and
    so we can enable the bus clock. If not, we fallback to what was done
    before and don't explicitly enable the AXI bus clock.
    
    Note that if clock-names is given, the axi clock must be the last one in
    the phandle array (also enforced in the DT bindings) so that we can reuse
    as much code as possible.
    
    Fixes: 0e646c52cf0e ("clk: Add axi-clkgen driver")
    Signed-off-by: Nuno Sa <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Stephen Boyd <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: qcom: gcc-qcs404: fix initial rate of GPLL3 [+ + +]
Author: Gabor Juhos <[email protected]>
Date:   Tue Oct 22 11:45:56 2024 +0200

    clk: qcom: gcc-qcs404: fix initial rate of GPLL3
    
    commit 36d202241d234fa4ac50743510d098ad52bd193a upstream.
    
    The comment before the config of the GPLL3 PLL says that the
    PLL should run at 930 MHz. In contrary to this, calculating
    the frequency from the current configuration values by using
    19.2 MHz as input frequency defined in 'qcs404.dtsi', it gives
    921.6 MHz:
    
      $ xo=19200000; l=48; alpha=0x0; alpha_hi=0x0
      $ echo "$xo * ($((l)) + $(((alpha_hi << 32 | alpha) >> 8)) / 2^32)" | bc -l
      921600000.00000000000000000000
    
    Set 'alpha_hi' in the configuration to a value used in downstream
    kernels [1][2] in order to get the correct output rate:
    
      $ xo=19200000; l=48; alpha=0x0; alpha_hi=0x70
      $ echo "$xo * ($((l)) + $(((alpha_hi << 32 | alpha) >> 8)) / 2^32)" | bc -l
      930000000.00000000000000000000
    
    The change is based on static code analysis, compile tested only.
    
    [1] https://git.codelinaro.org/clo/la/kernel/msm-5.4/-/blob/kernel.lnx.5.4.r56-rel/drivers/clk/qcom/gcc-qcs404.c?ref_type=heads#L335
    [2} https://git.codelinaro.org/clo/la/kernel/msm-5.15/-/blob/kernel.lnx.5.15.r49-rel/drivers/clk/qcom/gcc-qcs404.c?ref_type=heads#L127
    
    Cc: [email protected]
    Fixes: 652f1813c113 ("clk: qcom: gcc: Add global clock controller driver for QCS404")
    Signed-off-by: Gabor Juhos <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
comedi: Flush partial mappings in error case [+ + +]
Author: Jann Horn <[email protected]>
Date:   Thu Oct 17 21:07:45 2024 +0200

    comedi: Flush partial mappings in error case
    
    commit ce8f9fb651fac95dd41f69afe54d935420b945bd upstream.
    
    If some remap_pfn_range() calls succeeded before one failed, we still have
    buffer pages mapped into the userspace page tables when we drop the buffer
    reference with comedi_buf_map_put(bm). The userspace mappings are only
    cleaned up later in the mmap error path.
    
    Fix it by explicitly flushing all mappings in our VMA on the error path.
    
    See commit 79a61cc3fc04 ("mm: avoid leaving partial pfn mappings around in
    error case").
    
    Cc: [email protected]
    Fixes: ed9eccbe8970 ("Staging: add comedi core")
    Signed-off-by: Jann Horn <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cpufreq: loongson2: Unregister platform_driver on failure [+ + +]
Author: Yuan Can <[email protected]>
Date:   Wed Oct 16 17:06:15 2024 +0800

    cpufreq: loongson2: Unregister platform_driver on failure
    
    [ Upstream commit 5f856d71ccdf89b4bac0ff70ebb0bb582e7f7f18 ]
    
    When cpufreq_register_driver() returns error, the cpufreq_init() returns
    without unregister platform_driver, fix by add missing
    platform_driver_unregister() when cpufreq_register_driver() failed.
    
    Fixes: f8ede0f700f5 ("MIPS: Loongson 2F: Add CPU frequency scaling support")
    Signed-off-by: Yuan Can <[email protected]>
    Signed-off-by: Viresh Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
crypto: bcm - add error check in the ahash_hmac_init function [+ + +]
Author: Chen Ridong <[email protected]>
Date:   Mon Nov 4 12:17:45 2024 +0000

    crypto: bcm - add error check in the ahash_hmac_init function
    
    [ Upstream commit 19630cf57233e845b6ac57c9c969a4888925467b ]
    
    The ahash_init functions may return fails. The ahash_hmac_init should
    not return ok when ahash_init returns error. For an example, ahash_init
    will return -ENOMEM when allocation memory is error.
    
    Fixes: 9d12ba86f818 ("crypto: brcm - Add Broadcom SPU driver")
    Signed-off-by: Chen Ridong <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: cavium - Fix an error handling path in cpt_ucode_load_fw() [+ + +]
Author: Christophe JAILLET <[email protected]>
Date:   Fri Nov 8 18:22:27 2024 +0100

    crypto: cavium - Fix an error handling path in cpt_ucode_load_fw()
    
    [ Upstream commit 572b7cf08403b6c67dfe0dc3e0f2efb42443254f ]
    
    If do_cpt_init() fails, a previous dma_alloc_coherent() call needs to be
    undone.
    
    Add the needed dma_free_coherent() before returning.
    
    Fixes: 9e2c7d99941d ("crypto: cavium - Add Support for Octeon-tx CPT Engine")
    Signed-off-by: Christophe JAILLET <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: cavium - Fix the if condition to exit loop after timeout [+ + +]
Author: Everest K.C <[email protected]>
Date:   Fri Oct 18 10:23:10 2024 -0600

    crypto: cavium - Fix the if condition to exit loop after timeout
    
    [ Upstream commit 53d91ca76b6c426c546542a44c78507b42008c9e ]
    
    The while loop breaks in the first run because of incorrect
    if condition. It also causes the statements after the if to
    appear dead.
    Fix this by changing the condition from if(timeout--) to
    if(!timeout--).
    
    This bug was reported by Coverity Scan.
    Report:
    CID 1600859: (#1 of 1): Logically dead code (DEADCODE)
    dead_error_line: Execution cannot reach this statement: udelay(30UL);
    
    Fixes: 9e2c7d99941d ("crypto: cavium - Add Support for Octeon-tx CPT Engine")
    Signed-off-by: Everest K.C. <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: pcrypt - Call crypto layer directly when padata_do_parallel() return -EBUSY [+ + +]
Author: Yi Yang <[email protected]>
Date:   Tue Oct 15 02:09:35 2024 +0000

    crypto: pcrypt - Call crypto layer directly when padata_do_parallel() return -EBUSY
    
    [ Upstream commit 662f2f13e66d3883b9238b0b96b17886179e60e2 ]
    
    Since commit 8f4f68e788c3 ("crypto: pcrypt - Fix hungtask for
    PADATA_RESET"), the pcrypt encryption and decryption operations return
    -EAGAIN when the CPU goes online or offline. In alg_test(), a WARN is
    generated when pcrypt_aead_decrypt() or pcrypt_aead_encrypt() returns
    -EAGAIN, the unnecessary panic will occur when panic_on_warn set 1.
    Fix this issue by calling crypto layer directly without parallelization
    in that case.
    
    Fixes: 8f4f68e788c3 ("crypto: pcrypt - Fix hungtask for PADATA_RESET")
    Signed-off-by: Yi Yang <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: x86/aegis128 - access 32-bit arguments as 32-bit [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Wed Oct 16 17:00:42 2024 -0700

    crypto: x86/aegis128 - access 32-bit arguments as 32-bit
    
    [ Upstream commit 3b2f2d22fb424e9bebda4dbf6676cbfc7f9f62cd ]
    
    Fix the AEGIS assembly code to access 'unsigned int' arguments as 32-bit
    values instead of 64-bit, since the upper bits of the corresponding
    64-bit registers are not guaranteed to be zero.
    
    Note: there haven't been any reports of this bug actually causing
    incorrect behavior.  Neither gcc nor clang guarantee zero-extension to
    64 bits, but zero-extension is likely to happen in practice because most
    instructions that operate on 32-bit registers zero-extend to 64 bits.
    
    Fixes: 1d373d4e8e15 ("crypto: x86 - Add optimized AEGIS implementations")
    Cc: [email protected]
    Reviewed-by: Ondrej Mosnacek <[email protected]>
    Signed-off-by: Eric Biggers <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dccp: Fix memory leak in dccp_feat_change_recv [+ + +]
Author: Ivan Solodovnikov <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dm thin: Add missing destroy_work_on_stack() [+ + +]
Author: Yuan Can <[email protected]>
Date:   Wed Nov 6 09:03:12 2024 +0800

    dm thin: Add missing destroy_work_on_stack()
    
    commit e74fa2447bf9ed03d085b6d91f0256cc1b53f1a8 upstream.
    
    This commit add missed destroy_work_on_stack() operations for pw->worker in
    pool_work_wait().
    
    Fixes: e7a3e871d895 ("dm thin: cleanup noflush_work to use a proper completion")
    Cc: [email protected]
    Signed-off-by: Yuan Can <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dma-buf: fix dma_fence_array_signaled v4 [+ + +]
Author: Christian König <[email protected]>
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 <[email protected]>
    Reviewed-by: Boris Brezillon <[email protected]>
    Tested-by: Chia-I Wu <[email protected]>
    Reviewed-by: Tvrtko Ursulin <[email protected]>
    Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12094
    Cc: <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu: set the right AMDGPU sg segment limitation [+ + +]
Author: Prike Liang <[email protected]>
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 <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/etnaviv: dump: fix sparse warnings [+ + +]
Author: Marc Kleine-Budde <[email protected]>
Date:   Wed Dec 23 20:51:10 2020 +0100

    drm/etnaviv: dump: fix sparse warnings
    
    [ Upstream commit 03a2753936e85beb8239fd20ae3fb2ce90209212 ]
    
    This patch fixes the following sparse warnings, by adding the missing endianess
    conversion functions.
    
    | etnaviv/etnaviv_dump.c:78:26: warning: restricted __le32 degrades to integer
    | etnaviv/etnaviv_dump.c:88:26: warning: incorrect type in assignment (different base types)
    | etnaviv/etnaviv_dump.c:88:26:    expected restricted __le32 [usertype] reg
    | etnaviv/etnaviv_dump.c:88:26:    got unsigned short const
    | etnaviv/etnaviv_dump.c:89:28: warning: incorrect type in assignment (different base types)
    | etnaviv/etnaviv_dump.c:89:28:    expected restricted __le32 [usertype] value
    | etnaviv/etnaviv_dump.c:89:28:    got unsigned int
    | etnaviv/etnaviv_dump.c:210:43: warning: incorrect type in assignment (different base types)
    | etnaviv/etnaviv_dump.c:210:43:    expected restricted __le32
    | etnaviv/etnaviv_dump.c:210:43:    got long
    
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Lucas Stach <[email protected]>
    Stable-dep-of: 37dc4737447a ("drm/etnaviv: hold GPU lock across perfmon sampling")
    Signed-off-by: Sasha Levin <[email protected]>

drm/etnaviv: fix power register offset on GC300 [+ + +]
Author: Doug Brown <[email protected]>
Date:   Sat Sep 10 13:29:39 2022 -0700

    drm/etnaviv: fix power register offset on GC300
    
    [ Upstream commit 61a6920bb604df3a0e389a2a9479e1e233e4461d ]
    
    Older GC300 revisions have their power registers at an offset of 0x200
    rather than 0x100. Add new gpu_read_power and gpu_write_power functions
    to encapsulate accesses to the power addresses and fix the addresses.
    
    Signed-off-by: Doug Brown <[email protected]>
    Signed-off-by: Lucas Stach <[email protected]>
    Stable-dep-of: 37dc4737447a ("drm/etnaviv: hold GPU lock across perfmon sampling")
    Signed-off-by: Sasha Levin <[email protected]>

drm/etnaviv: flush shader L1 cache after user commandstream [+ + +]
Author: Lucas Stach <[email protected]>
Date:   Fri Oct 25 17:14:46 2024 +0200

    drm/etnaviv: flush shader L1 cache after user commandstream
    
    commit 4f8dbadef085ab447a01a8d4806a3f629fea05ed upstream.
    
    The shader L1 cache is a writeback cache for shader loads/stores
    and thus must be flushed before any BOs backing the shader buffers
    are potentially freed.
    
    Cc: [email protected]
    Reviewed-by: Christian Gmeiner <[email protected]>
    Signed-off-by: Lucas Stach <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/etnaviv: hold GPU lock across perfmon sampling [+ + +]
Author: Lucas Stach <[email protected]>
Date:   Fri Jul 5 22:00:09 2024 +0200

    drm/etnaviv: hold GPU lock across perfmon sampling
    
    [ Upstream commit 37dc4737447a7667f8e9ec790dac251da057eb27 ]
    
    The perfmon sampling mutates shared GPU state (e.g. VIVS_HI_CLOCK_CONTROL
    to select the pipe for the perf counter reads). To avoid clashing with
    other functions mutating the same state (e.g. etnaviv_gpu_update_clock)
    the perfmon sampling needs to hold the GPU lock.
    
    Fixes: 68dc0b295dcb ("drm/etnaviv: use 'sync points' for performance monitor requests")
    Reviewed-by: Christian Gmeiner <[email protected]>
    Signed-off-by: Lucas Stach <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/imx/ipuv3: Use IRQF_NO_AUTOEN flag in request_irq() [+ + +]
Author: Jinjie Ruan <[email protected]>
Date:   Thu Sep 12 16:30:18 2024 +0800

    drm/imx/ipuv3: Use IRQF_NO_AUTOEN flag in request_irq()
    
    [ Upstream commit 40004709a3d3b07041a473a163ca911ef04ab8bd ]
    
    disable_irq() after request_irq() still has a time gap in which
    interrupts can come. request_irq() with IRQF_NO_AUTOEN flag will
    disable IRQ auto-enable when request IRQ.
    
    Fixes: 47b1be5c0f4e ("staging: imx/drm: request irq only after adding the crtc")
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Jinjie Ruan <[email protected]>
    Reviewed-by: Philipp Zabel <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/mcde: Enable module autoloading [+ + +]
Author: Liao Chen <[email protected]>
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 <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/mm: Mark drm_mm_interval_tree*() functions with __maybe_unused [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Thu Aug 29 18:46:40 2024 +0300

    drm/mm: Mark drm_mm_interval_tree*() functions with __maybe_unused
    
    [ Upstream commit 53bd7c1c0077db533472ae32799157758302ef48 ]
    
    The INTERVAL_TREE_DEFINE() uncoditionally provides a bunch of helper
    functions which in some cases may be not used. This, in particular,
    prevents kernel builds with clang, `make W=1` and CONFIG_WERROR=y:
    
    .../drm/drm_mm.c:152:1: error: unused function 'drm_mm_interval_tree_insert' [-Werror,-Wunused-function]
      152 | INTERVAL_TREE_DEFINE(struct drm_mm_node, rb,
          | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      153 |                      u64, __subtree_last,
          |                      ~~~~~~~~~~~~~~~~~~~~
      154 |                      START, LAST, static inline, drm_mm_interval_tree)
          |                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Fix this by marking drm_mm_interval_tree*() functions with __maybe_unused.
    
    See also commit 6863f5643dd7 ("kbuild: allow Clang to find unused static
    inline functions for W=1 build").
    
    Fixes: 202b52b7fbf7 ("drm: Track drm_mm nodes with an interval tree")
    Signed-off-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Jani Nikula <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Jani Nikula <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/adreno: Use IRQF_NO_AUTOEN flag in request_irq() [+ + +]
Author: Jinjie Ruan <[email protected]>
Date:   Thu Sep 12 16:30:20 2024 +0800

    drm/msm/adreno: Use IRQF_NO_AUTOEN flag in request_irq()
    
    [ Upstream commit 394679f322649d06fea3c646ba65f5a0887f52c3 ]
    
    disable_irq() after request_irq() still has a time gap in which
    interrupts can come. request_irq() with IRQF_NO_AUTOEN flag will
    disable IRQ auto-enable when request IRQ.
    
    Fixes: 4b565ca5a2cb ("drm/msm: Add A6XX device support")
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Jinjie Ruan <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/614075/
    Signed-off-by: Rob Clark <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/omap: Fix locking in omap_gem_new_dmabuf() [+ + +]
Author: Tomi Valkeinen <[email protected]>
Date:   Tue Aug 6 16:50:29 2024 +0300

    drm/omap: Fix locking in omap_gem_new_dmabuf()
    
    [ Upstream commit e6a1c4037227539373c8cf484ace83833e2ad6a2 ]
    
    omap_gem_new_dmabuf() creates the new gem object, and then takes and
    holds the omap_obj->lock for the rest of the function. This has two
    issues:
    
    - omap_gem_free_object(), which is called in the error paths, also takes
      the same lock, leading to deadlock
    - Even if the above wouldn't happen, in the error cases
      omap_gem_new_dmabuf() still unlocks omap_obj->lock, even after the
      omap_obj has already been freed.
    
    Furthermore, I don't think there's any reason to take the lock at all,
    as the object was just created and not yet shared with anyone else.
    
    To fix all this, drop taking the lock.
    
    Fixes: 3cbd0c587b12 ("drm/omap: gem: Replace struct_mutex usage with omap_obj private lock")
    Reported-by: Dan Carpenter <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Reviewed-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Tomi Valkeinen <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/panfrost: Remove unused id_mask from struct panfrost_model [+ + +]
Author: Steven Price <[email protected]>
Date:   Fri Oct 25 15:00:07 2024 +0100

    drm/panfrost: Remove unused id_mask from struct panfrost_model
    
    [ Upstream commit 581d1f8248550f2b67847e6d84f29fbe3751ea0a ]
    
    The id_mask field of struct panfrost_model has never been used.
    
    Fixes: f3ba91228e8e ("drm/panfrost: Add initial panfrost driver")
    Signed-off-by: Steven Price <[email protected]>
    Reviewed-by: Boris Brezillon <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/radeon/r600_cs: Fix possible int overflow in r600_packet3_check() [+ + +]
Author: Igor Artemiev <[email protected]>
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 <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/sti: Add __iomem for mixer_dbg_mxn's parameter [+ + +]
Author: Pei Xiao <[email protected]>
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 <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Fixes: a5f81078a56c ("drm/sti: add debugfs entries for MIXER crtc")
    Signed-off-by: Pei Xiao <[email protected]>
    Acked-by: Raphael Gallais-Pou <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/c28f0dcb6a4526721d83ba1f659bba30564d3d54.1732087094.git.xiaopei01@kylinos.cn
    Signed-off-by: Raphael Gallais-Pou <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm: panel-orientation-quirks: Add quirk for AYA NEO 2 model [+ + +]
Author: Joaquín Ignacio Aramendía <[email protected]>
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 <[email protected]>
    Signed-off-by: Tobias Jakobi <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Hans de Goede <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/2b35545b77a9fd8c9699b751ca282226dcecb1dd.1726492131.git.tjakobi@math.uni-bielefeld.de
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dt-bindings: clock: adi,axi-clkgen: convert old binding to yaml format [+ + +]
Author: Alexandru Ardelean <[email protected]>
Date:   Tue Oct 13 17:34:20 2020 +0300

    dt-bindings: clock: adi,axi-clkgen: convert old binding to yaml format
    
    [ Upstream commit bd91abb218e0ac4a7402d6c25d383e2a706bb511 ]
    
    This change converts the old binding for the AXI clkgen driver to a yaml
    format.
    
    As maintainers, added:
     - Lars-Peter Clausen <[email protected]> - as original author of driver &
       binding
     - Michael Hennerich <[email protected]> - as supporter of
       Analog Devices drivers
    
    Acked-by: Michael Hennerich <[email protected]>
    Acked-by: Lars-Peter Clausen <[email protected]>
    Signed-off-by: Alexandru Ardelean <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Rob Herring <[email protected]>
    Signed-off-by: Stephen Boyd <[email protected]>
    Stable-dep-of: 47f3f5a82a31 ("dt-bindings: clock: axi-clkgen: include AXI clk")
    Signed-off-by: Sasha Levin <[email protected]>

dt-bindings: clock: axi-clkgen: include AXI clk [+ + +]
Author: Nuno Sa <[email protected]>
Date:   Tue Oct 29 14:59:41 2024 +0100

    dt-bindings: clock: axi-clkgen: include AXI clk
    
    [ Upstream commit 47f3f5a82a31527e027929c5cec3dd1ef5ef30f5 ]
    
    In order to access the registers of the HW, we need to make sure that
    the AXI bus clock is enabled. Hence let's increase the number of clocks
    by one and add clock-names to differentiate between parent clocks and
    the bus clock.
    
    Fixes: 0e646c52cf0e ("clk: Add axi-clkgen driver")
    Signed-off-by: Nuno Sa <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Conor Dooley <[email protected]>
    Signed-off-by: Stephen Boyd <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dt-bindings: vendor-prefixes: Add NeoFidelity, Inc [+ + +]
Author: Igor Prusov <[email protected]>
Date:   Wed Sep 25 17:52:39 2024 +0300

    dt-bindings: vendor-prefixes: Add NeoFidelity, Inc
    
    [ Upstream commit 5d9e6d6fc1b98c8c22d110ee931b3b233d43cd13 ]
    
    Add vendor prefix for NeoFidelity, Inc
    
    Signed-off-by: Igor Prusov <[email protected]>
    Acked-by: Krzysztof Kozlowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
EDAC/bluefield: Fix potential integer overflow [+ + +]
Author: David Thompson <[email protected]>
Date:   Mon Sep 30 11:10:56 2024 -0400

    EDAC/bluefield: Fix potential integer overflow
    
    [ Upstream commit 1fe774a93b46bb029b8f6fa9d1f25affa53f06c6 ]
    
    The 64-bit argument for the "get DIMM info" SMC call consists of mem_ctrl_idx
    left-shifted 16 bits and OR-ed with DIMM index.  With mem_ctrl_idx defined as
    32-bits wide the left-shift operation truncates the upper 16 bits of
    information during the calculation of the SMC argument.
    
    The mem_ctrl_idx stack variable must be defined as 64-bits wide to prevent any
    potential integer overflow, i.e. loss of data from upper 16 bits.
    
    Fixes: 82413e562ea6 ("EDAC, mellanox: Add ECC support for BlueField DDR4")
    Signed-off-by: David Thompson <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Shravan Kumar Ramani <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
EDAC/fsl_ddr: Fix bad bit shift operations [+ + +]
Author: Priyanka Singh <[email protected]>
Date:   Wed Oct 16 16:31:11 2024 -0400

    EDAC/fsl_ddr: Fix bad bit shift operations
    
    [ Upstream commit 9ec22ac4fe766c6abba845290d5139a3fbe0153b ]
    
    Fix undefined behavior caused by left-shifting a negative value in the
    expression:
    
        cap_high ^ (1 << (bad_data_bit - 32))
    
    The variable bad_data_bit ranges from 0 to 63. When it is less than 32,
    bad_data_bit - 32 becomes negative, and left-shifting by a negative
    value in C is undefined behavior.
    
    Fix this by combining cap_high and cap_low into a 64-bit variable.
    
      [ bp: Massage commit message, simplify error bits handling. ]
    
    Fixes: ea2eb9a8b620 ("EDAC, fsl-ddr: Separate FSL DDR driver from MPC85xx")
    Signed-off-by: Priyanka Singh <[email protected]>
    Signed-off-by: Li Yang <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
efi/tpm: Pass correct address to memblock_reserve [+ + +]
Author: Jerry Snitselaar <[email protected]>
Date:   Sat Oct 22 08:23:52 2022 -0700

    efi/tpm: Pass correct address to memblock_reserve
    
    [ Upstream commit f4cd18c5b2000df0c382f6530eeca9141ea41faf ]
    
    memblock_reserve() expects a physical address, but the address being
    passed for the TPM final events log is what was returned from
    early_memremap(). This results in something like the following:
    
    [    0.000000] memblock_reserve: [0xffffffffff2c0000-0xffffffffff2c00e4] efi_tpm_eventlog_init+0x324/0x370
    
    Pass the address from efi like what is done for the TPM events log.
    
    Fixes: c46f3405692d ("tpm: Reserve the TPM final events table")
    Cc: Matthew Garrett <[email protected]>
    Cc: Jarkko Sakkinen <[email protected]>
    Cc: Bartosz Szczepanek <[email protected]>
    Cc: Ard Biesheuvel <[email protected]>
    Signed-off-by: Jerry Snitselaar <[email protected]>
    Acked-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Ard Biesheuvel <[email protected]>
    Stable-dep-of: e6d654e9f5a9 ("tpm: fix signed/unsigned bug when checking event logs")
    Signed-off-by: Sasha Levin <[email protected]>

 
ext4: fix FS_IOC_GETFSMAP handling [+ + +]
Author: Theodore Ts'o <[email protected]>
Date:   Wed Oct 23 00:25:37 2024 -0400

    ext4: fix FS_IOC_GETFSMAP handling
    
    commit 4a622e4d477bb12ad5ed4abbc7ad1365de1fa347 upstream.
    
    The original implementation ext4's FS_IOC_GETFSMAP handling only
    worked when the range of queried blocks included at least one free
    (unallocated) block range.  This is because how the metadata blocks
    were emitted was as a side effect of ext4_mballoc_query_range()
    calling ext4_getfsmap_datadev_helper(), and that function was only
    called when a free block range was identified.  As a result, this
    caused generic/365 to fail.
    
    Fix this by creating a new function ext4_getfsmap_meta_helper() which
    gets called so that blocks before the first free block range in a
    block group can get properly reported.
    
    Signed-off-by: Theodore Ts'o <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: supress data-race warnings in ext4_free_inodes_{count,set}() [+ + +]
Author: Jeongjun Park <[email protected]>
Date:   Thu Oct 3 21:53:37 2024 +0900

    ext4: supress data-race warnings in ext4_free_inodes_{count,set}()
    
    commit 902cc179c931a033cd7f4242353aa2733bf8524c upstream.
    
    find_group_other() and find_group_orlov() read *_lo, *_hi with
    ext4_free_inodes_count without additional locking. This can cause
    data-race warning, but since the lock is held for most writes and free
    inodes value is generally not a problem even if it is incorrect, it is
    more appropriate to use READ_ONCE()/WRITE_ONCE() than to add locking.
    
    ==================================================================
    BUG: KCSAN: data-race in ext4_free_inodes_count / ext4_free_inodes_set
    
    write to 0xffff88810404300e of 2 bytes by task 6254 on cpu 1:
     ext4_free_inodes_set+0x1f/0x80 fs/ext4/super.c:405
     __ext4_new_inode+0x15ca/0x2200 fs/ext4/ialloc.c:1216
     ext4_symlink+0x242/0x5a0 fs/ext4/namei.c:3391
     vfs_symlink+0xca/0x1d0 fs/namei.c:4615
     do_symlinkat+0xe3/0x340 fs/namei.c:4641
     __do_sys_symlinkat fs/namei.c:4657 [inline]
     __se_sys_symlinkat fs/namei.c:4654 [inline]
     __x64_sys_symlinkat+0x5e/0x70 fs/namei.c:4654
     x64_sys_call+0x1dda/0x2d60 arch/x86/include/generated/asm/syscalls_64.h:267
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0x54/0x120 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    read to 0xffff88810404300e of 2 bytes by task 6257 on cpu 0:
     ext4_free_inodes_count+0x1c/0x80 fs/ext4/super.c:349
     find_group_other fs/ext4/ialloc.c:594 [inline]
     __ext4_new_inode+0x6ec/0x2200 fs/ext4/ialloc.c:1017
     ext4_symlink+0x242/0x5a0 fs/ext4/namei.c:3391
     vfs_symlink+0xca/0x1d0 fs/namei.c:4615
     do_symlinkat+0xe3/0x340 fs/namei.c:4641
     __do_sys_symlinkat fs/namei.c:4657 [inline]
     __se_sys_symlinkat fs/namei.c:4654 [inline]
     __x64_sys_symlinkat+0x5e/0x70 fs/namei.c:4654
     x64_sys_call+0x1dda/0x2d60 arch/x86/include/generated/asm/syscalls_64.h:267
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0x54/0x120 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Cc: [email protected]
    Signed-off-by: Jeongjun Park <[email protected]>
    Reviewed-by: Andreas Dilger <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
f2fs: fix f2fs_bug_on when uninstalling filesystem call f2fs_evict_inode. [+ + +]
Author: Qi Han <[email protected]>
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 <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fbdev/sh7760fb: Alloc DMA memory from hardware device [+ + +]
Author: Thomas Zimmermann <[email protected]>
Date:   Tue Jun 13 13:07:02 2023 +0200

    fbdev/sh7760fb: Alloc DMA memory from hardware device
    
    [ Upstream commit 8404e56f4bc1d1a65bfc98450ba3dae5e653dda1 ]
    
    Pass the hardware device to the DMA helpers dma_alloc_coherent() and
    dma_free_coherent(). The fbdev device that is currently being used is
    a software device and does not provide DMA memory. Also update the
    related dev_*() output statements similarly.
    
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Reviewed-by: Javier Martinez Canillas <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Stable-dep-of: f89d17ae2ac4 ("fbdev: sh7760fb: Fix a possible memory leak in sh7760fb_alloc_mem()")
    Signed-off-by: Sasha Levin <[email protected]>

 
fbdev: sh7760fb: Fix a possible memory leak in sh7760fb_alloc_mem() [+ + +]
Author: Zhen Lei <[email protected]>
Date:   Sat Oct 26 11:56:34 2024 +0800

    fbdev: sh7760fb: Fix a possible memory leak in sh7760fb_alloc_mem()
    
    [ Upstream commit f89d17ae2ac42931be2a0153fecbf8533280c927 ]
    
    When information such as info->screen_base is not ready, calling
    sh7760fb_free_mem() does not release memory correctly. Call
    dma_free_coherent() instead.
    
    Fixes: 4a25e41831ee ("video: sh7760fb: SH7760/SH7763 LCDC framebuffer driver")
    Signed-off-by: Zhen Lei <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
firmware: arm_scpi: Check the DVFS OPP count returned by the firmware [+ + +]
Author: Luo Qiu <[email protected]>
Date:   Fri Nov 1 11:21:15 2024 +0800

    firmware: arm_scpi: Check the DVFS OPP count returned by the firmware
    
    [ Upstream commit 109aa654f85c5141e813b2cd1bd36d90be678407 ]
    
    Fix a kernel crash with the below call trace when the SCPI firmware
    returns OPP count of zero.
    
    dvfs_info.opp_count may be zero on some platforms during the reboot
    test, and the kernel will crash after dereferencing the pointer to
    kcalloc(info->count, sizeof(*opp), GFP_KERNEL).
    
      |  Unable to handle kernel NULL pointer dereference at virtual address 0000000000000028
      |  Mem abort info:
      |    ESR = 0x96000004
      |    Exception class = DABT (current EL), IL = 32 bits
      |    SET = 0, FnV = 0
      |    EA = 0, S1PTW = 0
      |  Data abort info:
      |    ISV = 0, ISS = 0x00000004
      |    CM = 0, WnR = 0
      |  user pgtable: 4k pages, 48-bit VAs, pgdp = 00000000faefa08c
      |  [0000000000000028] pgd=0000000000000000
      |  Internal error: Oops: 96000004 [#1] SMP
      |  scpi-hwmon: probe of PHYT000D:00 failed with error -110
      |  Process systemd-udevd (pid: 1701, stack limit = 0x00000000aaede86c)
      |  CPU: 2 PID: 1701 Comm: systemd-udevd Not tainted 4.19.90+ #1
      |  Hardware name: PHYTIUM LTD Phytium FT2000/4/Phytium FT2000/4, BIOS
      |  pstate: 60000005 (nZCv daif -PAN -UAO)
      |  pc : scpi_dvfs_recalc_rate+0x40/0x58 [clk_scpi]
      |  lr : clk_register+0x438/0x720
      |  Call trace:
      |   scpi_dvfs_recalc_rate+0x40/0x58 [clk_scpi]
      |   devm_clk_hw_register+0x50/0xa0
      |   scpi_clk_ops_init.isra.2+0xa0/0x138 [clk_scpi]
      |   scpi_clocks_probe+0x528/0x70c [clk_scpi]
      |   platform_drv_probe+0x58/0xa8
      |   really_probe+0x260/0x3d0
      |   driver_probe_device+0x12c/0x148
      |   device_driver_attach+0x74/0x98
      |   __driver_attach+0xb4/0xe8
      |   bus_for_each_dev+0x88/0xe0
      |   driver_attach+0x30/0x40
      |   bus_add_driver+0x178/0x2b0
      |   driver_register+0x64/0x118
      |   __platform_driver_register+0x54/0x60
      |   scpi_clocks_driver_init+0x24/0x1000 [clk_scpi]
      |   do_one_initcall+0x54/0x220
      |   do_init_module+0x54/0x1c8
      |   load_module+0x14a4/0x1668
      |   __se_sys_finit_module+0xf8/0x110
      |   __arm64_sys_finit_module+0x24/0x30
      |   el0_svc_common+0x78/0x170
      |   el0_svc_handler+0x38/0x78
      |   el0_svc+0x8/0x340
      |  Code: 937d7c00 a94153f3 a8c27bfd f9400421 (b8606820)
      |  ---[ end trace 06feb22469d89fa8 ]---
      |  Kernel panic - not syncing: Fatal exception
      |  SMP: stopping secondary CPUs
      |  Kernel Offset: disabled
      |  CPU features: 0x10,a0002008
      |  Memory Limit: none
    
    Fixes: 8cb7cf56c9fe ("firmware: add support for ARM System Control and Power Interface(SCPI) protocol")
    Signed-off-by: Luo Qiu <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Sudeep Holla <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

firmware: google: Unregister driver_info on failure [+ + +]
Author: Yuan Can <[email protected]>
Date:   Tue Oct 15 21:13:44 2024 +0800

    firmware: google: Unregister driver_info on failure
    
    [ Upstream commit 32b0901e141f6d4cf49d820b53eb09b88b1f72f7 ]
    
    When platform_device_register_full() returns error, the gsmi_init() returns
    without unregister gsmi_driver_info, fix by add missing
    platform_driver_unregister() when platform_device_register_full() failed.
    
    Fixes: 8942b2d5094b ("gsmi: Add GSMI commands to log S0ix info")
    Signed-off-by: Yuan Can <[email protected]>
    Acked-by: Brian Norris <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Tzung-Bi Shih <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

firmware: google: Unregister driver_info on failure and exit in gsmi [+ + +]
Author: Arthur Heymans <[email protected]>
Date:   Mon Nov 18 11:19:30 2019 +0100

    firmware: google: Unregister driver_info on failure and exit in gsmi
    
    [ Upstream commit c6e7af0515daca800d84b9cfa1bf19e53c4f5bc3 ]
    
    Fix a bug where the kernel module couldn't be loaded after unloading,
    as the platform driver wasn't released on exit.
    
    Signed-off-by: Arthur Heymans <[email protected]>
    Signed-off-by: Patrick Rudolph <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 32b0901e141f ("firmware: google: Unregister driver_info on failure")
    Signed-off-by: Sasha Levin <[email protected]>

 
ftrace: Fix regression with module command in stack_trace_filter [+ + +]
Author: guoweikang <[email protected]>
Date:   Wed Nov 20 13:27:49 2024 +0800

    ftrace: Fix regression with module command in stack_trace_filter
    
    commit 45af52e7d3b8560f21d139b3759735eead8b1653 upstream.
    
    When executing the following command:
    
        # echo "write*:mod:ext3" > /sys/kernel/tracing/stack_trace_filter
    
    The current mod command causes a null pointer dereference. While commit
    0f17976568b3f ("ftrace: Fix regression with module command in stack_trace_filter")
    has addressed part of the issue, it left a corner case unhandled, which still
    results in a kernel crash.
    
    Cc: [email protected]
    Cc: Masami Hiramatsu <[email protected]>
    Cc: Mark Rutland <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Fixes: 04ec7bb642b77 ("tracing: Have the trace_array hold the list of registered func probes");
    Signed-off-by: guoweikang <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gpio: grgpio: Add NULL check in grgpio_probe [+ + +]
Author: Charles Han <[email protected]>
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: [email protected]
    Fixes: 7eb6ce2f2723 ("gpio: Convert to using %pOF instead of full_name")
    Signed-off-by: Charles Han <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

gpio: grgpio: use a helper variable to store the address of ofdev->dev [+ + +]
Author: Bartosz Golaszewski <[email protected]>
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/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Stable-dep-of: 050b23d081da ("gpio: grgpio: Add NULL check in grgpio_probe")
    Signed-off-by: Sasha Levin <[email protected]>

 
hfsplus: don't query the device logical block size multiple times [+ + +]
Author: Thadeu Lima de Souza Cascardo <[email protected]>
Date:   Thu Nov 7 08:41:09 2024 -0300

    hfsplus: don't query the device logical block size multiple times
    
    [ Upstream commit 1c82587cb57687de3f18ab4b98a8850c789bedcf ]
    
    Devices block sizes may change. One of these cases is a loop device by
    using ioctl LOOP_SET_BLOCK_SIZE.
    
    While this may cause other issues like IO being rejected, in the case of
    hfsplus, it will allocate a block by using that size and potentially write
    out-of-bounds when hfsplus_read_wrapper calls hfsplus_submit_bio and the
    latter function reads a different io_size.
    
    Using a new min_io_size initally set to sb_min_blocksize works for the
    purposes of the original fix, since it will be set to the max between
    HFSPLUS_SECTOR_SIZE and the first seen logical block size. We still use the
    max between HFSPLUS_SECTOR_SIZE and min_io_size in case the latter is not
    initialized.
    
    Tested by mounting an hfsplus filesystem with loop block sizes 512, 1024
    and 4096.
    
    The produced KASAN report before the fix looks like this:
    
    [  419.944641] ==================================================================
    [  419.945655] BUG: KASAN: slab-use-after-free in hfsplus_read_wrapper+0x659/0xa0a
    [  419.946703] Read of size 2 at addr ffff88800721fc00 by task repro/10678
    [  419.947612]
    [  419.947846] CPU: 0 UID: 0 PID: 10678 Comm: repro Not tainted 6.12.0-rc5-00008-gdf56e0f2f3ca #84
    [  419.949007] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014
    [  419.950035] Call Trace:
    [  419.950384]  <TASK>
    [  419.950676]  dump_stack_lvl+0x57/0x78
    [  419.951212]  ? hfsplus_read_wrapper+0x659/0xa0a
    [  419.951830]  print_report+0x14c/0x49e
    [  419.952361]  ? __virt_addr_valid+0x267/0x278
    [  419.952979]  ? kmem_cache_debug_flags+0xc/0x1d
    [  419.953561]  ? hfsplus_read_wrapper+0x659/0xa0a
    [  419.954231]  kasan_report+0x89/0xb0
    [  419.954748]  ? hfsplus_read_wrapper+0x659/0xa0a
    [  419.955367]  hfsplus_read_wrapper+0x659/0xa0a
    [  419.955948]  ? __pfx_hfsplus_read_wrapper+0x10/0x10
    [  419.956618]  ? do_raw_spin_unlock+0x59/0x1a9
    [  419.957214]  ? _raw_spin_unlock+0x1a/0x2e
    [  419.957772]  hfsplus_fill_super+0x348/0x1590
    [  419.958355]  ? hlock_class+0x4c/0x109
    [  419.958867]  ? __pfx_hfsplus_fill_super+0x10/0x10
    [  419.959499]  ? __pfx_string+0x10/0x10
    [  419.960006]  ? lock_acquire+0x3e2/0x454
    [  419.960532]  ? bdev_name.constprop.0+0xce/0x243
    [  419.961129]  ? __pfx_bdev_name.constprop.0+0x10/0x10
    [  419.961799]  ? pointer+0x3f0/0x62f
    [  419.962277]  ? __pfx_pointer+0x10/0x10
    [  419.962761]  ? vsnprintf+0x6c4/0xfba
    [  419.963178]  ? __pfx_vsnprintf+0x10/0x10
    [  419.963621]  ? setup_bdev_super+0x376/0x3b3
    [  419.964029]  ? snprintf+0x9d/0xd2
    [  419.964344]  ? __pfx_snprintf+0x10/0x10
    [  419.964675]  ? lock_acquired+0x45c/0x5e9
    [  419.965016]  ? set_blocksize+0x139/0x1c1
    [  419.965381]  ? sb_set_blocksize+0x6d/0xae
    [  419.965742]  ? __pfx_hfsplus_fill_super+0x10/0x10
    [  419.966179]  mount_bdev+0x12f/0x1bf
    [  419.966512]  ? __pfx_mount_bdev+0x10/0x10
    [  419.966886]  ? vfs_parse_fs_string+0xce/0x111
    [  419.967293]  ? __pfx_vfs_parse_fs_string+0x10/0x10
    [  419.967702]  ? __pfx_hfsplus_mount+0x10/0x10
    [  419.968073]  legacy_get_tree+0x104/0x178
    [  419.968414]  vfs_get_tree+0x86/0x296
    [  419.968751]  path_mount+0xba3/0xd0b
    [  419.969157]  ? __pfx_path_mount+0x10/0x10
    [  419.969594]  ? kmem_cache_free+0x1e2/0x260
    [  419.970311]  do_mount+0x99/0xe0
    [  419.970630]  ? __pfx_do_mount+0x10/0x10
    [  419.971008]  __do_sys_mount+0x199/0x1c9
    [  419.971397]  do_syscall_64+0xd0/0x135
    [  419.971761]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    [  419.972233] RIP: 0033:0x7c3cb812972e
    [  419.972564] Code: 48 8b 0d f5 46 0d 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 49 89 ca b8 a5 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d c2 46 0d 00 f7 d8 64 89 01 48
    [  419.974371] RSP: 002b:00007ffe30632548 EFLAGS: 00000286 ORIG_RAX: 00000000000000a5
    [  419.975048] RAX: ffffffffffffffda RBX: 00007ffe306328d8 RCX: 00007c3cb812972e
    [  419.975701] RDX: 0000000020000000 RSI: 0000000020000c80 RDI: 00007ffe306325d0
    [  419.976363] RBP: 00007ffe30632720 R08: 00007ffe30632610 R09: 0000000000000000
    [  419.977034] R10: 0000000000200008 R11: 0000000000000286 R12: 0000000000000000
    [  419.977713] R13: 00007ffe306328e8 R14: 00005a0eb298bc68 R15: 00007c3cb8356000
    [  419.978375]  </TASK>
    [  419.978589]
    
    Fixes: 6596528e391a ("hfsplus: ensure bio requests are not smaller than the hardware sectors")
    Signed-off-by: Thadeu Lima de Souza Cascardo <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
HID: wacom: fix when get product name maybe null pointer [+ + +]
Author: WangYuli <[email protected]>
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 <[email protected]>
    Co-developed-by: Xu Rao <[email protected]>
    Signed-off-by: Xu Rao <[email protected]>
    Signed-off-by: WangYuli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Benjamin Tissoires <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: wacom: Interpret tilt data from Intuos Pro BT as signed values [+ + +]
Author: Jason Gerecke <[email protected]>
Date:   Mon Oct 28 10:39:14 2024 -0700

    HID: wacom: Interpret tilt data from Intuos Pro BT as signed values
    
    commit 49a397ad24ee5e2c53a59dada2780d7e71bd3f77 upstream.
    
    The tilt data contained in the Bluetooth packets of an Intuos Pro are
    supposed to be interpreted as signed values. Simply casting the values
    to type `char` is not guaranteed to work since it is implementation-
    defined whether it is signed or unsigned. At least one user has noticed
    the data being reported incorrectly on their system. To ensure that the
    data is interpreted properly, we specifically cast to `signed char`
    instead.
    
    Link: https://github.com/linuxwacom/input-wacom/issues/445
    Fixes: 4922cd26f03c ("HID: wacom: Support 2nd-gen Intuos Pro's Bluetooth classic interface")
    CC: [email protected] # 4.11+
    Signed-off-by: Jason Gerecke <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
i3c: master: Fix miss free init_dyn_addr at i3c_master_put_i3c_addrs() [+ + +]
Author: Frank Li <[email protected]>
Date:   Tue Oct 1 12:26:08 2024 -0400

    i3c: master: Fix miss free init_dyn_addr at i3c_master_put_i3c_addrs()
    
    commit 3082990592f7c6d7510a9133afa46e31bbe26533 upstream.
    
    if (dev->boardinfo && dev->boardinfo->init_dyn_addr)
                                          ^^^ here check "init_dyn_addr"
            i3c_bus_set_addr_slot_status(&master->bus, dev->info.dyn_addr, ...)
                                                                 ^^^^
                                                            free "dyn_addr"
    Fix copy/paste error "dyn_addr" by replacing it with "init_dyn_addr".
    
    Cc: [email protected]
    Fixes: 3a379bbcea0a ("i3c: Add core I3C infrastructure")
    Reviewed-by: Miquel Raynal <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i3c: Use i3cdev->desc->info instead of calling i3c_device_get_info() to avoid deadlock [+ + +]
Author: Defa Li <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
igb: Fix potential invalid memory access in igb_init_module() [+ + +]
Author: Yuan Can <[email protected]>
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 <[email protected]>
    Tested-by: Pucha Himasekhar Reddy <[email protected]> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
initramfs: avoid filename buffer overrun [+ + +]
Author: David Disseldorp <[email protected]>
Date:   Wed Oct 30 03:55:10 2024 +0000

    initramfs: avoid filename buffer overrun
    
    [ Upstream commit e017671f534dd3f568db9e47b0583e853d2da9b5 ]
    
    The initramfs filename field is defined in
    Documentation/driver-api/early-userspace/buffer-format.rst as:
    
     37 cpio_file := ALGN(4) + cpio_header + filename + "\0" + ALGN(4) + data
    ...
     55 ============= ================== =========================
     56 Field name    Field size         Meaning
     57 ============= ================== =========================
    ...
     70 c_namesize    8 bytes            Length of filename, including final \0
    
    When extracting an initramfs cpio archive, the kernel's do_name() path
    handler assumes a zero-terminated path at @collected, passing it
    directly to filp_open() / init_mkdir() / init_mknod().
    
    If a specially crafted cpio entry carries a non-zero-terminated filename
    and is followed by uninitialized memory, then a file may be created with
    trailing characters that represent the uninitialized memory. The ability
    to create an initramfs entry would imply already having full control of
    the system, so the buffer overrun shouldn't be considered a security
    vulnerability.
    
    Append the output of the following bash script to an existing initramfs
    and observe any created /initramfs_test_fname_overrunAA* path. E.g.
      ./reproducer.sh | gzip >> /myinitramfs
    
    It's easiest to observe non-zero uninitialized memory when the output is
    gzipped, as it'll overflow the heap allocated @out_buf in __gunzip(),
    rather than the initrd_start+initrd_size block.
    
    ---- reproducer.sh ----
    nilchar="A"     # change to "\0" to properly zero terminate / pad
    magic="070701"
    ino=1
    mode=$(( 0100777 ))
    uid=0
    gid=0
    nlink=1
    mtime=1
    filesize=0
    devmajor=0
    devminor=1
    rdevmajor=0
    rdevminor=0
    csum=0
    fname="initramfs_test_fname_overrun"
    namelen=$(( ${#fname} + 1 ))    # plus one to account for terminator
    
    printf "%s%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%s" \
            $magic $ino $mode $uid $gid $nlink $mtime $filesize \
            $devmajor $devminor $rdevmajor $rdevminor $namelen $csum $fname
    
    termpadlen=$(( 1 + ((4 - ((110 + $namelen) & 3)) % 4) ))
    printf "%.s${nilchar}" $(seq 1 $termpadlen)
    ---- reproducer.sh ----
    
    Symlink filename fields handled in do_symlink() won't overrun past the
    data segment, due to the explicit zero-termination of the symlink
    target.
    
    Fix filename buffer overrun by aborting the initramfs FSM if any cpio
    entry doesn't carry a zero-terminator at the expected (name_len - 1)
    offset.
    
    Fixes: 1da177e4c3f41 ("Linux-2.6.12-rc2")
    Signed-off-by: David Disseldorp <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipmr: convert /proc handlers to rcu_read_lock() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Jun 23 04:34:47 2022 +0000

    ipmr: convert /proc handlers to rcu_read_lock()
    
    [ Upstream commit b96ef16d2f837870daaea51c38cd50458b95ad5c ]
    
    We can use standard rcu_read_lock(), to get rid
    of last read_lock(&mrt_lock) call points.
    
    Signed-off-by: Eric Dumazet <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: fc9c273d6daa ("ipmr: fix tables suspicious RCU usage")
    Signed-off-by: Sasha Levin <[email protected]>

ipmr: Fix access to mfc_cache_list without lock held [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Fri Nov 8 06:08:36 2024 -0800

    ipmr: Fix access to mfc_cache_list without lock held
    
    [ Upstream commit e28acc9c1ccfcb24c08e020828f69d0a915b06ae ]
    
    Accessing `mr_table->mfc_cache_list` is protected by an RCU lock. In the
    following code flow, the RCU read lock is not held, causing the
    following error when `RCU_PROVE` is not held. The same problem might
    show up in the IPv6 code path.
    
            6.12.0-rc5-kbuilder-01145-gbac17284bdcb #33 Tainted: G            E    N
            -----------------------------
            net/ipv4/ipmr_base.c:313 RCU-list traversed in non-reader section!!
    
            rcu_scheduler_active = 2, debug_locks = 1
                       2 locks held by RetransmitAggre/3519:
                        #0: ffff88816188c6c0 (nlk_cb_mutex-ROUTE){+.+.}-{3:3}, at: __netlink_dump_start+0x8a/0x290
                        #1: ffffffff83fcf7a8 (rtnl_mutex){+.+.}-{3:3}, at: rtnl_dumpit+0x6b/0x90
    
            stack backtrace:
                        lockdep_rcu_suspicious
                        mr_table_dump
                        ipmr_rtm_dumproute
                        rtnl_dump_all
                        rtnl_dumpit
                        netlink_dump
                        __netlink_dump_start
                        rtnetlink_rcv_msg
                        netlink_rcv_skb
                        netlink_unicast
                        netlink_sendmsg
    
    This is not a problem per see, since the RTNL lock is held here, so, it
    is safe to iterate in the list without the RCU read lock, as suggested
    by Eric.
    
    To alleviate the concern, modify the code to use
    list_for_each_entry_rcu() with the RTNL-held argument.
    
    The annotation will raise an error only if RTNL or RCU read lock are
    missing during iteration, signaling a legitimate problem, otherwise it
    will avoid this false positive.
    
    This will solve the IPv6 case as well, since ip6mr_rtm_dumproute() calls
    this function as well.
    
    Signed-off-by: Breno Leitao <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipmr: fix tables suspicious RCU usage [+ + +]
Author: Paolo Abeni <[email protected]>
Date:   Sun Nov 24 16:40:58 2024 +0100

    ipmr: fix tables suspicious RCU usage
    
    [ Upstream commit fc9c273d6daaa9866f349bbe8cae25c67764c456 ]
    
    Similar to the previous patch, plumb the RCU lock inside
    the ipmr_get_table(), provided a lockless variant and apply
    the latter in the few spots were the lock is already held.
    
    Fixes: 709b46e8d90b ("net: Add compat ioctl support for the ipv4 multicast ioctl SIOCGETSGCNT")
    Fixes: f0ad0860d01e ("ipv4: ipmr: support multiple tables")
    Reviewed-by: David Ahern <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipvs: fix UB due to uninitialized stack access in ip_vs_protocol_init() [+ + +]
Author: Jinghao Jia <[email protected]>
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 <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Co-developed-by: Ruowen Qin <[email protected]>
    Signed-off-by: Ruowen Qin <[email protected]>
    Signed-off-by: Jinghao Jia <[email protected]>
    Acked-by: Julian Anastasov <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iTCO_wdt: mask NMI_NOW bit for update_no_reboot_bit() call [+ + +]
Author: Oleksandr Ocheretnyi <[email protected]>
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 <[email protected]>
    Reviewed-by: Guenter Roeck <[email protected]>
    Reviewed-by: Mika Westerberg <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Wim Van Sebroeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
jffs2: Fix rtime decompressor [+ + +]
Author: Richard Weinberger <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Fixes: fe051552f5078 ("jffs2: Prevent rtime decompress memory corruption")
    Signed-off-by: Richard Weinberger <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

jffs2: fix use of uninitialized variable [+ + +]
Author: Qingfang Deng <[email protected]>
Date:   Mon Jul 1 12:52:05 2024 +0800

    jffs2: fix use of uninitialized variable
    
    [ Upstream commit 3ba44ee966bc3c41dd8a944f963466c8fcc60dc8 ]
    
    When building the kernel with -Wmaybe-uninitialized, the compiler
    reports this warning:
    
    In function 'jffs2_mark_erased_block',
        inlined from 'jffs2_erase_pending_blocks' at fs/jffs2/erase.c:116:4:
    fs/jffs2/erase.c:474:9: warning: 'bad_offset' may be used uninitialized [-Wmaybe-uninitialized]
      474 |         jffs2_erase_failed(c, jeb, bad_offset);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    fs/jffs2/erase.c: In function 'jffs2_erase_pending_blocks':
    fs/jffs2/erase.c:402:18: note: 'bad_offset' was declared here
      402 |         uint32_t bad_offset;
          |                  ^~~~~~~~~~
    
    When mtd->point() is used, jffs2_erase_pending_blocks can return -EIO
    without initializing bad_offset, which is later used at the filebad
    label in jffs2_mark_erased_block.
    Fix it by initializing this variable.
    
    Fixes: 8a0f572397ca ("[JFFS2] Return values of jffs2_block_check_erase error paths")
    Signed-off-by: Qingfang Deng <[email protected]>
    Reviewed-by: Zhihao Cheng <[email protected]>
    Signed-off-by: Richard Weinberger <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

jffs2: Prevent rtime decompress memory corruption [+ + +]
Author: Kinsey Moore <[email protected]>
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: [email protected]
    Signed-off-by: Kinsey Moore <[email protected]>
    Signed-off-by: Richard Weinberger <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
jfs: add a check to prevent array-index-out-of-bounds in dbAdjTree [+ + +]
Author: Nihar Chaithanya <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=412dea214d8baa3f7483
    Tested-by: [email protected]
    Signed-off-by: Nihar Chaithanya <[email protected]>
    Signed-off-by: Dave Kleikamp <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

jfs: array-index-out-of-bounds fix in dtReadFirst [+ + +]
Author: Ghanshyam Agrawal <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=65fa06e29859e41a83f3
    Signed-off-by: Ghanshyam Agrawal <[email protected]>
    Signed-off-by: Dave Kleikamp <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

jfs: fix array-index-out-of-bounds in jfs_readdir [+ + +]
Author: Ghanshyam Agrawal <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=0315f8fe99120601ba88
    Signed-off-by: Ghanshyam Agrawal <[email protected]>
    Signed-off-by: Dave Kleikamp <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

jfs: fix shift-out-of-bounds in dbSplit [+ + +]
Author: Ghanshyam Agrawal <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=b5ca8a249162c4b9a7d0
    Signed-off-by: Ghanshyam Agrawal <[email protected]>
    Signed-off-by: Dave Kleikamp <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

jfs: xattr: check invalid xattr size more strictly [+ + +]
Author: Artem Sadovnikov <[email protected]>
Date:   Sat Oct 5 10:06:57 2024 +0000

    jfs: xattr: check invalid xattr size more strictly
    
    commit d9f9d96136cba8fedd647d2c024342ce090133c2 upstream.
    
    Commit 7c55b78818cf ("jfs: xattr: fix buffer overflow for invalid xattr")
    also addresses this issue but it only fixes it for positive values, while
    ea_size is an integer type and can take negative values, e.g. in case of
    a corrupted filesystem. This still breaks validation and would overflow
    because of implicit conversion from int to size_t in print_hex_dump().
    
    Fix this issue by clamping the ea_size value instead.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Cc: [email protected]
    Signed-off-by: Artem Sadovnikov <[email protected]>
    Signed-off-by: Dave Kleikamp <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
kbuild: Use uname for LINUX_COMPILE_HOST detection [+ + +]
Author: Chris Down <[email protected]>
Date:   Tue Oct 20 10:34:59 2020 +0100

    kbuild: Use uname for LINUX_COMPILE_HOST detection
    
    commit 1e66d50ad3a1dbf0169b14d502be59a4b1213149 upstream.
    
    `hostname` may not be present on some systems as it's not mandated by
    POSIX/SUSv4. This isn't just a theoretical problem: on Arch Linux,
    `hostname` is provided by `inetutils`, which isn't part of the base
    distribution.
    
        ./scripts/mkcompile_h: line 38: hostname: command not found
    
    Use `uname -n` instead, which is more likely to be available (and
    mandated by standards).
    
    Signed-off-by: Chris Down <[email protected]>
    Signed-off-by: Masahiro Yamada <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
KVM: arm64: vgic-its: Add a data length check in vgic_its_save_* [+ + +]
Author: Jing Zhang <[email protected]>
Date:   Wed Dec 4 12:22:59 2024 -0800

    KVM: arm64: vgic-its: Add a data length check in vgic_its_save_*
    
    commit 7fe28d7e68f92cc3d0668b8f2fbdf5c303ac3022 upstream.
    
    In all the vgic_its_save_*() functinos, they do not check whether
    the data length is 8 bytes before calling vgic_write_guest_lock.
    This patch adds the check. To prevent the kernel from being blown up
    when the fault occurs, KVM_BUG_ON() is used. And the other BUG_ON()s
    are replaced together.
    
    Cc: [email protected]
    Signed-off-by: Kunkun Jiang <[email protected]>
    [Jing: Update with the new entry read/write helpers]
    Signed-off-by: Jing Zhang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Oliver Upton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: arm64: vgic-its: Clear DTE when MAPD unmaps a device [+ + +]
Author: Kunkun Jiang <[email protected]>
Date:   Wed Dec 4 12:23:00 2024 -0800

    KVM: arm64: vgic-its: Clear DTE when MAPD unmaps a device
    
    commit e9649129d33dca561305fc590a7c4ba8c3e5675a upstream.
    
    vgic_its_save_device_tables will traverse its->device_list to
    save DTE for each device. vgic_its_restore_device_tables will
    traverse each entry of device table and check if it is valid.
    Restore if valid.
    
    But when MAPD unmaps a device, it does not invalidate the
    corresponding DTE. In the scenario of continuous saves
    and restores, there may be a situation where a device's DTE
    is not saved but is restored. This is unreasonable and may
    cause restore to fail. This patch clears the corresponding
    DTE when MAPD unmaps a device.
    
    Cc: [email protected]
    Fixes: 57a9a117154c ("KVM: arm64: vgic-its: Device table save/restore")
    Co-developed-by: Shusen Li <[email protected]>
    Signed-off-by: Shusen Li <[email protected]>
    Signed-off-by: Kunkun Jiang <[email protected]>
    [Jing: Update with entry write helper]
    Signed-off-by: Jing Zhang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Oliver Upton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: arm64: vgic-its: Clear ITE when DISCARD frees an ITE [+ + +]
Author: Kunkun Jiang <[email protected]>
Date:   Wed Dec 4 12:23:01 2024 -0800

    KVM: arm64: vgic-its: Clear ITE when DISCARD frees an ITE
    
    commit 7602ffd1d5e8927fadd5187cb4aed2fdc9c47143 upstream.
    
    When DISCARD frees an ITE, it does not invalidate the
    corresponding ITE. In the scenario of continuous saves and
    restores, there may be a situation where an ITE is not saved
    but is restored. This is unreasonable and may cause restore
    to fail. This patch clears the corresponding ITE when DISCARD
    frees an ITE.
    
    Cc: [email protected]
    Fixes: eff484e0298d ("KVM: arm64: vgic-its: ITT save and restore")
    Signed-off-by: Kunkun Jiang <[email protected]>
    [Jing: Update with entry write helper]
    Signed-off-by: Jing Zhang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Oliver Upton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: VMX: Bury Intel PT virtualization (guest/host mode) behind CONFIG_BROKEN [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Fri Nov 1 11:50:30 2024 -0700

    KVM: VMX: Bury Intel PT virtualization (guest/host mode) behind CONFIG_BROKEN
    
    commit aa0d42cacf093a6fcca872edc954f6f812926a17 upstream.
    
    Hide KVM's pt_mode module param behind CONFIG_BROKEN, i.e. disable support
    for virtualizing Intel PT via guest/host mode unless BROKEN=y.  There are
    myriad bugs in the implementation, some of which are fatal to the guest,
    and others which put the stability and health of the host at risk.
    
    For guest fatalities, the most glaring issue is that KVM fails to ensure
    tracing is disabled, and *stays* disabled prior to VM-Enter, which is
    necessary as hardware disallows loading (the guest's) RTIT_CTL if tracing
    is enabled (enforced via a VMX consistency check).  Per the SDM:
    
      If the logical processor is operating with Intel PT enabled (if
      IA32_RTIT_CTL.TraceEn = 1) at the time of VM entry, the "load
      IA32_RTIT_CTL" VM-entry control must be 0.
    
    On the host side, KVM doesn't validate the guest CPUID configuration
    provided by userspace, and even worse, uses the guest configuration to
    decide what MSRs to save/load at VM-Enter and VM-Exit.  E.g. configuring
    guest CPUID to enumerate more address ranges than are supported in hardware
    will result in KVM trying to passthrough, save, and load non-existent MSRs,
    which generates a variety of WARNs, ToPA ERRORs in the host, a potential
    deadlock, etc.
    
    Fixes: f99e3daf94ff ("KVM: x86: Add Intel PT virtualization work mode")
    Cc: [email protected]
    Cc: Adrian Hunter <[email protected]>
    Signed-off-by: Sean Christopherson <[email protected]>
    Reviewed-by: Xiaoyao Li <[email protected]>
    Tested-by: Adrian Hunter <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Paolo Bonzini <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
leds: class: Protect brightness_show() with led_cdev->led_access mutex [+ + +]
Author: Mukesh Ojha <[email protected]>
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 <[email protected]>
    Reviewed-by: Anish Kumar <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
lib: string_helpers: silence snprintf() output truncation warning [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Fri Nov 1 21:54:53 2024 +0100

    lib: string_helpers: silence snprintf() output truncation warning
    
    commit a508ef4b1dcc82227edc594ffae583874dd425d7 upstream.
    
    The output of ".%03u" with the unsigned int in range [0, 4294966295] may
    get truncated if the target buffer is not 12 bytes. This can't really
    happen here as the 'remainder' variable cannot exceed 999 but the
    compiler doesn't know it. To make it happy just increase the buffer to
    where the warning goes away.
    
    Fixes: 3c9f3681d0b4 ("[SCSI] lib: add generic helper to print sizes rounded to the correct SI range")
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Cc: James E.J. Bottomley <[email protected]>
    Cc: Kees Cook <[email protected]>
    Cc: [email protected]
    Signed-off-by: Andrew Morton <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Kees Cook <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 5.4.287 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Sat Dec 14 19:44:57 2024 +0100

    Linux 5.4.287
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Harshit Mogalapalli <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Shuah Khan <[email protected]>
    Tested-by: Pavel Machek (CIP) <[email protected]>
    Tested-by: kernelci.org bot <[email protected]>
    Tested-by: Linux Kernel Functional Testing <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
m68k: coldfire/device.c: only build FEC when HW macros are defined [+ + +]
Author: Antonio Quartulli <[email protected]>
Date:   Tue Oct 29 22:43:15 2024 +0100

    m68k: coldfire/device.c: only build FEC when HW macros are defined
    
    [ Upstream commit 63a24cf8cc330e5a68ebd2e20ae200096974c475 ]
    
    When CONFIG_FEC is set (due to COMPILE_TEST) along with
    CONFIG_M54xx, coldfire/device.c has compile errors due to
    missing MCFEC_* and MCF_IRQ_FEC_* symbols.
    
    Make the whole FEC blocks dependent on having the HW macros
    defined, rather than on CONFIG_FEC itself.
    
    This fix is very similar to commit e6e1e7b19fa1 ("m68k: coldfire/device.c: only build for MCF_EDMA when h/w macros are defined")
    
    Fixes: b7ce7f0d0efc ("m68knommu: merge common ColdFire FEC platform setup code")
    To: Greg Ungerer <[email protected]>
    To: Geert Uytterhoeven <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Signed-off-by: Antonio Quartulli <[email protected]>
    Signed-off-by: Greg Ungerer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

m68k: mcfgpio: Fix incorrect register offset for CONFIG_M5441x [+ + +]
Author: Jean-Michel Hautbois <[email protected]>
Date:   Wed Oct 16 09:24:35 2024 +0200

    m68k: mcfgpio: Fix incorrect register offset for CONFIG_M5441x
    
    [ Upstream commit f212140962c93cd5da43283a18e31681540fc23d ]
    
    Fix a typo in the CONFIG_M5441x preprocessor condition, where the GPIO
    register offset was incorrectly set to 8 instead of 0. This prevented
    proper GPIO configuration for m5441x targets.
    
    Fixes: bea8bcb12da0 ("m68knommu: Add support for the Coldfire m5441x.")
    Signed-off-by: Jean-Michel Hautbois <[email protected]>
    Signed-off-by: Greg Ungerer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

m68k: mvme147: Fix SCSI controller IRQ numbers [+ + +]
Author: Daniel Palmer <[email protected]>
Date:   Thu Oct 3 13:29:47 2024 +1000

    m68k: mvme147: Fix SCSI controller IRQ numbers
    
    [ Upstream commit 47bc874427382018fa2e3e982480e156271eee70 ]
    
    Sometime long ago the m68k IRQ code was refactored and the interrupt
    numbers for SCSI controller on this board ended up wrong, and it hasn't
    worked since.
    
    The PCC adds 0x40 to the vector for its interrupts so they end up in
    the user interrupt range. Hence, the kernel number should be the kernel
    offset for user interrupt range + the PCC interrupt number.
    
    Fixes: 200a3d352cd5 ("[PATCH] m68k: convert VME irq code")
    Signed-off-by: Daniel Palmer <[email protected]>
    Reviewed-by: Finn Thain <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Link: https://lore.kernel.org/0e7636a21a0274eea35bfd5d874459d5078e97cc.1727926187.git.fthain@linux-m68k.org
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

m68k: mvme147: Reinstate early console [+ + +]
Author: Daniel Palmer <[email protected]>
Date:   Wed Nov 6 10:51:24 2024 +1100

    m68k: mvme147: Reinstate early console
    
    [ Upstream commit 077b33b9e2833ff25050d986178a2c4c4036cbac ]
    
    Commit a38eaa07a0ce ("m68k/mvme147: config.c - Remove unused
    functions"), removed the console functionality for the mvme147 instead
    of wiring it up to an early console.  Put the console write function
    back and wire it up like mvme16x does so it's possible to see Linux boot
    on this fine hardware once more.
    
    Fixes: a38eaa07a0ce ("m68k/mvme147: config.c - Remove unused functions")
    Signed-off-by: Daniel Palmer <[email protected]>
    Co-developed-by: Finn Thain <[email protected]>
    Signed-off-by: Finn Thain <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Link: https://lore.kernel.org/a82e8f0068a8722996a0ccfe666abb5e0a5c120d.1730850684.git.fthain@linux-m68k.org
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

m68k: mvme16x: Add and use "mvme16x.h" [+ + +]
Author: Geert Uytterhoeven <[email protected]>
Date:   Wed Sep 13 16:08:25 2023 +0200

    m68k: mvme16x: Add and use "mvme16x.h"
    
    [ Upstream commit dcec33c1fc4ab63983d93ffb0d82b68fc5775b88 ]
    
    When building with W=1:
    
        arch/m68k/mvme16x/config.c:208:6: warning: no previous prototype for ‘mvme16x_cons_write’ [-Wmissing-prototypes]
          208 | void mvme16x_cons_write(struct console *co, const char *str, unsigned count)
              |      ^~~~~~~~~~~~~~~~~~
    
    Fix this by introducing a new header file "mvme16x.h" for holding the
    prototypes of functions implemented in arch/m68k/mvme16x/.
    
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Acked-by: Arnd Bergmann <[email protected]>
    Link: https://lore.kernel.org/r/6200cc3b26fad215c4524748af04692e38c5ecd2.1694613528.git.geert@linux-m68k.org
    Stable-dep-of: 077b33b9e283 ("m68k: mvme147: Reinstate early console")
    Signed-off-by: Sasha Levin <[email protected]>

 
mac80211: fix user-power when emulating chanctx [+ + +]
Author: Ben Greear <[email protected]>
Date:   Thu Oct 10 13:39:54 2024 -0700

    mac80211: fix user-power when emulating chanctx
    
    [ Upstream commit 9b15c6cf8d2e82c8427cd06f535d8de93b5b995c ]
    
    ieee80211_calc_hw_conf_chan was ignoring the configured
    user_txpower.  If it is set, use it to potentially decrease
    txpower as requested.
    
    Signed-off-by: Ben Greear <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
marvell: pxa168_eth: fix call balance of pep->clk handling routines [+ + +]
Author: Vitalii Mordan <[email protected]>
Date:   Thu Nov 21 23:06:58 2024 +0300

    marvell: pxa168_eth: fix call balance of pep->clk handling routines
    
    [ Upstream commit b032ae57d4fe2b2445e3bc190db6fcaa8c102f68 ]
    
    If the clock pep->clk was not enabled in pxa168_eth_probe,
    it should not be disabled in any path.
    
    Conversely, if it was enabled in pxa168_eth_probe, it must be disabled
    in all error paths to ensure proper cleanup.
    
    Use the devm_clk_get_enabled helper function to ensure proper call balance
    for pep->clk.
    
    Found by Linux Verification Center (linuxtesting.org) with Klever.
    
    Fixes: a49f37eed22b ("net: add Fast Ethernet driver for PXA168.")
    Signed-off-by: Vitalii Mordan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
media: cx231xx: Add support for Dexatek USB Video Grabber 1d19:6108 [+ + +]
Author: Rohan Barar <[email protected]>
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 <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: dvbdev: fix the logic when DVB_DYNAMIC_MINORS is not set [+ + +]
Author: Mauro Carvalho Chehab <[email protected]>
Date:   Wed Nov 6 21:50:55 2024 +0100

    media: dvbdev: fix the logic when DVB_DYNAMIC_MINORS is not set
    
    commit a4aebaf6e6efff548b01a3dc49b4b9074751c15b upstream.
    
    When CONFIG_DVB_DYNAMIC_MINORS, ret is not initialized, and a
    semaphore is left at the wrong state, in case of errors.
    
    Make the code simpler and avoid mistakes by having just one error
    check logic used weather DVB_DYNAMIC_MINORS is used or not.
    
    Reported-by: kernel test robot <[email protected]>
    Reported-by: Dan Carpenter <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]/
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Link: https://lore.kernel.org/r/9e067488d8935b8cf00959764a1fa5de85d65725.1730926254.git.mchehab+huawei@kernel.org
    Cc: Nathan Chancellor <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: gspca: ov534-ov772x: Fix off-by-one error in set_frame_rate() [+ + +]
Author: Jinjie Ruan <[email protected]>
Date:   Mon Oct 28 16:02:56 2024 +0800

    media: gspca: ov534-ov772x: Fix off-by-one error in set_frame_rate()
    
    commit d2842dec577900031826dc44e9bf0c66416d7173 upstream.
    
    In set_frame_rate(), select a rate in rate_0 or rate_1 by checking
    sd->frame_rate >= r->fps in a loop, but the loop condition terminates when
    the index reaches zero, which fails to check the last elememt in rate_0 or
    rate_1.
    
    Check for >= 0 so that the last one in rate_0 or rate_1 is also checked.
    
    Fixes: 189d92af707e ("V4L/DVB (13422): gspca - ov534: ov772x changes from Richard Kaswy.")
    Cc: [email protected]
    Signed-off-by: Jinjie Ruan <[email protected]>
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: i2c: tc358743: Fix crash in the probe error path when using polling [+ + +]
Author: Alexander Shiyan <[email protected]>
Date:   Wed Oct 9 09:05:44 2024 +0300

    media: i2c: tc358743: Fix crash in the probe error path when using polling
    
    commit 869f38ae07f7df829da4951c3d1f7a2be09c2e9a upstream.
    
    If an error occurs in the probe() function, we should remove the polling
    timer that was alarmed earlier, otherwise the timer is called with
    arguments that are already freed, which results in a crash.
    
    ------------[ cut here ]------------
    WARNING: CPU: 3 PID: 0 at kernel/time/timer.c:1830 __run_timers+0x244/0x268
    Modules linked in:
    CPU: 3 UID: 0 PID: 0 Comm: swapper/3 Not tainted 6.11.0 #226
    Hardware name: Diasom DS-RK3568-SOM-EVB (DT)
    pstate: 804000c9 (Nzcv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : __run_timers+0x244/0x268
    lr : __run_timers+0x1d4/0x268
    sp : ffffff80eff2baf0
    x29: ffffff80eff2bb50 x28: 7fffffffffffffff x27: ffffff80eff2bb00
    x26: ffffffc080f669c0 x25: ffffff80efef6bf0 x24: ffffff80eff2bb00
    x23: 0000000000000000 x22: dead000000000122 x21: 0000000000000000
    x20: ffffff80efef6b80 x19: ffffff80041c8bf8 x18: ffffffffffffffff
    x17: ffffffc06f146000 x16: ffffff80eff27dc0 x15: 000000000000003e
    x14: 0000000000000000 x13: 00000000000054da x12: 0000000000000000
    x11: 00000000000639c0 x10: 000000000000000c x9 : 0000000000000009
    x8 : ffffff80eff2cb40 x7 : ffffff80eff2cb40 x6 : ffffff8002bee480
    x5 : ffffffc080cb2220 x4 : ffffffc080cb2150 x3 : 00000000000f4240
    x2 : 0000000000000102 x1 : ffffff80eff2bb00 x0 : ffffff80041c8bf0
    Call trace:
     __run_timers+0x244/0x268
     timer_expire_remote+0x50/0x68
     tmigr_handle_remote+0x388/0x39c
     run_timer_softirq+0x38/0x44
     handle_softirqs+0x138/0x298
     __do_softirq+0x14/0x20
     ____do_softirq+0x10/0x1c
     call_on_irq_stack+0x24/0x4c
     do_softirq_own_stack+0x1c/0x2c
     irq_exit_rcu+0x9c/0xcc
     el1_interrupt+0x48/0xc0
     el1h_64_irq_handler+0x18/0x24
     el1h_64_irq+0x7c/0x80
     default_idle_call+0x34/0x68
     do_idle+0x23c/0x294
     cpu_startup_entry+0x38/0x3c
     secondary_start_kernel+0x128/0x160
     __secondary_switched+0xb8/0xbc
    ---[ end trace 0000000000000000 ]---
    
    Fixes: 4e66a52a2e4c ("[media] tc358743: Add support for platforms without IRQ line")
    Signed-off-by: Alexander Shiyan <[email protected]>
    Cc: [email protected]
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: platform: allegro-dvt: Fix possible memory leak in allocate_buffers_internal() [+ + +]
Author: Gaosheng Cui <[email protected]>
Date:   Wed Oct 9 16:28:02 2024 +0800

    media: platform: allegro-dvt: Fix possible memory leak in allocate_buffers_internal()
    
    commit 0f514068fbc5d4d189c817adc7c4e32cffdc2e47 upstream.
    
    The buffer in the loop should be released under the exception path,
    otherwise there may be a memory leak here.
    
    To mitigate this, free the buffer when allegro_alloc_buffer fails.
    
    Fixes: f20387dfd065 ("media: allegro: add Allegro DVT video IP core driver")
    Cc: <[email protected]>
    Signed-off-by: Gaosheng Cui <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: ts2020: fix null-ptr-deref in ts2020_probe() [+ + +]
Author: Li Zetao <[email protected]>
Date:   Thu Oct 10 23:41:13 2024 +0800

    media: ts2020: fix null-ptr-deref in ts2020_probe()
    
    commit 4a058b34b52ed3feb1f3ff6fd26aefeeeed20cba upstream.
    
    KASAN reported a null-ptr-deref issue when executing the following
    command:
    
      # echo ts2020 0x20 > /sys/bus/i2c/devices/i2c-0/new_device
        KASAN: null-ptr-deref in range [0x0000000000000010-0x0000000000000017]
        CPU: 53 UID: 0 PID: 970 Comm: systemd-udevd Not tainted 6.12.0-rc2+ #24
        Hardware name: QEMU Standard PC (Q35 + ICH9, 2009)
        RIP: 0010:ts2020_probe+0xad/0xe10 [ts2020]
        RSP: 0018:ffffc9000abbf598 EFLAGS: 00010202
        RAX: dffffc0000000000 RBX: 0000000000000000 RCX: ffffffffc0714809
        RDX: 0000000000000002 RSI: ffff88811550be00 RDI: 0000000000000010
        RBP: ffff888109868800 R08: 0000000000000001 R09: fffff52001577eb6
        R10: 0000000000000000 R11: ffffc9000abbff50 R12: ffffffffc0714790
        R13: 1ffff92001577eb8 R14: ffffffffc07190d0 R15: 0000000000000001
        FS:  00007f95f13b98c0(0000) GS:ffff888149280000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 0000555d2634b000 CR3: 0000000152236000 CR4: 00000000000006f0
        DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
        DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
        Call Trace:
         <TASK>
         ts2020_probe+0xad/0xe10 [ts2020]
         i2c_device_probe+0x421/0xb40
         really_probe+0x266/0x850
        ...
    
    The cause of the problem is that when using sysfs to dynamically register
    an i2c device, there is no platform data, but the probe process of ts2020
    needs to use platform data, resulting in a null pointer being accessed.
    
    Solve this problem by adding checks to platform data.
    
    Fixes: dc245a5f9b51 ("[media] ts2020: implement I2C client bindings")
    Cc: <[email protected]>
    Signed-off-by: Li Zetao <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: uvcvideo: Add a quirk for the Kaiweets KTI-W02 infrared camera [+ + +]
Author: David Given <[email protected]>
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 <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Reviewed-by: Ricardo Ribalda <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: venus: Fix pm_runtime_set_suspended() with runtime pm enabled [+ + +]
Author: Jinjie Ruan <[email protected]>
Date:   Fri Nov 1 17:40:50 2024 +0800

    media: venus: Fix pm_runtime_set_suspended() with runtime pm enabled
    
    commit 2a20869f7d798aa2b69e45b863eaf1b1ecf98278 upstream.
    
    It is not valid to call pm_runtime_set_suspended() for devices
    with runtime PM enabled because it returns -EAGAIN if it is enabled
    already and working. So, call pm_runtime_disable() before to fix it.
    
    Cc: [email protected]
    Fixes: af2c3834c8ca ("[media] media: venus: adding core part and helper functions")
    Signed-off-by: Jinjie Ruan <[email protected]>
    Reviewed-by: Bryan O'Donoghue <[email protected]>
    Acked-by: Stanimir Varbanov <[email protected]>
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: wl128x: Fix atomicity violation in fmc_send_cmd() [+ + +]
Author: Qiu-ji Chen <[email protected]>
Date:   Fri Sep 27 16:39:02 2024 +0800

    media: wl128x: Fix atomicity violation in fmc_send_cmd()
    
    commit ca59f9956d4519ab18ab2270be47c6b8c6ced091 upstream.
    
    Atomicity violation occurs when the fmc_send_cmd() function is executed
    simultaneously with the modification of the fmdev->resp_skb value.
    Consider a scenario where, after passing the validity check within the
    function, a non-null fmdev->resp_skb variable is assigned a null value.
    This results in an invalid fmdev->resp_skb variable passing the validity
    check. As seen in the later part of the function, skb = fmdev->resp_skb;
    when the invalid fmdev->resp_skb passes the check, a null pointer
    dereference error may occur at line 478, evt_hdr = (void *)skb->data;
    
    To address this issue, it is recommended to include the validity check of
    fmdev->resp_skb within the locked section of the function. This
    modification ensures that the value of fmdev->resp_skb does not change
    during the validation process, thereby maintaining its validity.
    
    This possible bug is found by an experimental static analysis tool
    developed by our team. This tool analyzes the locking APIs
    to extract function pairs that can be concurrently executed, and then
    analyzes the instructions in the paired functions to identify possible
    concurrency bugs including data races and atomicity violations.
    
    Fixes: e8454ff7b9a4 ("[media] drivers:media:radio: wl128x: FM Driver Common sources")
    Cc: [email protected]
    Signed-off-by: Qiu-ji Chen <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mfd: da9052-spi: Change read-mask to write-mask [+ + +]
Author: Marcus Folkesson <[email protected]>
Date:   Wed Sep 25 12:19:53 2024 +0200

    mfd: da9052-spi: Change read-mask to write-mask
    
    [ Upstream commit 2e3378f6c79a1b3f7855ded1ef306ea4406352ed ]
    
    Driver has mixed up the R/W bit.
    The LSB bit is set on write rather than read.
    Change it to avoid nasty things to happen.
    
    Fixes: e9e9d3973594 ("mfd: da9052: Avoid setting read_flag_mask for da9052-i2c driver")
    Signed-off-by: Marcus Folkesson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mfd: intel_soc_pmic_bxtwc: Use dev_err_probe() [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Wed Jun 29 01:17:40 2022 +0300

    mfd: intel_soc_pmic_bxtwc: Use dev_err_probe()
    
    [ Upstream commit d30e2c30a43de950cfd3690f24342a39034221c4 ]
    
    Simplify the mux error path a bit by using dev_err_probe().
    
    Signed-off-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Lee Jones <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 686fb77712a4 ("mfd: intel_soc_pmic_bxtwc: Use IRQ domain for USB Type-C device")
    Signed-off-by: Sasha Levin <[email protected]>

mfd: intel_soc_pmic_bxtwc: Use IRQ domain for PMIC devices [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Sat Oct 5 22:27:06 2024 +0300

    mfd: intel_soc_pmic_bxtwc: Use IRQ domain for PMIC devices
    
    [ Upstream commit 0350d783ab888cb1cb48ced36cc28b372723f1a4 ]
    
    While design wise the idea of converting the driver to use
    the hierarchy of the IRQ chips is correct, the implementation
    has (inherited) flaws. This was unveiled when platform_get_irq()
    had started WARN() on IRQ 0 that is supposed to be a Linux
    IRQ number (also known as vIRQ).
    
    Rework the driver to respect IRQ domain when creating each MFD
    device separately, as the domain is not the same for all of them.
    
    Fixes: 57129044f504 ("mfd: intel_soc_pmic_bxtwc: Use chained IRQs for second level IRQ chips")
    Tested-by: Zhang Ning <[email protected]>
    Signed-off-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mfd: intel_soc_pmic_bxtwc: Use IRQ domain for TMU device [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Sat Oct 5 22:27:05 2024 +0300

    mfd: intel_soc_pmic_bxtwc: Use IRQ domain for TMU device
    
    [ Upstream commit 9b79d59e6b2b515eb9a22bc469ef7b8f0904fc73 ]
    
    While design wise the idea of converting the driver to use
    the hierarchy of the IRQ chips is correct, the implementation
    has (inherited) flaws. This was unveiled when platform_get_irq()
    had started WARN() on IRQ 0 that is supposed to be a Linux
    IRQ number (also known as vIRQ).
    
    Rework the driver to respect IRQ domain when creating each MFD
    device separately, as the domain is not the same for all of them.
    
    Fixes: 957ae5098185 ("platform/x86: Add Whiskey Cove PMIC TMU support")
    Fixes: 57129044f504 ("mfd: intel_soc_pmic_bxtwc: Use chained IRQs for second level IRQ chips")
    Reported-by: Zhang Ning <[email protected]>
    Closes: https://lore.kernel.org/r/TY2PR01MB3322FEDCDC048B7D3794F922CDBA2@TY2PR01MB3322.jpnprd01.prod.outlook.com
    Tested-by: Zhang Ning <[email protected]>
    Acked-by: Hans de Goede <[email protected]>
    Signed-off-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mfd: intel_soc_pmic_bxtwc: Use IRQ domain for USB Type-C device [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Sat Oct 5 22:27:04 2024 +0300

    mfd: intel_soc_pmic_bxtwc: Use IRQ domain for USB Type-C device
    
    [ Upstream commit 686fb77712a4bc94b76a0c5ae74c60118b7a0d79 ]
    
    While design wise the idea of converting the driver to use
    the hierarchy of the IRQ chips is correct, the implementation
    has (inherited) flaws. This was unveiled when platform_get_irq()
    had started WARN() on IRQ 0 that is supposed to be a Linux
    IRQ number (also known as vIRQ).
    
    Rework the driver to respect IRQ domain when creating each MFD
    device separately, as the domain is not the same for all of them.
    
    Fixes: 9c6235c86332 ("mfd: intel_soc_pmic_bxtwc: Add bxt_wcove_usbc device")
    Fixes: d2061f9cc32d ("usb: typec: add driver for Intel Whiskey Cove PMIC USB Type-C PHY")
    Fixes: 57129044f504 ("mfd: intel_soc_pmic_bxtwc: Use chained IRQs for second level IRQ chips")
    Reported-by: Zhang Ning <[email protected]>
    Closes: https://lore.kernel.org/r/TY2PR01MB3322FEDCDC048B7D3794F922CDBA2@TY2PR01MB3322.jpnprd01.prod.outlook.com
    Tested-by: Zhang Ning <[email protected]>
    Signed-off-by: Andy Shevchenko <[email protected]>
    Acked-by: Greg Kroah-Hartman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mfd: rt5033: Fix missing regmap_del_irq_chip() [+ + +]
Author: Zhang Changzhong <[email protected]>
Date:   Wed Oct 30 23:41:06 2024 +0800

    mfd: rt5033: Fix missing regmap_del_irq_chip()
    
    [ Upstream commit d256d612f47529ed0b332298e2d5ea981a4dd5b8 ]
    
    Fix missing call to regmap_del_irq_chip() in error handling path by
    using devm_regmap_add_irq_chip().
    
    Fixes: 0b271258544b ("mfd: rt5033: Add Richtek RT5033 driver core.")
    Signed-off-by: Zhang Changzhong <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mfd: tps65010: Use IRQF_NO_AUTOEN flag in request_irq() to fix race [+ + +]
Author: Jinjie Ruan <[email protected]>
Date:   Thu Sep 12 11:15:30 2024 +0800

    mfd: tps65010: Use IRQF_NO_AUTOEN flag in request_irq() to fix race
    
    [ Upstream commit 2174f9a8c9db50f74df769edd5a4ab822c73b6d2 ]
    
    As the comment said, disable_irq() after request_irq() still has a
    time gap in which interrupts can come. request_irq() with IRQF_NO_AUTOEN
    flag will disable IRQ auto-enable when request IRQ.
    
    Fixes: 72cd799544f2 ("[PATCH] I2C: add i2c driver for TPS6501x")
    Signed-off-by: Jinjie Ruan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mips: asm: fix warning when disabling MIPS_FP_SUPPORT [+ + +]
Author: Jonas Gorski <[email protected]>
Date:   Sat Oct 12 12:12:14 2024 +0200

    mips: asm: fix warning when disabling MIPS_FP_SUPPORT
    
    [ Upstream commit da09935975c8f8c90d6f57be2422dee5557206cd ]
    
    When MIPS_FP_SUPPORT is disabled, __sanitize_fcr31() is defined as
    nothing, which triggers a gcc warning:
    
        In file included from kernel/sched/core.c:79:
        kernel/sched/core.c: In function 'context_switch':
        ./arch/mips/include/asm/switch_to.h:114:39: warning: suggest braces around empty body in an 'if' statement [-Wempty-body]
          114 |                 __sanitize_fcr31(next);                                 \
              |                                       ^
        kernel/sched/core.c:5316:9: note: in expansion of macro 'switch_to'
         5316 |         switch_to(prev, next, prev);
              |         ^~~~~~~~~
    
    Fix this by providing an empty body for __sanitize_fcr31() like one is
    defined for __mips_mt_fpaff_switch_to().
    
    Fixes: 36a498035bd2 ("MIPS: Avoid FCSR sanitization when CONFIG_MIPS_FP_SUPPORT=n")
    Signed-off-by: Jonas Gorski <[email protected]>
    Reviewed-by: Maciej W. Rozycki <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
misc: apds990x: Fix missing pm_runtime_disable() [+ + +]
Author: Jinjie Ruan <[email protected]>
Date:   Mon Sep 23 11:55:56 2024 +0800

    misc: apds990x: Fix missing pm_runtime_disable()
    
    [ Upstream commit 3c5d8b819d27012264edd17e6ae7fffda382fe44 ]
    
    The pm_runtime_disable() is missing in probe error path,
    so add it to fix it.
    
    Fixes: 92b1f84d46b2 ("drivers/misc: driver for APDS990X ALS and proximity sensors")
    Signed-off-by: Jinjie Ruan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

misc: eeprom: eeprom_93cx6: Add quirk for extra read clock cycle [+ + +]
Author: Parker Newman <[email protected]>
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 <[email protected]>
    Signed-off-by: Parker Newman <[email protected]>
    Link: https://lore.kernel.org/r/0f23973efefccd2544705a0480b4ad4c2353e407.1727880931.git.pnewman@connecttech.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mm: revert "mm: shmem: fix data-race in shmem_getattr()" [+ + +]
Author: Andrew Morton <[email protected]>
Date:   Fri Nov 15 16:57:24 2024 -0800

    mm: revert "mm: shmem: fix data-race in shmem_getattr()"
    
    commit d1aa0c04294e29883d65eac6c2f72fe95cc7c049 upstream.
    
    Revert d949d1d14fa2 ("mm: shmem: fix data-race in shmem_getattr()") as
    suggested by Chuck [1].  It is causing deadlocks when accessing tmpfs over
    NFS.
    
    As Hugh commented, "added just to silence a syzbot sanitizer splat: added
    where there has never been any practical problem".
    
    Link: https://lkml.kernel.org/r/[email protected] [1]
    Fixes: d949d1d14fa2 ("mm: shmem: fix data-race in shmem_getattr()")
    Acked-by: Hugh Dickins <[email protected]>
    Cc: Chuck Lever <[email protected]>
    Cc: Jeongjun Park <[email protected]>
    Cc: Yu Zhao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Hugh Dickins <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mmc: core: Further prevent card detect during shutdown [+ + +]
Author: Ulf Hansson <[email protected]>
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 <[email protected]>
    Fixes: 66c915d09b94 ("mmc: core: Disable card detect during shutdown")
    Cc: [email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Reviewed-by: Adrian Hunter <[email protected]>
    Closes: https://lore.kernel.org/all/BN0PR08MB695133000AF116F04C3A9FFE83212@BN0PR08MB6951.namprd08.prod.outlook.com/
    Tested-by: Anthony Pighin <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: mmc_spi: drop buggy snprintf() [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Tue Oct 8 18:01:34 2024 +0200

    mmc: mmc_spi: drop buggy snprintf()
    
    [ Upstream commit 328bda09cc91b3d93bc64f4a4dadc44313dd8140 ]
    
    GCC 13 complains about the truncated output of snprintf():
    
    drivers/mmc/host/mmc_spi.c: In function ‘mmc_spi_response_get’:
    drivers/mmc/host/mmc_spi.c:227:64: error: ‘snprintf’ output may be truncated before the last format character [-Werror=format-truncation=]
      227 |         snprintf(tag, sizeof(tag), "  ... CMD%d response SPI_%s",
          |                                                                ^
    drivers/mmc/host/mmc_spi.c:227:9: note: ‘snprintf’ output between 26 and 43 bytes into a destination of size 32
      227 |         snprintf(tag, sizeof(tag), "  ... CMD%d response SPI_%s",
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      228 |                 cmd->opcode, maptype(cmd));
    
    Drop it and fold the string it generates into the only place where it's
    emitted - the dev_dbg() call at the end of the function.
    
    Fixes: 15a0580ced08 ("mmc_spi host driver")
    Suggested-by: Christophe JAILLET <[email protected]>
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
modpost: Add .irqentry.text to OTHER_SECTIONS [+ + +]
Author: Thomas Gleixner <[email protected]>
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 <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected] # needed for linux-5.4-y
    Link: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Masahiro Yamada <[email protected]>
    Signed-off-by: Sergey Senozhatsky <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

modpost: remove incorrect code in do_eisa_entry() [+ + +]
Author: Masahiro Yamada <[email protected]>
Date:   Wed Nov 20 08:56:39 2024 +0900

    modpost: remove incorrect code in do_eisa_entry()
    
    [ Upstream commit 0c3e091319e4748cb36ac9a50848903dc6f54054 ]
    
    This function contains multiple bugs after the following commits:
    
     - ac551828993e ("modpost: i2c aliases need no trailing wildcard")
     - 6543becf26ff ("mod/file2alias: make modalias generation safe for cross compiling")
    
    Commit ac551828993e inserted the following code to do_eisa_entry():
    
        else
                strcat(alias, "*");
    
    This is incorrect because 'alias' is uninitialized. If it is not
    NULL-terminated, strcat() could cause a buffer overrun.
    
    Even if 'alias' happens to be zero-filled, it would output:
    
        MODULE_ALIAS("*");
    
    This would match anything. As a result, the module could be loaded by
    any unrelated uevent from an unrelated subsystem.
    
    Commit ac551828993e introduced another bug.            
    
    Prior to that commit, the conditional check was:
    
        if (eisa->sig[0])
    
    This checked if the first character of eisa_device_id::sig was not '\0'.
    
    However, commit ac551828993e changed it as follows:
    
        if (sig[0])
    
    sig[0] is NOT the first character of the eisa_device_id::sig. The
    type of 'sig' is 'char (*)[8]', meaning that the type of 'sig[0]' is
    'char [8]' instead of 'char'. 'sig[0]' and 'symval' refer to the same
    address, which never becomes NULL.
    
    The correct conversion would have been:
    
        if ((*sig)[0])
    
    However, this if-conditional was meaningless because the earlier change
    in commit ac551828993e was incorrect.
    
    This commit removes the entire incorrect code, which should never have
    been executed.
    
    Fixes: ac551828993e ("modpost: i2c aliases need no trailing wildcard")
    Fixes: 6543becf26ff ("mod/file2alias: make modalias generation safe for cross compiling")
    Signed-off-by: Masahiro Yamada <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mtd: rawnand: atmel: Fix possible memory leak [+ + +]
Author: Miquel Raynal <[email protected]>
Date:   Tue Oct 1 22:31:49 2024 +0200

    mtd: rawnand: atmel: Fix possible memory leak
    
    [ Upstream commit 6d734f1bfc336aaea91313a5632f2f197608fadd ]
    
    The pmecc "user" structure is allocated in atmel_pmecc_create_user() and
    was supposed to be freed with atmel_pmecc_destroy_user(), but this other
    helper is never called. One solution would be to find the proper
    location to call the destructor, but the trend today is to switch to
    device managed allocations, which in this case fits pretty well.
    
    Replace kzalloc() by devm_kzalloc() and drop the destructor entirely.
    
    Reported-by: "Dr. David Alan Gilbert" <[email protected]>
    Closes: https://lore.kernel.org/all/ZvmIvRJCf6VhHvpo@gallifrey/
    Fixes: f88fc122cc34 ("mtd: nand: Cleanup/rework the atmel_nand driver")
    Signed-off-by: Miquel Raynal <[email protected]>
    Link: https://lore.kernel.org/linux-mtd/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
net/ipv6: release expired exception dst cached in socket [+ + +]
Author: Jiri Wiesner <[email protected]>
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 <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/20241128085950.GA4505@incl
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/mlx5: fs, lock FTE when checking if active [+ + +]
Author: Mark Bloch <[email protected]>
Date:   Thu Nov 7 20:35:23 2024 +0200

    net/mlx5: fs, lock FTE when checking if active
    
    [ Upstream commit 9ca314419930f9135727e39d77e66262d5f7bef6 ]
    
    The referenced commits introduced a two-step process for deleting FTEs:
    
    - Lock the FTE, delete it from hardware, set the hardware deletion function
      to NULL and unlock the FTE.
    - Lock the parent flow group, delete the software copy of the FTE, and
      remove it from the xarray.
    
    However, this approach encounters a race condition if a rule with the same
    match value is added simultaneously. In this scenario, fs_core may set the
    hardware deletion function to NULL prematurely, causing a panic during
    subsequent rule deletions.
    
    To prevent this, ensure the active flag of the FTE is checked under a lock,
    which will prevent the fs_core layer from attaching a new steering rule to
    an FTE that is in the process of deletion.
    
    [  438.967589] MOSHE: 2496 mlx5_del_flow_rules del_hw_func
    [  438.968205] ------------[ cut here ]------------
    [  438.968654] refcount_t: decrement hit 0; leaking memory.
    [  438.969249] WARNING: CPU: 0 PID: 8957 at lib/refcount.c:31 refcount_warn_saturate+0xfb/0x110
    [  438.970054] Modules linked in: act_mirred cls_flower act_gact sch_ingress openvswitch nsh mlx5_vdpa vringh vhost_iotlb vdpa mlx5_ib mlx5_core xt_conntrack xt_MASQUERADE nf_conntrack_netlink nfnetlink xt_addrtype iptable_nat nf_nat br_netfilter rpcsec_gss_krb5 auth_rpcgss oid_registry overlay rpcrdma rdma_ucm ib_iser libiscsi scsi_transport_iscsi ib_umad rdma_cm ib_ipoib iw_cm ib_cm ib_uverbs ib_core zram zsmalloc fuse [last unloaded: cls_flower]
    [  438.973288] CPU: 0 UID: 0 PID: 8957 Comm: tc Not tainted 6.12.0-rc1+ #8
    [  438.973888] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
    [  438.974874] RIP: 0010:refcount_warn_saturate+0xfb/0x110
    [  438.975363] Code: 40 66 3b 82 c6 05 16 e9 4d 01 01 e8 1f 7c a0 ff 0f 0b c3 cc cc cc cc 48 c7 c7 10 66 3b 82 c6 05 fd e8 4d 01 01 e8 05 7c a0 ff <0f> 0b c3 cc cc cc cc 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 90
    [  438.976947] RSP: 0018:ffff888124a53610 EFLAGS: 00010286
    [  438.977446] RAX: 0000000000000000 RBX: ffff888119d56de0 RCX: 0000000000000000
    [  438.978090] RDX: ffff88852c828700 RSI: ffff88852c81b3c0 RDI: ffff88852c81b3c0
    [  438.978721] RBP: ffff888120fa0e88 R08: 0000000000000000 R09: ffff888124a534b0
    [  438.979353] R10: 0000000000000001 R11: 0000000000000001 R12: ffff888119d56de0
    [  438.979979] R13: ffff888120fa0ec0 R14: ffff888120fa0ee8 R15: ffff888119d56de0
    [  438.980607] FS:  00007fe6dcc0f800(0000) GS:ffff88852c800000(0000) knlGS:0000000000000000
    [  438.983984] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  438.984544] CR2: 00000000004275e0 CR3: 0000000186982001 CR4: 0000000000372eb0
    [  438.985205] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [  438.985842] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [  438.986507] Call Trace:
    [  438.986799]  <TASK>
    [  438.987070]  ? __warn+0x7d/0x110
    [  438.987426]  ? refcount_warn_saturate+0xfb/0x110
    [  438.987877]  ? report_bug+0x17d/0x190
    [  438.988261]  ? prb_read_valid+0x17/0x20
    [  438.988659]  ? handle_bug+0x53/0x90
    [  438.989054]  ? exc_invalid_op+0x14/0x70
    [  438.989458]  ? asm_exc_invalid_op+0x16/0x20
    [  438.989883]  ? refcount_warn_saturate+0xfb/0x110
    [  438.990348]  mlx5_del_flow_rules+0x2f7/0x340 [mlx5_core]
    [  438.990932]  __mlx5_eswitch_del_rule+0x49/0x170 [mlx5_core]
    [  438.991519]  ? mlx5_lag_is_sriov+0x3c/0x50 [mlx5_core]
    [  438.992054]  ? xas_load+0x9/0xb0
    [  438.992407]  mlx5e_tc_rule_unoffload+0x45/0xe0 [mlx5_core]
    [  438.993037]  mlx5e_tc_del_fdb_flow+0x2a6/0x2e0 [mlx5_core]
    [  438.993623]  mlx5e_flow_put+0x29/0x60 [mlx5_core]
    [  438.994161]  mlx5e_delete_flower+0x261/0x390 [mlx5_core]
    [  438.994728]  tc_setup_cb_destroy+0xb9/0x190
    [  438.995150]  fl_hw_destroy_filter+0x94/0xc0 [cls_flower]
    [  438.995650]  fl_change+0x11a4/0x13c0 [cls_flower]
    [  438.996105]  tc_new_tfilter+0x347/0xbc0
    [  438.996503]  ? ___slab_alloc+0x70/0x8c0
    [  438.996929]  rtnetlink_rcv_msg+0xf9/0x3e0
    [  438.997339]  ? __netlink_sendskb+0x4c/0x70
    [  438.997751]  ? netlink_unicast+0x286/0x2d0
    [  438.998171]  ? __pfx_rtnetlink_rcv_msg+0x10/0x10
    [  438.998625]  netlink_rcv_skb+0x54/0x100
    [  438.999020]  netlink_unicast+0x203/0x2d0
    [  438.999421]  netlink_sendmsg+0x1e4/0x420
    [  438.999820]  __sock_sendmsg+0xa1/0xb0
    [  439.000203]  ____sys_sendmsg+0x207/0x2a0
    [  439.000600]  ? copy_msghdr_from_user+0x6d/0xa0
    [  439.001072]  ___sys_sendmsg+0x80/0xc0
    [  439.001459]  ? ___sys_recvmsg+0x8b/0xc0
    [  439.001848]  ? generic_update_time+0x4d/0x60
    [  439.002282]  __sys_sendmsg+0x51/0x90
    [  439.002658]  do_syscall_64+0x50/0x110
    [  439.003040]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fixes: 718ce4d601db ("net/mlx5: Consolidate update FTE for all removal changes")
    Fixes: cefc23554fc2 ("net/mlx5: Fix FTE cleanup")
    Signed-off-by: Mark Bloch <[email protected]>
    Reviewed-by: Maor Gottlieb <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/mlx5e: kTLS, Fix incorrect page refcounting [+ + +]
Author: Dragos Tatulea <[email protected]>
Date:   Thu Nov 7 20:35:24 2024 +0200

    net/mlx5e: kTLS, Fix incorrect page refcounting
    
    [ Upstream commit dd6e972cc5890d91d6749bb48e3912721c4e4b25 ]
    
    The kTLS tx handling code is using a mix of get_page() and
    page_ref_inc() APIs to increment the page reference. But on the release
    path (mlx5e_ktls_tx_handle_resync_dump_comp()), only put_page() is used.
    
    This is an issue when using pages from large folios: the get_page()
    references are stored on the folio page while the page_ref_inc()
    references are stored directly in the given page. On release the folio
    page will be dereferenced too many times.
    
    This was found while doing kTLS testing with sendfile() + ZC when the
    served file was read from NFS on a kernel with NFS large folios support
    (commit 49b29a573da8 ("nfs: add support for large folios")).
    
    Fixes: 84d1bb2b139e ("net/mlx5e: kTLS, Limit DUMP wqe size")
    Signed-off-by: Dragos Tatulea <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/neighbor: clear error in case strict check is not set [+ + +]
Author: Jakub Kicinski <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/qed: allow old cards not supporting "num_images" to work [+ + +]
Author: Louis Leseur <[email protected]>
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 <[email protected]>
    Signed-off-by: Florian Forestier <[email protected]>
    Signed-off-by: Louis Leseur <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/sched: cbs: Fix integer overflow in cbs_set_port_rate() [+ + +]
Author: Elena Salomatkina <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: tbf: correct backlog statistic for GSO packets [+ + +]
Author: Martin Ottens <[email protected]>
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 <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: af_can: do not leave a dangling sk pointer in can_create() [+ + +]
Author: Ignat Korchagin <[email protected]>
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 <[email protected]>
    Reviewed-by: Vincent Mailhol <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Marc Kleine-Budde <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ethernet: fs_enet: Use %pa to format resource_size_t [+ + +]
Author: Simon Horman <[email protected]>
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 <[email protected]>
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Simon Horman <[email protected]>
    Reviewed-by: Daniel Machon <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: fec_mpc52xx_phy: Use %pa to format resource_size_t [+ + +]
Author: Simon Horman <[email protected]>
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 <[email protected]>
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Simon Horman <[email protected]>
    Reviewed-by: Daniel Machon <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ieee802154: do not leave a dangling sk pointer in ieee802154_create() [+ + +]
Author: Ignat Korchagin <[email protected]>
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 <[email protected]>
    Reviewed-by: Miquel Raynal <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: inet6: do not leave a dangling sk pointer in inet6_create() [+ + +]
Author: Ignat Korchagin <[email protected]>
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 <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: inet: do not leave a dangling sk pointer in inet_create() [+ + +]
Author: Ignat Korchagin <[email protected]>
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 <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: rfkill: gpio: Add check for clk_enable() [+ + +]
Author: Mingwei Zheng <[email protected]>
Date:   Fri Nov 8 14:53:41 2024 -0500

    net: rfkill: gpio: Add check for clk_enable()
    
    [ Upstream commit 8251e7621b25ccdb689f1dd9553b8789e3745ea1 ]
    
    Add check for the return value of clk_enable() to catch the potential
    error.
    
    Fixes: 7176ba23f8b5 ("net: rfkill: add generic gpio rfkill driver")
    Signed-off-by: Mingwei Zheng <[email protected]>
    Signed-off-by: Jiasheng Jiang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: stmmac: dwmac-socfpga: Set RX watchdog interrupt as broken [+ + +]
Author: Maxime Chevallier <[email protected]>
Date:   Fri Nov 22 15:12:55 2024 +0100

    net: stmmac: dwmac-socfpga: Set RX watchdog interrupt as broken
    
    [ Upstream commit 407618d66dba55e7db1278872e8be106808bbe91 ]
    
    On DWMAC3 and later, there's a RX Watchdog interrupt that's used for
    interrupt coalescing. It's known to be buggy on some platforms, and
    dwmac-socfpga appears to be one of them. Changing the interrupt
    coalescing from ethtool doesn't appear to have any effect here.
    
    Without disabling RIWT (Received Interrupt Watchdog Timer, I
    believe...), we observe latencies while receiving traffic that amount to
    around ~0.4ms. This was discovered with NTP but can be easily reproduced
    with a simple ping. Without this patch :
    
    64 bytes from 192.168.5.2: icmp_seq=1 ttl=64 time=0.657 ms
    
    With this patch :
    
    64 bytes from 192.168.5.2: icmp_seq=1 ttl=64 time=0.254 ms
    
    Fixes: 801d233b7302 ("net: stmmac: Add SOCFPGA glue driver")
    Signed-off-by: Maxime Chevallier <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: lan78xx: Fix memory leak on device unplug by freeing PHY device [+ + +]
Author: Oleksij Rempel <[email protected]>
Date:   Sat Nov 16 14:05:58 2024 +0100

    net: usb: lan78xx: Fix memory leak on device unplug by freeing PHY device
    
    [ Upstream commit ae7370e61c5d8f5bcefc2d4fca724bd4e9bbf789 ]
    
    Add calls to `phy_device_free` after `fixed_phy_unregister` to fix a
    memory leak that occurs when the device is unplugged. This ensures
    proper cleanup of pseudo fixed-link PHYs.
    
    Fixes: 89b36fb5e532 ("lan78xx: Lan7801 Support for Fixed PHY")
    Cc: Raghuram Chary J <[email protected]>
    Signed-off-by: Oleksij Rempel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: lan78xx: Fix refcounting and autosuspend on invalid WoL configuration [+ + +]
Author: Oleksij Rempel <[email protected]>
Date:   Mon Nov 18 15:03:51 2024 +0100

    net: usb: lan78xx: Fix refcounting and autosuspend on invalid WoL configuration
    
    [ Upstream commit e863ff806f72098bccaf8fa89c80d9ad6187c3b0 ]
    
    Validate Wake-on-LAN (WoL) options in `lan78xx_set_wol` before calling
    `usb_autopm_get_interface`. This prevents USB autopm refcounting issues
    and ensures the adapter can properly enter autosuspend when invalid WoL
    options are provided.
    
    Fixes: eb9ad088f966 ("lan78xx: Check for supported Wake-on-LAN modes")
    Signed-off-by: Oleksij Rempel <[email protected]>
    Acked-by: Florian Fainelli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: qmi_wwan: add Quectel RG650V [+ + +]
Author: Benoît Monin <[email protected]>
Date:   Thu Oct 24 17:11:13 2024 +0200

    net: usb: qmi_wwan: add Quectel RG650V
    
    [ Upstream commit 6b3f18a76be6bbd237c7594cf0bf2912b68084fe ]
    
    Add support for Quectel RG650V which is based on Qualcomm SDX65 chip.
    The composition is DIAG / NMEA / AT / AT / QMI.
    
    T: Bus=02 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#=  4 Spd=5000 MxCh= 0
    D: Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
    P: Vendor=2c7c ProdID=0122 Rev=05.15
    S: Manufacturer=Quectel
    S: Product=RG650V-EU
    S: SerialNumber=xxxxxxx
    C: #Ifs= 5 Cfg#= 1 Atr=a0 MxPwr=896mA
    I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E: Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E: Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E: Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E: Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E: Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E: Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E: Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=9ms
    I: If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E: Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E: Ad=85(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E: Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=9ms
    I: If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
    E: Ad=05(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E: Ad=87(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E: Ad=88(I) Atr=03(Int.) MxPS=   8 Ivl=9ms
    
    Signed-off-by: Benoît Monin <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netfilter: ipset: add missing range check in bitmap_ip_uadt [+ + +]
Author: Jeongjun Park <[email protected]>
Date:   Wed Nov 13 22:02:09 2024 +0900

    netfilter: ipset: add missing range check in bitmap_ip_uadt
    
    commit 35f56c554eb1b56b77b3cf197a6b00922d49033d upstream.
    
    When tb[IPSET_ATTR_IP_TO] is not present but tb[IPSET_ATTR_CIDR] exists,
    the values of ip and ip_to are slightly swapped. Therefore, the range check
    for ip should be done later, but this part is missing and it seems that the
    vulnerability occurs.
    
    So we should add missing range checks and remove unnecessary range checks.
    
    Cc: <[email protected]>
    Reported-by: [email protected]
    Fixes: 72205fc68bd1 ("netfilter: ipset: bitmap:ip set type support")
    Signed-off-by: Jeongjun Park <[email protected]>
    Acked-by: Jozsef Kadlecsik <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: ipset: Hold module reference while requesting a module [+ + +]
Author: Phil Sutter <[email protected]>
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 <[email protected]>
    Acked-by: Jozsef Kadlecsik <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nft_set_hash: skip duplicated elements pending gc run [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
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 <[email protected]>
    Tested-by: Laurent Fasnacht <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: x_tables: fix LED ID check in led_tg_check() [+ + +]
Author: Dmitry Antipov <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=6c8215822f35fdb35667
    Fixes: 268cb38e1802 ("netfilter: x_tables: add LED trigger target")
    Signed-off-by: Dmitry Antipov <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netlink: terminate outstanding dump on socket close [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Tue Nov 5 17:52:34 2024 -0800

    netlink: terminate outstanding dump on socket close
    
    [ Upstream commit 1904fb9ebf911441f90a68e96b22aa73e4410505 ]
    
    Netlink supports iterative dumping of data. It provides the families
    the following ops:
     - start - (optional) kicks off the dumping process
     - dump  - actual dump helper, keeps getting called until it returns 0
     - done  - (optional) pairs with .start, can be used for cleanup
    The whole process is asynchronous and the repeated calls to .dump
    don't actually happen in a tight loop, but rather are triggered
    in response to recvmsg() on the socket.
    
    This gives the user full control over the dump, but also means that
    the user can close the socket without getting to the end of the dump.
    To make sure .start is always paired with .done we check if there
    is an ongoing dump before freeing the socket, and if so call .done.
    
    The complication is that sockets can get freed from BH and .done
    is allowed to sleep. So we use a workqueue to defer the call, when
    needed.
    
    Unfortunately this does not work correctly. What we defer is not
    the cleanup but rather releasing a reference on the socket.
    We have no guarantee that we own the last reference, if someone
    else holds the socket they may release it in BH and we're back
    to square one.
    
    The whole dance, however, appears to be unnecessary. Only the user
    can interact with dumps, so we can clean up when socket is closed.
    And close always happens in process context. Some async code may
    still access the socket after close, queue notification skbs to it etc.
    but no dumps can start, end or otherwise make progress.
    
    Delete the workqueue and flush the dump state directly from the release
    handler. Note that further cleanup is possible in -next, for instance
    we now always call .done before releasing the main module reference,
    so dump doesn't have to take a reference of its own.
    
    Reported-by: syzkaller <[email protected]>
    Fixes: ed5d7788a934 ("netlink: Do not schedule work from sk_destruct")
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
 
netpoll: Use rcu_access_pointer() in __netpoll_setup [+ + +]
Author: Breno Leitao <[email protected]>
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 <[email protected]>
    Signed-off-by: Breno Leitao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netpoll: Use rcu_access_pointer() in netpoll_poll_lock [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Mon Nov 18 03:15:18 2024 -0800

    netpoll: Use rcu_access_pointer() in netpoll_poll_lock
    
    [ Upstream commit a57d5a72f8dec7db8a79d0016fb0a3bdecc82b56 ]
    
    The ndev->npinfo pointer in netpoll_poll_lock() 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.
    
    Fixes: bea3348eef27 ("[NET]: Make NAPI polling independent of struct net_device objects.")
    Signed-off-by: Breno Leitao <[email protected]>
    Reviewed-by: Michal Kubiak <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFSD: Cap the number of bytes copied by nfs4_reset_recoverydir() [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Thu Oct 17 11:03:56 2024 -0400

    NFSD: Cap the number of bytes copied by nfs4_reset_recoverydir()
    
    [ Upstream commit f64ea4af43161bb86ffc77e6aeb5bcf5c3229df0 ]
    
    It's only current caller already length-checks the string, but let's
    be safe.
    
    Fixes: 0964a3d3f1aa ("[PATCH] knfsd: nfsd4 reboot dirname fix")
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nfsd: fix nfs4_openowner leak when concurrent nfsd4_open occur [+ + +]
Author: Yang Erkun <[email protected]>
Date:   Tue Nov 5 19:03:14 2024 +0800

    nfsd: fix nfs4_openowner leak when concurrent nfsd4_open occur
    
    commit 98100e88dd8865999dc6379a3356cd799795fe7b upstream.
    
    The action force umount(umount -f) will attempt to kill all rpc_task even
    umount operation may ultimately fail if some files remain open.
    Consequently, if an action attempts to open a file, it can potentially
    send two rpc_task to nfs server.
    
                       NFS CLIENT
    thread1                             thread2
    open("file")
    ...
    nfs4_do_open
     _nfs4_do_open
      _nfs4_open_and_get_state
       _nfs4_proc_open
        nfs4_run_open_task
         /* rpc_task1 */
         rpc_run_task
         rpc_wait_for_completion_task
    
                                        umount -f
                                        nfs_umount_begin
                                         rpc_killall_tasks
                                          rpc_signal_task
         rpc_task1 been wakeup
         and return -512
     _nfs4_do_open // while loop
        ...
        nfs4_run_open_task
         /* rpc_task2 */
         rpc_run_task
         rpc_wait_for_completion_task
    
    While processing an open request, nfsd will first attempt to find or
    allocate an nfs4_openowner. If it finds an nfs4_openowner that is not
    marked as NFS4_OO_CONFIRMED, this nfs4_openowner will released. Since
    two rpc_task can attempt to open the same file simultaneously from the
    client to server, and because two instances of nfsd can run
    concurrently, this situation can lead to lots of memory leak.
    Additionally, when we echo 0 to /proc/fs/nfsd/threads, warning will be
    triggered.
    
                        NFS SERVER
    nfsd1                  nfsd2       echo 0 > /proc/fs/nfsd/threads
    
    nfsd4_open
     nfsd4_process_open1
      find_or_alloc_open_stateowner
       // alloc oo1, stateid1
                           nfsd4_open
                            nfsd4_process_open1
                            find_or_alloc_open_stateowner
                            // find oo1, without NFS4_OO_CONFIRMED
                             release_openowner
                              unhash_openowner_locked
                              list_del_init(&oo->oo_perclient)
                              // cannot find this oo
                              // from client, LEAK!!!
                             alloc_stateowner // alloc oo2
    
     nfsd4_process_open2
      init_open_stateid
      // associate oo1
      // with stateid1, stateid1 LEAK!!!
      nfs4_get_vfs_file
      // alloc nfsd_file1 and nfsd_file_mark1
      // all LEAK!!!
    
                             nfsd4_process_open2
                             ...
    
                                        write_threads
                                         ...
                                         nfsd_destroy_serv
                                          nfsd_shutdown_net
                                           nfs4_state_shutdown_net
                                            nfs4_state_destroy_net
                                             destroy_client
                                              __destroy_client
                                              // won't find oo1!!!
                                         nfsd_shutdown_generic
                                          nfsd_file_cache_shutdown
                                           kmem_cache_destroy
                                           for nfsd_file_slab
                                           and nfsd_file_mark_slab
                                           // bark since nfsd_file1
                                           // and nfsd_file_mark1
                                           // still alive
    
    =======================================================================
    BUG nfsd_file (Not tainted): Objects remaining in nfsd_file on
    __kmem_cache_shutdown()
    -----------------------------------------------------------------------
    
    Slab 0xffd4000004438a80 objects=34 used=1 fp=0xff11000110e2ad28
    flags=0x17ffffc0000240(workingset|head|node=0|zone=2|lastcpupid=0x1fffff)
    CPU: 4 UID: 0 PID: 757 Comm: sh Not tainted 6.12.0-rc6+ #19
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
    1.16.1-2.fc37 04/01/2014
    Call Trace:
     <TASK>
     dump_stack_lvl+0x53/0x70
     slab_err+0xb0/0xf0
     __kmem_cache_shutdown+0x15c/0x310
     kmem_cache_destroy+0x66/0x160
     nfsd_file_cache_shutdown+0xac/0x210 [nfsd]
     nfsd_destroy_serv+0x251/0x2a0 [nfsd]
     nfsd_svc+0x125/0x1e0 [nfsd]
     write_threads+0x16a/0x2a0 [nfsd]
     nfsctl_transaction_write+0x74/0xa0 [nfsd]
     vfs_write+0x1ae/0x6d0
     ksys_write+0xc1/0x160
     do_syscall_64+0x5f/0x170
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Disabling lock debugging due to kernel taint
    Object 0xff11000110e2ac38 @offset=3128
    Allocated in nfsd_file_do_acquire+0x20f/0xa30 [nfsd] age=1635 cpu=3
    pid=800
     nfsd_file_do_acquire+0x20f/0xa30 [nfsd]
     nfsd_file_acquire_opened+0x5f/0x90 [nfsd]
     nfs4_get_vfs_file+0x4c9/0x570 [nfsd]
     nfsd4_process_open2+0x713/0x1070 [nfsd]
     nfsd4_open+0x74b/0x8b0 [nfsd]
     nfsd4_proc_compound+0x70b/0xc20 [nfsd]
     nfsd_dispatch+0x1b4/0x3a0 [nfsd]
     svc_process_common+0x5b8/0xc50 [sunrpc]
     svc_process+0x2ab/0x3b0 [sunrpc]
     svc_handle_xprt+0x681/0xa20 [sunrpc]
     nfsd+0x183/0x220 [nfsd]
     kthread+0x199/0x1e0
     ret_from_fork+0x31/0x60
     ret_from_fork_asm+0x1a/0x30
    
    Add nfs4_openowner_unhashed to help found unhashed nfs4_openowner, and
    break nfsd4_open process to fix this problem.
    
    Cc: [email protected] # v5.4+
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Yang Erkun <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
NFSD: Fix nfsd4_shutdown_copy() [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Thu Oct 31 09:40:03 2024 -0400

    NFSD: Fix nfsd4_shutdown_copy()
    
    [ Upstream commit 62a8642ba00aa8ceb0a02ade942f5ec52e877c95 ]
    
    nfsd4_shutdown_copy() is just this:
    
            while ((copy = nfsd4_get_copy(clp)) != NULL)
                    nfsd4_stop_copy(copy);
    
    nfsd4_get_copy() bumps @copy's reference count, preventing
    nfsd4_stop_copy() from releasing @copy.
    
    A while loop like this usually works by removing the first element
    of the list, but neither nfsd4_get_copy() nor nfsd4_stop_copy()
    alters the async_copies list.
    
    Best I can tell, then, is that nfsd4_shutdown_copy() continues to
    loop until other threads manage to remove all the items from this
    list. The spinning loop blocks shutdown until these items are gone.
    
    Possibly the reason we haven't seen this issue in the field is
    because client_has_state() prevents __destroy_client() from calling
    nfsd4_shutdown_copy() if there are any items on this list. In a
    subsequent patch I plan to remove that restriction.
    
    Fixes: e0639dc5805a ("NFSD introduce async copy feature")
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

NFSD: Force all NFSv4.2 COPY requests to be synchronous [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Wed Nov 20 14:13:15 2024 -0500

    NFSD: Force all NFSv4.2 COPY requests to be synchronous
    
    [ Upstream commit 8d915bbf39266bb66082c1e4980e123883f19830 ]
    
    We've discovered that delivering a CB_OFFLOAD operation can be
    unreliable in some pretty unremarkable situations. Examples
    include:
    
     - The server dropped the connection because it lost a forechannel
       NFSv4 request and wishes to force the client to retransmit
     - The GSS sequence number window under-flowed
     - A network partition occurred
    
    When that happens, all pending callback operations, including
    CB_OFFLOAD, are lost. NFSD does not retransmit them.
    
    Moreover, the Linux NFS client does not yet support sending an
    OFFLOAD_STATUS operation to probe whether an asynchronous COPY
    operation has finished. Thus, on Linux NFS clients, when a
    CB_OFFLOAD is lost, asynchronous COPY can hang until manually
    interrupted.
    
    I've tried a couple of remedies, but so far the side-effects are
    worse than the disease and they have had to be reverted. So
    temporarily force COPY operations to be synchronous so that the use
    of CB_OFFLOAD is avoided entirely. This is a fix that can easily be
    backported to LTS kernels. I am working on client patches that
    introduce an implementation of OFFLOAD_STATUS.
    
    Note that NFSD arbitrarily limits the size of a copy_file_range
    to 4MB to avoid indefinitely blocking an nfsd thread. A short
    COPY result is returned in that case, and the client can present
    a fresh COPY request for the remainder.
    
    Link: https://nvd.nist.gov/vuln/detail/CVE-2024-49974
    [ cel: adjusted to apply to origin/linux-5.4.y ]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nfsd: make sure exp active before svc_export_show [+ + +]
Author: Yang Erkun <[email protected]>
Date:   Mon Oct 21 22:23:41 2024 +0800

    nfsd: make sure exp active before svc_export_show
    
    commit be8f982c369c965faffa198b46060f8853e0f1f0 upstream.
    
    The function `e_show` was called with protection from RCU. This only
    ensures that `exp` will not be freed. Therefore, the reference count for
    `exp` can drop to zero, which will trigger a refcount use-after-free
    warning when `exp_get` is called. To resolve this issue, use
    `cache_get_rcu` to ensure that `exp` remains active.
    
    ------------[ cut here ]------------
    refcount_t: addition on 0; use-after-free.
    WARNING: CPU: 3 PID: 819 at lib/refcount.c:25
    refcount_warn_saturate+0xb1/0x120
    CPU: 3 UID: 0 PID: 819 Comm: cat Not tainted 6.12.0-rc3+ #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
    1.16.1-2.fc37 04/01/2014
    RIP: 0010:refcount_warn_saturate+0xb1/0x120
    ...
    Call Trace:
     <TASK>
     e_show+0x20b/0x230 [nfsd]
     seq_read_iter+0x589/0x770
     seq_read+0x1e5/0x270
     vfs_read+0x125/0x530
     ksys_read+0xc1/0x160
     do_syscall_64+0x5f/0x170
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fixes: bf18f163e89c ("NFSD: Using exp_get for export getting")
    Cc: [email protected] # 4.20+
    Signed-off-by: Yang Erkun <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
NFSD: Prevent a potential integer overflow [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Tue Sep 17 12:15:23 2024 -0400

    NFSD: Prevent a potential integer overflow
    
    commit 7f33b92e5b18e904a481e6e208486da43e4dc841 upstream.
    
    If the tag length is >= U32_MAX - 3 then the "length + 4" addition
    can result in an integer overflow. Address this by splitting the
    decoding into several steps so that decode_cb_compound4res() does
    not have to perform arithmetic on the unsafe length value.
    
    Reported-by: Dan Carpenter <[email protected]>
    Cc: [email protected]
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

NFSD: Prevent NULL dereference in nfsd4_process_cb_update() [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Thu Oct 17 11:03:53 2024 -0400

    NFSD: Prevent NULL dereference in nfsd4_process_cb_update()
    
    [ Upstream commit 1e02c641c3a43c88cecc08402000418e15578d38 ]
    
    @ses is initialized to NULL. If __nfsd4_find_backchannel() finds no
    available backchannel session, setup_callback_client() will try to
    dereference @ses and segfault.
    
    Fixes: dcbeaa68dbbd ("nfsd4: allow backchannel recovery")
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFSv4.0: Fix a use-after-free problem in the asynchronous open() [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Fri Nov 8 12:13:31 2024 -0500

    NFSv4.0: Fix a use-after-free problem in the asynchronous open()
    
    [ Upstream commit 2fdb05dc0931250574f0cb0ebeb5ed8e20f4a889 ]
    
    Yang Erkun reports that when two threads are opening files at the same
    time, and are forced to abort before a reply is seen, then the call to
    nfs_release_seqid() in nfs4_opendata_free() can result in a
    use-after-free of the pointer to the defunct rpc task of the other
    thread.
    The fix is to ensure that if the RPC call is aborted before the call to
    nfs_wait_on_sequence() is complete, then we must call nfs_release_seqid()
    in nfs4_open_release() before the rpc_task is freed.
    
    Reported-by: Yang Erkun <[email protected]>
    Fixes: 24ac23ab88df ("NFSv4: Convert open() into an asynchronous RPC call")
    Reviewed-by: Yang Erkun <[email protected]>
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nilfs2: fix null-ptr-deref in block_dirty_buffer tracepoint [+ + +]
Author: Ryusuke Konishi <[email protected]>
Date:   Thu Nov 7 01:07:33 2024 +0900

    nilfs2: fix null-ptr-deref in block_dirty_buffer tracepoint
    
    commit 2026559a6c4ce34db117d2db8f710fe2a9420d5a upstream.
    
    When using the "block:block_dirty_buffer" tracepoint, mark_buffer_dirty()
    may cause a NULL pointer dereference, or a general protection fault when
    KASAN is enabled.
    
    This happens because, since the tracepoint was added in
    mark_buffer_dirty(), it references the dev_t member bh->b_bdev->bd_dev
    regardless of whether the buffer head has a pointer to a block_device
    structure.
    
    In the current implementation, nilfs_grab_buffer(), which grabs a buffer
    to read (or create) a block of metadata, including b-tree node blocks,
    does not set the block device, but instead does so only if the buffer is
    not in the "uptodate" state for each of its caller block reading
    functions.  However, if the uptodate flag is set on a folio/page, and the
    buffer heads are detached from it by try_to_free_buffers(), and new buffer
    heads are then attached by create_empty_buffers(), the uptodate flag may
    be restored to each buffer without the block device being set to
    bh->b_bdev, and mark_buffer_dirty() may be called later in that state,
    resulting in the bug mentioned above.
    
    Fix this issue by making nilfs_grab_buffer() always set the block device
    of the super block structure to the buffer head, regardless of the state
    of the buffer's uptodate flag.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 5305cb830834 ("block: add block_{touch|dirty}_buffer tracepoint")
    Signed-off-by: Ryusuke Konishi <[email protected]>
    Cc: Tejun Heo <[email protected]>
    Cc: Ubisectech Sirius <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

nilfs2: fix null-ptr-deref in block_touch_buffer tracepoint [+ + +]
Author: Ryusuke Konishi <[email protected]>
Date:   Thu Nov 7 01:07:32 2024 +0900

    nilfs2: fix null-ptr-deref in block_touch_buffer tracepoint
    
    commit cd45e963e44b0f10d90b9e6c0e8b4f47f3c92471 upstream.
    
    Patch series "nilfs2: fix null-ptr-deref bugs on block tracepoints".
    
    This series fixes null pointer dereference bugs that occur when using
    nilfs2 and two block-related tracepoints.
    
    
    This patch (of 2):
    
    It has been reported that when using "block:block_touch_buffer"
    tracepoint, touch_buffer() called from __nilfs_get_folio_block() causes a
    NULL pointer dereference, or a general protection fault when KASAN is
    enabled.
    
    This happens because since the tracepoint was added in touch_buffer(), it
    references the dev_t member bh->b_bdev->bd_dev regardless of whether the
    buffer head has a pointer to a block_device structure.  In the current
    implementation, the block_device structure is set after the function
    returns to the caller.
    
    Here, touch_buffer() is used to mark the folio/page that owns the buffer
    head as accessed, but the common search helper for folio/page used by the
    caller function was optimized to mark the folio/page as accessed when it
    was reimplemented a long time ago, eliminating the need to call
    touch_buffer() here in the first place.
    
    So this solves the issue by eliminating the touch_buffer() call itself.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 5305cb830834 ("block: add block_{touch|dirty}_buffer tracepoint")
    Signed-off-by: Ryusuke Konishi <[email protected]>
    Reported-by: Ubisectech Sirius <[email protected]>
    Closes: https://lkml.kernel.org/r/[email protected]
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=9982fb8d18eba905abe2
    Tested-by: [email protected]
    Cc: Tejun Heo <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

nilfs2: fix potential out-of-bounds memory access in nilfs_find_entry() [+ + +]
Author: Ryusuke Konishi <[email protected]>
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/[email protected]
    Fixes: 2ba466d74ed7 ("nilfs2: directory entry operations")
    Signed-off-by: Ryusuke Konishi <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=96d5d14c47d97015c624
    Tested-by: [email protected]
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvdimm: rectify the illogical code within nd_dax_probe() [+ + +]
Author: Yi Yang <[email protected]>
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 <[email protected]>
    Reviewed-by: Dave Jiang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Ira Weiny <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvme-pci: fix freeing of the HMB descriptor table [+ + +]
Author: Christoph Hellwig <[email protected]>
Date:   Fri Nov 1 05:40:04 2024 +0100

    nvme-pci: fix freeing of the HMB descriptor table
    
    [ Upstream commit 3c2fb1ca8086eb139b2a551358137525ae8e0d7a ]
    
    The HMB descriptor table is sized to the maximum number of descriptors
    that could be used for a given device, but __nvme_alloc_host_mem could
    break out of the loop earlier on memory allocation failure and end up
    using less descriptors than planned for, which leads to an incorrect
    size passed to dma_free_coherent.
    
    In practice this was not showing up because the number of descriptors
    tends to be low and the dma coherent allocator always allocates and
    frees at least a page.
    
    Fixes: 87ad72a59a38 ("nvme-pci: implement host memory buffer support")
    Signed-off-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvme: fix metadata handling in nvme-passthrough [+ + +]
Author: Puranjay Mohan <[email protected]>
Date:   Mon Nov 25 13:53:34 2024 +0000

    nvme: fix metadata handling in nvme-passthrough
    
    [ Upstream commit 7c2fd76048e95dd267055b5f5e0a48e6e7c81fd9 ]
    
    On an NVMe namespace that does not support metadata, it is possible to
    send an IO command with metadata through io-passthru. This allows issues
    like [1] to trigger in the completion code path.
    nvme_map_user_request() doesn't check if the namespace supports metadata
    before sending it forward. It also allows admin commands with metadata to
    be processed as it ignores metadata when bdev == NULL and may report
    success.
    
    Reject an IO command with metadata when the NVMe namespace doesn't
    support it and reject an admin command if it has metadata.
    
    [1] https://lore.kernel.org/all/[email protected]/
    
    Suggested-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Puranjay Mohan <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Sagi Grimberg <[email protected]>
    Reviewed-by: Anuj Gupta <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    [ Move the changes from nvme_map_user_request() to nvme_submit_user_cmd()
      to make it work on 5.4 ]
    Signed-off-by: Hagar Hemdan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ocfs2: fix UBSAN warning in ocfs2_verify_volume() [+ + +]
Author: Dmitry Antipov <[email protected]>
Date:   Wed Nov 6 12:21:00 2024 +0300

    ocfs2: fix UBSAN warning in ocfs2_verify_volume()
    
    commit 23aab037106d46e6168ce1214a958ce9bf317f2e upstream.
    
    Syzbot has reported the following splat triggered by UBSAN:
    
    UBSAN: shift-out-of-bounds in fs/ocfs2/super.c:2336:10
    shift exponent 32768 is too large for 32-bit type 'int'
    CPU: 2 UID: 0 PID: 5255 Comm: repro Not tainted 6.12.0-rc4-syzkaller-00047-gc2ee9f594da8 #0
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-3.fc41 04/01/2014
    Call Trace:
     <TASK>
     dump_stack_lvl+0x241/0x360
     ? __pfx_dump_stack_lvl+0x10/0x10
     ? __pfx__printk+0x10/0x10
     ? __asan_memset+0x23/0x50
     ? lockdep_init_map_type+0xa1/0x910
     __ubsan_handle_shift_out_of_bounds+0x3c8/0x420
     ocfs2_fill_super+0xf9c/0x5750
     ? __pfx_ocfs2_fill_super+0x10/0x10
     ? __pfx_validate_chain+0x10/0x10
     ? __pfx_validate_chain+0x10/0x10
     ? validate_chain+0x11e/0x5920
     ? __lock_acquire+0x1384/0x2050
     ? __pfx_validate_chain+0x10/0x10
     ? string+0x26a/0x2b0
     ? widen_string+0x3a/0x310
     ? string+0x26a/0x2b0
     ? bdev_name+0x2b1/0x3c0
     ? pointer+0x703/0x1210
     ? __pfx_pointer+0x10/0x10
     ? __pfx_format_decode+0x10/0x10
     ? __lock_acquire+0x1384/0x2050
     ? vsnprintf+0x1ccd/0x1da0
     ? snprintf+0xda/0x120
     ? __pfx_lock_release+0x10/0x10
     ? do_raw_spin_lock+0x14f/0x370
     ? __pfx_snprintf+0x10/0x10
     ? set_blocksize+0x1f9/0x360
     ? sb_set_blocksize+0x98/0xf0
     ? setup_bdev_super+0x4e6/0x5d0
     mount_bdev+0x20c/0x2d0
     ? __pfx_ocfs2_fill_super+0x10/0x10
     ? __pfx_mount_bdev+0x10/0x10
     ? vfs_parse_fs_string+0x190/0x230
     ? __pfx_vfs_parse_fs_string+0x10/0x10
     legacy_get_tree+0xf0/0x190
     ? __pfx_ocfs2_mount+0x10/0x10
     vfs_get_tree+0x92/0x2b0
     do_new_mount+0x2be/0xb40
     ? __pfx_do_new_mount+0x10/0x10
     __se_sys_mount+0x2d6/0x3c0
     ? __pfx___se_sys_mount+0x10/0x10
     ? do_syscall_64+0x100/0x230
     ? __x64_sys_mount+0x20/0xc0
     do_syscall_64+0xf3/0x230
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f37cae96fda
    Code: 48 8b 0d 51 ce 0c 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 49 89 ca b8 a5 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 1e ce 0c 00 f7 d8 64 89 01 48
    RSP: 002b:00007fff6c1aa228 EFLAGS: 00000206 ORIG_RAX: 00000000000000a5
    RAX: ffffffffffffffda RBX: 00007fff6c1aa240 RCX: 00007f37cae96fda
    RDX: 00000000200002c0 RSI: 0000000020000040 RDI: 00007fff6c1aa240
    RBP: 0000000000000004 R08: 00007fff6c1aa280 R09: 0000000000000000
    R10: 00000000000008c0 R11: 0000000000000206 R12: 00000000000008c0
    R13: 00007fff6c1aa280 R14: 0000000000000003 R15: 0000000001000000
     </TASK>
    
    For a really damaged superblock, the value of 'i_super.s_blocksize_bits'
    may exceed the maximum possible shift for an underlying 'int'.  So add an
    extra check whether the aforementioned field represents the valid block
    size, which is 512 bytes, 1K, 2K, or 4K.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: ccd979bdbce9 ("[PATCH] OCFS2: The Second Oracle Cluster Filesystem")
    Signed-off-by: Dmitry Antipov <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=56f7cd1abe4b8e475180
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ocfs2: fix uninitialized value in ocfs2_file_read_iter() [+ + +]
Author: Dmitry Antipov <[email protected]>
Date:   Tue Oct 29 12:17:36 2024 +0300

    ocfs2: fix uninitialized value in ocfs2_file_read_iter()
    
    [ Upstream commit adc77b19f62d7e80f98400b2fca9d700d2afdd6f ]
    
    Syzbot has reported the following KMSAN splat:
    
    BUG: KMSAN: uninit-value in ocfs2_file_read_iter+0x9a4/0xf80
     ocfs2_file_read_iter+0x9a4/0xf80
     __io_read+0x8d4/0x20f0
     io_read+0x3e/0xf0
     io_issue_sqe+0x42b/0x22c0
     io_wq_submit_work+0xaf9/0xdc0
     io_worker_handle_work+0xd13/0x2110
     io_wq_worker+0x447/0x1410
     ret_from_fork+0x6f/0x90
     ret_from_fork_asm+0x1a/0x30
    
    Uninit was created at:
     __alloc_pages_noprof+0x9a7/0xe00
     alloc_pages_mpol_noprof+0x299/0x990
     alloc_pages_noprof+0x1bf/0x1e0
     allocate_slab+0x33a/0x1250
     ___slab_alloc+0x12ef/0x35e0
     kmem_cache_alloc_bulk_noprof+0x486/0x1330
     __io_alloc_req_refill+0x84/0x560
     io_submit_sqes+0x172f/0x2f30
     __se_sys_io_uring_enter+0x406/0x41c0
     __x64_sys_io_uring_enter+0x11f/0x1a0
     x64_sys_call+0x2b54/0x3ba0
     do_syscall_64+0xcd/0x1e0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Since an instance of 'struct kiocb' may be passed from the block layer
    with 'private' field uninitialized, introduce 'ocfs2_iocb_init_rw_locked()'
    and use it from where 'ocfs2_dio_end_io()' might take care, i.e. in
    'ocfs2_file_read_iter()' and 'ocfs2_file_write_iter()'.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 7cdfc3a1c397 ("ocfs2: Remember rw lock level during direct io")
    Signed-off-by: Dmitry Antipov <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=a73e253cca4f0230a5a5
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Joseph Qi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ocfs2: free inode when ocfs2_get_init_inode() fails [+ + +]
Author: Tetsuo Handa <[email protected]>
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/[email protected]
    Fixes: 9c89fe0af826 ("ocfs2: Handle error from dquot_initialize()")
    Signed-off-by: Tetsuo Handa <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=0af00f6a2cba2058b5db
    Tested-by: [email protected]
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ocfs2: Revert "ocfs2: fix the la space leak when unmounting an ocfs2 volume" [+ + +]
Author: Heming Zhao <[email protected]>
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 <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ocfs2: uncache inode which has failed entering the group [+ + +]
Author: Dmitry Antipov <[email protected]>
Date:   Thu Nov 14 07:38:44 2024 +0300

    ocfs2: uncache inode which has failed entering the group
    
    commit 737f34137844d6572ab7d473c998c7f977ff30eb upstream.
    
    Syzbot has reported the following BUG:
    
    kernel BUG at fs/ocfs2/uptodate.c:509!
    ...
    Call Trace:
     <TASK>
     ? __die_body+0x5f/0xb0
     ? die+0x9e/0xc0
     ? do_trap+0x15a/0x3a0
     ? ocfs2_set_new_buffer_uptodate+0x145/0x160
     ? do_error_trap+0x1dc/0x2c0
     ? ocfs2_set_new_buffer_uptodate+0x145/0x160
     ? __pfx_do_error_trap+0x10/0x10
     ? handle_invalid_op+0x34/0x40
     ? ocfs2_set_new_buffer_uptodate+0x145/0x160
     ? exc_invalid_op+0x38/0x50
     ? asm_exc_invalid_op+0x1a/0x20
     ? ocfs2_set_new_buffer_uptodate+0x2e/0x160
     ? ocfs2_set_new_buffer_uptodate+0x144/0x160
     ? ocfs2_set_new_buffer_uptodate+0x145/0x160
     ocfs2_group_add+0x39f/0x15a0
     ? __pfx_ocfs2_group_add+0x10/0x10
     ? __pfx_lock_acquire+0x10/0x10
     ? mnt_get_write_access+0x68/0x2b0
     ? __pfx_lock_release+0x10/0x10
     ? rcu_read_lock_any_held+0xb7/0x160
     ? __pfx_rcu_read_lock_any_held+0x10/0x10
     ? smack_log+0x123/0x540
     ? mnt_get_write_access+0x68/0x2b0
     ? mnt_get_write_access+0x68/0x2b0
     ? mnt_get_write_access+0x226/0x2b0
     ocfs2_ioctl+0x65e/0x7d0
     ? __pfx_ocfs2_ioctl+0x10/0x10
     ? smack_file_ioctl+0x29e/0x3a0
     ? __pfx_smack_file_ioctl+0x10/0x10
     ? lockdep_hardirqs_on_prepare+0x43d/0x780
     ? __pfx_lockdep_hardirqs_on_prepare+0x10/0x10
     ? __pfx_ocfs2_ioctl+0x10/0x10
     __se_sys_ioctl+0xfb/0x170
     do_syscall_64+0xf3/0x230
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    ...
     </TASK>
    
    When 'ioctl(OCFS2_IOC_GROUP_ADD, ...)' has failed for the particular
    inode in 'ocfs2_verify_group_and_input()', corresponding buffer head
    remains cached and subsequent call to the same 'ioctl()' for the same
    inode issues the BUG() in 'ocfs2_set_new_buffer_uptodate()' (trying
    to cache the same buffer head of that inode). Fix this by uncaching
    the buffer head with 'ocfs2_remove_from_cache()' on error path in
    'ocfs2_group_add()'.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 7909f2bf8353 ("[PATCH 2/2] ocfs2: Implement group add for online resize")
    Signed-off-by: Dmitry Antipov <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=453873f1588c2d75b447
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Dmitry Antipov <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ocfs2: update seq_file index in ocfs2_dlm_seq_next [+ + +]
Author: Wengang Wang <[email protected]>
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/[email protected]
    Signed-off-by: Wengang Wang <[email protected]>
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ovl: Filter invalid inodes with missing lookup function [+ + +]
Author: Vasiliy Kovalev <[email protected]>
Date:   Tue Nov 19 18:58:17 2024 +0300

    ovl: Filter invalid inodes with missing lookup function
    
    commit c8b359dddb418c60df1a69beea01d1b3322bfe83 upstream.
    
    Add a check to the ovl_dentry_weird() function to prevent the
    processing of directory inodes that lack the lookup function.
    This is important because such inodes can cause errors in overlayfs
    when passed to the lowerstack.
    
    Reported-by: [email protected]
    Link: https://syzkaller.appspot.com/bug?extid=a8c9d476508bd14a90e5
    Suggested-by: Miklos Szeredi <[email protected]>
    Link: https://lore.kernel.org/linux-unionfs/CAJfpegvx-oS9XGuwpJx=Xe28_jzWx5eRo1y900_ZzWY+=gGzUg@mail.gmail.com/
    Signed-off-by: Vasiliy Kovalev <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Amir Goldstein <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI: Add 'reset_subordinate' to reset hierarchy below bridge [+ + +]
Author: Keith Busch <[email protected]>
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/[email protected]
    Signed-off-by: Keith Busch <[email protected]>
    [bhelgaas: commit log, add capable(CAP_SYS_ADMIN) check]
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Alex Williamson <[email protected]>
    Reviewed-by: Amey Narkhede <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

PCI: Add ACS quirk for Wangxun FF5xxx NICs [+ + +]
Author: Mengyuan Lou <[email protected]>
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 <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

PCI: cpqphp: Fix PCIBIOS_* return value confusion [+ + +]
Author: Ilpo Järvinen <[email protected]>
Date:   Tue Oct 22 12:11:37 2024 +0300

    PCI: cpqphp: Fix PCIBIOS_* return value confusion
    
    [ Upstream commit e2226dbc4a4919d9c8bd9293299b532090bdf020 ]
    
    Code in and related to PCI_RefinedAccessConfig() has three types of return
    type confusion:
    
     - PCI_RefinedAccessConfig() tests pci_bus_read_config_dword() return value
       against -1.
    
     - PCI_RefinedAccessConfig() returns both -1 and PCIBIOS_* return codes.
    
     - Callers of PCI_RefinedAccessConfig() only test for -1.
    
    Make PCI_RefinedAccessConfig() return PCIBIOS_* codes consistently and
    adapt callers accordingly.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

PCI: cpqphp: Use PCI_POSSIBLE_ERROR() to check config reads [+ + +]
Author: weiyufeng <[email protected]>
Date:   Tue Aug 6 14:50:50 2024 +0800

    PCI: cpqphp: Use PCI_POSSIBLE_ERROR() to check config reads
    
    [ Upstream commit a18a025c2fb5fbf2d1d0606ea0d7441ac90e9c39 ]
    
    When config pci_ops.read() can detect failed PCI transactions, the data
    returned to the CPU is PCI_ERROR_RESPONSE (~0 or 0xffffffff).
    
    Obviously a successful PCI config read may *also* return that data if a
    config register happens to contain ~0, so it doesn't definitively indicate
    an error unless we know the register cannot contain ~0.
    
    Use PCI_POSSIBLE_ERROR() to check the response we get when we read data
    from hardware.  This unifies PCI error response checking and makes error
    checks consistent and easier to find.
    
    Link: https://lore.kernel.org/r/b12005c0d57bb9d4c8b486724d078b7bd92f8321.1637243717.git.naveennaidu479@gmail.com
    Signed-off-by: Naveen Naidu <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Stable-dep-of: e2226dbc4a49 ("PCI: cpqphp: Fix PCIBIOS_* return value confusion")
    Signed-off-by: Sasha Levin <[email protected]>

PCI: Fix use-after-free of slot->bus on hot remove [+ + +]
Author: Lukas Wunner <[email protected]>
Date:   Thu Oct 10 19:10:34 2024 +0200

    PCI: Fix use-after-free of slot->bus on hot remove
    
    commit c7acef99642b763ba585f4a43af999fcdbcc3dc4 upstream.
    
    Dennis reports a boot crash on recent Lenovo laptops with a USB4 dock.
    
    Since commit 0fc70886569c ("thunderbolt: Reset USB4 v2 host router") and
    commit 59a54c5f3dbd ("thunderbolt: Reset topology created by the boot
    firmware"), USB4 v2 and v1 Host Routers are reset on probe of the
    thunderbolt driver.
    
    The reset clears the Presence Detect State and Data Link Layer Link Active
    bits at the USB4 Host Router's Root Port and thus causes hot removal of the
    dock.
    
    The crash occurs when pciehp is unbound from one of the dock's Downstream
    Ports:  pciehp creates a pci_slot on bind and destroys it on unbind.  The
    pci_slot contains a pointer to the pci_bus below the Downstream Port, but
    a reference on that pci_bus is never acquired.  The pci_bus is destroyed
    before the pci_slot, so a use-after-free ensues when pci_slot_release()
    accesses slot->bus.
    
    In principle this should not happen because pci_stop_bus_device() unbinds
    pciehp (and therefore destroys the pci_slot) before the pci_bus is
    destroyed by pci_remove_bus_device().
    
    However the stacktrace provided by Dennis shows that pciehp is unbound from
    pci_remove_bus_device() instead of pci_stop_bus_device().  To understand
    the significance of this, one needs to know that the PCI core uses a two
    step process to remove a portion of the hierarchy:  It first unbinds all
    drivers in the sub-hierarchy in pci_stop_bus_device() and then actually
    removes the devices in pci_remove_bus_device().  There is no precaution to
    prevent driver binding in-between pci_stop_bus_device() and
    pci_remove_bus_device().
    
    In Dennis' case, it seems removal of the hierarchy by pciehp races with
    driver binding by pci_bus_add_devices().  pciehp is bound to the
    Downstream Port after pci_stop_bus_device() has run, so it is unbound by
    pci_remove_bus_device() instead of pci_stop_bus_device().  Because the
    pci_bus has already been destroyed at that point, accesses to it result in
    a use-after-free.
    
    One might conclude that driver binding needs to be prevented after
    pci_stop_bus_device() has run.  However it seems risky that pci_slot points
    to pci_bus without holding a reference.  Solely relying on correct ordering
    of driver unbind versus pci_bus destruction is certainly not defensive
    programming.
    
    If pci_slot has a need to access data in pci_bus, it ought to acquire a
    reference.  Amend pci_create_slot() accordingly.  Dennis reports that the
    crash is not reproducible with this change.
    
    Abridged stacktrace:
    
      pcieport 0000:00:07.0: PME: Signaling with IRQ 156
      pcieport 0000:00:07.0: pciehp: Slot #12 AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug+ Surprise+ Interlock- NoCompl+ IbPresDis- LLActRep+
      pci_bus 0000:20: dev 00, created physical slot 12
      pcieport 0000:00:07.0: pciehp: Slot(12): Card not present
      ...
      pcieport 0000:21:02.0: pciehp: pcie_disable_notification: SLOTCTRL d8 write cmd 0
      Oops: general protection fault, probably for non-canonical address 0x6b6b6b6b6b6b6b6b: 0000 [#1] PREEMPT SMP NOPTI
      CPU: 13 UID: 0 PID: 134 Comm: irq/156-pciehp Not tainted 6.11.0-devel+ #1
      RIP: 0010:dev_driver_string+0x12/0x40
      pci_destroy_slot
      pciehp_remove
      pcie_port_remove_service
      device_release_driver_internal
      bus_remove_device
      device_del
      device_unregister
      remove_iter
      device_for_each_child
      pcie_portdrv_remove
      pci_device_remove
      device_release_driver_internal
      bus_remove_device
      device_del
      pci_remove_bus_device (recursive invocation)
      pci_remove_bus_device
      pciehp_unconfigure_device
      pciehp_disable_slot
      pciehp_handle_presence_or_link_change
      pciehp_ist
    
    Link: https://lore.kernel.org/r/4bfd4c0e976c1776cd08e76603903b338cf25729.1728579288.git.lukas@wunner.de
    Reported-by: Dennis Wassenberg <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]/
    Tested-by: Dennis Wassenberg <[email protected]>
    Signed-off-by: Lukas Wunner <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Mika Westerberg <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: rockchip-ep: Fix address translation unit programming [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Thu Oct 17 10:58:36 2024 +0900

    PCI: rockchip-ep: Fix address translation unit programming
    
    commit 64f093c4d99d797b68b407a9d8767aadc3e3ea7a upstream.
    
    The Rockchip PCIe endpoint controller handles PCIe transfers addresses
    by masking the lower bits of the programmed PCI address and using the
    same number of lower bits masked from the CPU address space used for the
    mapping. For a PCI mapping of <size> bytes starting from <pci_addr>,
    the number of bits masked is the number of address bits changing in the
    address range [pci_addr..pci_addr + size - 1].
    
    However, rockchip_pcie_prog_ep_ob_atu() calculates num_pass_bits only
    using the size of the mapping, resulting in an incorrect number of mask
    bits depending on the value of the PCI address to map.
    
    Fix this by introducing the helper function
    rockchip_pcie_ep_ob_atu_num_bits() to correctly calculate the number of
    mask bits to use to program the address translation unit. The number of
    mask bits is calculated depending on both the PCI address and size of
    the mapping, and clamped between 8 and 20 using the macros
    ROCKCHIP_PCIE_AT_MIN_NUM_BITS and ROCKCHIP_PCIE_AT_MAX_NUM_BITS. As
    defined in the Rockchip RK3399 TRM V1.3 Part2, Sections 17.5.5.1.1 and
    17.6.8.2.1, this clamping is necessary because:
    
      1) The lower 8 bits of the PCI address to be mapped by the outbound
         region are ignored. So a minimum of 8 address bits are needed and
         imply that the PCI address must be aligned to 256.
    
      2) The outbound memory regions are 1MB in size. So while we can specify
         up to 63-bits for the PCI address (num_bits filed uses bits 0 to 5 of
         the outbound address region 0 register), we must limit the number of
         valid address bits to 20 to match the memory window maximum size (1
         << 20 = 1MB).
    
    Fixes: cf590b078391 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Damien Le Moal <[email protected]>
    Signed-off-by: Krzysztof Wilczyński <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
perf cs-etm: Don't flush when packet_queue fills up [+ + +]
Author: James Clark <[email protected]>
Date:   Mon Sep 16 14:57:32 2024 +0100

    perf cs-etm: Don't flush when packet_queue fills up
    
    [ Upstream commit 5afd032961e8465808c4bc385c06e7676fbe1951 ]
    
    cs_etm__flush(), like cs_etm__sample() is an operation that generates a
    sample and then swaps the current with the previous packet. Calling
    flush after processing the queues results in two swaps which corrupts
    the next sample. Therefore it wasn't appropriate to call flush here so
    remove it.
    
    Flushing is still done on a discontinuity to explicitly clear the last
    branch buffer, but when the packet_queue fills up before reaching a
    timestamp, that's not a discontinuity and the call to
    cs_etm__process_traceid_queue() already generated samples and drained
    the buffers correctly.
    
    This is visible by looking for a branch that has the same target as the
    previous branch and the following source is before the address of the
    last target, which is impossible as execution would have had to have
    gone backwards:
    
      ffff800080849d40 _find_next_and_bit+0x78 => ffff80008011cadc update_sg_lb_stats+0x94
       (packet_queue fills here before a timestamp, resulting in a flush and
        branch target ffff80008011cadc is duplicated.)
      ffff80008011cb1c update_sg_lb_stats+0xd4 => ffff80008011cadc update_sg_lb_stats+0x94
      ffff8000801117c4 cpu_util+0x24 => ffff8000801117d4 cpu_util+0x34
    
    After removing the flush the correct branch target is used for the
    second sample, and ffff8000801117c4 is no longer before the previous
    address:
    
      ffff800080849d40 _find_next_and_bit+0x78 => ffff80008011cadc update_sg_lb_stats+0x94
      ffff80008011cb1c update_sg_lb_stats+0xd4 => ffff8000801117a0 cpu_util+0x0
      ffff8000801117c4 cpu_util+0x24 => ffff8000801117d4 cpu_util+0x34
    
    Make sure that a final branch stack is output at the end of the trace
    by calling cs_etm__end_block(). This is already done for both the
    timeless decode paths.
    
    Fixes: 21fe8dc1191a ("perf cs-etm: Add support for CPU-wide trace scenarios")
    Reported-by: Ganapatrao Kulkarni <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Reviewed-by: Leo Yan <[email protected]>
    Signed-off-by: James Clark <[email protected]>
    Tested-by: Ganapatrao Kulkarni <[email protected]>
    Cc: Ben Gainey <[email protected]>
    Cc: Suzuki K Poulose <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: Mathieu Poirier <[email protected]>
    Cc: Mike Leach <[email protected]>
    Cc: Ruidong Tian <[email protected]>
    Cc: Benjamin Gray <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Cc: John Garry <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Namhyung Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
perf probe: Correct demangled symbols in C++ program [+ + +]
Author: Leo Yan <[email protected]>
Date:   Sat Oct 12 15:14:32 2024 +0100

    perf probe: Correct demangled symbols in C++ program
    
    [ Upstream commit 314909f13cc12d47c468602c37dace512d225eeb ]
    
    An issue can be observed when probe C++ demangled symbol with steps:
    
      # nm test_cpp_mangle | grep print_data
        0000000000000c94 t _GLOBAL__sub_I__Z10print_datai
        0000000000000afc T _Z10print_datai
        0000000000000b38 T _Z10print_dataR5Point
    
      # perf probe -x /home/niayan01/test_cpp_mangle -F --demangle
        ...
        print_data(Point&)
        print_data(int)
        ...
    
      # perf --debug verbose=3 probe -x test_cpp_mangle --add "test=print_data(int)"
        probe-definition(0): test=print_data(int)
        symbol:print_data(int) file:(null) line:0 offset:0 return:0 lazy:(null)
        0 arguments
        Open Debuginfo file: /home/niayan01/test_cpp_mangle
        Try to find probe point from debuginfo.
        Symbol print_data(int) address found : afc
        Matched function: print_data [2ccf]
        Probe point found: print_data+0
        Found 1 probe_trace_events.
        Opening /sys/kernel/tracing//uprobe_events write=1
        Opening /sys/kernel/tracing//README write=0
        Writing event: p:probe_test_cpp_mangle/test /home/niayan01/test_cpp_mangle:0xb38
        ...
    
    When tried to probe symbol "print_data(int)", the log shows:
    
        Symbol print_data(int) address found : afc
    
    The found address is 0xafc - which is right with verifying the output
    result from nm. Afterwards when write event, the command uses offset
    0xb38 in the last log, which is a wrong address.
    
    The dwarf_diename() gets a common function name, in above case, it
    returns string "print_data". As a result, the tool parses the offset
    based on the common name. This leads to probe at the wrong symbol
    "print_data(Point&)".
    
    To fix the issue, use the die_get_linkage_name() function to retrieve
    the distinct linkage name - this is the mangled name for the C++ case.
    Based on this unique name, the tool can get a correct offset for
    probing. Based on DWARF doc, it is possible the linkage name is missed
    in the DIE, it rolls back to use dwarf_diename().
    
    After:
    
      # perf --debug verbose=3 probe -x test_cpp_mangle --add "test=print_data(int)"
        probe-definition(0): test=print_data(int)
        symbol:print_data(int) file:(null) line:0 offset:0 return:0 lazy:(null)
        0 arguments
        Open Debuginfo file: /home/niayan01/test_cpp_mangle
        Try to find probe point from debuginfo.
        Symbol print_data(int) address found : afc
        Matched function: print_data [2d06]
        Probe point found: print_data+0
        Found 1 probe_trace_events.
        Opening /sys/kernel/tracing//uprobe_events write=1
        Opening /sys/kernel/tracing//README write=0
        Writing event: p:probe_test_cpp_mangle/test /home/niayan01/test_cpp_mangle:0xafc
        Added new event:
          probe_test_cpp_mangle:test (on print_data(int) in /home/niayan01/test_cpp_mangle)
    
        You can now use it in all perf tools, such as:
    
                perf record -e probe_test_cpp_mangle:test -aR sleep 1
    
      # perf --debug verbose=3 probe -x test_cpp_mangle --add "test2=print_data(Point&)"
        probe-definition(0): test2=print_data(Point&)
        symbol:print_data(Point&) file:(null) line:0 offset:0 return:0 lazy:(null)
        0 arguments
        Open Debuginfo file: /home/niayan01/test_cpp_mangle
        Try to find probe point from debuginfo.
        Symbol print_data(Point&) address found : b38
        Matched function: print_data [2ccf]
        Probe point found: print_data+0
        Found 1 probe_trace_events.
        Opening /sys/kernel/tracing//uprobe_events write=1
        Parsing probe_events: p:probe_test_cpp_mangle/test /home/niayan01/test_cpp_mangle:0x0000000000000afc
        Group:probe_test_cpp_mangle Event:test probe:p
        Opening /sys/kernel/tracing//README write=0
        Writing event: p:probe_test_cpp_mangle/test2 /home/niayan01/test_cpp_mangle:0xb38
        Added new event:
          probe_test_cpp_mangle:test2 (on print_data(Point&) in /home/niayan01/test_cpp_mangle)
    
        You can now use it in all perf tools, such as:
    
                perf record -e probe_test_cpp_mangle:test2 -aR sleep 1
    
    Fixes: fb1587d869a3 ("perf probe: List probes with line number and file name")
    Signed-off-by: Leo Yan <[email protected]>
    Acked-by: Masami Hiramatsu (Google) <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Namhyung Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
perf trace: Avoid garbage when not printing a syscall's arguments [+ + +]
Author: Benjamin Peterson <[email protected]>
Date:   Thu Nov 7 23:21:27 2024 +0000

    perf trace: Avoid garbage when not printing a syscall's arguments
    
    [ Upstream commit 1302e352b26f34991b619b5d0b621b76d20a3883 ]
    
    syscall__scnprintf_args may not place anything in the output buffer
    (e.g., because the arguments are all zero). If that happened in
    trace__fprintf_sys_enter, its fprintf would receive an unitialized
    buffer leading to garbage output.
    
    Fix the problem by passing the (possibly zero) bounds of the argument
    buffer to the output fprintf.
    
    Fixes: a98392bb1e169a04 ("perf trace: Use beautifiers on syscalls:sys_enter_ handlers")
    Signed-off-by: Benjamin Peterson <[email protected]>
    Tested-by: Arnaldo Carvalho de Melo <[email protected]>
    Tested-by: Howard Chu <[email protected]>
    Cc: Adrian Hunter <[email protected]>
    Cc: Alexander Shishkin <[email protected]>
    Cc: Ian Rogers <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Jiri Olsa <[email protected]>
    Cc: Kan Liang <[email protected]>
    Cc: Mark Rutland <[email protected]>
    Cc: Namhyung Kim <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

perf trace: Do not lose last events in a race [+ + +]
Author: Benjamin Peterson <[email protected]>
Date:   Thu Nov 7 23:21:26 2024 +0000

    perf trace: Do not lose last events in a race
    
    [ Upstream commit 3fd7c36973a250e17a4ee305a31545a9426021f4 ]
    
    If a perf trace event selector specifies a maximum number of events to output
    (i.e., "/nr=N/" syntax), the event printing handler, trace__event_handler,
    disables the event selector after the maximum number events are
    printed.
    
    Furthermore, trace__event_handler checked if the event selector was
    disabled before doing any work. This avoided exceeding the maximum
    number of events to print if more events were in the buffer before the
    selector was disabled.
    
    However, the event selector can be disabled for reasons other than
    exceeding the maximum number of events. In particular, when the traced
    subprocess exits, the main loop disables all event selectors. This meant
    the last events of a traced subprocess might be lost to the printing
    handler's short-circuiting logic.
    
    This nondeterministic problem could be seen by running the following many times:
    
      $ perf trace -e syscalls:sys_enter_exit_group true
    
    trace__event_handler should simply check for exceeding the maximum number of
    events to print rather than the state of the event selector.
    
    Fixes: a9c5e6c1e9bff42c ("perf trace: Introduce per-event maximum number of events property")
    Signed-off-by: Benjamin Peterson <[email protected]>
    Tested-by: Howard Chu <[email protected]>
    Cc: Adrian Hunter <[email protected]>
    Cc: Alexander Shishkin <[email protected]>
    Cc: Ian Rogers <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Jiri Olsa <[email protected]>
    Cc: Kan Liang <[email protected]>
    Cc: Mark Rutland <[email protected]>
    Cc: Namhyung Kim <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
perf/x86/intel/pt: Fix buffer full but size is 0 case [+ + +]
Author: Adrian Hunter <[email protected]>
Date:   Tue Oct 22 18:59:07 2024 +0300

    perf/x86/intel/pt: Fix buffer full but size is 0 case
    
    commit 5b590160d2cf776b304eb054afafea2bd55e3620 upstream.
    
    If the trace data buffer becomes full, a truncated flag [T] is reported
    in PERF_RECORD_AUX.  In some cases, the size reported is 0, even though
    data must have been added to make the buffer full.
    
    That happens when the buffer fills up from empty to full before the
    Intel PT driver has updated the buffer position.  Then the driver
    calculates the new buffer position before calculating the data size.
    If the old and new positions are the same, the data size is reported
    as 0, even though it is really the whole buffer size.
    
    Fix by detecting when the buffer position is wrapped, and adjust the
    data size calculation accordingly.
    
    Example
    
      Use a very small buffer size (8K) and observe the size of truncated [T]
      data. Before the fix, it is possible to see records of 0 size.
    
      Before:
    
        $ perf record -m,8K -e intel_pt// uname
        Linux
        [ perf record: Woken up 2 times to write data ]
        [ perf record: Captured and wrote 0.105 MB perf.data ]
        $ perf script -D --no-itrace | grep AUX | grep -F '[T]'
        Warning:
        AUX data lost 2 times out of 3!
    
        5 19462712368111 0x19710 [0x40]: PERF_RECORD_AUX offset: 0 size: 0 flags: 0x1 [T]
        5 19462712700046 0x19ba8 [0x40]: PERF_RECORD_AUX offset: 0x170 size: 0xe90 flags: 0x1 [T]
    
     After:
    
        $ perf record -m,8K -e intel_pt// uname
        Linux
        [ perf record: Woken up 3 times to write data ]
        [ perf record: Captured and wrote 0.040 MB perf.data ]
        $ perf script -D --no-itrace | grep AUX | grep -F '[T]'
        Warning:
        AUX data lost 2 times out of 3!
    
        1 113720802995 0x4948 [0x40]: PERF_RECORD_AUX offset: 0 size: 0x2000 flags: 0x1 [T]
        1 113720979812 0x6b10 [0x40]: PERF_RECORD_AUX offset: 0x2000 size: 0x2000 flags: 0x1 [T]
    
    Fixes: 52ca9ced3f70 ("perf/x86/intel/pt: Add Intel PT PMU driver")
    Signed-off-by: Adrian Hunter <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Cc: [email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pinctrl: qcom-pmic-gpio: add support for PM8937 [+ + +]
Author: Barnabás Czémán <[email protected]>
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 <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
power: supply: core: Remove might_sleep() from power_supply_put() [+ + +]
Author: Bart Van Assche <[email protected]>
Date:   Tue Sep 17 12:39:14 2024 -0700

    power: supply: core: Remove might_sleep() from power_supply_put()
    
    [ Upstream commit f6da4553ff24a5d1c959c9627c965323adc3d307 ]
    
    The put_device() call in power_supply_put() may call
    power_supply_dev_release(). The latter function does not sleep so
    power_supply_put() doesn't sleep either. Hence, remove the might_sleep()
    call from power_supply_put(). This patch suppresses false positive
    complaints about calling a sleeping function from atomic context if
    power_supply_put() is called from atomic context.
    
    Cc: Kyle Tso <[email protected]>
    Cc: Krzysztof Kozlowski <[email protected]>
    Fixes: 1a352462b537 ("power_supply: Add power_supply_put for decrementing device reference counter")
    Signed-off-by: Bart Van Assche <[email protected]>
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/prom_init: Fixup missing powermac #size-cells [+ + +]
Author: Michael Ellerman <[email protected]>
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 <[email protected]>
    Reviewed-by: Rob Herring <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/sstep: make emulate_vsx_load and emulate_vsx_store static [+ + +]
Author: Michal Suchanek <[email protected]>
Date:   Tue Oct 1 15:03:49 2024 +0200

    powerpc/sstep: make emulate_vsx_load and emulate_vsx_store static
    
    [ Upstream commit a26c4dbb3d9c1821cb0fc11cb2dbc32d5bf3463b ]
    
    These functions are not used outside of sstep.c
    
    Fixes: 350779a29f11 ("powerpc: Handle most loads and stores in instruction emulation code")
    Signed-off-by: Michal Suchanek <[email protected]>
    Signed-off-by: Michael Ellerman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/vdso: Flag VDSO64 entry points as functions [+ + +]
Author: Christophe Leroy <[email protected]>
Date:   Thu Oct 10 00:17:57 2024 +0200

    powerpc/vdso: Flag VDSO64 entry points as functions
    
    [ Upstream commit 0161bd38c24312853ed5ae9a425a1c41c4ac674a ]
    
    On powerpc64 as shown below by readelf, vDSO functions symbols have
    type NOTYPE.
    
    $ powerpc64-linux-gnu-readelf -a arch/powerpc/kernel/vdso/vdso64.so.dbg
    ELF Header:
      Magic:   7f 45 4c 46 02 02 01 00 00 00 00 00 00 00 00 00
      Class:                             ELF64
      Data:                              2's complement, big endian
      Version:                           1 (current)
      OS/ABI:                            UNIX - System V
      ABI Version:                       0
      Type:                              DYN (Shared object file)
      Machine:                           PowerPC64
      Version:                           0x1
    ...
    
    Symbol table '.dynsym' contains 12 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
    ...
         1: 0000000000000524    84 NOTYPE  GLOBAL DEFAULT    8 __[...]@@LINUX_2.6.15
    ...
         4: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS LINUX_2.6.15
         5: 00000000000006c0    48 NOTYPE  GLOBAL DEFAULT    8 __[...]@@LINUX_2.6.15
    
    Symbol table '.symtab' contains 56 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
    ...
        45: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS LINUX_2.6.15
        46: 00000000000006c0    48 NOTYPE  GLOBAL DEFAULT    8 __kernel_getcpu
        47: 0000000000000524    84 NOTYPE  GLOBAL DEFAULT    8 __kernel_clock_getres
    
    To overcome that, commit ba83b3239e65 ("selftests: vDSO: fix vDSO
    symbols lookup for powerpc64") was applied to have selftests also
    look for NOTYPE symbols, but the correct fix should be to flag VDSO
    entry points as functions.
    
    The original commit that brought VDSO support into powerpc/64 has the
    following explanation:
    
        Note that the symbols exposed by the vDSO aren't "normal" function symbols, apps
        can't be expected to link against them directly, the vDSO's are both seen
        as if they were linked at 0 and the symbols just contain offsets to the
        various functions.  This is done on purpose to avoid a relocation step
        (ppc64 functions normally have descriptors with abs addresses in them).
        When glibc uses those functions, it's expected to use it's own trampolines
        that know how to reach them.
    
    The descriptors it's talking about are the OPD function descriptors
    used on ABI v1 (big endian). But it would be more correct for a text
    symbol to have type function, even if there's no function descriptor
    for it.
    
    glibc has a special case already for handling the VDSO symbols which
    creates a fake opd pointing at the kernel symbol. So changing the VDSO
    symbol type to function shouldn't affect that.
    
    For ABI v2, there is no function descriptors and VDSO functions can
    safely have function type.
    
    So lets flag VDSO entry points as functions and revert the
    selftest change.
    
    Link: https://github.com/mpe/linux-fullhistory/commit/5f2dd691b62da9d9cc54b938f8b29c22c93cb805
    Fixes: ba83b3239e65 ("selftests: vDSO: fix vDSO symbols lookup for powerpc64")
    Signed-off-by: Christophe Leroy <[email protected]>
    Reviewed-By: Segher Boessenkool <[email protected]>
    Signed-off-by: Michael Ellerman <[email protected]>
    Link: https://patch.msgid.link/b6ad2f1ee9887af3ca5ecade2a56f4acda517a85.1728512263.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <[email protected]>

 
proc/softirqs: replace seq_printf with seq_put_decimal_ull_width [+ + +]
Author: David Wang <[email protected]>
Date:   Wed Nov 6 10:12:28 2024 +0800

    proc/softirqs: replace seq_printf with seq_put_decimal_ull_width
    
    [ Upstream commit 84b9749a3a704dcc824a88aa8267247c801d51e4 ]
    
    seq_printf is costy, on a system with n CPUs, reading /proc/softirqs
    would yield 10*n decimal values, and the extra cost parsing format string
    grows linearly with number of cpus. Replace seq_printf with
    seq_put_decimal_ull_width have significant performance improvement.
    On an 8CPUs system, reading /proc/softirqs show ~40% performance
    gain with this patch.
    
    Signed-off-by: David Wang <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
quota: flush quota_release_work upon quota writeback [+ + +]
Author: Ojaswin Mujoo <[email protected]>
Date:   Thu Nov 21 18:08:54 2024 +0530

    quota: flush quota_release_work upon quota writeback
    
    [ Upstream commit ac6f420291b3fee1113f21d612fa88b628afab5b ]
    
    One of the paths quota writeback is called from is:
    
    freeze_super()
      sync_filesystem()
        ext4_sync_fs()
          dquot_writeback_dquots()
    
    Since we currently don't always flush the quota_release_work queue in
    this path, we can end up with the following race:
    
     1. dquot are added to releasing_dquots list during regular operations.
     2. FS Freeze starts, however, this does not flush the quota_release_work queue.
     3. Freeze completes.
     4. Kernel eventually tries to flush the workqueue while FS is frozen which
        hits a WARN_ON since transaction gets started during frozen state:
    
      ext4_journal_check_start+0x28/0x110 [ext4] (unreliable)
      __ext4_journal_start_sb+0x64/0x1c0 [ext4]
      ext4_release_dquot+0x90/0x1d0 [ext4]
      quota_release_workfn+0x43c/0x4d0
    
    Which is the following line:
    
      WARN_ON(sb->s_writers.frozen == SB_FREEZE_COMPLETE);
    
    Which ultimately results in generic/390 failing due to dmesg
    noise. This was detected on powerpc machine 15 cores.
    
    To avoid this, make sure to flush the workqueue during
    dquot_writeback_dquots() so we dont have any pending workitems after
    freeze.
    
    Reported-by: Disha Goel <[email protected]>
    CC: [email protected]
    Fixes: dabc8b207566 ("quota: fix dqput() to follow the guarantees dquot_srcu should provide")
    Reviewed-by: Baokun Li <[email protected]>
    Signed-off-by: Ojaswin Mujoo <[email protected]>
    Signed-off-by: Jan Kara <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/bnxt_re: Check cqe flags to know imm_data vs inv_irkey [+ + +]
Author: Kashyap Desai <[email protected]>
Date:   Mon Oct 28 03:06:54 2024 -0700

    RDMA/bnxt_re: Check cqe flags to know imm_data vs inv_irkey
    
    [ Upstream commit 808ca6de989c598bc5af1ae0ad971a66077efac0 ]
    
    Invalidate rkey is cpu endian and immediate data is in big endian format.
    Both immediate data and invalidate the remote key returned by
    HW is in little endian format.
    
    While handling the commit in fixes tag, the difference between
    immediate data and invalidate rkey endianness was not considered.
    
    Without changes of this patch, Kernel ULP was failing while processing
    inv_rkey.
    
    dmesg log snippet -
    nvme nvme0: Bogus remote invalidation for rkey 0x2000019Fix in this patch
    
    Do endianness conversion based on completion queue entry flag.
    Also, the HW completions are already converted to host endianness in
    bnxt_qplib_cq_process_res_rc and bnxt_qplib_cq_process_res_ud and there
    is no need to convert it again in bnxt_re_poll_cq. Modified the union to
    hold the correct data type.
    
    Fixes: 95b087f87b78 ("bnxt_re: Fix imm_data endianness")
    Signed-off-by: Kashyap Desai <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
regmap: detach regmap from dev on regmap_exit [+ + +]
Author: Cosmin Tanislav <[email protected]>
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: [email protected]
    Fixes: 72b39f6f2b5a ("regmap: Implement dev_get_regmap()")
    Signed-off-by: Cosmin Tanislav <[email protected]>
    Rule: add
    Link: https://lore.kernel.org/stable/20241128130554.362486-1-demonsingur%40gmail.com
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

regmap: irq: Set lockdep class for hierarchical IRQ domains [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Fri Nov 1 18:55:53 2024 +0200

    regmap: irq: Set lockdep class for hierarchical IRQ domains
    
    [ Upstream commit 953e549471cabc9d4980f1da2e9fa79f4c23da06 ]
    
    Lockdep gives a false positive splat as it can't distinguish the lock
    which is taken by different IRQ descriptors from different IRQ chips
    that are organized in a way of a hierarchy:
    
       ======================================================
       WARNING: possible circular locking dependency detected
       6.12.0-rc5-next-20241101-00148-g9fabf8160b53 #562 Tainted: G        W
       ------------------------------------------------------
       modprobe/141 is trying to acquire lock:
       ffff899446947868 (intel_soc_pmic_bxtwc:502:(&bxtwc_regmap_config)->lock){+.+.}-{4:4}, at: regmap_update_bits_base+0x33/0x90
    
       but task is already holding lock:
       ffff899446947c68 (&d->lock){+.+.}-{4:4}, at: __setup_irq+0x682/0x790
    
       which lock already depends on the new lock.
    
       -> #3 (&d->lock){+.+.}-{4:4}:
       -> #2 (&desc->request_mutex){+.+.}-{4:4}:
       -> #1 (ipclock){+.+.}-{4:4}:
       -> #0 (intel_soc_pmic_bxtwc:502:(&bxtwc_regmap_config)->lock){+.+.}-{4:4}:
    
       Chain exists of:
         intel_soc_pmic_bxtwc:502:(&bxtwc_regmap_config)->lock --> &desc->request_mutex --> &d->lock
    
        Possible unsafe locking scenario:
    
              CPU0                    CPU1
              ----                    ----
         lock(&d->lock);
                                      lock(&desc->request_mutex);
                                      lock(&d->lock);
         lock(intel_soc_pmic_bxtwc:502:(&bxtwc_regmap_config)->lock);
    
        *** DEADLOCK ***
    
       3 locks held by modprobe/141:
        #0: ffff8994419368f8 (&dev->mutex){....}-{4:4}, at: __driver_attach+0xf6/0x250
        #1: ffff89944690b250 (&desc->request_mutex){+.+.}-{4:4}, at: __setup_irq+0x1a2/0x790
        #2: ffff899446947c68 (&d->lock){+.+.}-{4:4}, at: __setup_irq+0x682/0x790
    
    Set a lockdep class when we map the IRQ so that it doesn't warn about
    a lockdep bug that doesn't exist.
    
    Fixes: 4af8be67fd99 ("regmap: Convert regmap_irq to use irq_domain")
    Signed-off-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
regulator: rk808: Add apply_bit for BUCK3 on RK809 [+ + +]
Author: Mikhail Rudenko <[email protected]>
Date:   Thu Oct 17 21:37:28 2024 +0300

    regulator: rk808: Add apply_bit for BUCK3 on RK809
    
    [ Upstream commit 5e53e4a66bc7430dd2d11c18a86410e3a38d2940 ]
    
    Currently, RK809's BUCK3 regulator is modelled in the driver as a
    configurable regulator with 0.5-2.4V voltage range. But the voltage
    setting is not actually applied, because when bit 6 of
    PMIC_POWER_CONFIG register is set to 0 (default), BUCK3 output voltage
    is determined by the external feedback resistor. Fix this, by setting
    bit 6 when voltage selection is set. Existing users which do not
    specify voltage constraints in their device trees will not be affected
    by this change, since no voltage setting is applied in those cases,
    and bit 6 is not enabled.
    
    Signed-off-by: Mikhail Rudenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "drm/amdgpu: add missing size check in amdgpu_debugfs_gprwave_read()" [+ + +]
Author: Zhang Zekun <[email protected]>
Date:   Wed Dec 4 16:25:25 2024 +0800

    Revert "drm/amdgpu: add missing size check in amdgpu_debugfs_gprwave_read()"
    
    This reverts commit 7ccd781794d247589104a791caab491e21218fba.
    
    The origin mainline patch fix a buffer overflow issue in
    amdgpu_debugfs_gprwave_read(), but it has not been introduced in kernel
    6.1 and older kernels. This patch add a check in a wrong function in the
    same file.
    
    Signed-off-by: Zhang Zekun <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "mmc: dw_mmc: Fix IDMAC operation with pages bigger than 4K" [+ + +]
Author: Aurelien Jarno <[email protected]>
Date:   Sun Nov 10 12:46:36 2024 +0100

    Revert "mmc: dw_mmc: Fix IDMAC operation with pages bigger than 4K"
    
    commit 1635e407a4a64d08a8517ac59ca14ad4fc785e75 upstream.
    
    The commit 8396c793ffdf ("mmc: dw_mmc: Fix IDMAC operation with pages
    bigger than 4K") increased the max_req_size, even for 4K pages, causing
    various issues:
    - Panic booting the kernel/rootfs from an SD card on Rockchip RK3566
    - Panic booting the kernel/rootfs from an SD card on StarFive JH7100
    - "swiotlb buffer is full" and data corruption on StarFive JH7110
    
    At this stage no fix have been found, so it's probably better to just
    revert the change.
    
    This reverts commit 8396c793ffdf28bb8aee7cfe0891080f8cab7890.
    
    Cc: [email protected]
    Cc: Sam Protsenko <[email protected]>
    Fixes: 8396c793ffdf ("mmc: dw_mmc: Fix IDMAC operation with pages bigger than 4K")
    Closes: https://lore.kernel.org/linux-mmc/[email protected]/
    Closes: https://lore.kernel.org/linux-mmc/CAC8uq=Ppnmv98mpa1CrWLawWoPnu5abtU69v-=G-P7ysATQ2Pw@mail.gmail.com/
    Signed-off-by: Aurelien Jarno <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "serial: sh-sci: Clean sci_ports[0] after at earlycon exit" [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Sat Nov 30 16:55:56 2024 +0100

    Revert "serial: sh-sci: Clean sci_ports[0] after at earlycon exit"
    
    commit 718632467d88e98816fa01ab12681ef1c2aa56f8 upstream.
    
    This reverts commit 3791ea69a4858b81e0277f695ca40f5aae40f312.
    
    It was reported to cause boot-time issues, so revert it for now.
    
    Reported-by: Geert Uytterhoeven <[email protected]>
    Fixes: 3791ea69a485 ("serial: sh-sci: Clean sci_ports[0] after at earlycon exit")
    Cc: stable <[email protected]>
    Cc: Claudiu Beznea <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "unicode: Don't special case ignorable code points" [+ + +]
Author: Linus Torvalds <[email protected]>
Date:   Wed Dec 11 14:11:23 2024 -0800

    Revert "unicode: Don't special case ignorable code points"
    
    commit 231825b2e1ff6ba799c5eaf396d3ab2354e37c6b upstream.
    
    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 <[email protected]>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219586
    Cc: Gabriel Krisman Bertazi <[email protected]>
    Requested-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "usb: gadget: composite: fix OS descriptors w_value logic" [+ + +]
Author: Michal Vrastil <[email protected]>
Date:   Wed Nov 13 15:54:33 2024 -0800

    Revert "usb: gadget: composite: fix OS descriptors w_value logic"
    
    commit 51cdd69d6a857f527d6d0697a2e1f0fa8bca1005 upstream.
    
    This reverts commit ec6ce7075ef879b91a8710829016005dc8170f17.
    
    Fix installation of WinUSB driver using OS descriptors. Without the
    fix the drivers are not installed correctly and the property
    'DeviceInterfaceGUID' is missing on host side.
    
    The original change was based on the assumption that the interface
    number is in the high byte of wValue but it is in the low byte,
    instead. Unfortunately, the fix is based on MS documentation which is
    also wrong.
    
    The actual USB request for OS descriptors (using USB analyzer) looks
    like:
    
    Offset  0   1   2   3   4   5   6   7
    0x000   C1  A1  02  00  05  00  0A  00
    
    C1: bmRequestType (device to host, vendor, interface)
    A1: nas magic number
    0002: wValue (2: nas interface)
    0005: wIndex (5: get extended property i.e. nas interface GUID)
    008E: wLength (142)
    
    The fix was tested on Windows 10 and Windows 11.
    
    Cc: [email protected]
    Fixes: ec6ce7075ef8 ("usb: gadget: composite: fix OS descriptors w_value logic")
    Signed-off-by: Michal Vrastil <[email protected]>
    Signed-off-by: Elson Roy Serrao <[email protected]>
    Acked-by: Peter korsgaard <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
rocker: fix link status detection in rocker_carrier_init() [+ + +]
Author: Dmitry Antipov <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rpmsg: glink: Add TX_DATA_CONT command while sending [+ + +]
Author: Arun Kumar Neelakantam <[email protected]>
Date:   Thu Jul 30 10:48:13 2020 +0530

    rpmsg: glink: Add TX_DATA_CONT command while sending
    
    [ Upstream commit 8956927faed366b60b0355f4a4317a10e281ced7 ]
    
    With current design the transport can send packets of size upto
    FIFO_SIZE which is 16k and return failure for all packets above 16k.
    
    Add TX_DATA_CONT command to send packets greater than 16k by splitting
    into 8K chunks.
    
    Signed-off-by: Arun Kumar Neelakantam <[email protected]>
    Signed-off-by: Deepak Kumar Singh <[email protected]>
    Signed-off-by: Bjorn Andersson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 06c59d97f63c ("rpmsg: glink: use only lower 16-bits of param2 for CMD_OPEN name length")
    Signed-off-by: Sasha Levin <[email protected]>

rpmsg: glink: Fix GLINK command prefix [+ + +]
Author: Bjorn Andersson <[email protected]>
Date:   Tue Feb 14 14:59:33 2023 -0800

    rpmsg: glink: Fix GLINK command prefix
    
    [ Upstream commit 4e816d0318fdfe8932da80dbf04ba318b13e4b3a ]
    
    The upstream GLINK driver was first introduced to communicate with the
    RPM on MSM8996, presumably as an artifact from that era the command
    defines was prefixed RPM_CMD, while they actually are GLINK_CMDs.
    
    Let's rename these, to keep things tidy. No functional change.
    
    Signed-off-by: Bjorn Andersson <[email protected]>
    Reviewed-by: Chris Lew <[email protected]>
    Signed-off-by: Bjorn Andersson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 06c59d97f63c ("rpmsg: glink: use only lower 16-bits of param2 for CMD_OPEN name length")
    Signed-off-by: Sasha Levin <[email protected]>

rpmsg: glink: Propagate TX failures in intentless mode as well [+ + +]
Author: Bjorn Andersson <[email protected]>
Date:   Tue Apr 18 09:30:17 2023 -0700

    rpmsg: glink: Propagate TX failures in intentless mode as well
    
    commit 7a68f9fa97357a0f2073c9c31ed4101da4fce93e upstream.
    
    As support for splitting transmission over several messages using
    TX_DATA_CONT was introduced it does not immediately return the return
    value of qcom_glink_tx().
    
    The result is that in the intentless case (i.e. intent == NULL), the
    code will continue to send all additional chunks. This is wasteful, and
    it's possible that the send operation could incorrectly indicate
    success, if the last chunk fits in the TX fifo.
    
    Fix the condition.
    
    Fixes: 8956927faed3 ("rpmsg: glink: Add TX_DATA_CONT command while sending")
    Reviewed-by: Chris Lew <[email protected]>
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Bjorn Andersson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rpmsg: glink: Send READ_NOTIFY command in FIFO full case [+ + +]
Author: Arun Kumar Neelakantam <[email protected]>
Date:   Thu Jul 30 10:48:16 2020 +0530

    rpmsg: glink: Send READ_NOTIFY command in FIFO full case
    
    [ Upstream commit b16a37e1846c9573a847a56fa2f31ba833dae45a ]
    
    The current design sleeps unconditionally in TX FIFO full case and
    wakeup only after sleep timer expires which adds random delays in
    clients TX path.
    
    Avoid sleep and use READ_NOTIFY command so that writer can be woken up
    when remote notifies about read completion by sending IRQ.
    
    Signed-off-by: Deepak Kumar Singh <[email protected]>
    Signed-off-by: Arun Kumar Neelakantam <[email protected]>
    Signed-off-by: Bjorn Andersson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 06c59d97f63c ("rpmsg: glink: use only lower 16-bits of param2 for CMD_OPEN name length")
    Signed-off-by: Sasha Levin <[email protected]>

rpmsg: glink: use only lower 16-bits of param2 for CMD_OPEN name length [+ + +]
Author: Jonathan Marek <[email protected]>
Date:   Mon Oct 7 19:59:35 2024 -0400

    rpmsg: glink: use only lower 16-bits of param2 for CMD_OPEN name length
    
    [ Upstream commit 06c59d97f63c1b8af521fa5aef8a716fb988b285 ]
    
    The name len field of the CMD_OPEN packet is only 16-bits and the upper
    16-bits of "param2" are a different "prio" field, which can be nonzero in
    certain situations, and CMD_OPEN packets can be unexpectedly dropped
    because of this.
    
    Fix this by masking out the upper 16 bits of param2.
    
    Fixes: b4f8e52b89f6 ("rpmsg: Introduce Qualcomm RPM glink driver")
    Signed-off-by: Jonathan Marek <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rtc: ab-eoz9: don't fail temperature reads on undervoltage notification [+ + +]
Author: Maxime Chevallier <[email protected]>
Date:   Fri Nov 22 11:10:30 2024 +0100

    rtc: ab-eoz9: don't fail temperature reads on undervoltage notification
    
    [ Upstream commit e0779a0dcf41a6452ac0a169cd96863feb5787c7 ]
    
    The undervoltage flags reported by the RTC are useful to know if the
    time and date are reliable after a reboot. Although the threshold VLOW1
    indicates that the thermometer has been shutdown and time compensation
    is off, it doesn't mean that the temperature readout is currently
    impossible.
    
    As the system is running, the RTC voltage is now fully established and
    we can read the temperature.
    
    Fixes: 67075b63cce2 ("rtc: add AB-RTCMC-32.768kHz-EOZ9 RTC support")
    Signed-off-by: Maxime Chevallier <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

rtc: abx80x: Fix WDT bit position of the status register [+ + +]
Author: Nobuhiro Iwamatsu <[email protected]>
Date:   Tue Oct 8 13:17:37 2024 +0900

    rtc: abx80x: Fix WDT bit position of the status register
    
    [ Upstream commit 10e078b273ee7a2b8b4f05a64ac458f5e652d18d ]
    
    The WDT bit in the status register is 5, not 6. This fixes from 6 to 5.
    
    Link: https://abracon.com/Support/AppsManuals/Precisiontiming/AB08XX-Application-Manual.pdf
    Link: https://www.microcrystal.com/fileadmin/Media/Products/RTC/App.Manual/RV-1805-C3_App-Manual.pdf
    Fixes: 749e36d0a0d7 ("rtc: abx80x: add basic watchdog support")
    Cc: Jeremy Gebben <[email protected]>
    Signed-off-by: Nobuhiro Iwamatsu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

rtc: check if __rtc_read_time was successful in rtc_timer_do_work() [+ + +]
Author: Yongliang Gao <[email protected]>
Date:   Fri Oct 11 12:31:53 2024 +0800

    rtc: check if __rtc_read_time was successful in rtc_timer_do_work()
    
    [ Upstream commit e8ba8a2bc4f60a1065f23d6a0e7cbea945a0f40d ]
    
    If the __rtc_read_time call fails,, the struct rtc_time tm; may contain
    uninitialized data, or an illegal date/time read from the RTC hardware.
    
    When calling rtc_tm_to_ktime later, the result may be a very large value
    (possibly KTIME_MAX). If there are periodic timers in rtc->timerqueue,
    they will continually expire, may causing kernel softlockup.
    
    Fixes: 6610e0893b8b ("RTC: Rework RTC code to use timerqueue for events")
    Signed-off-by: Yongliang Gao <[email protected]>
    Acked-by: Jingqun Li <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

rtc: st-lpc: Use IRQF_NO_AUTOEN flag in request_irq() [+ + +]
Author: Jinjie Ruan <[email protected]>
Date:   Thu Sep 12 11:37:27 2024 +0800

    rtc: st-lpc: Use IRQF_NO_AUTOEN flag in request_irq()
    
    [ Upstream commit b6cd7adec0cf03f0aefc55676e71dd721cbc71a8 ]
    
    If request_irq() fails in st_rtc_probe(), there is no need to enable
    the irq, and if it succeeds, disable_irq() after request_irq() still has
    a time gap in which interrupts can come.
    
    request_irq() with IRQF_NO_AUTOEN flag will disable IRQ auto-enable when
    request IRQ.
    
    Fixes: b5b2bdfc2893 ("rtc: st: Add new driver for ST's LPC RTC")
    Signed-off-by: Jinjie Ruan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/cpum_sf: Handle CPU hotplug remove during sampling [+ + +]
Author: Thomas Richter <[email protected]>
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 <[email protected]>
    Reviewed-by: Hendrik Brueckner <[email protected]>
    Signed-off-by: Heiko Carstens <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/syscalls: Avoid creation of arch/arch/ directory [+ + +]
Author: Masahiro Yamada <[email protected]>
Date:   Mon Nov 11 22:45:52 2024 +0900

    s390/syscalls: Avoid creation of arch/arch/ directory
    
    [ Upstream commit 0708967e2d56e370231fd07defa0d69f9ad125e8 ]
    
    Building the kernel with ARCH=s390 creates a weird arch/arch/ directory.
    
      $ find arch/arch
      arch/arch
      arch/arch/s390
      arch/arch/s390/include
      arch/arch/s390/include/generated
      arch/arch/s390/include/generated/asm
      arch/arch/s390/include/generated/uapi
      arch/arch/s390/include/generated/uapi/asm
    
    The root cause is 'targets' in arch/s390/kernel/syscalls/Makefile,
    where the relative path is incorrect.
    
    Strictly speaking, 'targets' was not necessary in the first place
    because this Makefile uses 'filechk' instead of 'if_changed'.
    
    However, this commit keeps it, as it will be useful when converting
    'filechk' to 'if_changed' later.
    
    Fixes: 5c75824d915e ("s390/syscalls: add Makefile to generate system call header files")
    Signed-off-by: Masahiro Yamada <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Carstens <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
samples/bpf: Fix a resource leak [+ + +]
Author: Zhu Jun <[email protected]>
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 <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
scsi: bfa: Fix use-after-free in bfad_im_module_exit() [+ + +]
Author: Ye Bin <[email protected]>
Date:   Wed Oct 23 09:18:09 2024 +0800

    scsi: bfa: Fix use-after-free in bfad_im_module_exit()
    
    [ Upstream commit 178b8f38932d635e90f5f0e9af1986c6f4a89271 ]
    
    BUG: KASAN: slab-use-after-free in __lock_acquire+0x2aca/0x3a20
    Read of size 8 at addr ffff8881082d80c8 by task modprobe/25303
    
    Call Trace:
     <TASK>
     dump_stack_lvl+0x95/0xe0
     print_report+0xcb/0x620
     kasan_report+0xbd/0xf0
     __lock_acquire+0x2aca/0x3a20
     lock_acquire+0x19b/0x520
     _raw_spin_lock+0x2b/0x40
     attribute_container_unregister+0x30/0x160
     fc_release_transport+0x19/0x90 [scsi_transport_fc]
     bfad_im_module_exit+0x23/0x60 [bfa]
     bfad_init+0xdb/0xff0 [bfa]
     do_one_initcall+0xdc/0x550
     do_init_module+0x22d/0x6b0
     load_module+0x4e96/0x5ff0
     init_module_from_file+0xcd/0x130
     idempotent_init_module+0x330/0x620
     __x64_sys_finit_module+0xb3/0x110
     do_syscall_64+0xc1/0x1d0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
     </TASK>
    
    Allocated by task 25303:
     kasan_save_stack+0x24/0x50
     kasan_save_track+0x14/0x30
     __kasan_kmalloc+0x7f/0x90
     fc_attach_transport+0x4f/0x4740 [scsi_transport_fc]
     bfad_im_module_init+0x17/0x80 [bfa]
     bfad_init+0x23/0xff0 [bfa]
     do_one_initcall+0xdc/0x550
     do_init_module+0x22d/0x6b0
     load_module+0x4e96/0x5ff0
     init_module_from_file+0xcd/0x130
     idempotent_init_module+0x330/0x620
     __x64_sys_finit_module+0xb3/0x110
     do_syscall_64+0xc1/0x1d0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Freed by task 25303:
     kasan_save_stack+0x24/0x50
     kasan_save_track+0x14/0x30
     kasan_save_free_info+0x3b/0x60
     __kasan_slab_free+0x38/0x50
     kfree+0x212/0x480
     bfad_im_module_init+0x7e/0x80 [bfa]
     bfad_init+0x23/0xff0 [bfa]
     do_one_initcall+0xdc/0x550
     do_init_module+0x22d/0x6b0
     load_module+0x4e96/0x5ff0
     init_module_from_file+0xcd/0x130
     idempotent_init_module+0x330/0x620
     __x64_sys_finit_module+0xb3/0x110
     do_syscall_64+0xc1/0x1d0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Above issue happens as follows:
    
    bfad_init
      error = bfad_im_module_init()
        fc_release_transport(bfad_im_scsi_transport_template);
      if (error)
        goto ext;
    
    ext:
      bfad_im_module_exit();
        fc_release_transport(bfad_im_scsi_transport_template);
        --> Trigger double release
    
    Don't call bfad_im_module_exit() if bfad_im_module_init() failed.
    
    Fixes: 7725ccfda597 ("[SCSI] bfa: Brocade BFA FC SCSI driver")
    Signed-off-by: Ye Bin <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: fusion: Remove unused variable 'rc' [+ + +]
Author: Zeng Heng <[email protected]>
Date:   Thu Oct 24 16:44:17 2024 +0800

    scsi: fusion: Remove unused variable 'rc'
    
    [ Upstream commit bd65694223f7ad11c790ab63ad1af87a771192ee ]
    
    The return value of scsi_device_reprobe() is currently ignored in
    _scsih_reprobe_lun(). Fixing the calling code to deal with the potential
    error is non-trivial, so for now just WARN_ON().
    
    The handling of scsi_device_reprobe()'s return value refers to
    _scsih_reprobe_lun() and the following link:
    
    https://lore.kernel.org/all/094fdbf57487af4f395238c0525b2a560c8f68f0.1469766027.git.calvinowens@fb.com/
    
    Fixes: f99be43b3024 ("[SCSI] fusion: power pc and miscellaneous bug fixs")
    Signed-off-by: Zeng Heng <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: qedf: Fix a possible memory leak in qedf_alloc_and_init_sb() [+ + +]
Author: Zhen Lei <[email protected]>
Date:   Sat Oct 26 20:57:10 2024 +0800

    scsi: qedf: Fix a possible memory leak in qedf_alloc_and_init_sb()
    
    [ Upstream commit c62c30429db3eb4ced35c7fcf6f04a61ce3a01bb ]
    
    Hook "qed_ops->common->sb_init = qed_sb_init" does not release the DMA
    memory sb_virt when it fails. Add dma_free_coherent() to free it. This
    is the same way as qedr_alloc_mem_sb() and qede_alloc_mem_sb().
    
    Fixes: 61d8658b4a43 ("scsi: qedf: Add QLogic FastLinQ offload FCoE driver framework.")
    Signed-off-by: Zhen Lei <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: qedi: Fix a possible memory leak in qedi_alloc_and_init_sb() [+ + +]
Author: Zhen Lei <[email protected]>
Date:   Sat Oct 26 20:57:11 2024 +0800

    scsi: qedi: Fix a possible memory leak in qedi_alloc_and_init_sb()
    
    [ Upstream commit 95bbdca4999bc59a72ebab01663d421d6ce5775d ]
    
    Hook "qedi_ops->common->sb_init = qed_sb_init" does not release the DMA
    memory sb_virt when it fails. Add dma_free_coherent() to free it. This
    is the same way as qedr_alloc_mem_sb() and qede_alloc_mem_sb().
    
    Fixes: ace7f46ba5fd ("scsi: qedi: Add QLogic FastLinQ offload iSCSI driver framework.")
    Signed-off-by: Zhen Lei <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: qla2xxx: Fix NVMe and NPIV connect issue [+ + +]
Author: Quinn Tran <[email protected]>
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: [email protected]
    Fixes: f0783d43dde4 ("scsi: qla2xxx: Use correct number of vectors for online CPUs")
    Signed-off-by: Quinn Tran <[email protected]>
    Signed-off-by: Nilesh Javali <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Himanshu Madhani <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: qla2xxx: Remove check req_sg_cnt should be equal to rsp_sg_cnt [+ + +]
Author: Saurav Kashyap <[email protected]>
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: [email protected]
    Signed-off-by: Saurav Kashyap <[email protected]>
    Signed-off-by: Nilesh Javali <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Himanshu Madhani <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: qla2xxx: Supported speed displayed incorrectly for VPorts [+ + +]
Author: Anil Gurumurthy <[email protected]>
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: [email protected]
    Fixes: 2c3dfe3f6ad8 ("[SCSI] qla2xxx: add support for NPIV")
    Signed-off-by: Anil Gurumurthy <[email protected]>
    Signed-off-by: Nilesh Javali <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Himanshu Madhani <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: st: Add MTIOCGET and MTLOAD to ioctls allowed after device reset [+ + +]
Author: Kai Mäkisara <[email protected]>
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 <[email protected]>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219419#c14
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: John Meneghini <[email protected]>
    Tested-by: John Meneghini <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: st: Don't modify unknown block number in MTIOCGET [+ + +]
Author: Kai Mäkisara <[email protected]>
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 <[email protected]>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219419#c14
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: John Meneghini <[email protected]>
    Tested-by: John Meneghini <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests/watchdog-test: Fix system accidentally reset after watchdog-test [+ + +]
Author: Li Zhijian <[email protected]>
Date:   Tue Oct 29 11:13:24 2024 +0800

    selftests/watchdog-test: Fix system accidentally reset after watchdog-test
    
    [ Upstream commit dc1308bee1ed03b4d698d77c8bd670d399dcd04d ]
    
    When running watchdog-test with 'make run_tests', the watchdog-test will
    be terminated by a timeout signal(SIGTERM) due to the test timemout.
    
    And then, a system reboot would happen due to watchdog not stop. see
    the dmesg as below:
    ```
    [ 1367.185172] watchdog: watchdog0: watchdog did not stop!
    ```
    
    Fix it by registering more signals(including SIGTERM) in watchdog-test,
    where its signal handler will stop the watchdog.
    
    After that
     # timeout 1 ./watchdog-test
     Watchdog Ticking Away!
     .
     Stopping watchdog ticks...
    
    Link: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Li Zhijian <[email protected]>
    Reviewed-by: Shuah Khan <[email protected]>
    Signed-off-by: Shuah Khan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests: net: really check for bg process completion [+ + +]
Author: Paolo Abeni <[email protected]>
Date:   Tue Nov 5 19:23:51 2024 +0100

    selftests: net: really check for bg process completion
    
    [ Upstream commit 52ed077aa6336dbef83a2d6d21c52d1706fb7f16 ]
    
    A recent refactor transformed the check for process completion
    in a true statement, due to a typo.
    
    As a result, the relevant test-case is unable to catch the
    regression it was supposed to detect.
    
    Restore the correct condition.
    
    Fixes: 691bb4e49c98 ("selftests: net: avoid just another constant wait")
    Signed-off-by: Paolo Abeni <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Link: https://patch.msgid.link/0e6f213811f8e93a235307e683af8225cc6277ae.1730828007.git.pabeni@redhat.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
serial: 8250: omap: Move pm_runtime_get_sync [+ + +]
Author: Bin Liu <[email protected]>
Date:   Thu Oct 31 12:23:15 2024 -0500

    serial: 8250: omap: Move pm_runtime_get_sync
    
    commit bcc7ba668818dcadd2f1db66b39ed860a63ecf97 upstream.
    
    Currently in omap_8250_shutdown, the dma->rx_running flag is
    set to zero in omap_8250_rx_dma_flush. Next pm_runtime_get_sync
    is called, which is a runtime resume call stack which can
    re-set the flag. When the call omap_8250_shutdown returns, the
    flag is expected to be UN-SET, but this is not the case. This
    is causing issues the next time UART is re-opened and
    omap_8250_rx_dma is called. Fix by moving pm_runtime_get_sync
    before the omap_8250_rx_dma_flush.
    
    cc: [email protected]
    Fixes: 0e31c8d173ab ("tty: serial: 8250_omap: add custom DMA-RX callback")
    Signed-off-by: Bin Liu <[email protected]>
    [Judith: Add commit message]
    Signed-off-by: Judith Mendez <[email protected]>
    Reviewed-by: Kevin Hilman <[email protected]>
    Tested-by: Kevin Hilman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: sh-sci: Clean sci_ports[0] after at earlycon exit [+ + +]
Author: Claudiu Beznea <[email protected]>
Date:   Wed Nov 6 14:01:12 2024 +0200

    serial: sh-sci: Clean sci_ports[0] after at earlycon exit
    
    commit 3791ea69a4858b81e0277f695ca40f5aae40f312 upstream.
    
    The early_console_setup() function initializes the sci_ports[0].port with
    an object of type struct uart_port obtained from the object of type
    struct earlycon_device received as argument by the early_console_setup().
    
    It may happen that later, when the rest of the serial ports are probed,
    the serial port that was used as earlycon (e.g., port A) to be mapped to a
    different position in sci_ports[] and the slot 0 to be used by a different
    serial port (e.g., port B), as follows:
    
    sci_ports[0] = port A
    sci_ports[X] = port B
    
    In this case, the new port mapped at index zero will have associated data
    that was used for earlycon.
    
    In case this happens, after Linux boot, any access to the serial port that
    maps on sci_ports[0] (port A) will block the serial port that was used as
    earlycon (port B).
    
    To fix this, add early_console_exit() that clean the sci_ports[0] at
    earlycon exit time.
    
    Fixes: 0b0cced19ab1 ("serial: sh-sci: Add CONFIG_SERIAL_EARLYCON support")
    Cc: [email protected]
    Signed-off-by: Claudiu Beznea <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sh: cpuinfo: Fix a warning for CONFIG_CPUMASK_OFFSTACK [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Thu Jul 14 16:41:36 2022 +0800

    sh: cpuinfo: Fix a warning for CONFIG_CPUMASK_OFFSTACK
    
    commit 3c891f7c6a4e90bb1199497552f24b26e46383bc upstream.
    
    When CONFIG_CPUMASK_OFFSTACK and CONFIG_DEBUG_PER_CPU_MAPS are selected,
    cpu_max_bits_warn() generates a runtime warning similar as below when
    showing /proc/cpuinfo. Fix this by using nr_cpu_ids (the runtime limit)
    instead of NR_CPUS to iterate CPUs.
    
    [    3.052463] ------------[ cut here ]------------
    [    3.059679] WARNING: CPU: 3 PID: 1 at include/linux/cpumask.h:108 show_cpuinfo+0x5e8/0x5f0
    [    3.070072] Modules linked in: efivarfs autofs4
    [    3.076257] CPU: 0 PID: 1 Comm: systemd Not tainted 5.19-rc5+ #1052
    [    3.099465] Stack : 9000000100157b08 9000000000f18530 9000000000cf846c 9000000100154000
    [    3.109127]         9000000100157a50 0000000000000000 9000000100157a58 9000000000ef7430
    [    3.118774]         90000001001578e8 0000000000000040 0000000000000020 ffffffffffffffff
    [    3.128412]         0000000000aaaaaa 1ab25f00eec96a37 900000010021de80 900000000101c890
    [    3.138056]         0000000000000000 0000000000000000 0000000000000000 0000000000aaaaaa
    [    3.147711]         ffff8000339dc220 0000000000000001 0000000006ab4000 0000000000000000
    [    3.157364]         900000000101c998 0000000000000004 9000000000ef7430 0000000000000000
    [    3.167012]         0000000000000009 000000000000006c 0000000000000000 0000000000000000
    [    3.176641]         9000000000d3de08 9000000001639390 90000000002086d8 00007ffff0080286
    [    3.186260]         00000000000000b0 0000000000000004 0000000000000000 0000000000071c1c
    [    3.195868]         ...
    [    3.199917] Call Trace:
    [    3.203941] [<90000000002086d8>] show_stack+0x38/0x14c
    [    3.210666] [<9000000000cf846c>] dump_stack_lvl+0x60/0x88
    [    3.217625] [<900000000023d268>] __warn+0xd0/0x100
    [    3.223958] [<9000000000cf3c90>] warn_slowpath_fmt+0x7c/0xcc
    [    3.231150] [<9000000000210220>] show_cpuinfo+0x5e8/0x5f0
    [    3.238080] [<90000000004f578c>] seq_read_iter+0x354/0x4b4
    [    3.245098] [<90000000004c2e90>] new_sync_read+0x17c/0x1c4
    [    3.252114] [<90000000004c5174>] vfs_read+0x138/0x1d0
    [    3.258694] [<90000000004c55f8>] ksys_read+0x70/0x100
    [    3.265265] [<9000000000cfde9c>] do_syscall+0x7c/0x94
    [    3.271820] [<9000000000202fe4>] handle_syscall+0xc4/0x160
    [    3.281824] ---[ end trace 8b484262b4b8c24c ]---
    
    Cc: [email protected]
    Signed-off-by: Huacai Chen <[email protected]>
    Reviewed-by: John Paul Adrian Glaubitz <[email protected]>
    Tested-by: John Paul Adrian Glaubitz <[email protected]>
    Signed-off-by: John Paul Adrian Glaubitz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

sh: intc: Fix use-after-free bug in register_intc_controller() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Wed Oct 23 11:41:59 2024 +0300

    sh: intc: Fix use-after-free bug in register_intc_controller()
    
    [ Upstream commit 63e72e551942642c48456a4134975136cdcb9b3c ]
    
    In the error handling for this function, d is freed without ever
    removing it from intc_list which would lead to a use after free.
    To fix this, let's only add it to the list after everything has
    succeeded.
    
    Fixes: 2dcec7a988a1 ("sh: intc: set_irq_wake() support")
    Signed-off-by: Dan Carpenter <[email protected]>
    Reviewed-by: John Paul Adrian Glaubitz <[email protected]>
    Signed-off-by: John Paul Adrian Glaubitz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
soc: qcom: Add check devm_kasprintf() returned value [+ + +]
Author: Charles Han <[email protected]>
Date:   Sun Sep 29 15:23:49 2024 +0800

    soc: qcom: Add check devm_kasprintf() returned value
    
    [ Upstream commit e694d2b5c58ba2d1e995d068707c8d966e7f5f2a ]
    
    devm_kasprintf() can return a NULL pointer on failure but this
    returned value in qcom_socinfo_probe() is not checked.
    
    Signed-off-by: Charles Han <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

soc: qcom: geni-se: fix array underflow in geni_se_clk_tbl_get() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Mon Sep 30 10:51:31 2024 +0300

    soc: qcom: geni-se: fix array underflow in geni_se_clk_tbl_get()
    
    [ Upstream commit 78261cb08f06c93d362cab5c5034bf5899bc7552 ]
    
    This loop is supposed to break if the frequency returned from
    clk_round_rate() is the same as on the previous iteration.  However,
    that check doesn't make sense on the first iteration through the loop.
    It leads to reading before the start of these->clk_perf_tbl[] array.
    
    Fixes: eddac5af0654 ("soc: qcom: Add GENI based QUP Wrapper driver")
    Signed-off-by: Dan Carpenter <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

soc: qcom: socinfo: fix revision check in qcom_socinfo_probe() [+ + +]
Author: Manikanta Mylavarapu <[email protected]>
Date:   Wed Oct 16 20:18:52 2024 +0530

    soc: qcom: socinfo: fix revision check in qcom_socinfo_probe()
    
    commit 128fdbf36cddc2a901c4889ba1c89fa9f2643f2c upstream.
    
    In success case, the revision holds a non-null pointer. The current
    logic incorrectly returns an error for a non-null pointer, whereas
    it should return an error for a null pointer.
    
    The socinfo driver for IPQ9574 and IPQ5332 is currently broken,
    resulting in the following error message
    qcom-socinfo qcom-socinfo: probe with driver qcom-socinfo failed with
    error -12
    
    Add a null check for the revision to ensure it returns an error only in
    failure case (null pointer).
    
    Fixes: e694d2b5c58b ("soc: qcom: Add check devm_kasprintf() returned value")
    Signed-off-by: Manikanta Mylavarapu <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

soc: ti: smartreflex: Use IRQF_NO_AUTOEN flag in request_irq() [+ + +]
Author: Jinjie Ruan <[email protected]>
Date:   Thu Sep 12 11:41:47 2024 +0800

    soc: ti: smartreflex: Use IRQF_NO_AUTOEN flag in request_irq()
    
    [ Upstream commit 16a0a69244240cfa32c525c021c40f85e090557a ]
    
    If request_irq() fails in sr_late_init(), there is no need to enable
    the irq, and if it succeeds, disable_irq() after request_irq() still has
    a time gap in which interrupts can come.
    
    request_irq() with IRQF_NO_AUTOEN flag will disable IRQ auto-enable when
    request IRQ.
    
    Fixes: 1279ba5916f6 ("OMAP3+: SR: disable interrupt by default")
    Signed-off-by: Jinjie Ruan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Kevin Hilman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
spi: Fix acpi deferred irq probe [+ + +]
Author: Stanislaw Gruszka <[email protected]>
Date:   Fri Nov 22 10:42:24 2024 +0100

    spi: Fix acpi deferred irq probe
    
    commit d24cfee7f63d6b44d45a67c5662bd1cc48e8b3ca upstream.
    
    When probing spi device take care of deferred probe of ACPI irq gpio
    similar like for OF/DT case.
    
    >From practical standpoint this fixes issue with vsc-tp driver on
    Dell XP 9340 laptop, which try to request interrupt with spi->irq
    equal to -EPROBE_DEFER and fail to probe with the following error:
    
    vsc-tp spi-INTC10D0:00: probe with driver vsc-tp failed with error -22
    
    Suggested-by: Hans de Goede <[email protected]>
    Fixes: 33ada67da352 ("ACPI / spi: attach GPIO IRQ from ACPI description to SPI device")
    Cc: [email protected]
    Signed-off-by: Stanislaw Gruszka <[email protected]>
    Reviewed-by: Hans de Goede <[email protected]>
    Tested-by: Alexis Lothoré <[email protected]> # Dell XPS9320, ov01a10
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

spi: mpc52xx: Add cancel_work_sync before module remove [+ + +]
Author: Pei Xiao <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/1f16f8ae0e50ca9adb1dc849bf2ac65a40c9ceb9.1732783000.git.xiaopei01@kylinos.cn
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
staging: greybus: uart: clean up TIOCGSERIAL [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Apr 7 12:23:25 2021 +0200

    staging: greybus: uart: clean up TIOCGSERIAL
    
    [ Upstream commit d38be702452137fa82a56ff7cc577d829add1637 ]
    
    TIOCSSERIAL is a horrid, underspecified, legacy interface which for most
    serial devices is only useful for setting the close_delay and
    closing_wait parameters.
    
    The xmit_fifo_size parameter could be used to set the hardware transmit
    fifo size of a legacy UART when it could not be detected, but the
    interface is limited to eight bits and should be left unset when not
    used.
    
    Similarly, baud_base could be used to set the UART base clock when it
    could not be detected but might as well be left unset when it is not
    known.
    
    The type parameter could be used to set the UART type, but is
    better left unspecified (type unknown) when it isn't used.
    
    Note that some applications have historically expected TIOCGSERIAL to be
    implemented, but judging from the Debian sources, the port type not
    being PORT_UNKNOWN is only used to check for the existence of legacy
    serial ports (ttySn). Notably USB serial drivers like ftdi_sio have been
    using PORT_UNKNOWN for twenty years without any problems.
    
    Drop the bogus values provided by the greybus implementation.
    
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: fe0ebeafc3b7 ("staging: greybus: uart: Fix atomicity violation in get_serial_info()")
    Signed-off-by: Sasha Levin <[email protected]>

 
sunrpc: clear XPRT_SOCK_UPD_TIMEOUT when reset transport [+ + +]
Author: Liu Jian <[email protected]>
Date:   Fri Nov 15 17:38:04 2024 +0800

    sunrpc: clear XPRT_SOCK_UPD_TIMEOUT when reset transport
    
    [ Upstream commit 4db9ad82a6c823094da27de4825af693a3475d51 ]
    
    Since transport->sock has been set to NULL during reset transport,
    XPRT_SOCK_UPD_TIMEOUT also needs to be cleared. Otherwise, the
    xs_tcp_set_socket_timeouts() may be triggered in xs_tcp_send_request()
    to dereference the transport->sock that has been set to NULL.
    
    Fixes: 7196dbb02ea0 ("SUNRPC: Allow changing of the TCP timeout parameters on the fly")
    Signed-off-by: Li Lingfeng <[email protected]>
    Signed-off-by: Liu Jian <[email protected]>
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
SUNRPC: correct error code comment in xs_tcp_setup_socket() [+ + +]
Author: Calum Mackay <[email protected]>
Date:   Sat Oct 24 22:36:38 2020 +0100

    SUNRPC: correct error code comment in xs_tcp_setup_socket()
    
    [ Upstream commit 8c71139d9f84c1963b0a416941244502a20a7e52 ]
    
    This comment was introduced by commit 6ea44adce915
    ("SUNRPC: ensure correct error is reported by xs_tcp_setup_socket()").
    
    I believe EIO was a typo at the time: it should have been EAGAIN.
    
    Subsequently, commit 0445f92c5d53 ("SUNRPC: Fix disconnection races")
    changed that to ENOTCONN.
    
    Rather than trying to keep the comment here in sync with the code in
    xprt_force_disconnect(), make the point in a non-specific way.
    
    Fixes: 6ea44adce915 ("SUNRPC: ensure correct error is reported by xs_tcp_setup_socket()")
    Signed-off-by: Calum Mackay <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    Stable-dep-of: 4db9ad82a6c8 ("sunrpc: clear XPRT_SOCK_UPD_TIMEOUT when reset transport")
    Signed-off-by: Sasha Levin <[email protected]>

SUNRPC: make sure cache entry active before cache_show [+ + +]
Author: Yang Erkun <[email protected]>
Date:   Mon Oct 21 22:23:42 2024 +0800

    SUNRPC: make sure cache entry active before cache_show
    
    commit 2862eee078a4d2d1f584e7f24fa50dddfa5f3471 upstream.
    
    The function `c_show` was called with protection from RCU. This only
    ensures that `cp` will not be freed. Therefore, the reference count for
    `cp` can drop to zero, which will trigger a refcount use-after-free
    warning when `cache_get` is called. To resolve this issue, use
    `cache_get_rcu` to ensure that `cp` remains active.
    
    ------------[ cut here ]------------
    refcount_t: addition on 0; use-after-free.
    WARNING: CPU: 7 PID: 822 at lib/refcount.c:25
    refcount_warn_saturate+0xb1/0x120
    CPU: 7 UID: 0 PID: 822 Comm: cat Not tainted 6.12.0-rc3+ #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
    1.16.1-2.fc37 04/01/2014
    RIP: 0010:refcount_warn_saturate+0xb1/0x120
    
    Call Trace:
     <TASK>
     c_show+0x2fc/0x380 [sunrpc]
     seq_read_iter+0x589/0x770
     seq_read+0x1e5/0x270
     proc_reg_read+0xe1/0x140
     vfs_read+0x125/0x530
     ksys_read+0xc1/0x160
     do_syscall_64+0x5f/0x170
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Cc: [email protected] # v4.20+
    Signed-off-by: Yang Erkun <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

SUNRPC: Replace internal use of SOCKWQ_ASYNC_NOSPACE [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Tue Mar 15 08:12:40 2022 -0400

    SUNRPC: Replace internal use of SOCKWQ_ASYNC_NOSPACE
    
    [ Upstream commit 2790a624d43084de590884934969e19c7a82316a ]
    
    The socket's SOCKWQ_ASYNC_NOSPACE can be cleared by various actors in
    the socket layer, so replace it with our own flag in the transport
    sock_state field.
    
    Reported-by: Chuck Lever <[email protected]>
    Signed-off-by: Trond Myklebust <[email protected]>
    Stable-dep-of: 4db9ad82a6c8 ("sunrpc: clear XPRT_SOCK_UPD_TIMEOUT when reset transport")
    Signed-off-by: Sasha Levin <[email protected]>

 
tcp_bpf: Fix the sk_mem_uncharge logic in tcp_bpf_sendmsg [+ + +]
Author: Zijian Zhang <[email protected]>
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 <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: John Fastabend <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
tg3: Set coherent DMA mask bits to 31 for BCM57766 chipsets [+ + +]
Author: Pavan Chebbi <[email protected]>
Date:   Mon Nov 18 21:57:41 2024 -0800

    tg3: Set coherent DMA mask bits to 31 for BCM57766 chipsets
    
    [ Upstream commit 614f4d166eeeb9bd709b0ad29552f691c0f45776 ]
    
    The hardware on Broadcom 1G chipsets have a known limitation
    where they cannot handle DMA addresses that cross over 4GB.
    When such an address is encountered, the hardware sets the
    address overflow error bit in the DMA status register and
    triggers a reset.
    
    However, BCM57766 hardware is setting the overflow bit and
    triggering a reset in some cases when there is no actual
    underlying address overflow. The hardware team analyzed the
    issue and concluded that it is happening when the status
    block update has an address with higher (b16 to b31) bits
    as 0xffff following a previous update that had lowest bits
    as 0xffff.
    
    To work around this bug in the BCM57766 hardware, set the
    coherent dma mask from the current 64b to 31b. This will
    ensure that upper bits of the status block DMA address are
    always at most 0x7fff, thus avoiding the improper overflow
    check described above. This work around is intended for only
    status block and ring memories and has no effect on TX and
    RX buffers as they do not require coherent memory.
    
    Fixes: 72f2afb8a685 ("[TG3]: Add DMA address workaround")
    Reported-by: Salam Noureddine <[email protected]>
    Reviewed-by: Kalesh AP <[email protected]>
    Reviewed-by: Somnath Kotur <[email protected]>
    Signed-off-by: Pavan Chebbi <[email protected]>
    Reviewed-by: Michal Kubiak <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
time: Fix references to _msecs_to_jiffies() handling of values [+ + +]
Author: Miguel Ojeda <[email protected]>
Date:   Fri Oct 25 13:01:41 2024 +0200

    time: Fix references to _msecs_to_jiffies() handling of values
    
    [ Upstream commit 92b043fd995a63a57aae29ff85a39b6f30cd440c ]
    
    The details about the handling of the "normal" values were moved
    to the _msecs_to_jiffies() helpers in commit ca42aaf0c861 ("time:
    Refactor msecs_to_jiffies"). However, the same commit still mentioned
    __msecs_to_jiffies() in the added documentation.
    
    Thus point to _msecs_to_jiffies() instead.
    
    Fixes: ca42aaf0c861 ("time: Refactor msecs_to_jiffies")
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
tipc: add new AEAD key structure for user API [+ + +]
Author: Tuong Lien <[email protected]>
Date:   Fri Nov 8 12:05:10 2019 +0700

    tipc: add new AEAD key structure for user API
    
    [ Upstream commit 134bdac397661a5841d9f27f508190c68b26232b ]
    
    The new structure 'tipc_aead_key' is added to the 'tipc.h' for user to
    be able to transfer a key to TIPC in kernel. Netlink will be used for
    this purpose in the later commits.
    
    Acked-by: Ying Xue <[email protected]>
    Acked-by: Jon Maloy <[email protected]>
    Signed-off-by: Tuong Lien <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 6a2fa13312e5 ("tipc: Fix use-after-free of kernel socket in cleanup_bearer().")
    Signed-off-by: Sasha Levin <[email protected]>

tipc: add reference counter to bearer [+ + +]
Author: Tuong Lien <[email protected]>
Date:   Fri Nov 8 12:05:08 2019 +0700

    tipc: add reference counter to bearer
    
    [ Upstream commit 2a7ee696f7b000a970dcce0cb06fdcd0a9e6ee76 ]
    
    As a need to support the crypto asynchronous operations in the later
    commits, apart from the current RCU mechanism for bearer pointer, we
    add a 'refcnt' to the bearer object as well.
    
    So, a bearer can be hold via 'tipc_bearer_hold()' without being freed
    even though the bearer or interface can be disabled in the meanwhile.
    If that happens, the bearer will be released then when the crypto
    operation is completed and 'tipc_bearer_put()' is called.
    
    Acked-by: Ying Xue <[email protected]>
    Acked-by: Jon Maloy <[email protected]>
    Signed-off-by: Tuong Lien <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 6a2fa13312e5 ("tipc: Fix use-after-free of kernel socket in cleanup_bearer().")
    Signed-off-by: Sasha Levin <[email protected]>

tipc: enable creating a "preliminary" node [+ + +]
Author: Tuong Lien <[email protected]>
Date:   Fri Nov 8 12:05:09 2019 +0700

    tipc: enable creating a "preliminary" node
    
    [ Upstream commit 4cbf8ac2fe5a0846508fe02b95a5de1a90fa73f4 ]
    
    When user sets RX key for a peer not existing on the own node, a new
    node entry is needed to which the RX key will be attached. However,
    since the peer node address (& capabilities) is unknown at that moment,
    only the node-ID is provided, this commit allows the creation of a node
    with only the data that we call as “preliminary”.
    
    A preliminary node is not the object of the “tipc_node_find()” but the
    “tipc_node_find_by_id()”. Once the first message i.e. LINK_CONFIG comes
    from that peer, and is successfully decrypted by the own node, the
    actual peer node data will be properly updated and the node will
    function as usual.
    
    In addition, the node timer always starts when a node object is created
    so if a preliminary node is not used, it will be cleaned up.
    
    The later encryption functions will also use the node timer and be able
    to create a preliminary node automatically when needed.
    
    Acked-by: Ying Xue <[email protected]>
    Acked-by: Jon Maloy <[email protected]>
    Signed-off-by: Tuong Lien <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 6a2fa13312e5 ("tipc: Fix use-after-free of kernel socket in cleanup_bearer().")
    Signed-off-by: Sasha Levin <[email protected]>

tipc: Fix use-after-free of kernel socket in cleanup_bearer(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
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 <[email protected]>
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tpm: fix signed/unsigned bug when checking event logs [+ + +]
Author: Gregory Price <[email protected]>
Date:   Fri Sep 13 19:19:51 2024 -0400

    tpm: fix signed/unsigned bug when checking event logs
    
    [ Upstream commit e6d654e9f5a97742cfe794b1c4bb5d3fb2d25e98 ]
    
    A prior bugfix that fixes a signed/unsigned error causes
    another signed unsigned error.
    
    A situation where log_tbl->size is invalid can cause the
    size passed to memblock_reserve to become negative.
    
    log_size from the main event log is an unsigned int, and
    the code reduces to the following
    
    u64 value = (int)unsigned_value;
    
    This results in sign extension, and the value sent to
    memblock_reserve becomes effectively negative.
    
    Fixes: be59d57f9806 ("efi/tpm: Fix sanity check of unsigned tbl_size being less than zero")
    Signed-off-by: Gregory Price <[email protected]>
    Reviewed-by: Ilias Apalodimas <[email protected]>
    Signed-off-by: Ard Biesheuvel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
trace/trace_event_perf: remove duplicate samples on the first tracepoint event [+ + +]
Author: Levi Yun <[email protected]>
Date:   Fri Sep 13 03:13:47 2024 +0100

    trace/trace_event_perf: remove duplicate samples on the first tracepoint event
    
    [ Upstream commit afe5960dc208fe069ddaaeb0994d857b24ac19d1 ]
    
    When a tracepoint event is created with attr.freq = 1,
    'hwc->period_left' is not initialized correctly. As a result,
    in the perf_swevent_overflow() function, when the first time the event occurs,
    it calculates the event overflow and the perf_swevent_set_period() returns 3,
    this leads to the event are recorded for three duplicate times.
    
    Step to reproduce:
        1. Enable the tracepoint event & starting tracing
             $ echo 1 > /sys/kernel/tracing/events/module/module_free
             $ echo 1 > /sys/kernel/tracing/tracing_on
    
        2. Record with perf
             $ perf record -a --strict-freq -F 1 -e "module:module_free"
    
        3. Trigger module_free event.
             $ modprobe -i sunrpc
             $ modprobe -r sunrpc
    
    Result:
         - Trace pipe result:
             $ cat trace_pipe
             modprobe-174509  [003] .....  6504.868896: module_free: sunrpc
    
         - perf sample:
             modprobe  174509 [003]  6504.868980: module:module_free: sunrpc
             modprobe  174509 [003]  6504.868980: module:module_free: sunrpc
             modprobe  174509 [003]  6504.868980: module:module_free: sunrpc
    
    By setting period_left via perf_swevent_set_period() as other sw_event did,
    This problem could be solved.
    
    After patch:
         - Trace pipe result:
             $ cat trace_pipe
             modprobe 1153096 [068] 613468.867774: module:module_free: xfs
    
         - perf sample
             modprobe 1153096 [068] 613468.867794: module:module_free: xfs
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: bd2b5b12849a ("perf_counter: More aggressive frequency adjustment")
    Signed-off-by: Levi Yun <[email protected]>
    Acked-by: Namhyung Kim <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tracing: Fix cmp_entries_dup() to respect sort() comparison rules [+ + +]
Author: Kuan-Wei Chiu <[email protected]>
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: [email protected]
    Fixes: 08d43a5fa063 ("tracing: Add lock-free tracing_map")
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Kuan-Wei Chiu <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tracing: Use atomic64_inc_return() in trace_clock_counter() [+ + +]
Author: Uros Bizjak <[email protected]>
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 <[email protected]>
    Cc: Masami Hiramatsu <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Uros Bizjak <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tty: ldsic: fix tty_ldisc_autoload sysctl's proc_handler [+ + +]
Author: Nicolas Bouchinet <[email protected]>
Date:   Tue Nov 12 14:13:31 2024 +0100

    tty: ldsic: fix tty_ldisc_autoload sysctl's proc_handler
    
    commit 635a9fca54f4f4148be1ae1c7c6bd37af80f5773 upstream.
    
    Commit 7c0cca7c847e ("tty: ldisc: add sysctl to prevent autoloading of
    ldiscs") introduces the tty_ldisc_autoload sysctl with the wrong
    proc_handler. .extra1 and .extra2 parameters are set to avoid other values
    thant SYSCTL_ZERO or SYSCTL_ONE to be set but proc_dointvec do not uses
    them.
    
    This commit fixes this by using proc_dointvec_minmax instead of
    proc_dointvec.
    
    Fixes: 7c0cca7c847e ("tty: ldisc: add sysctl to prevent autoloading of ldiscs")
    Cc: stable <[email protected]>
    Signed-off-by: Nicolas Bouchinet <[email protected]>
    Reviewed-by: Lin Feng <[email protected]>
    Reviewed-by: Jiri Slaby <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ubi: fastmap: Fix duplicate slab cache names while attaching [+ + +]
Author: Zhihao Cheng <[email protected]>
Date:   Fri Oct 11 12:50:02 2024 +0800

    ubi: fastmap: Fix duplicate slab cache names while attaching
    
    [ Upstream commit bcddf52b7a17adcebc768d26f4e27cf79adb424c ]
    
    Since commit 4c39529663b9 ("slab: Warn on duplicate cache names when
    DEBUG_VM=y"), the duplicate slab cache names can be detected and a
    kernel WARNING is thrown out.
    In UBI fast attaching process, alloc_ai() could be invoked twice
    with the same slab cache name 'ubi_aeb_slab_cache', which will trigger
    following warning messages:
     kmem_cache of name 'ubi_aeb_slab_cache' already exists
     WARNING: CPU: 0 PID: 7519 at mm/slab_common.c:107
              __kmem_cache_create_args+0x100/0x5f0
     Modules linked in: ubi(+) nandsim [last unloaded: nandsim]
     CPU: 0 UID: 0 PID: 7519 Comm: modprobe Tainted: G 6.12.0-rc2
     RIP: 0010:__kmem_cache_create_args+0x100/0x5f0
     Call Trace:
       __kmem_cache_create_args+0x100/0x5f0
       alloc_ai+0x295/0x3f0 [ubi]
       ubi_attach+0x3c3/0xcc0 [ubi]
       ubi_attach_mtd_dev+0x17cf/0x3fa0 [ubi]
       ubi_init+0x3fb/0x800 [ubi]
       do_init_module+0x265/0x7d0
       __x64_sys_finit_module+0x7a/0xc0
    
    The problem could be easily reproduced by loading UBI device by fastmap
    with CONFIG_DEBUG_VM=y.
    Fix it by using different slab names for alloc_ai() callers.
    
    Fixes: d2158f69a7d4 ("UBI: Remove alloc_ai() slab name from parameter list")
    Fixes: fdf10ed710c0 ("ubi: Rework Fastmap attach base code")
    Signed-off-by: Zhihao Cheng <[email protected]>
    Signed-off-by: Richard Weinberger <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ubi: wl: Put source PEB into correct list if trying locking LEB failed [+ + +]
Author: Zhihao Cheng <[email protected]>
Date:   Mon Aug 19 11:26:21 2024 +0800

    ubi: wl: Put source PEB into correct list if trying locking LEB failed
    
    commit d610020f030bec819f42de327c2bd5437d2766b3 upstream.
    
    During wear-leveing work, the source PEB will be moved into scrub list
    when source LEB cannot be locked in ubi_eba_copy_leb(), which is wrong
    for non-scrub type source PEB. The problem could bring extra and
    ineffective wear-leveing jobs, which makes more or less negative effects
    for the life time of flash. Specifically, the process is divided 2 steps:
    1. wear_leveling_worker // generate false scrub type PEB
         ubi_eba_copy_leb // MOVE_RETRY is returned
           leb_write_trylock // trylock failed
         scrubbing = 1;
         e1 is put into ubi->scrub
    2. wear_leveling_worker // schedule false scrub type PEB for wl
         scrubbing = 1
         e1 = rb_entry(rb_first(&ubi->scrub))
    
    The problem can be reproduced easily by running fsstress on a small
    UBIFS partition(<64M, simulated by nandsim) for 5~10mins
    (CONFIG_MTD_UBI_FASTMAP=y,CONFIG_MTD_UBI_WL_THRESHOLD=50). Following
    message is shown:
     ubi0: scrubbed PEB 66 (LEB 0:10), data moved to PEB 165
    
    Since scrub type source PEB has set variable scrubbing as '1', and
    variable scrubbing is checked before variable keep, so the problem can
    be fixed by setting keep variable as 1 directly if the source LEB cannot
    be locked.
    
    Fixes: e801e128b220 ("UBI: fix missing scrub when there is a bit-flip")
    CC: [email protected]
    Signed-off-by: Zhihao Cheng <[email protected]>
    Signed-off-by: Richard Weinberger <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ubifs: authentication: Fix use-after-free in ubifs_tnc_end_commit [+ + +]
Author: Waqar Hameed <[email protected]>
Date:   Wed Oct 9 16:46:59 2024 +0200

    ubifs: authentication: Fix use-after-free in ubifs_tnc_end_commit
    
    [ Upstream commit 4617fb8fc15effe8eda4dd898d4e33eb537a7140 ]
    
    After an insertion in TNC, the tree might split and cause a node to
    change its `znode->parent`. A further deletion of other nodes in the
    tree (which also could free the nodes), the aforementioned node's
    `znode->cparent` could still point to a freed node. This
    `znode->cparent` may not be updated when getting nodes to commit in
    `ubifs_tnc_start_commit()`. This could then trigger a use-after-free
    when accessing the `znode->cparent` in `write_index()` in
    `ubifs_tnc_end_commit()`.
    
    This can be triggered by running
    
      rm -f /etc/test-file.bin
      dd if=/dev/urandom of=/etc/test-file.bin bs=1M count=60 conv=fsync
    
    in a loop, and with `CONFIG_UBIFS_FS_AUTHENTICATION`. KASAN then
    reports:
    
      BUG: KASAN: use-after-free in ubifs_tnc_end_commit+0xa5c/0x1950
      Write of size 32 at addr ffffff800a3af86c by task ubifs_bgt0_20/153
    
      Call trace:
       dump_backtrace+0x0/0x340
       show_stack+0x18/0x24
       dump_stack_lvl+0x9c/0xbc
       print_address_description.constprop.0+0x74/0x2b0
       kasan_report+0x1d8/0x1f0
       kasan_check_range+0xf8/0x1a0
       memcpy+0x84/0xf4
       ubifs_tnc_end_commit+0xa5c/0x1950
       do_commit+0x4e0/0x1340
       ubifs_bg_thread+0x234/0x2e0
       kthread+0x36c/0x410
       ret_from_fork+0x10/0x20
    
      Allocated by task 401:
       kasan_save_stack+0x38/0x70
       __kasan_kmalloc+0x8c/0xd0
       __kmalloc+0x34c/0x5bc
       tnc_insert+0x140/0x16a4
       ubifs_tnc_add+0x370/0x52c
       ubifs_jnl_write_data+0x5d8/0x870
       do_writepage+0x36c/0x510
       ubifs_writepage+0x190/0x4dc
       __writepage+0x58/0x154
       write_cache_pages+0x394/0x830
       do_writepages+0x1f0/0x5b0
       filemap_fdatawrite_wbc+0x170/0x25c
       file_write_and_wait_range+0x140/0x190
       ubifs_fsync+0xe8/0x290
       vfs_fsync_range+0xc0/0x1e4
       do_fsync+0x40/0x90
       __arm64_sys_fsync+0x34/0x50
       invoke_syscall.constprop.0+0xa8/0x260
       do_el0_svc+0xc8/0x1f0
       el0_svc+0x34/0x70
       el0t_64_sync_handler+0x108/0x114
       el0t_64_sync+0x1a4/0x1a8
    
      Freed by task 403:
       kasan_save_stack+0x38/0x70
       kasan_set_track+0x28/0x40
       kasan_set_free_info+0x28/0x4c
       __kasan_slab_free+0xd4/0x13c
       kfree+0xc4/0x3a0
       tnc_delete+0x3f4/0xe40
       ubifs_tnc_remove_range+0x368/0x73c
       ubifs_tnc_remove_ino+0x29c/0x2e0
       ubifs_jnl_delete_inode+0x150/0x260
       ubifs_evict_inode+0x1d4/0x2e4
       evict+0x1c8/0x450
       iput+0x2a0/0x3c4
       do_unlinkat+0x2cc/0x490
       __arm64_sys_unlinkat+0x90/0x100
       invoke_syscall.constprop.0+0xa8/0x260
       do_el0_svc+0xc8/0x1f0
       el0_svc+0x34/0x70
       el0t_64_sync_handler+0x108/0x114
       el0t_64_sync+0x1a4/0x1a8
    
    The offending `memcpy()` in `ubifs_copy_hash()` has a use-after-free
    when a node becomes root in TNC but still has a `cparent` to an already
    freed node. More specifically, consider the following TNC:
    
             zroot
             /
            /
          zp1
          /
         /
        zn
    
    Inserting a new node `zn_new` with a key smaller then `zn` will trigger
    a split in `tnc_insert()` if `zp1` is full:
    
             zroot
             /   \
            /     \
          zp1     zp2
          /         \
         /           \
      zn_new          zn
    
    `zn->parent` has now been moved to `zp2`, *but* `zn->cparent` still
    points to `zp1`.
    
    Now, consider a removal of all the nodes _except_ `zn`. Just when
    `tnc_delete()` is about to delete `zroot` and `zp2`:
    
             zroot
                 \
                  \
                  zp2
                    \
                     \
                     zn
    
    `zroot` and `zp2` get freed and the tree collapses:
    
               zn
    
    `zn` now becomes the new `zroot`.
    
    `get_znodes_to_commit()` will now only find `zn`, the new `zroot`, and
    `write_index()` will check its `znode->cparent` that wrongly points to
    the already freed `zp1`. `ubifs_copy_hash()` thus gets wrongly called
    with `znode->cparent->zbranch[znode->iip].hash` that triggers the
    use-after-free!
    
    Fix this by explicitly setting `znode->cparent` to `NULL` in
    `get_znodes_to_commit()` for the root node. The search for the dirty
    nodes is bottom-up in the tree. Thus, when `find_next_dirty(znode)`
    returns NULL, the current `znode` _is_ the root node. Add an assert for
    this.
    
    Fixes: 16a26b20d2af ("ubifs: authentication: Add hashes to index nodes")
    Tested-by: Waqar Hameed <[email protected]>
    Co-developed-by: Zhihao Cheng <[email protected]>
    Signed-off-by: Zhihao Cheng <[email protected]>
    Signed-off-by: Waqar Hameed <[email protected]>
    Reviewed-by: Zhihao Cheng <[email protected]>
    Signed-off-by: Richard Weinberger <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ubifs: Correct the total block count by deducting journal reservation [+ + +]
Author: Zhihao Cheng <[email protected]>
Date:   Thu Sep 5 09:09:09 2024 +0800

    ubifs: Correct the total block count by deducting journal reservation
    
    [ Upstream commit 84a2bee9c49769310efa19601157ef50a1df1267 ]
    
    Since commit e874dcde1cbf ("ubifs: Reserve one leb for each journal
    head while doing budget"), available space is calulated by deducting
    reservation for all journal heads. However, the total block count (
    which is only used by statfs) is not updated yet, which will cause
    the wrong displaying for used space(total - available).
    Fix it by deducting reservation for all journal heads from total
    block count.
    
    Fixes: e874dcde1cbf ("ubifs: Reserve one leb for each journal head while doing budget")
    Signed-off-by: Zhihao Cheng <[email protected]>
    Signed-off-by: Richard Weinberger <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
um/sysrq: remove needless variable sp [+ + +]
Author: Dmitry Safonov <[email protected]>
Date:   Mon Jun 8 21:31:42 2020 -0700

    um/sysrq: remove needless variable sp
    
    [ Upstream commit 3dd923f39a03dede001afe0edcc08613d5f403e5 ]
    
    `sp' is a needless excercise here.
    
    Signed-off-by: Dmitry Safonov <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Cc: Anton Ivanov <[email protected]>
    Cc: Jeff Dike <[email protected]>
    Cc: Richard Weinberger <[email protected]>
    Link: http://lkml.kernel.org/r/[email protected]
    Signed-off-by: Linus Torvalds <[email protected]>
    Stable-dep-of: 0f659ff362ea ("um: Always dump trace for specified task in show_stack")
    Signed-off-by: Sasha Levin <[email protected]>

 
um: add show_stack_loglvl() [+ + +]
Author: Dmitry Safonov <[email protected]>
Date:   Mon Jun 8 21:31:45 2020 -0700

    um: add show_stack_loglvl()
    
    [ Upstream commit 1ad87824f4cf16a7f381e1f94943a96bb7a99062 ]
    
    Currently, the log-level of show_stack() depends on a platform
    realization.  It creates situations where the headers are printed with
    lower log level or higher than the stacktrace (depending on a platform or
    user).
    
    Furthermore, it forces the logic decision from user to an architecture
    side.  In result, some users as sysrq/kdb/etc are doing tricks with
    temporary rising console_loglevel while printing their messages.  And in
    result it not only may print unwanted messages from other CPUs, but also
    omit printing at all in the unlucky case where the printk() was deferred.
    
    Introducing log-level parameter and KERN_UNSUPPRESSED [1] seems an easier
    approach than introducing more printk buffers.  Also, it will consolidate
    printings with headers.
    
    Introduce show_stack_loglvl(), that eventually will substitute
    show_stack().
    
    [1]: https://lore.kernel.org/lkml/[email protected]/T/#u
    
    Signed-off-by: Dmitry Safonov <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Cc: Anton Ivanov <[email protected]>
    Cc: Jeff Dike <[email protected]>
    Cc: Richard Weinberger <[email protected]>
    Link: http://lkml.kernel.org/r/[email protected]
    Signed-off-by: Linus Torvalds <[email protected]>
    Stable-dep-of: 0f659ff362ea ("um: Always dump trace for specified task in show_stack")
    Signed-off-by: Sasha Levin <[email protected]>

um: Always dump trace for specified task in show_stack [+ + +]
Author: Tiwei Bie <[email protected]>
Date:   Wed Nov 6 18:39:33 2024 +0800

    um: Always dump trace for specified task in show_stack
    
    [ Upstream commit 0f659ff362eac69777c4c191b7e5ccb19d76c67d ]
    
    Currently, show_stack() always dumps the trace of the current task.
    However, it should dump the trace of the specified task if one is
    provided. Otherwise, things like running "echo t > sysrq-trigger"
    won't work as expected.
    
    Fixes: 970e51feaddb ("um: Add support for CONFIG_STACKTRACE")
    Signed-off-by: Tiwei Bie <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

um: Clean up stacktrace dump [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Mon Sep 21 13:43:25 2020 +0200

    um: Clean up stacktrace dump
    
    [ Upstream commit 273fe1b676cb59d41e177980a981e27806872954 ]
    
    We currently get a few stray newlines, due to the interaction
    between printk() and the code here. Remove a few explicit
    newline prints to neaten the output.
    
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Richard Weinberger <[email protected]>
    Stable-dep-of: 0f659ff362ea ("um: Always dump trace for specified task in show_stack")
    Signed-off-by: Sasha Levin <[email protected]>

um: Fix potential integer overflow during physmem setup [+ + +]
Author: Tiwei Bie <[email protected]>
Date:   Mon Sep 16 12:59:48 2024 +0800

    um: Fix potential integer overflow during physmem setup
    
    [ Upstream commit a98b7761f697e590ed5d610d87fa12be66f23419 ]
    
    This issue happens when the real map size is greater than LONG_MAX,
    which can be easily triggered on UML/i386.
    
    Fixes: fe205bdd1321 ("um: Print minimum physical memory requirement")
    Signed-off-by: Tiwei Bie <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

um: Fix the return value of elf_core_copy_task_fpregs [+ + +]
Author: Tiwei Bie <[email protected]>
Date:   Fri Sep 13 10:33:02 2024 +0800

    um: Fix the return value of elf_core_copy_task_fpregs
    
    [ Upstream commit 865e3845eeaa21e9a62abc1361644e67124f1ec0 ]
    
    This function is expected to return a boolean value, which should be
    true on success and false on failure.
    
    Fixes: d1254b12c93e ("uml: fix x86_64 core dump crash")
    Signed-off-by: Tiwei Bie <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

um: net: Do not use drvdata in release [+ + +]
Author: Tiwei Bie <[email protected]>
Date:   Tue Nov 5 00:32:02 2024 +0800

    um: net: Do not use drvdata in release
    
    commit d1db692a9be3b4bd3473b64fcae996afaffe8438 upstream.
    
    The drvdata is not available in release. Let's just use container_of()
    to get the uml_net instance. Otherwise, removing a network device will
    result in a crash:
    
    RIP: 0033:net_device_release+0x10/0x6f
    RSP: 00000000e20c7c40  EFLAGS: 00010206
    RAX: 000000006002e4e7 RBX: 00000000600f1baf RCX: 00000000624074e0
    RDX: 0000000062778000 RSI: 0000000060551c80 RDI: 00000000627af028
    RBP: 00000000e20c7c50 R08: 00000000603ad594 R09: 00000000e20c7b70
    R10: 000000000000135a R11: 00000000603ad422 R12: 0000000000000000
    R13: 0000000062c7af00 R14: 0000000062406d60 R15: 00000000627700b6
    Kernel panic - not syncing: Segfault with no mm
    CPU: 0 UID: 0 PID: 29 Comm: kworker/0:2 Not tainted 6.12.0-rc6-g59b723cd2adb #1
    Workqueue: events mc_work_proc
    Stack:
     627af028 62c7af00 e20c7c80 60276fcd
     62778000 603f5820 627af028 00000000
     e20c7cb0 603a2bcd 627af000 62770010
    Call Trace:
     [<60276fcd>] device_release+0x70/0xba
     [<603a2bcd>] kobject_put+0xba/0xe7
     [<60277265>] put_device+0x19/0x1c
     [<60281266>] platform_device_put+0x26/0x29
     [<60281e5f>] platform_device_unregister+0x2c/0x2e
     [<6002ec9c>] net_remove+0x63/0x69
     [<60031316>] ? mconsole_reply+0x0/0x50
     [<600310c8>] mconsole_remove+0x160/0x1cc
     [<60087d40>] ? __remove_hrtimer+0x38/0x74
     [<60087ff8>] ? hrtimer_try_to_cancel+0x8c/0x98
     [<6006b3cf>] ? dl_server_stop+0x3f/0x48
     [<6006b390>] ? dl_server_stop+0x0/0x48
     [<600672e8>] ? dequeue_entities+0x327/0x390
     [<60038fa6>] ? um_set_signals+0x0/0x43
     [<6003070c>] mc_work_proc+0x77/0x91
     [<60057664>] process_scheduled_works+0x1b3/0x2dd
     [<60055f32>] ? assign_work+0x0/0x58
     [<60057f0a>] worker_thread+0x1e9/0x293
     [<6005406f>] ? set_pf_worker+0x0/0x64
     [<6005d65d>] ? arch_local_irq_save+0x0/0x2d
     [<6005d748>] ? kthread_exit+0x0/0x3a
     [<60057d21>] ? worker_thread+0x0/0x293
     [<6005dbf1>] kthread+0x126/0x12b
     [<600219c5>] new_thread_handler+0x85/0xb6
    
    Cc: [email protected]
    Signed-off-by: Tiwei Bie <[email protected]>
    Acked-By: Anton Ivanov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

um: ubd: Do not use drvdata in release [+ + +]
Author: Tiwei Bie <[email protected]>
Date:   Tue Nov 5 00:32:01 2024 +0800

    um: ubd: Do not use drvdata in release
    
    commit 5bee35e5389f450a7eea7318deb9073e9414d3b1 upstream.
    
    The drvdata is not available in release. Let's just use container_of()
    to get the ubd instance. Otherwise, removing a ubd device will result
    in a crash:
    
    RIP: 0033:blk_mq_free_tag_set+0x1f/0xba
    RSP: 00000000e2083bf0  EFLAGS: 00010246
    RAX: 000000006021463a RBX: 0000000000000348 RCX: 0000000062604d00
    RDX: 0000000004208060 RSI: 00000000605241a0 RDI: 0000000000000348
    RBP: 00000000e2083c10 R08: 0000000062414010 R09: 00000000601603f7
    R10: 000000000000133a R11: 000000006038c4bd R12: 0000000000000000
    R13: 0000000060213a5c R14: 0000000062405d20 R15: 00000000604f7aa0
    Kernel panic - not syncing: Segfault with no mm
    CPU: 0 PID: 17 Comm: kworker/0:1 Not tainted 6.8.0-rc3-00107-gba3f67c11638 #1
    Workqueue: events mc_work_proc
    Stack:
     00000000 604f7ef0 62c5d000 62405d20
     e2083c30 6002c776 6002c755 600e47ff
     e2083c60 6025ffe3 04208060 603d36e0
    Call Trace:
     [<6002c776>] ubd_device_release+0x21/0x55
     [<6002c755>] ? ubd_device_release+0x0/0x55
     [<600e47ff>] ? kfree+0x0/0x100
     [<6025ffe3>] device_release+0x70/0xba
     [<60381d6a>] kobject_put+0xb5/0xe2
     [<6026027b>] put_device+0x19/0x1c
     [<6026a036>] platform_device_put+0x26/0x29
     [<6026ac5a>] platform_device_unregister+0x2c/0x2e
     [<6002c52e>] ubd_remove+0xb8/0xd6
     [<6002bb74>] ? mconsole_reply+0x0/0x50
     [<6002b926>] mconsole_remove+0x160/0x1cc
     [<6002bbbc>] ? mconsole_reply+0x48/0x50
     [<6003379c>] ? um_set_signals+0x3b/0x43
     [<60061c55>] ? update_min_vruntime+0x14/0x70
     [<6006251f>] ? dequeue_task_fair+0x164/0x235
     [<600620aa>] ? update_cfs_group+0x0/0x40
     [<603a0e77>] ? __schedule+0x0/0x3ed
     [<60033761>] ? um_set_signals+0x0/0x43
     [<6002af6a>] mc_work_proc+0x77/0x91
     [<600520b4>] process_scheduled_works+0x1af/0x2c3
     [<6004ede3>] ? assign_work+0x0/0x58
     [<600527a1>] worker_thread+0x2f7/0x37a
     [<6004ee3b>] ? set_pf_worker+0x0/0x64
     [<6005765d>] ? arch_local_irq_save+0x0/0x2d
     [<60058e07>] ? kthread_exit+0x0/0x3a
     [<600524aa>] ? worker_thread+0x0/0x37a
     [<60058f9f>] kthread+0x130/0x135
     [<6002068e>] new_thread_handler+0x85/0xb6
    
    Cc: [email protected]
    Signed-off-by: Tiwei Bie <[email protected]>
    Acked-By: Anton Ivanov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

um: vector: Do not use drvdata in release [+ + +]
Author: Tiwei Bie <[email protected]>
Date:   Tue Nov 5 00:32:03 2024 +0800

    um: vector: Do not use drvdata in release
    
    commit 51b39d741970742a5c41136241a9c48ac607cf82 upstream.
    
    The drvdata is not available in release. Let's just use container_of()
    to get the vector_device instance. Otherwise, removing a vector device
    will result in a crash:
    
    RIP: 0033:vector_device_release+0xf/0x50
    RSP: 00000000e187bc40  EFLAGS: 00010202
    RAX: 0000000060028f61 RBX: 00000000600f1baf RCX: 00000000620074e0
    RDX: 000000006220b9c0 RSI: 0000000060551c80 RDI: 0000000000000000
    RBP: 00000000e187bc50 R08: 00000000603ad594 R09: 00000000e187bb70
    R10: 000000000000135a R11: 00000000603ad422 R12: 00000000623ae028
    R13: 000000006287a200 R14: 0000000062006d30 R15: 00000000623700b6
    Kernel panic - not syncing: Segfault with no mm
    CPU: 0 UID: 0 PID: 16 Comm: kworker/0:1 Not tainted 6.12.0-rc6-g59b723cd2adb #1
    Workqueue: events mc_work_proc
    Stack:
     60028f61 623ae028 e187bc80 60276fcd
     6220b9c0 603f5820 623ae028 00000000
     e187bcb0 603a2bcd 623ae000 62370010
    Call Trace:
     [<60028f61>] ? vector_device_release+0x0/0x50
     [<60276fcd>] device_release+0x70/0xba
     [<603a2bcd>] kobject_put+0xba/0xe7
     [<60277265>] put_device+0x19/0x1c
     [<60281266>] platform_device_put+0x26/0x29
     [<60281e5f>] platform_device_unregister+0x2c/0x2e
     [<60029422>] vector_remove+0x52/0x58
     [<60031316>] ? mconsole_reply+0x0/0x50
     [<600310c8>] mconsole_remove+0x160/0x1cc
     [<603b19f4>] ? strlen+0x0/0x15
     [<60066611>] ? __dequeue_entity+0x1a9/0x206
     [<600666a7>] ? set_next_entity+0x39/0x63
     [<6006666e>] ? set_next_entity+0x0/0x63
     [<60038fa6>] ? um_set_signals+0x0/0x43
     [<6003070c>] mc_work_proc+0x77/0x91
     [<60057664>] process_scheduled_works+0x1b3/0x2dd
     [<60055f32>] ? assign_work+0x0/0x58
     [<60057f0a>] worker_thread+0x1e9/0x293
     [<6005406f>] ? set_pf_worker+0x0/0x64
     [<6005d65d>] ? arch_local_irq_save+0x0/0x2d
     [<6005d748>] ? kthread_exit+0x0/0x3a
     [<60057d21>] ? worker_thread+0x0/0x293
     [<6005dbf1>] kthread+0x126/0x12b
     [<600219c5>] new_thread_handler+0x85/0xb6
    
    Cc: [email protected]
    Signed-off-by: Tiwei Bie <[email protected]>
    Acked-By: Anton Ivanov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: chaoskey: fail open after removal [+ + +]
Author: Oliver Neukum <[email protected]>
Date:   Wed Oct 2 15:21:41 2024 +0200

    USB: chaoskey: fail open after removal
    
    [ Upstream commit 422dc0a4d12d0b80dd3aab3fe5943f665ba8f041 ]
    
    chaoskey_open() takes the lock only to increase the
    counter of openings. That means that the mutual exclusion
    with chaoskey_disconnect() cannot prevent an increase
    of the counter and chaoskey_open() returning a success.
    
    If that race is hit, chaoskey_disconnect() will happily
    free all resources associated with the device after
    it has dropped the lock, as it has read the counter
    as zero.
    
    To prevent this race chaoskey_open() has to check
    the presence of the device under the lock.
    However, the current per device lock cannot be used,
    because it is a part of the data structure to be
    freed. Hence an additional global mutex is needed.
    The issue is as old as the driver.
    
    Signed-off-by: Oliver Neukum <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=422188bce66e76020e55
    Fixes: 66e3e591891da ("usb: Add driver for Altus Metrum ChaosKey device (v2)")
    Rule: add
    Link: https://lore.kernel.org/stable/20241002132201.552578-1-oneukum%40suse.com
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

USB: chaoskey: Fix possible deadlock chaoskey_list_lock [+ + +]
Author: Edward Adam Davis <[email protected]>
Date:   Wed Oct 9 22:52:07 2024 +0800

    USB: chaoskey: Fix possible deadlock chaoskey_list_lock
    
    [ Upstream commit d73dc7b182be4238b75278bfae16afb4c5564a58 ]
    
    [Syzbot reported two possible deadlocks]
    The first possible deadlock is:
    WARNING: possible recursive locking detected
    6.12.0-rc1-syzkaller-00027-g4a9fe2a8ac53 #0 Not tainted
    --------------------------------------------
    syz-executor363/2651 is trying to acquire lock:
    ffffffff89b120e8 (chaoskey_list_lock){+.+.}-{3:3}, at: chaoskey_release+0x15d/0x2c0 drivers/usb/misc/chaoskey.c:322
    
    but task is already holding lock:
    ffffffff89b120e8 (chaoskey_list_lock){+.+.}-{3:3}, at: chaoskey_release+0x7f/0x2c0 drivers/usb/misc/chaoskey.c:299
    
    other info that might help us debug this:
     Possible unsafe locking scenario:
    
           CPU0
           ----
      lock(chaoskey_list_lock);
      lock(chaoskey_list_lock);
    
     *** DEADLOCK ***
    
    The second possible deadlock is:
    WARNING: possible circular locking dependency detected
    6.12.0-rc1-syzkaller-00027-g4a9fe2a8ac53 #0 Not tainted
    ------------------------------------------------------
    kworker/0:2/804 is trying to acquire lock:
    ffffffff899dadb0 (minor_rwsem){++++}-{3:3}, at: usb_deregister_dev+0x7c/0x1e0 drivers/usb/core/file.c:186
    
    but task is already holding lock:
    ffffffff89b120e8 (chaoskey_list_lock){+.+.}-{3:3}, at: chaoskey_disconnect+0xa8/0x2a0 drivers/usb/misc/chaoskey.c:235
    
    which lock already depends on the new lock.
    
    the existing dependency chain (in reverse order) is:
    
    -> #1 (chaoskey_list_lock){+.+.}-{3:3}:
           __mutex_lock_common kernel/locking/mutex.c:608 [inline]
           __mutex_lock+0x175/0x9c0 kernel/locking/mutex.c:752
           chaoskey_open+0xdd/0x220 drivers/usb/misc/chaoskey.c:274
           usb_open+0x186/0x220 drivers/usb/core/file.c:47
           chrdev_open+0x237/0x6a0 fs/char_dev.c:414
           do_dentry_open+0x6cb/0x1390 fs/open.c:958
           vfs_open+0x82/0x3f0 fs/open.c:1088
           do_open fs/namei.c:3774 [inline]
           path_openat+0x1e6a/0x2d60 fs/namei.c:3933
           do_filp_open+0x1dc/0x430 fs/namei.c:3960
           do_sys_openat2+0x17a/0x1e0 fs/open.c:1415
           do_sys_open fs/open.c:1430 [inline]
           __do_sys_openat fs/open.c:1446 [inline]
           __se_sys_openat fs/open.c:1441 [inline]
           __x64_sys_openat+0x175/0x210 fs/open.c:1441
           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
    
    -> #0 (minor_rwsem){++++}-{3:3}:
           check_prev_add kernel/locking/lockdep.c:3161 [inline]
           check_prevs_add kernel/locking/lockdep.c:3280 [inline]
           validate_chain kernel/locking/lockdep.c:3904 [inline]
           __lock_acquire+0x250b/0x3ce0 kernel/locking/lockdep.c:5202
           lock_acquire.part.0+0x11b/0x380 kernel/locking/lockdep.c:5825
           down_write+0x93/0x200 kernel/locking/rwsem.c:1577
           usb_deregister_dev+0x7c/0x1e0 drivers/usb/core/file.c:186
           chaoskey_disconnect+0xb7/0x2a0 drivers/usb/misc/chaoskey.c:236
           usb_unbind_interface+0x1e8/0x970 drivers/usb/core/driver.c:461
           device_remove drivers/base/dd.c:569 [inline]
           device_remove+0x122/0x170 drivers/base/dd.c:561
           __device_release_driver drivers/base/dd.c:1273 [inline]
           device_release_driver_internal+0x44a/0x610 drivers/base/dd.c:1296
           bus_remove_device+0x22f/0x420 drivers/base/bus.c:576
           device_del+0x396/0x9f0 drivers/base/core.c:3864
           usb_disable_device+0x36c/0x7f0 drivers/usb/core/message.c:1418
           usb_disconnect+0x2e1/0x920 drivers/usb/core/hub.c:2304
           hub_port_connect drivers/usb/core/hub.c:5361 [inline]
           hub_port_connect_change drivers/usb/core/hub.c:5661 [inline]
           port_event drivers/usb/core/hub.c:5821 [inline]
           hub_event+0x1bed/0x4f40 drivers/usb/core/hub.c:5903
           process_one_work+0x9c5/0x1ba0 kernel/workqueue.c:3229
           process_scheduled_works kernel/workqueue.c:3310 [inline]
           worker_thread+0x6c8/0xf00 kernel/workqueue.c:3391
           kthread+0x2c1/0x3a0 kernel/kthread.c:389
           ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147
           ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
    
    other info that might help us debug this:
    
     Possible unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(chaoskey_list_lock);
                                   lock(minor_rwsem);
                                   lock(chaoskey_list_lock);
      lock(minor_rwsem);
    
     *** DEADLOCK ***
    [Analysis]
    The first is AA lock, it because wrong logic, it need a unlock.
    The second is AB lock, it needs to rearrange the order of lock usage.
    
    Fixes: 422dc0a4d12d ("USB: chaoskey: fail open after removal")
    Reported-by: [email protected]
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=685e14d04fe35692d3bc
    Signed-off-by: Edward Adam Davis <[email protected]>
    Tested-by: [email protected]
    Reported-by: [email protected]
    Tested-by: [email protected]
    Tested-by: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Cc: Oliver Neukum <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
usb: chipidea: udc: handle USB Error Interrupt if IOC not set [+ + +]
Author: Xu Yang <[email protected]>
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 <[email protected]>
    Signed-off-by: Xu Yang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

usb: dwc3: gadget: Fix checking for number of TRBs left [+ + +]
Author: Thinh Nguyen <[email protected]>
Date:   Thu Nov 14 01:02:12 2024 +0000

    usb: dwc3: gadget: Fix checking for number of TRBs left
    
    commit 02a6982b0ccfcdc39e20016f5fc9a1b7826a6ee7 upstream.
    
    The check whether the TRB ring is full or empty in dwc3_calc_trbs_left()
    is insufficient. It assumes there are active TRBs if there's any request
    in the started_list. However, that's not the case for requests with a
    large SG list.
    
    That is, if we have a single usb request that requires more TRBs than
    the total TRBs in the TRB ring, the queued TRBs will be available when
    all the TRBs in the ring are completed. But the request is only
    partially completed and remains in the started_list. With the current
    logic, the TRB ring is empty, but dwc3_calc_trbs_left() returns 0.
    
    Fix this by additionally checking for the request->num_trbs for active
    TRB count.
    
    Cc: [email protected]
    Fixes: 51f1954ad853 ("usb: dwc3: gadget: Fix dwc3_calc_trbs_left()")
    Signed-off-by: Thinh Nguyen <[email protected]>
    Link: https://lore.kernel.org/r/708dc62b56b77da1f704cc2ae9b6ddb1f2dbef1f.1731545781.git.Thinh.Nguyen@synopsys.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: ehci-spear: fix call balance of sehci clk handling routines [+ + +]
Author: Vitalii Mordan <[email protected]>
Date:   Fri Nov 15 02:03:10 2024 +0300

    usb: ehci-spear: fix call balance of sehci clk handling routines
    
    commit 40c974826734836402abfd44efbf04f63a2cc1c1 upstream.
    
    If the clock sehci->clk was not enabled in spear_ehci_hcd_drv_probe,
    it should not be disabled in any path.
    
    Conversely, if it was enabled in spear_ehci_hcd_drv_probe, it must be disabled
    in all error paths to ensure proper cleanup.
    
    Found by Linux Verification Center (linuxtesting.org) with Klever.
    
    Fixes: 7675d6ba436f ("USB: EHCI: make ehci-spear a separate driver")
    Cc: [email protected]
    Signed-off-by: Vitalii Mordan <[email protected]>
    Acked-by: Alan Stern <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: using mutex lock and supporting O_NONBLOCK flag in iowarrior_read() [+ + +]
Author: Jeongjun Park <[email protected]>
Date:   Thu Sep 19 19:34:03 2024 +0900

    usb: using mutex lock and supporting O_NONBLOCK flag in iowarrior_read()
    
    [ Upstream commit 44feafbaa66ec86232b123bb8437a6a262442025 ]
    
    iowarrior_read() uses the iowarrior dev structure, but does not use any
    lock on the structure. This can cause various bugs including data-races,
    so it is more appropriate to use a mutex lock to safely protect the
    iowarrior dev structure. When using a mutex lock, you should split the
    branch to prevent blocking when the O_NONBLOCK flag is set.
    
    In addition, it is unnecessary to check for NULL on the iowarrior dev
    structure obtained by reading file->private_data. Therefore, it is
    better to remove the check.
    
    Fixes: 946b960d13c1 ("USB: add driver for iowarrior devices.")
    Signed-off-by: Jeongjun Park <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

usb: yurex: make waiting on yurex_write interruptible [+ + +]
Author: Oliver Neukum <[email protected]>
Date:   Tue Sep 24 10:43:45 2024 +0200

    usb: yurex: make waiting on yurex_write interruptible
    
    [ Upstream commit e0aa9614ab0fd35b404e4b16ebe879f9fc152591 ]
    
    The IO yurex_write() needs to wait for in order to have a device
    ready for writing again can take a long time time.
    Consequently the sleep is done in an interruptible state.
    Therefore others waiting for yurex_write() itself to finish should
    use mutex_lock_interruptible.
    
    Signed-off-by: Oliver Neukum <[email protected]>
    Fixes: 6bc235a2e24a5 ("USB: add driver for Meywa-Denki & Kayac YUREX")
    Rule: add
    Link: https://lore.kernel.org/stable/20240924084415.300557-1-oneukum%40suse.com
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
util_macros.h: fix/rework find_closest() macros [+ + +]
Author: Alexandru Ardelean <[email protected]>
Date:   Tue Nov 5 16:54:05 2024 +0200

    util_macros.h: fix/rework find_closest() macros
    
    commit bc73b4186736341ab5cd2c199da82db6e1134e13 upstream.
    
    A bug was found in the find_closest() (find_closest_descending() is also
    affected after some testing), where for certain values with small
    progressions, the rounding (done by averaging 2 values) causes an
    incorrect index to be returned.  The rounding issues occur for
    progressions of 1, 2 and 3.  It goes away when the progression/interval
    between two values is 4 or larger.
    
    It's particularly bad for progressions of 1.  For example if there's an
    array of 'a = { 1, 2, 3 }', using 'find_closest(2, a ...)' would return 0
    (the index of '1'), rather than returning 1 (the index of '2').  This
    means that for exact values (with a progression of 1), find_closest() will
    misbehave and return the index of the value smaller than the one we're
    searching for.
    
    For progressions of 2 and 3, the exact values are obtained correctly; but
    values aren't approximated correctly (as one would expect).  Starting with
    progressions of 4, all seems to be good (one gets what one would expect).
    
    While one could argue that 'find_closest()' should not be used for arrays
    with progressions of 1 (i.e. '{1, 2, 3, ...}', the macro should still
    behave correctly.
    
    The bug was found while testing the 'drivers/iio/adc/ad7606.c',
    specifically the oversampling feature.
    For reference, the oversampling values are listed as:
       static const unsigned int ad7606_oversampling_avail[7] = {
              1, 2, 4, 8, 16, 32, 64,
       };
    
    When doing:
      1. $ echo 1 > /sys/bus/iio/devices/iio\:device0/oversampling_ratio
         $ cat /sys/bus/iio/devices/iio\:device0/oversampling_ratio
         1  # this is fine
      2. $ echo 2 > /sys/bus/iio/devices/iio\:device0/oversampling_ratio
         $ cat /sys/bus/iio/devices/iio\:device0/oversampling_ratio
         1  # this is wrong; 2 should be returned here
      3. $ echo 3 > /sys/bus/iio/devices/iio\:device0/oversampling_ratio
         $ cat /sys/bus/iio/devices/iio\:device0/oversampling_ratio
         2  # this is fine
      4. $ echo 4 > /sys/bus/iio/devices/iio\:device0/oversampling_ratio
         $ cat /sys/bus/iio/devices/iio\:device0/oversampling_ratio
         4  # this is fine
    And from here-on, the values are as correct (one gets what one would
    expect.)
    
    While writing a kunit test for this bug, a peculiar issue was found for the
    array in the 'drivers/hwmon/ina2xx.c' & 'drivers/iio/adc/ina2xx-adc.c'
    drivers. While running the kunit test (for 'ina226_avg_tab' from these
    drivers):
      * idx = find_closest([-1 to 2], ina226_avg_tab, ARRAY_SIZE(ina226_avg_tab));
        This returns idx == 0, so value.
      * idx = find_closest(3, ina226_avg_tab, ARRAY_SIZE(ina226_avg_tab));
        This returns idx == 0, value 1; and now one could argue whether 3 is
        closer to 4 or to 1. This quirk only appears for value '3' in this
        array, but it seems to be a another rounding issue.
      * And from 4 onwards the 'find_closest'() works fine (one gets what one
        would expect).
    
    This change reworks the find_closest() macros to also check the difference
    between the left and right elements when 'x'. If the distance to the right
    is smaller (than the distance to the left), the index is incremented by 1.
    This also makes redundant the need for using the DIV_ROUND_CLOSEST() macro.
    
    In order to accommodate for any mix of negative + positive values, the
    internal variables '__fc_x', '__fc_mid_x', '__fc_left' & '__fc_right' are
    forced to 'long' type. This also addresses any potential bugs/issues with
    'x' being of an unsigned type. In those situations any comparison between
    signed & unsigned would be promoted to a comparison between 2 unsigned
    numbers; this is especially annoying when '__fc_left' & '__fc_right'
    underflow.
    
    The find_closest_descending() macro was also reworked and duplicated from
    the find_closest(), and it is being iterated in reverse. The main reason
    for this is to get the same indices as 'find_closest()' (but in reverse).
    The comparison for '__fc_right < __fc_left' favors going the array in
    ascending order.
    For example for array '{ 1024, 512, 256, 128, 64, 16, 4, 1 }' and x = 3, we
    get:
        __fc_mid_x = 2
        __fc_left = -1
        __fc_right = -2
        Then '__fc_right < __fc_left' evaluates to true and '__fc_i++' becomes 7
        which is not quite incorrect, but 3 is closer to 4 than to 1.
    
    This change has been validated with the kunit from the next patch.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 95d119528b0b ("util_macros.h: add find_closest() macro")
    Signed-off-by: Alexandru Ardelean <[email protected]>
    Cc: Bartosz Golaszewski <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
vfio/pci: Properly hide first-in-list PCIe extended capability [+ + +]
Author: Avihai Horon <[email protected]>
Date:   Sun Nov 24 16:27:39 2024 +0200

    vfio/pci: Properly hide first-in-list PCIe extended capability
    
    [ Upstream commit fe4bf8d0b6716a423b16495d55b35d3fe515905d ]
    
    There are cases where a PCIe extended capability should be hidden from
    the user. For example, an unknown capability (i.e., capability with ID
    greater than PCI_EXT_CAP_ID_MAX) or a capability that is intentionally
    chosen to be hidden from the user.
    
    Hiding a capability is done by virtualizing and modifying the 'Next
    Capability Offset' field of the previous capability so it points to the
    capability after the one that should be hidden.
    
    The special case where the first capability in the list should be hidden
    is handled differently because there is no previous capability that can
    be modified. In this case, the capability ID and version are zeroed
    while leaving the next pointer intact. This hides the capability and
    leaves an anchor for the rest of the capability list.
    
    However, today, hiding the first capability in the list is not done
    properly if the capability is unknown, as struct
    vfio_pci_core_device->pci_config_map is set to the capability ID during
    initialization but the capability ID is not properly checked later when
    used in vfio_config_do_rw(). This leads to the following warning [1] and
    to an out-of-bounds access to ecap_perms array.
    
    Fix it by checking cap_id in vfio_config_do_rw(), and if it is greater
    than PCI_EXT_CAP_ID_MAX, use an alternative struct perm_bits for direct
    read only access instead of the ecap_perms array.
    
    Note that this is safe since the above is the only case where cap_id can
    exceed PCI_EXT_CAP_ID_MAX (except for the special capabilities, which
    are already checked before).
    
    [1]
    
    WARNING: CPU: 118 PID: 5329 at drivers/vfio/pci/vfio_pci_config.c:1900 vfio_pci_config_rw+0x395/0x430 [vfio_pci_core]
    CPU: 118 UID: 0 PID: 5329 Comm: simx-qemu-syste Not tainted 6.12.0+ #1
    (snip)
    Call Trace:
     <TASK>
     ? show_regs+0x69/0x80
     ? __warn+0x8d/0x140
     ? vfio_pci_config_rw+0x395/0x430 [vfio_pci_core]
     ? report_bug+0x18f/0x1a0
     ? handle_bug+0x63/0xa0
     ? exc_invalid_op+0x19/0x70
     ? asm_exc_invalid_op+0x1b/0x20
     ? vfio_pci_config_rw+0x395/0x430 [vfio_pci_core]
     ? vfio_pci_config_rw+0x244/0x430 [vfio_pci_core]
     vfio_pci_rw+0x101/0x1b0 [vfio_pci_core]
     vfio_pci_core_read+0x1d/0x30 [vfio_pci_core]
     vfio_device_fops_read+0x27/0x40 [vfio]
     vfs_read+0xbd/0x340
     ? vfio_device_fops_unl_ioctl+0xbb/0x740 [vfio]
     ? __rseq_handle_notify_resume+0xa4/0x4b0
     __x64_sys_pread64+0x96/0xc0
     x64_sys_call+0x1c3d/0x20d0
     do_syscall_64+0x4d/0x120
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fixes: 89e1f7d4c66d ("vfio: Add PCI device driver")
    Signed-off-by: Avihai Horon <[email protected]>
    Reviewed-by: Yi Liu <[email protected]>
    Tested-by: Yi Liu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alex Williamson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
watchdog: mediatek: Make sure system reset gets asserted in mtk_wdt_restart() [+ + +]
Author: Yassine Oudjana <[email protected]>
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 <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Reviewed-by: Guenter Roeck <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Wim Van Sebroeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
wifi: ath5k: add PCI ID for Arcadyan devices [+ + +]
Author: Rosen Penev <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ath5k: add PCI ID for SX76X [+ + +]
Author: Rosen Penev <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ath9k: add range check for conn_rsp_epid in htc_connect_service() [+ + +]
Author: Jeongjun Park <[email protected]>
Date:   Sat Sep 14 12:06:03 2024 +0300

    wifi: ath9k: add range check for conn_rsp_epid in htc_connect_service()
    
    [ Upstream commit 8619593634cbdf5abf43f5714df49b04e4ef09ab ]
    
    I found the following bug in my fuzzer:
    
      UBSAN: array-index-out-of-bounds in drivers/net/wireless/ath/ath9k/htc_hst.c:26:51
      index 255 is out of range for type 'htc_endpoint [22]'
      CPU: 0 UID: 0 PID: 8 Comm: kworker/0:0 Not tainted 6.11.0-rc6-dirty #14
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
      Workqueue: events request_firmware_work_func
      Call Trace:
       <TASK>
       dump_stack_lvl+0x180/0x1b0
       __ubsan_handle_out_of_bounds+0xd4/0x130
       htc_issue_send.constprop.0+0x20c/0x230
       ? _raw_spin_unlock_irqrestore+0x3c/0x70
       ath9k_wmi_cmd+0x41d/0x610
       ? mark_held_locks+0x9f/0xe0
       ...
    
    Since this bug has been confirmed to be caused by insufficient verification
    of conn_rsp_epid, I think it would be appropriate to add a range check for
    conn_rsp_epid to htc_connect_service() to prevent the bug from occurring.
    
    Fixes: fb9987d0f748 ("ath9k_htc: Support for AR9271 chipset.")
    Signed-off-by: Jeongjun Park <[email protected]>
    Acked-by: Toke Høiland-Jørgensen <[email protected]>
    Signed-off-by: Kalle Valo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

wifi: brcmfmac: Fix oops due to NULL pointer dereference in brcmf_sdiod_sglist_rw() [+ + +]
Author: Norbert van Bolhuis <[email protected]>
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 <[email protected]>
    Signed-off-by: Kalle Valo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ipw2x00: libipw_rx_any(): fix bad alignment [+ + +]
Author: Jiapeng Chong <[email protected]>
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 <[email protected]>
    Closes: https://bugzilla.openanolis.cn/show_bug.cgi?id=11381
    Signed-off-by: Jiapeng Chong <[email protected]>
    Signed-off-by: Kalle Valo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mwifiex: Fix memcpy() field-spanning write warning in mwifiex_config_scan() [+ + +]
Author: Alper Nebi Yasak <[email protected]>
Date:   Tue Oct 8 01:20:54 2024 +0300

    wifi: mwifiex: Fix memcpy() field-spanning write warning in mwifiex_config_scan()
    
    [ Upstream commit d241a139c2e9f8a479f25c75ebd5391e6a448500 ]
    
    Replace one-element array with a flexible-array member in `struct
    mwifiex_ie_types_wildcard_ssid_params` to fix the following warning
    on a MT8173 Chromebook (mt8173-elm-hana):
    
    [  356.775250] ------------[ cut here ]------------
    [  356.784543] memcpy: detected field-spanning write (size 6) of single field "wildcard_ssid_tlv->ssid" at drivers/net/wireless/marvell/mwifiex/scan.c:904 (size 1)
    [  356.813403] WARNING: CPU: 3 PID: 742 at drivers/net/wireless/marvell/mwifiex/scan.c:904 mwifiex_scan_networks+0x4fc/0xf28 [mwifiex]
    
    The "(size 6)" above is exactly the length of the SSID of the network
    this device was connected to. The source of the warning looks like:
    
        ssid_len = user_scan_in->ssid_list[i].ssid_len;
        [...]
        memcpy(wildcard_ssid_tlv->ssid,
               user_scan_in->ssid_list[i].ssid, ssid_len);
    
    There is a #define WILDCARD_SSID_TLV_MAX_SIZE that uses sizeof() on this
    struct, but it already didn't account for the size of the one-element
    array, so it doesn't need to be changed.
    
    Fixes: 5e6e3a92b9a4 ("wireless: mwifiex: initial commit for Marvell mwifiex driver")
    Signed-off-by: Alper Nebi Yasak <[email protected]>
    Acked-by: Brian Norris <[email protected]>
    Signed-off-by: Kalle Valo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mwifiex: Use IRQF_NO_AUTOEN flag in request_irq() [+ + +]
Author: Jinjie Ruan <[email protected]>
Date:   Tue Sep 10 20:43:13 2024 +0800

    wifi: mwifiex: Use IRQF_NO_AUTOEN flag in request_irq()
    
    [ Upstream commit 9a98dd48b6d834d7a3fe5e8e7b8c3a1d006f9685 ]
    
    disable_irq() after request_irq() still has a time gap in which
    interrupts can come. request_irq() with IRQF_NO_AUTOEN flag will
    disable IRQ auto-enable when request IRQ.
    
    Fixes: 853402a00823 ("mwifiex: Enable WoWLAN for both sdio and pcie")
    Signed-off-by: Jinjie Ruan <[email protected]>
    Acked-by: Brian Norris <[email protected]>
    Signed-off-by: Kalle Valo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

wifi: p54: Use IRQF_NO_AUTOEN flag in request_irq() [+ + +]
Author: Jinjie Ruan <[email protected]>
Date:   Tue Sep 10 20:43:12 2024 +0800

    wifi: p54: Use IRQF_NO_AUTOEN flag in request_irq()
    
    [ Upstream commit bcd1371bd85e560ccc9159b7747f94bfe43b77a6 ]
    
    disable_irq() after request_irq() still has a time gap in which
    interrupts can come. request_irq() with IRQF_NO_AUTOEN flag will
    disable IRQ auto-enable when request IRQ.
    
    Fixes: cd8d3d321285 ("p54spi: p54spi driver")
    Signed-off-by: Jinjie Ruan <[email protected]>
    Signed-off-by: Kalle Valo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/amd_nb: Fix compile-testing without CONFIG_AMD_NB [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Tue Oct 29 09:23:20 2024 +0000

    x86/amd_nb: Fix compile-testing without CONFIG_AMD_NB
    
    [ Upstream commit fce9642c765a18abd1db0339a7d832c29b68456a ]
    
    node_to_amd_nb() is defined to NULL in non-AMD configs:
    
      drivers/platform/x86/amd/hsmp/plat.c: In function 'init_platform_device':
      drivers/platform/x86/amd/hsmp/plat.c:165:68: error: dereferencing 'void *' pointer [-Werror]
        165 |                 sock->root                      = node_to_amd_nb(i)->root;
            |                                                                    ^~
      drivers/platform/x86/amd/hsmp/plat.c:165:68: error: request for member 'root' in something not a structure or union
    
    Users of the interface who also allow COMPILE_TEST will cause the above build
    error so provide an inline stub to fix that.
    
      [ bp: Massage commit message. ]
    
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/asm: Reorder early variables [+ + +]
Author: Jiri Slaby <[email protected]>
Date:   Thu Oct 3 11:52:37 2019 +0200

    x86/asm: Reorder early variables
    
    [ Upstream commit 1a8770b746bd05ef68217989cd723b2c24d2208d ]
    
    Moving early_recursion_flag (4 bytes) after early_level4_pgt (4k) and
    early_dynamic_pgts (256k) saves 4k which are used for alignment of
    early_level4_pgt after early_recursion_flag.
    
    The real improvement is merely on the source code side. Previously it
    was:
    * __INITDATA + .balign
    * early_recursion_flag variable
    * a ton of CPP MACROS
    * __INITDATA (again)
    * early_top_pgt and early_recursion_flag variables
    * .data
    
    Now, it is a bit simpler:
    * a ton of CPP MACROS
    * __INITDATA + .balign
    * early_top_pgt and early_recursion_flag variables
    * early_recursion_flag variable
    * .data
    
    On the binary level the change looks like this:
    Before:
     (sections)
      12 .init.data    00042000  0000000000000000  0000000000000000 00008000  2**12
     (symbols)
      000000       4 OBJECT  GLOBAL DEFAULT   22 early_recursion_flag
      001000    4096 OBJECT  GLOBAL DEFAULT   22 early_top_pgt
      002000 0x40000 OBJECT  GLOBAL DEFAULT   22 early_dynamic_pgts
    
    After:
     (sections)
      12 .init.data    00041004  0000000000000000  0000000000000000 00008000  2**12
     (symbols)
      000000    4096 OBJECT  GLOBAL DEFAULT   22 early_top_pgt
      001000 0x40000 OBJECT  GLOBAL DEFAULT   22 early_dynamic_pgts
      041000       4 OBJECT  GLOBAL DEFAULT   22 early_recursion_flag
    
    So the resulting vmlinux is smaller by 4k with my toolchain as many
    other variables can be placed after early_recursion_flag to fill the
    rest of the page. Note that this is only .init data, so it is freed
    right after being booted anyway. Savings on-disk are none -- compression
    of zeros is easy, so the size of bzImage is the same pre and post the
    change.
    
    Signed-off-by: Jiri Slaby <[email protected]>
    Signed-off-by: Borislav Petkov <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: "H. Peter Anvin" <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Josh Poimboeuf <[email protected]>
    Cc: Juergen Gross <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Thomas Gleixner <[email protected]>
    Cc: x86-ml <[email protected]>
    Link: https://lkml.kernel.org/r/[email protected]
    Stable-dep-of: 3b2f2d22fb42 ("crypto: x86/aegis128 - access 32-bit arguments as 32-bit")
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/xen/pvh: Annotate indirect branch as safe [+ + +]
Author: Josh Poimboeuf <[email protected]>
Date:   Thu Jan 21 15:29:30 2021 -0600

    x86/xen/pvh: Annotate indirect branch as safe
    
    [ Upstream commit 82694854caa8badab7c5d3a19c0139e8b471b1d3 ]
    
    This indirect jump is harmless; annotate it to keep objtool's retpoline
    validation happy.
    
    Cc: Boris Ostrovsky <[email protected]>
    Cc: Juergen Gross <[email protected]>
    Signed-off-by: Josh Poimboeuf <[email protected]>
    Reviewed-by: Juergen Gross <[email protected]>
    Link: https://lore.kernel.org/r/4797c72a258b26e06741c58ccd4a75c42db39c1d.1611263462.git.jpoimboe@redhat.com
    Stable-dep-of: e8fbc0d9cab6 ("x86/pvh: Call C code via the kernel virtual mapping")
    Signed-off-by: Sasha Levin <[email protected]>

 
xdp: Simplify devmap cleanup [+ + +]
Author: Björn Töpel <[email protected]>
Date:   Thu Dec 19 07:09:59 2019 +0100

    xdp: Simplify devmap cleanup
    
    [ Upstream commit 0536b85239b8440735cdd910aae0eb076ebbb439 ]
    
    After the RCU flavor consolidation [1], call_rcu() and
    synchronize_rcu() waits for preempt-disable regions (NAPI) in addition
    to the read-side critical sections. As a result of this, the cleanup
    code in devmap can be simplified
    
    * There is no longer a need to flush in __dev_map_entry_free, since we
      know that this has been done when the call_rcu() callback is
      triggered.
    
    * When freeing the map, there is no need to explicitly wait for a
      flush. It's guaranteed to be done after the synchronize_rcu() call
      in dev_map_free(). The rcu_barrier() is still needed, so that the
      map is not freed prior the elements.
    
    [1] https://lwn.net/Articles/777036/
    
    Signed-off-by: Björn Töpel <[email protected]>
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Acked-by: Toke Høiland-Jørgensen <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Stable-dep-of: ab244dd7cf4c ("bpf: fix OOB devmap writes when deleting elements")
    Signed-off-by: Sasha Levin <[email protected]>

 
xen/xenbus: fix locking [+ + +]
Author: Juergen Gross <[email protected]>
Date:   Thu Mar 5 11:03:23 2020 +0100

    xen/xenbus: fix locking
    
    [ Upstream commit 2f69a110e7bba3ec6bc089a2f736ca0941d887ed ]
    
    Commit 060eabe8fbe726 ("xenbus/backend: Protect xenbus callback with
    lock") introduced a bug by holding a lock while calling a function
    which might schedule.
    
    Fix that by using a semaphore instead.
    
    Fixes: 060eabe8fbe726 ("xenbus/backend: Protect xenbus callback with lock")
    Signed-off-by: Juergen Gross <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Boris Ostrovsky <[email protected]>
    Signed-off-by: Boris Ostrovsky <[email protected]>
    Stable-dep-of: afc545da381b ("xen: Fix the issue of resource not being properly released in xenbus_dev_probe()")
    Signed-off-by: Sasha Levin <[email protected]>

xen/xenbus: reference count registered modules [+ + +]
Author: Paul Durrant <[email protected]>
Date:   Mon Dec 2 11:41:16 2019 +0000

    xen/xenbus: reference count registered modules
    
    [ Upstream commit 196748a276b4dee01177e6b7abcda27cd759de83 ]
    
    To prevent a PV driver module being removed whilst attached to its other
    end, and hence xenbus calling into potentially invalid text, take a
    reference on the module before calling the probe() method (dropping it if
    unsuccessful) and drop the reference after returning from the remove()
    method.
    
    Suggested-by: Jan Beulich <[email protected]>
    Signed-off-by: Paul Durrant <[email protected]>
    Reviewed-by: Jan Beulich <[email protected]>
    Reviewed-by: Juergen Gross <[email protected]>
    Signed-off-by: Juergen Gross <[email protected]>
    Stable-dep-of: afc545da381b ("xen: Fix the issue of resource not being properly released in xenbus_dev_probe()")
    Signed-off-by: Sasha Levin <[email protected]>

 
xen: Fix the issue of resource not being properly released in xenbus_dev_probe() [+ + +]
Author: Qiu-ji Chen <[email protected]>
Date:   Tue Nov 5 21:09:19 2024 +0800

    xen: Fix the issue of resource not being properly released in xenbus_dev_probe()
    
    [ Upstream commit afc545da381ba0c651b2658966ac737032676f01 ]
    
    This patch fixes an issue in the function xenbus_dev_probe(). In the
    xenbus_dev_probe() function, within the if (err) branch at line 313, the
    program incorrectly returns err directly without releasing the resources
    allocated by err = drv->probe(dev, id). As the return value is non-zero,
    the upper layers assume the processing logic has failed. However, the probe
    operation was performed earlier without a corresponding remove operation.
    Since the probe actually allocates resources, failing to perform the remove
    operation could lead to problems.
    
    To fix this issue, we followed the resource release logic of the
    xenbus_dev_remove() function by adding a new block fail_remove before the
    fail_put block. After entering the branch if (err) at line 313, the
    function will use a goto statement to jump to the fail_remove block,
    ensuring that the previously acquired resources are correctly released,
    thus preventing the reference count leak.
    
    This bug was identified by an experimental static analysis tool developed
    by our team. The tool specializes in analyzing reference count operations
    and detecting potential issues where resources are not properly managed.
    In this case, the tool flagged the missing release operation as a
    potential problem, which led to the development of this patch.
    
    Fixes: 4bac07c993d0 ("xen: add the Xenbus sysfs and virtual device hotplug driver")
    Cc: [email protected]
    Signed-off-by: Qiu-ji Chen <[email protected]>
    Reviewed-by: Juergen Gross <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Juergen Gross <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
xenbus/backend: Add memory pressure handler callback [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Mon Jan 27 09:18:08 2020 +0100

    xenbus/backend: Add memory pressure handler callback
    
    [ Upstream commit 8a105678fb3ec4763352db84745968bf2cb4aa65 ]
    
    Granting pages consumes backend system memory.  In systems configured
    with insufficient spare memory for those pages, it can cause a memory
    pressure situation.  However, finding the optimal amount of the spare
    memory is challenging for large systems having dynamic resource
    utilization patterns.  Also, such a static configuration might lack
    flexibility.
    
    To mitigate such problems, this commit adds a memory reclaim callback to
    'xenbus_driver'.  If a memory pressure is detected, 'xenbus' requests
    every backend driver to volunarily release its memory.
    
    Note that it would be able to improve the callback facility for more
    sophisticated handlings of general pressures.  For example, it would be
    possible to monitor the memory consumption of each device and issue the
    release requests to only devices which causing the pressure.  Also, the
    callback could be extended to handle not only memory, but general
    resources.  Nevertheless, this version of the implementation defers such
    sophisticated goals as a future work.
    
    Reviewed-by: Juergen Gross <[email protected]>
    Reviewed-by: Roger Pau Monné <[email protected]>
    Signed-off-by: SeongJae Park <[email protected]>
    Signed-off-by: Boris Ostrovsky <[email protected]>
    Stable-dep-of: afc545da381b ("xen: Fix the issue of resource not being properly released in xenbus_dev_probe()")
    Signed-off-by: Sasha Levin <[email protected]>

xenbus/backend: Protect xenbus callback with lock [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Mon Jan 27 09:18:09 2020 +0100

    xenbus/backend: Protect xenbus callback with lock
    
    [ Upstream commit 060eabe8fbe726aca341b518366da4d79e338100 ]
    
    A driver's 'reclaim_memory' callback can race with 'probe' or 'remove'
    because it will be called whenever memory pressure is detected.  To
    avoid such race, this commit embeds a spinlock in each 'xenbus_device'
    and make 'xenbus' to hold the lock while the corresponded callbacks are
    running.
    
    Reviewed-by: Juergen Gross <[email protected]>
    Signed-off-by: SeongJae Park <[email protected]>
    Signed-off-by: Boris Ostrovsky <[email protected]>
    Stable-dep-of: afc545da381b ("xen: Fix the issue of resource not being properly released in xenbus_dev_probe()")
    Signed-off-by: Sasha Levin <[email protected]>