Changelog in Linux kernel 6.6.80

 
acct: block access to kernel internal filesystems [+ + +]
Author: Christian Brauner <brauner@kernel.org>
Date:   Tue Feb 11 18:16:00 2025 +0100

    acct: block access to kernel internal filesystems
    
    commit 890ed45bde808c422c3c27d3285fc45affa0f930 upstream.
    
    There's no point in allowing anything kernel internal nor procfs or
    sysfs.
    
    Link: https://lore.kernel.org/r/20250127091811.3183623-1-quzicheng@huawei.com
    Link: https://lore.kernel.org/r/20250211-work-acct-v1-2-1c16aecab8b3@kernel.org
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reviewed-by: Amir Goldstein <amir73il@gmail.com>
    Reported-by: Zicheng Qu <quzicheng@huawei.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

acct: perform last write from workqueue [+ + +]
Author: Christian Brauner <brauner@kernel.org>
Date:   Tue Feb 11 18:15:59 2025 +0100

    acct: perform last write from workqueue
    
    commit 56d5f3eba3f5de0efdd556de4ef381e109b973a9 upstream.
    
    In [1] it was reported that the acct(2) system call can be used to
    trigger NULL deref in cases where it is set to write to a file that
    triggers an internal lookup. This can e.g., happen when pointing acc(2)
    to /sys/power/resume. At the point the where the write to this file
    happens the calling task has already exited and called exit_fs(). A
    lookup will thus trigger a NULL-deref when accessing current->fs.
    
    Reorganize the code so that the the final write happens from the
    workqueue but with the caller's credentials. This preserves the
    (strange) permission model and has almost no regression risk.
    
    This api should stop to exist though.
    
    Link: https://lore.kernel.org/r/20250127091811.3183623-1-quzicheng@huawei.com [1]
    Link: https://lore.kernel.org/r/20250211-work-acct-v1-1-1c16aecab8b3@kernel.org
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Zicheng Qu <quzicheng@huawei.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ALSA: hda/cirrus: Correct the full scale volume set logic [+ + +]
Author: Vitaly Rodionov <vitalyr@opensource.cirrus.com>
Date:   Fri Feb 14 21:07:28 2025 +0000

    ALSA: hda/cirrus: Correct the full scale volume set logic
    
    [ Upstream commit 08b613b9e2ba431db3bd15cb68ca72472a50ef5c ]
    
    This patch corrects the full-scale volume setting logic. On certain
    platforms, the full-scale volume bit is required. The current logic
    mistakenly sets this bit and incorrectly clears reserved bit 0, causing
    the headphone output to be muted.
    
    Fixes: 342b6b610ae2 ("ALSA: hda/cs8409: Fix Full Scale Volume setting for all variants")
    Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com>
    Link: https://patch.msgid.link/20250214210736.30814-1-vitalyr@opensource.cirrus.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/conexant: Add quirk for HP ProBook 450 G4 mute LED [+ + +]
Author: John Veness <john-linux@pelago.org.uk>
Date:   Mon Feb 17 12:15:50 2025 +0000

    ALSA: hda/conexant: Add quirk for HP ProBook 450 G4 mute LED
    
    commit 6d1f86610f23b0bc334d6506a186f21a98f51392 upstream.
    
    Allows the LED on the dedicated mute button on the HP ProBook 450 G4
    laptop to change colour correctly.
    
    Signed-off-by: John Veness <john-linux@pelago.org.uk>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/2fb55d48-6991-4a42-b591-4c78f2fad8d7@pelago.org.uk
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/realtek: Fixup ALC225 depop procedure [+ + +]
Author: Kailang Yang <kailang@realtek.com>
Date:   Wed Feb 12 14:40:46 2025 +0800

    ALSA: hda/realtek: Fixup ALC225 depop procedure
    
    [ Upstream commit 174448badb4409491bfba2e6b46f7aa078741c5e ]
    
    Headset MIC will no function when power_save=0.
    
    Fixes: 1fd50509fe14 ("ALSA: hda/realtek: Update ALC225 depop procedure")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219743
    Signed-off-by: Kailang Yang <kailang@realtek.com>
    Link: https://lore.kernel.org/0474a095ab0044d0939ec4bf4362423d@realtek.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda: Add error check for snd_ctl_rename_id() in snd_hda_create_dig_out_ctls() [+ + +]
Author: Wentao Liang <vulab@iscas.ac.cn>
Date:   Thu Feb 13 15:45:43 2025 +0800

    ALSA: hda: Add error check for snd_ctl_rename_id() in snd_hda_create_dig_out_ctls()
    
    commit 822b7ec657e99b44b874e052d8540d8b54fe8569 upstream.
    
    Check the return value of snd_ctl_rename_id() in
    snd_hda_create_dig_out_ctls(). Ensure that failures
    are properly handled.
    
    [ Note: the error cannot happen practically because the only error
      condition in snd_ctl_rename_id() is the missing ID, but this is a
      rename, hence it must be present.  But for the code consistency,
      it's safer to have always the proper return check -- tiwai ]
    
    Fixes: 5c219a340850 ("ALSA: hda: Fix kctl->id initialization")
    Cc: stable@vger.kernel.org # 6.4+
    Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
    Link: https://patch.msgid.link/20250213074543.1620-1-vulab@iscas.ac.cn
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: seq: Drop UMP events when no UMP-conversion is set [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Mon Feb 17 18:00:30 2025 +0100

    ALSA: seq: Drop UMP events when no UMP-conversion is set
    
    [ Upstream commit e77aa4b2eaa7fb31b2a7a50214ecb946b2a8b0f6 ]
    
    When a destination client is a user client in the legacy MIDI mode and
    it sets the no-UMP-conversion flag, currently the all UMP events are
    still passed as-is.  But this may confuse the user-space, because the
    event packet size is different from the legacy mode.
    
    Since we cannot handle UMP events in user clients unless it's running
    in the UMP client mode, we should filter out those events instead of
    accepting blindly.  This patch addresses it by slightly adjusting the
    conditions for UMP event handling at the event delivery time.
    
    Fixes: 329ffe11a014 ("ALSA: seq: Allow suppressing UMP conversions")
    Link: https://lore.kernel.org/b77a2cd6-7b59-4eb0-a8db-22d507d3af5f@gmail.com
    Link: https://patch.msgid.link/20250217170034.21930-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64: dts: mediatek: mt8183: Disable DSI display output by default [+ + +]
Author: Chen-Yu Tsai <wenst@chromium.org>
Date:   Fri Oct 25 15:56:28 2024 +0800

    arm64: dts: mediatek: mt8183: Disable DSI display output by default
    
    [ Upstream commit 26f6e91fa29a58fdc76b47f94f8f6027944a490c ]
    
    Most SoC dtsi files have the display output interfaces disabled by
    default, and only enabled on boards that utilize them. The MT8183
    has it backwards: the display outputs are left enabled by default,
    and only disabled at the board level.
    
    Reverse the situation for the DSI output so that it follows the
    normal scheme. For ease of backporting the DPI output is handled
    in a separate patch.
    
    Fixes: 88ec840270e6 ("arm64: dts: mt8183: Add dsi node")
    Fixes: 19b6403f1e2a ("arm64: dts: mt8183: add mt8183 pumpkin board")
    Cc: stable@vger.kernel.org
    Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
    Reviewed-by: Fei Shao <fshao@chromium.org>
    Link: https://lore.kernel.org/r/20241025075630.3917458-2-wenst@chromium.org
    Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: sm8450: add missing qcom,non-secure-domain property [+ + +]
Author: Neil Armstrong <neil.armstrong@linaro.org>
Date:   Tue Feb 27 13:53:04 2024 +0100

    arm64: dts: qcom: sm8450: add missing qcom,non-secure-domain property
    
    [ Upstream commit 033fbfa0eb60e519f50e97ef93baec270cd28a88 ]
    
    By default the DSP domains are non secure, add the missing
    qcom,non-secure-domain property to mark them as non-secure.
    
    Fixes: 91d70eb70867 ("arm64: dts: qcom: sm8450: add fastrpc nodes")
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20240227-topic-sm8x50-upstream-fastrpc-non-secure-domain-v1-1-15c4c864310f@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Stable-dep-of: 13c96bee5d5e ("arm64: dts: qcom: sm8450: Fix ADSP memory base and length")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: sm8450: Fix ADSP memory base and length [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Fri Dec 13 15:53:53 2024 +0100

    arm64: dts: qcom: sm8450: Fix ADSP memory base and length
    
    [ Upstream commit 13c96bee5d5e5b61a9d8d000c9bb37bb9a2a0551 ]
    
    The address space in ADSP PAS (Peripheral Authentication Service)
    remoteproc node should point to the QDSP PUB address space
    (QDSP6...SS_PUB): 0x0300_0000 with length of 0x10000, which also matches
    downstream DTS.  0x3000_0000, value used so far, was in datasheet is the
    region of CDSP.
    
    Correct the base address and length, which also moves the node to
    different place to keep things sorted by unit address.  The diff looks
    big, but only the unit address and "reg" property were changed.  This
    should have no functional impact on Linux users, because PAS loader does
    not use this address space at all.
    
    Fixes: 1172729576fb ("arm64: dts: qcom: sm8450: Add remoteproc enablers and instances")
    Cc: stable@vger.kernel.org
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20241213-dts-qcom-cdsp-mpss-base-address-v3-4-2e0036fccd8d@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: sm8550: Add dma-coherent property [+ + +]
Author: Ling Xu <quic_lxu5@quicinc.com>
Date:   Thu Jan 25 15:54:12 2024 +0530

    arm64: dts: qcom: sm8550: Add dma-coherent property
    
    [ Upstream commit 4a03b85b8491d8bfe84a26ff979507b6ae7122c1 ]
    
    Add dma-coherent property to fastRPC context bank nodes to pass dma
    sequence test in fastrpc sanity test, ensure that data integrity is
    maintained during DMA operations.
    
    Signed-off-by: Ling Xu <quic_lxu5@quicinc.com>
    Link: https://lore.kernel.org/r/20240125102413.3016-2-quic_lxu5@quicinc.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Stable-dep-of: a6a8f54bc2af ("arm64: dts: qcom: sm8550: Fix ADSP memory base and length")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: sm8550: add missing qcom,non-secure-domain property [+ + +]
Author: Neil Armstrong <neil.armstrong@linaro.org>
Date:   Tue Feb 27 13:53:05 2024 +0100

    arm64: dts: qcom: sm8550: add missing qcom,non-secure-domain property
    
    [ Upstream commit 49c50ad9e6cbaa6a3da59cdd85d4ffb354ef65f4 ]
    
    By default the DSP domains are non secure, add the missing
    qcom,non-secure-domain property to mark them as non-secure.
    
    Fixes: d0c061e366ed ("arm64: dts: qcom: sm8550: add adsp, cdsp & mdss nodes")
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20240227-topic-sm8x50-upstream-fastrpc-non-secure-domain-v1-2-15c4c864310f@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Stable-dep-of: a6a8f54bc2af ("arm64: dts: qcom: sm8550: Fix ADSP memory base and length")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: sm8550: Fix ADSP memory base and length [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Fri Dec 13 15:53:56 2024 +0100

    arm64: dts: qcom: sm8550: Fix ADSP memory base and length
    
    [ Upstream commit a6a8f54bc2af555738322783ba1e990c2ae7f443 ]
    
    The address space in ADSP PAS (Peripheral Authentication Service)
    remoteproc node should point to the QDSP PUB address space
    (QDSP6...SS_PUB): 0x0680_0000 with length of 0x10000.
    
    0x3000_0000, value used so far, is the main region of CDSP.  Downstream
    DTS uses 0x0300_0000, which is oddly similar to 0x3000_0000, yet quite
    different and points to unused area.
    
    Correct the base address and length, which also moves the node to
    different place to keep things sorted by unit address.  The diff looks
    big, but only the unit address and "reg" property were changed.  This
    should have no functional impact on Linux users, because PAS loader does
    not use this address space at all.
    
    Fixes: d0c061e366ed ("arm64: dts: qcom: sm8550: add adsp, cdsp & mdss nodes")
    Cc: stable@vger.kernel.org
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20241213-dts-qcom-cdsp-mpss-base-address-v3-7-2e0036fccd8d@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: rockchip: change eth phy mode to rgmii-id for orangepi r1 plus lts [+ + +]
Author: Tianling Shen <cnsztl@gmail.com>
Date:   Sun Jan 19 17:11:54 2025 +0800

    arm64: dts: rockchip: change eth phy mode to rgmii-id for orangepi r1 plus lts
    
    commit a6a7cba17c544fb95d5a29ab9d9ed4503029cb29 upstream.
    
    In general the delay should be added by the PHY instead of the MAC,
    and this improves network stability on some boards which seem to
    need different delay.
    
    Fixes: 387b3bbac5ea ("arm64: dts: rockchip: Add Xunlong OrangePi R1 Plus LTS")
    Cc: stable@vger.kernel.org # 6.6+
    Signed-off-by: Tianling Shen <cnsztl@gmail.com>
    Link: https://lore.kernel.org/r/20250119091154.1110762-1-cnsztl@gmail.com
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    [Fix conflicts due to missing dtsi conversion]
    Signed-off-by: Tianling Shen <cnsztl@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: mte: Do not allow PROT_MTE on MAP_HUGETLB user mappings [+ + +]
Author: Catalin Marinas <catalin.marinas@arm.com>
Date:   Thu Feb 20 15:58:01 2025 +0000

    arm64: mte: Do not allow PROT_MTE on MAP_HUGETLB user mappings
    
    PROT_MTE (memory tagging extensions) is not supported on all user mmap()
    types for various reasons (memory attributes, backing storage, CoW
    handling). The arm64 arch_validate_flags() function checks whether the
    VM_MTE_ALLOWED flag has been set for a vma during mmap(), usually by
    arch_calc_vm_flag_bits().
    
    Linux prior to 6.13 does not support PROT_MTE hugetlb mappings. This was
    added by commit 25c17c4b55de ("hugetlb: arm64: add mte support").
    However, earlier kernels inadvertently set VM_MTE_ALLOWED on
    (MAP_ANONYMOUS | MAP_HUGETLB) mappings by only checking for
    MAP_ANONYMOUS.
    
    Explicitly check MAP_HUGETLB in arch_calc_vm_flag_bits() and avoid
    setting VM_MTE_ALLOWED for such mappings.
    
    Fixes: 9f3419315f3c ("arm64: mte: Add PROT_MTE support to mmap() and mprotect()")
    Cc: <stable@vger.kernel.org> # 5.10.x-6.12.x
    Reported-by: Naresh Kamboju <naresh.kamboju@linaro.org>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
arp: switch to dev_getbyhwaddr() in arp_req_set_public() [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Tue Feb 18 05:49:31 2025 -0800

    arp: switch to dev_getbyhwaddr() in arp_req_set_public()
    
    [ Upstream commit 4eae0ee0f1e6256d0b0b9dd6e72f1d9cf8f72e08 ]
    
    The arp_req_set_public() function is called with the rtnl lock held,
    which provides enough synchronization protection. This makes the RCU
    variant of dev_getbyhwaddr() unnecessary. Switch to using the simpler
    dev_getbyhwaddr() function since we already have the required rtnl
    locking.
    
    This change helps maintain consistency in the networking code by using
    the appropriate helper function for the existing locking context.
    Since we're not holding the RCU read lock in arp_req_set_public()
    existing code could trigger false positive locking warnings.
    
    Fixes: 941666c2e3e0 ("net: RCU conversion of dev_getbyhwaddr() and arp_ioctl()")
    Suggested-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Link: https://patch.msgid.link/20250218-arm_fix_selftest-v5-2-d3d6892db9e1@debian.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ASoC: fsl_micfil: Enable default case in micfil_set_quality() [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Thu Jan 16 06:24:36 2025 -0800

    ASoC: fsl_micfil: Enable default case in micfil_set_quality()
    
    commit a8c9a453387640dbe45761970f41301a6985e7fa upstream.
    
    If 'micfil->quality' received from micfil_quality_set() somehow ends
    up with an unpredictable value, switch() operator will fail to
    initialize local variable qsel before regmap_update_bits() tries
    to utilize it.
    
    While it is unlikely, play it safe and enable a default case that
    returns -EINVAL error.
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    Fixes: bea1d61d5892 ("ASoC: fsl_micfil: rework quality setting")
    Cc: stable@vger.kernel.org
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Link: https://patch.msgid.link/20250116142436.22389-1-n.zhandarovich@fintech.ru
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: renesas: rz-ssi: Add a check for negative sample_space [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Wed Jan 8 12:28:46 2025 +0300

    ASoC: renesas: rz-ssi: Add a check for negative sample_space
    
    [ Upstream commit 82a0a3e6f8c02b3236b55e784a083fa4ee07c321 ]
    
    My static checker rule complains about this code.  The concern is that
    if "sample_space" is negative then the "sample_space >= runtime->channels"
    condition will not work as intended because it will be type promoted to a
    high unsigned int value.
    
    strm->fifo_sample_size is SSI_FIFO_DEPTH (32).  The SSIFSR_TDC_MASK is
    0x3f.  Without any further context it does seem like a reasonable warning
    and it can't hurt to add a check for negatives.
    
    Cc: stable@vger.kernel.org
    Fixes: 03e786bd4341 ("ASoC: sh: Add RZ/G2L SSIF-2 driver")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://patch.msgid.link/e07c3dc5-d885-4b04-a742-71f42243f4fd@stanley.mountain
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: rockchip: i2s-tdm: fix shift config for SND_SOC_DAIFMT_DSP_[AB] [+ + +]
Author: John Keeping <jkeeping@inmusicbrands.com>
Date:   Tue Feb 4 16:13:10 2025 +0000

    ASoC: rockchip: i2s-tdm: fix shift config for SND_SOC_DAIFMT_DSP_[AB]
    
    [ Upstream commit 6b24e67b4056ba83b1e95e005b7e50fdb1cc6cf4 ]
    
    Commit 2f45a4e289779 ("ASoC: rockchip: i2s_tdm: Fixup config for
    SND_SOC_DAIFMT_DSP_A/B") applied a partial change to fix the
    configuration for DSP A and DSP B formats.
    
    The shift control also needs updating to set the correct offset for
    frame data compared to LRCK.  Set the correct values.
    
    Fixes: 081068fd64140 ("ASoC: rockchip: add support for i2s-tdm controller")
    Signed-off-by: John Keeping <jkeeping@inmusicbrands.com>
    Link: https://patch.msgid.link/20250204161311.2117240-1-jkeeping@inmusicbrands.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: SOF: pcm: Clear the susbstream pointer to NULL on close [+ + +]
Author: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Date:   Wed Feb 5 15:52:32 2025 +0200

    ASoC: SOF: pcm: Clear the susbstream pointer to NULL on close
    
    commit 46c7b901e2a03536df5a3cb40b3b26e2be505df6 upstream.
    
    The spcm->stream[substream->stream].substream is set during open and was
    left untouched. After the first PCM stream it will never be NULL and we
    have code which checks for substream NULLity as indication if the stream is
    active or not.
    For the compressed cstream pointer the same has been done, this change will
    correct the handling of PCM streams.
    
    Fixes: 090349a9feba ("ASoC: SOF: Add support for compress API for stream data/offset")
    Cc: stable@vger.kernel.org
    Reported-by: Curtis Malainey <cujomalainey@chromium.org>
    Closes: https://github.com/thesofproject/linux/pull/5214
    Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com>
    Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
    Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
    Reviewed-by: Curtis Malainey <cujomalainey@chromium.org>
    Link: https://patch.msgid.link/20250205135232.19762-3-peter.ujfalusi@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: SOF: stream-ipc: Check for cstream nullity in sof_ipc_msg_data() [+ + +]
Author: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Date:   Wed Feb 5 15:52:31 2025 +0200

    ASoC: SOF: stream-ipc: Check for cstream nullity in sof_ipc_msg_data()
    
    commit d8d99c3b5c485f339864aeaa29f76269cc0ea975 upstream.
    
    The nullity of sps->cstream should be checked similarly as it is done in
    sof_set_stream_data_offset() function.
    Assuming that it is not NULL if sps->stream is NULL is incorrect and can
    lead to NULL pointer dereference.
    
    Fixes: 090349a9feba ("ASoC: SOF: Add support for compress API for stream data/offset")
    Cc: stable@vger.kernel.org
    Reported-by: Curtis Malainey <cujomalainey@chromium.org>
    Closes: https://github.com/thesofproject/linux/pull/5214
    Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com>
    Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
    Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
    Reviewed-by: Curtis Malainey <cujomalainey@chromium.org>
    Link: https://patch.msgid.link/20250205135232.19762-2-peter.ujfalusi@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Bluetooth: qca: Fix poor RF performance for WCN6855 [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Mon Jan 13 22:43:23 2025 +0800

    Bluetooth: qca: Fix poor RF performance for WCN6855
    
    [ Upstream commit a2fad248947d702ed3dcb52b8377c1a3ae201e44 ]
    
    For WCN6855, board ID specific NVM needs to be downloaded once board ID
    is available, but the default NVM is always downloaded currently.
    
    The wrong NVM causes poor RF performance, and effects user experience
    for several types of laptop with WCN6855 on the market.
    
    Fix by downloading board ID specific NVM if board ID is available.
    
    Fixes: 095327fede00 ("Bluetooth: hci_qca: Add support for QTI Bluetooth chip wcn6855")
    Cc: stable@vger.kernel.org # 6.4
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Tested-by: Johan Hovold <johan+linaro@kernel.org>
    Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
    Tested-by: Steev Klimaszewski <steev@kali.org> #Thinkpad X13s
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: qca: Support downloading board id specific NVM for WCN7850 [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Wed Apr 17 15:49:34 2024 +0800

    Bluetooth: qca: Support downloading board id specific NVM for WCN7850
    
    [ Upstream commit e41137d8bd1a8e8bab8dcbfe3ec056418db3df18 ]
    
    Download board id specific NVM instead of default for WCN7850 if board id
    is available.
    
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Stable-dep-of: a2fad248947d ("Bluetooth: qca: Fix poor RF performance for WCN6855")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: qca: Update firmware-name to support board specific nvm [+ + +]
Author: Cheng Jiang <quic_chejiang@quicinc.com>
Date:   Tue Jan 7 17:26:49 2025 +0800

    Bluetooth: qca: Update firmware-name to support board specific nvm
    
    [ Upstream commit a4c5a468c6329bde7dfd46bacff2cbf5f8a8152e ]
    
    Different connectivity boards may be attached to the same platform. For
    example, QCA6698-based boards can support either a two-antenna or
    three-antenna solution, both of which work on the sa8775p-ride platform.
    Due to differences in connectivity boards and variations in RF
    performance from different foundries, different NVM configurations are
    used based on the board ID.
    
    Therefore, in the firmware-name property, if the NVM file has an
    extension, the NVM file will be used. Otherwise, the system will first
    try the .bNN (board ID) file, and if that fails, it will fall back to
    the .bin file.
    
    Possible configurations:
    firmware-name = "QCA6698/hpnv21";
    firmware-name = "QCA6698/hpnv21.bin";
    
    Signed-off-by: Cheng Jiang <quic_chejiang@quicinc.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Stable-dep-of: a2fad248947d ("Bluetooth: qca: Fix poor RF performance for WCN6855")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf, test_run: Fix use-after-free issue in eth_skb_pkt_type() [+ + +]
Author: Shigeru Yoshida <syoshida@redhat.com>
Date:   Wed Jan 22 00:06:42 2025 +0900

    bpf, test_run: Fix use-after-free issue in eth_skb_pkt_type()
    
    [ Upstream commit 6b3d638ca897e099fa99bd6d02189d3176f80a47 ]
    
    KMSAN reported a use-after-free issue in eth_skb_pkt_type()[1]. The
    cause of the issue was that eth_skb_pkt_type() accessed skb's data
    that didn't contain an Ethernet header. This occurs when
    bpf_prog_test_run_xdp() passes an invalid value as the user_data
    argument to bpf_test_init().
    
    Fix this by returning an error when user_data is less than ETH_HLEN in
    bpf_test_init(). Additionally, remove the check for "if (user_size >
    size)" as it is unnecessary.
    
    [1]
    BUG: KMSAN: use-after-free in eth_skb_pkt_type include/linux/etherdevice.h:627 [inline]
    BUG: KMSAN: use-after-free in eth_type_trans+0x4ee/0x980 net/ethernet/eth.c:165
     eth_skb_pkt_type include/linux/etherdevice.h:627 [inline]
     eth_type_trans+0x4ee/0x980 net/ethernet/eth.c:165
     __xdp_build_skb_from_frame+0x5a8/0xa50 net/core/xdp.c:635
     xdp_recv_frames net/bpf/test_run.c:272 [inline]
     xdp_test_run_batch net/bpf/test_run.c:361 [inline]
     bpf_test_run_xdp_live+0x2954/0x3330 net/bpf/test_run.c:390
     bpf_prog_test_run_xdp+0x148e/0x1b10 net/bpf/test_run.c:1318
     bpf_prog_test_run+0x5b7/0xa30 kernel/bpf/syscall.c:4371
     __sys_bpf+0x6a6/0xe20 kernel/bpf/syscall.c:5777
     __do_sys_bpf kernel/bpf/syscall.c:5866 [inline]
     __se_sys_bpf kernel/bpf/syscall.c:5864 [inline]
     __x64_sys_bpf+0xa4/0xf0 kernel/bpf/syscall.c:5864
     x64_sys_call+0x2ea0/0x3d90 arch/x86/include/generated/asm/syscalls_64.h:322
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xd9/0x1d0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Uninit was created at:
     free_pages_prepare mm/page_alloc.c:1056 [inline]
     free_unref_page+0x156/0x1320 mm/page_alloc.c:2657
     __free_pages+0xa3/0x1b0 mm/page_alloc.c:4838
     bpf_ringbuf_free kernel/bpf/ringbuf.c:226 [inline]
     ringbuf_map_free+0xff/0x1e0 kernel/bpf/ringbuf.c:235
     bpf_map_free kernel/bpf/syscall.c:838 [inline]
     bpf_map_free_deferred+0x17c/0x310 kernel/bpf/syscall.c:862
     process_one_work kernel/workqueue.c:3229 [inline]
     process_scheduled_works+0xa2b/0x1b60 kernel/workqueue.c:3310
     worker_thread+0xedf/0x1550 kernel/workqueue.c:3391
     kthread+0x535/0x6b0 kernel/kthread.c:389
     ret_from_fork+0x6e/0x90 arch/x86/kernel/process.c:147
     ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
    
    CPU: 1 UID: 0 PID: 17276 Comm: syz.1.16450 Not tainted 6.12.0-05490-g9bb88c659673 #8
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-3.fc41 04/01/2014
    
    Fixes: be3d72a2896c ("bpf: move user_size out of bpf_test_init")
    Reported-by: syzkaller <syzkaller@googlegroups.com>
    Suggested-by: Martin KaFai Lau <martin.lau@linux.dev>
    Signed-off-by: Shigeru Yoshida <syoshida@redhat.com>
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Acked-by: Stanislav Fomichev <sdf@fomichev.me>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://patch.msgid.link/20250121150643.671650-1-syoshida@redhat.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: avoid holding freeze_mutex during mmap operation [+ + +]
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Tue Jan 28 17:22:46 2025 -0800

    bpf: avoid holding freeze_mutex during mmap operation
    
    [ Upstream commit bc27c52eea189e8f7492d40739b7746d67b65beb ]
    
    We use map->freeze_mutex to prevent races between map_freeze() and
    memory mapping BPF map contents with writable permissions. The way we
    naively do this means we'll hold freeze_mutex for entire duration of all
    the mm and VMA manipulations, which is completely unnecessary. This can
    potentially also lead to deadlocks, as reported by syzbot in [0].
    
    So, instead, hold freeze_mutex only during writeability checks, bump
    (proactively) "write active" count for the map, unlock the mutex and
    proceed with mmap logic. And only if something went wrong during mmap
    logic, then undo that "write active" counter increment.
    
      [0] https://lore.kernel.org/bpf/678dcbc9.050a0220.303755.0066.GAE@google.com/
    
    Fixes: fc9702273e2e ("bpf: Add mmap() support for BPF_MAP_TYPE_ARRAY")
    Reported-by: syzbot+4dc041c686b7c816a71e@syzkaller.appspotmail.com
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20250129012246.1515826-2-andrii@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Disable non stream socket for strparser [+ + +]
Author: Jiayuan Chen <mrpre@163.com>
Date:   Wed Jan 22 18:09:15 2025 +0800

    bpf: Disable non stream socket for strparser
    
    [ Upstream commit 5459cce6bf49e72ee29be21865869c2ac42419f5 ]
    
    Currently, only TCP supports strparser, but sockmap doesn't intercept
    non-TCP connections to attach strparser. For example, with UDP, although
    the read/write handlers are replaced, strparser is not executed due to
    the lack of a read_sock operation.
    
    Furthermore, in udp_bpf_recvmsg(), it checks whether the psock has data,
    and if not, it falls back to the native UDP read interface, making
    UDP + strparser appear to read correctly. According to its commit history,
    this behavior is unexpected.
    
    Moreover, since UDP lacks the concept of streams, we intercept it directly.
    
    Fixes: 1fa1fe8ff161 ("bpf, sockmap: Test shutdown() correctly exits epoll and recv()=0")
    Signed-off-by: Jiayuan Chen <mrpre@163.com>
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Acked-by: Jakub Sitnicki <jakub@cloudflare.com>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://patch.msgid.link/20250122100917.49845-4-mrpre@163.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix deadlock when freeing cgroup storage [+ + +]
Author: Abel Wu <wuyun.abel@bytedance.com>
Date:   Sat Dec 21 14:10:16 2024 +0800

    bpf: Fix deadlock when freeing cgroup storage
    
    [ Upstream commit c78f4afbd962f43a3989f45f3ca04300252b19b5 ]
    
    The following commit
    bc235cdb423a ("bpf: Prevent deadlock from recursive bpf_task_storage_[get|delete]")
    first introduced deadlock prevention for fentry/fexit programs attaching
    on bpf_task_storage helpers. That commit also employed the logic in map
    free path in its v6 version.
    
    Later bpf_cgrp_storage was first introduced in
    c4bcfb38a95e ("bpf: Implement cgroup storage available to non-cgroup-attached bpf progs")
    which faces the same issue as bpf_task_storage, instead of its busy
    counter, NULL was passed to bpf_local_storage_map_free() which opened
    a window to cause deadlock:
    
            <TASK>
                    (acquiring local_storage->lock)
            _raw_spin_lock_irqsave+0x3d/0x50
            bpf_local_storage_update+0xd1/0x460
            bpf_cgrp_storage_get+0x109/0x130
            bpf_prog_a4d4a370ba857314_cgrp_ptr+0x139/0x170
            ? __bpf_prog_enter_recur+0x16/0x80
            bpf_trampoline_6442485186+0x43/0xa4
            cgroup_storage_ptr+0x9/0x20
                    (holding local_storage->lock)
            bpf_selem_unlink_storage_nolock.constprop.0+0x135/0x160
            bpf_selem_unlink_storage+0x6f/0x110
            bpf_local_storage_map_free+0xa2/0x110
            bpf_map_free_deferred+0x5b/0x90
            process_one_work+0x17c/0x390
            worker_thread+0x251/0x360
            kthread+0xd2/0x100
            ret_from_fork+0x34/0x50
            ret_from_fork_asm+0x1a/0x30
            </TASK>
    
    Progs:
     - A: SEC("fentry/cgroup_storage_ptr")
       - cgid (BPF_MAP_TYPE_HASH)
            Record the id of the cgroup the current task belonging
            to in this hash map, using the address of the cgroup
            as the map key.
       - cgrpa (BPF_MAP_TYPE_CGRP_STORAGE)
            If current task is a kworker, lookup the above hash
            map using function parameter @owner as the key to get
            its corresponding cgroup id which is then used to get
            a trusted pointer to the cgroup through
            bpf_cgroup_from_id(). This trusted pointer can then
            be passed to bpf_cgrp_storage_get() to finally trigger
            the deadlock issue.
     - B: SEC("tp_btf/sys_enter")
       - cgrpb (BPF_MAP_TYPE_CGRP_STORAGE)
            The only purpose of this prog is to fill Prog A's
            hash map by calling bpf_cgrp_storage_get() for as
            many userspace tasks as possible.
    
    Steps to reproduce:
     - Run A;
     - while (true) { Run B; Destroy B; }
    
    Fix this issue by passing its busy counter to the free procedure so
    it can be properly incremented before storage/smap locking.
    
    Fixes: c4bcfb38a95e ("bpf: Implement cgroup storage available to non-cgroup-attached bpf progs")
    Signed-off-by: Abel Wu <wuyun.abel@bytedance.com>
    Acked-by: Martin KaFai Lau <martin.lau@kernel.org>
    Link: https://lore.kernel.org/r/20241221061018.37717-1-wuyun.abel@bytedance.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix wrong copied_seq calculation [+ + +]
Author: Jiayuan Chen <mrpre@163.com>
Date:   Wed Jan 22 18:09:14 2025 +0800

    bpf: Fix wrong copied_seq calculation
    
    [ Upstream commit 36b62df5683c315ba58c950f1a9c771c796c30ec ]
    
    'sk->copied_seq' was updated in the tcp_eat_skb() function when the action
    of a BPF program was SK_REDIRECT. For other actions, like SK_PASS, the
    update logic for 'sk->copied_seq' was moved to tcp_bpf_recvmsg_parser()
    to ensure the accuracy of the 'fionread' feature.
    
    It works for a single stream_verdict scenario, as it also modified
    sk_data_ready->sk_psock_verdict_data_ready->tcp_read_skb
    to remove updating 'sk->copied_seq'.
    
    However, for programs where both stream_parser and stream_verdict are
    active (strparser purpose), tcp_read_sock() was used instead of
    tcp_read_skb() (sk_data_ready->strp_data_ready->tcp_read_sock).
    tcp_read_sock() now still updates 'sk->copied_seq', leading to duplicate
    updates.
    
    In summary, for strparser + SK_PASS, copied_seq is redundantly calculated
    in both tcp_read_sock() and tcp_bpf_recvmsg_parser().
    
    The issue causes incorrect copied_seq calculations, which prevent
    correct data reads from the recv() interface in user-land.
    
    We do not want to add new proto_ops to implement a new version of
    tcp_read_sock, as this would introduce code complexity [1].
    
    We could have added noack and copied_seq to desc, and then called
    ops->read_sock. However, unfortunately, other modules didn’t fully
    initialize desc to zero. So, for now, we are directly calling
    tcp_read_sock_noack() in tcp_bpf.c.
    
    [1]: https://lore.kernel.org/bpf/20241218053408.437295-1-mrpre@163.com
    
    Fixes: e5c6de5fa025 ("bpf, sockmap: Incorrectly handling copied_seq")
    Suggested-by: Jakub Sitnicki <jakub@cloudflare.com>
    Signed-off-by: Jiayuan Chen <mrpre@163.com>
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Reviewed-by: Jakub Sitnicki <jakub@cloudflare.com>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://patch.msgid.link/20250122100917.49845-3-mrpre@163.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: skip non exist keys in generic_map_lookup_batch [+ + +]
Author: Yan Zhai <yan@cloudflare.com>
Date:   Sun Feb 9 23:22:35 2025 -0800

    bpf: skip non exist keys in generic_map_lookup_batch
    
    [ Upstream commit 5644c6b50ffee0a56c1e01430a8c88e34decb120 ]
    
    The generic_map_lookup_batch currently returns EINTR if it fails with
    ENOENT and retries several times on bpf_map_copy_value. The next batch
    would start from the same location, presuming it's a transient issue.
    This is incorrect if a map can actually have "holes", i.e.
    "get_next_key" can return a key that does not point to a valid value. At
    least the array of maps type may contain such holes legitly. Right now
    these holes show up, generic batch lookup cannot proceed any more. It
    will always fail with EINTR errors.
    
    Rather, do not retry in generic_map_lookup_batch. If it finds a non
    existing element, skip to the next key. This simple solution comes with
    a price that transient errors may not be recovered, and the iteration
    might cycle back to the first key under parallel deletion. For example,
    Hou Tao <houtao@huaweicloud.com> pointed out a following scenario:
    
    For LPM trie map:
    (1) ->map_get_next_key(map, prev_key, key) returns a valid key
    
    (2) bpf_map_copy_value() return -ENOMENT
    It means the key must be deleted concurrently.
    
    (3) goto next_key
    It swaps the prev_key and key
    
    (4) ->map_get_next_key(map, prev_key, key) again
    prev_key points to a non-existing key, for LPM trie it will treat just
    like prev_key=NULL case, the returned key will be duplicated.
    
    With the retry logic, the iteration can continue to the key next to the
    deleted one. But if we directly skip to the next key, the iteration loop
    would restart from the first key for the lpm_trie type.
    
    However, not all races may be recovered. For example, if current key is
    deleted after instead of before bpf_map_copy_value, or if the prev_key
    also gets deleted, then the loop will still restart from the first key
    for lpm_tire anyway. For generic lookup it might be better to stay
    simple, i.e. just skip to the next key. To guarantee that the output
    keys are not duplicated, it is better to implement map type specific
    batch operations, which can properly lock the trie and synchronize with
    concurrent mutators.
    
    Fixes: cb4d03ab499d ("bpf: Add generic support for lookup batch op")
    Closes: https://lore.kernel.org/bpf/Z6JXtA1M5jAZx8xD@debian.debian/
    Signed-off-by: Yan Zhai <yan@cloudflare.com>
    Acked-by: Hou Tao <houtao1@huawei.com>
    Link: https://lore.kernel.org/r/85618439eea75930630685c467ccefeac0942e2b.1739171594.git.yan@cloudflare.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: unify VM_WRITE vs VM_MAYWRITE use in BPF map mmaping logic [+ + +]
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Tue Jan 28 17:22:45 2025 -0800

    bpf: unify VM_WRITE vs VM_MAYWRITE use in BPF map mmaping logic
    
    [ Upstream commit 98671a0fd1f14e4a518ee06b19037c20014900eb ]
    
    For all BPF maps we ensure that VM_MAYWRITE is cleared when
    memory-mapping BPF map contents as initially read-only VMA. This is
    because in some cases BPF verifier relies on the underlying data to not
    be modified afterwards by user space, so once something is mapped
    read-only, it shouldn't be re-mmap'ed as read-write.
    
    As such, it's not necessary to check VM_MAYWRITE in bpf_map_mmap() and
    map->ops->map_mmap() callbacks: VM_WRITE should be consistently set for
    read-write mappings, and if VM_WRITE is not set, there is no way for
    user space to upgrade read-only mapping to read-write one.
    
    This patch cleans up this VM_WRITE vs VM_MAYWRITE handling within
    bpf_map_mmap(), which is an entry point for any BPF map mmap()-ing
    logic. We also drop unnecessary sanitization of VM_MAYWRITE in BPF
    ringbuf's map_mmap() callback implementation, as it is already performed
    by common code in bpf_map_mmap().
    
    Note, though, that in bpf_map_mmap_{open,close}() callbacks we can't
    drop VM_MAYWRITE use, because it's possible (and is outside of
    subsystem's control) to have initially read-write memory mapping, which
    is subsequently dropped to read-only by user space through mprotect().
    In such case, from BPF verifier POV it's read-write data throughout the
    lifetime of BPF map, and is counted as "active writer".
    
    But its VMAs will start out as VM_WRITE|VM_MAYWRITE, then mprotect() can
    change it to just VM_MAYWRITE (and no VM_WRITE), so when its finally
    munmap()'ed and bpf_map_mmap_close() is called, vm_flags will be just
    VM_MAYWRITE, but we still need to decrement active writer count with
    bpf_map_write_active_dec() as it's still considered to be a read-write
    mapping by the rest of BPF subsystem.
    
    Similar reasoning applies to bpf_map_mmap_open(), which is called
    whenever mmap(), munmap(), and/or mprotect() forces mm subsystem to
    split original VMA into multiple discontiguous VMAs.
    
    Memory-mapping handling is a bit tricky, yes.
    
    Cc: Jann Horn <jannh@google.com>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Shakeel Butt <shakeel.butt@linux.dev>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20250129012246.1515826-1-andrii@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Stable-dep-of: bc27c52eea18 ("bpf: avoid holding freeze_mutex during mmap operation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cpufreq: dt-platdev: add missing MODULE_DESCRIPTION() macro [+ + +]
Author: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
Date:   Sun Jun 2 15:14:00 2024 -0700

    cpufreq: dt-platdev: add missing MODULE_DESCRIPTION() macro
    
    [ Upstream commit 64e018d7a8990c11734704a0767c47fd8efd5388 ]
    
    make allmodconfig && make W=1 C=1 reports:
    WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/cpufreq/cpufreq-dt-platdev.o
    
    Add the missing invocation of the MODULE_DESCRIPTION() macro.
    
    Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    Stable-dep-of: f1f010c9d9c6 ("cpufreq: fix using cpufreq-dt as module")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

cpufreq: fix using cpufreq-dt as module [+ + +]
Author: Andreas Kemnade <andreas@kemnade.info>
Date:   Sun Nov 3 22:02:51 2024 +0100

    cpufreq: fix using cpufreq-dt as module
    
    [ Upstream commit f1f010c9d9c62c865d9f54e94075800ba764b4d9 ]
    
    This driver can be built as a module since commit 3b062a086984 ("cpufreq:
    dt-platdev: Support building as module"), but unfortunately this caused
    a regression because the cputfreq-dt-platdev.ko module does not autoload.
    
    Usually, this is solved by just using the MODULE_DEVICE_TABLE() macro to
    export all the device IDs as module aliases. But this driver is special
    due how matches with devices and decides what platform supports.
    
    There are two of_device_id lists, an allow list that are for CPU devices
    that always match and a deny list that's for devices that must not match.
    
    The driver registers a cpufreq-dt platform device for all the CPU device
    nodes that either are in the allow list or contain an operating-points-v2
    property and are not in the deny list.
    
    Enforce builtin compile of cpufreq-dt-platdev to make autoload work.
    
    Fixes: 3b062a086984 ("cpufreq: dt-platdev: Support building as module")
    Link: https://lore.kernel.org/all/20241104201424.2a42efdd@akair/
    Link: https://lore.kernel.org/all/20241119111918.1732531-1-javierm@redhat.com/
    Cc: stable@vger.kernel.org
    Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
    Reported-by: Radu Rendec <rrendec@redhat.com>
    Reported-by: Javier Martinez Canillas <javierm@redhat.com>
    [ Viresh: Picked commit log from Javier, updated tags ]
    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/i915/dp: Fix error handling during 128b/132b link training [+ + +]
Author: Imre Deak <imre.deak@intel.com>
Date:   Tue Feb 18 00:38:27 2025 +0200

    drm/i915/dp: Fix error handling during 128b/132b link training
    
    commit b9275eabe31e6679ae12c46a4a0a18d622db4570 upstream.
    
    At the end of a 128b/132b link training sequence, the HW expects the
    transcoder training pattern to be set to TPS2 and from that to normal
    mode (disabling the training pattern). Transitioning from TPS1 directly
    to normal mode leaves the transcoder in a stuck state, resulting in
    page-flip timeouts later in the modeset sequence.
    
    Atm, in case of a failure during link training, the transcoder may be
    still set to output the TPS1 pattern. Later the transcoder is then set
    from TPS1 directly to normal mode in intel_dp_stop_link_train(), leading
    to modeset failures later as described above. Fix this by setting the
    training patter to TPS2, if the link training failed at any point.
    
    The clue in the specification about the above HW behavior is the
    explicit mention that TPS2 must be set after the link training sequence
    (and there isn't a similar requirement specified for the 8b/10b link
    training), see the Bspec links below.
    
    v2: Add bspec aspect/link to the commit log. (Jani)
    
    Bspec: 54128, 65448, 68849
    Cc: stable@vger.kernel.org # v5.18+
    Cc: Jani Nikula <jani.nikula@intel.com>
    Signed-off-by: Imre Deak <imre.deak@intel.com>
    Acked-by: Jani Nikula <jani.nikula@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250217223828.1166093-2-imre.deak@intel.com
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    (cherry picked from commit 8b4bbaf8ddc1f68f3ee96a706f65fdb1bcd9d355)
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915: Make sure all planes in use by the joiner have their crtc included [+ + +]
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Wed Feb 12 18:43:21 2025 +0200

    drm/i915: Make sure all planes in use by the joiner have their crtc included
    
    commit 07fb70d82e0df085980246bf17bc12537588795f upstream.
    
    Any active plane needs to have its crtc included in the atomic
    state. For planes enabled via uapi that is all handler in the core.
    But when we use a plane for joiner the uapi code things the plane
    is disabled and therefore doesn't have a crtc. So we need to pull
    those in by hand. We do it first thing in
    intel_joiner_add_affected_crtcs() so that any newly added crtc will
    subsequently pull in all of its joined crtcs as well.
    
    The symptoms from failing to do this are:
    - duct tape in the form of commit 1d5b09f8daf8 ("drm/i915: Fix NULL
      ptr deref by checking new_crtc_state")
    - the plane's hw state will get overwritten by the disabled
      uapi state if it can't find the uapi counterpart plane in
      the atomic state from where it should copy the correct state
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250212164330.16891-2-ville.syrjala@linux.intel.com
    (cherry picked from commit 91077d1deb5374eb8be00fb391710f00e751dc4b)
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/msm/dpu: Disable dither in phys encoder cleanup [+ + +]
Author: Jessica Zhang <quic_jesszhan@quicinc.com>
Date:   Tue Feb 11 19:59:19 2025 -0800

    drm/msm/dpu: Disable dither in phys encoder cleanup
    
    commit f063ac6b55df03ed25996bdc84d9e1c50147cfa1 upstream.
    
    Disable pingpong dither in dpu_encoder_helper_phys_cleanup().
    
    This avoids the issue where an encoder unknowingly uses dither after
    reserving a pingpong block that was previously bound to an encoder that
    had enabled dither.
    
    Cc: stable@vger.kernel.org
    Reported-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Closes: https://lore.kernel.org/all/jr7zbj5w7iq4apg3gofuvcwf4r2swzqjk7sshwcdjll4mn6ctt@l2n3qfpujg3q/
    Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Fixes: 3c128638a07d ("drm/msm/dpu: add support for dither block in display")
    Patchwork: https://patchwork.freedesktop.org/patch/636517/
    Link: https://lore.kernel.org/r/20250211-dither-disable-v1-1-ac2cb455f6b9@quicinc.com
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/msm/gem: Demote userspace errors to DRM_UT_DRIVER [+ + +]
Author: Rob Clark <robdclark@chromium.org>
Date:   Tue Oct 24 10:08:04 2023 -0700

    drm/msm/gem: Demote userspace errors to DRM_UT_DRIVER
    
    [ Upstream commit b2acb89af1a400be721bcb14f137aa22b509caba ]
    
    Error messages resulting from incorrect usage of the kernel uabi should
    not spam dmesg by default.  But it is useful to enable them to debug
    userspace.  So demote to DRM_UT_DRIVER.
    
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Patchwork: https://patchwork.freedesktop.org/patch/564189/
    Stable-dep-of: 3a47f4b439be ("drm/msm/gem: prevent integer overflow in msm_ioctl_gem_submit()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm/gem: prevent integer overflow in msm_ioctl_gem_submit() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri Nov 15 17:50:08 2024 +0300

    drm/msm/gem: prevent integer overflow in msm_ioctl_gem_submit()
    
    [ Upstream commit 3a47f4b439beb98e955d501c609dfd12b7836d61 ]
    
    The "submit->cmd[i].size" and "submit->cmd[i].offset" variables are u32
    values that come from the user via the submit_lookup_cmds() function.
    This addition could lead to an integer wrapping bug so use size_add()
    to prevent that.
    
    Fixes: 198725337ef1 ("drm/msm: fix cmdstream size check")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Patchwork: https://patchwork.freedesktop.org/patch/624696/
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm: Avoid rounding up to one jiffy [+ + +]
Author: Rob Clark <robdclark@chromium.org>
Date:   Mon Jan 13 07:48:41 2025 -0800

    drm/msm: Avoid rounding up to one jiffy
    
    [ Upstream commit 669c285620231786fffe9d87ab432e08a6ed922b ]
    
    If userspace is trying to achieve a timeout of zero, let 'em have it.
    Only round up if the timeout is greater than zero.
    
    Fixes: 4969bccd5f4e ("drm/msm: Avoid rounding down to zero jiffies")
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Reviewed-by: Akhil P Oommen <quic_akhilpo@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/632264/
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/nouveau/pmu: Fix gp10b firmware guard [+ + +]
Author: Aaron Kling <webgeek1234@gmail.com>
Date:   Tue Feb 18 03:28:03 2025 -0600

    drm/nouveau/pmu: Fix gp10b firmware guard
    
    [ Upstream commit 3dbc0215e3c502a9f3221576da0fdc9847fb9721 ]
    
    Most kernel configs enable multiple Tegra SoC generations, causing this
    typo to go unnoticed. But in the case where a kernel config is strictly
    for Tegra186, this is a problem.
    
    Fixes: 989863d7cbe5 ("drm/nouveau/pmu: select implementation based on available firmware")
    Signed-off-by: Aaron Kling <webgeek1234@gmail.com>
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250218-nouveau-gm10b-guard-v2-1-a4de71500d48@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/tidss: Add simple K2G manual reset [+ + +]
Author: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Date:   Thu Nov 9 09:38:00 2023 +0200

    drm/tidss: Add simple K2G manual reset
    
    [ Upstream commit 576d96c5c896221b5bc8feae473739469a92e144 ]
    
    K2G display controller does not support soft reset, but we can do the
    most important steps manually: mask the IRQs and disable the VPs.
    
    Reviewed-by: Aradhya Bhatia <a-bhatia1@ti.com>
    Link: https://lore.kernel.org/r/20231109-tidss-probe-v2-7-ac91b5ea35c0@ideasonboard.com
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Stable-dep-of: a9a73f2661e6 ("drm/tidss: Fix race condition while handling interrupt registers")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/tidss: Fix race condition while handling interrupt registers [+ + +]
Author: Devarsh Thakkar <devarsht@ti.com>
Date:   Mon Oct 21 17:07:50 2024 +0300

    drm/tidss: Fix race condition while handling interrupt registers
    
    [ Upstream commit a9a73f2661e6f625d306c9b0ef082e4593f45a21 ]
    
    The driver has a spinlock for protecting the irq_masks field and irq
    enable registers. However, the driver misses protecting the irq status
    registers which can lead to races.
    
    Take the spinlock when accessing irqstatus too.
    
    Fixes: 32a1795f57ee ("drm/tidss: New driver for TI Keystone platform Display SubSystem")
    Cc: stable@vger.kernel.org
    Signed-off-by: Devarsh Thakkar <devarsht@ti.com>
    [Tomi: updated the desc]
    Reviewed-by: Jonathan Cormier <jcormier@criticallink.com>
    Tested-by: Jonathan Cormier <jcormier@criticallink.com>
    Reviewed-by: Aradhya Bhatia <aradhya.bhatia@linux.dev>
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241021-tidss-irq-fix-v1-6-82ddaec94e4a@ideasonboard.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drop_monitor: fix incorrect initialization order [+ + +]
Author: Gavrilov Ilia <Ilia.Gavrilov@infotecs.ru>
Date:   Thu Feb 13 15:20:55 2025 +0000

    drop_monitor: fix incorrect initialization order
    
    commit 07b598c0e6f06a0f254c88dafb4ad50f8a8c6eea upstream.
    
    Syzkaller reports the following bug:
    
    BUG: spinlock bad magic on CPU#1, syz-executor.0/7995
     lock: 0xffff88805303f3e0, .magic: 00000000, .owner: <none>/-1, .owner_cpu: 0
    CPU: 1 PID: 7995 Comm: syz-executor.0 Tainted: G            E     5.10.209+ #1
    Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 11/12/2020
    Call Trace:
     __dump_stack lib/dump_stack.c:77 [inline]
     dump_stack+0x119/0x179 lib/dump_stack.c:118
     debug_spin_lock_before kernel/locking/spinlock_debug.c:83 [inline]
     do_raw_spin_lock+0x1f6/0x270 kernel/locking/spinlock_debug.c:112
     __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:117 [inline]
     _raw_spin_lock_irqsave+0x50/0x70 kernel/locking/spinlock.c:159
     reset_per_cpu_data+0xe6/0x240 [drop_monitor]
     net_dm_cmd_trace+0x43d/0x17a0 [drop_monitor]
     genl_family_rcv_msg_doit+0x22f/0x330 net/netlink/genetlink.c:739
     genl_family_rcv_msg net/netlink/genetlink.c:783 [inline]
     genl_rcv_msg+0x341/0x5a0 net/netlink/genetlink.c:800
     netlink_rcv_skb+0x14d/0x440 net/netlink/af_netlink.c:2497
     genl_rcv+0x29/0x40 net/netlink/genetlink.c:811
     netlink_unicast_kernel net/netlink/af_netlink.c:1322 [inline]
     netlink_unicast+0x54b/0x800 net/netlink/af_netlink.c:1348
     netlink_sendmsg+0x914/0xe00 net/netlink/af_netlink.c:1916
     sock_sendmsg_nosec net/socket.c:651 [inline]
     __sock_sendmsg+0x157/0x190 net/socket.c:663
     ____sys_sendmsg+0x712/0x870 net/socket.c:2378
     ___sys_sendmsg+0xf8/0x170 net/socket.c:2432
     __sys_sendmsg+0xea/0x1b0 net/socket.c:2461
     do_syscall_64+0x30/0x40 arch/x86/entry/common.c:46
     entry_SYSCALL_64_after_hwframe+0x62/0xc7
    RIP: 0033:0x7f3f9815aee9
    Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007f3f972bf0c8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    RAX: ffffffffffffffda RBX: 00007f3f9826d050 RCX: 00007f3f9815aee9
    RDX: 0000000020000000 RSI: 0000000020001300 RDI: 0000000000000007
    RBP: 00007f3f981b63bd R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 000000000000006e R14: 00007f3f9826d050 R15: 00007ffe01ee6768
    
    If drop_monitor is built as a kernel module, syzkaller may have time
    to send a netlink NET_DM_CMD_START message during the module loading.
    This will call the net_dm_monitor_start() function that uses
    a spinlock that has not yet been initialized.
    
    To fix this, let's place resource initialization above the registration
    of a generic netlink family.
    
    Found by InfoTeCS on behalf of Linux Verification Center
    (linuxtesting.org) with Syzkaller.
    
    Fixes: 9a8afc8d3962 ("Network Drop Monitor: Adding drop monitor implementation & Netlink protocol")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ilia Gavrilov <Ilia.Gavrilov@infotecs.ru>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20250213152054.2785669-1-Ilia.Gavrilov@infotecs.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
EDAC/qcom: Correct interrupt enable register configuration [+ + +]
Author: Komal Bajaj <quic_kbajaj@quicinc.com>
Date:   Tue Nov 19 12:16:08 2024 +0530

    EDAC/qcom: Correct interrupt enable register configuration
    
    commit c158647c107358bf1be579f98e4bb705c1953292 upstream.
    
    The previous implementation incorrectly configured the cmn_interrupt_2_enable
    register for interrupt handling. Using cmn_interrupt_2_enable to configure
    Tag, Data RAM ECC interrupts would lead to issues like double handling of the
    interrupts (EL1 and EL3) as cmn_interrupt_2_enable is meant to be configured
    for interrupts which needs to be handled by EL3.
    
    EL1 LLCC EDAC driver needs to use cmn_interrupt_0_enable register to configure
    Tag, Data RAM ECC interrupts instead of cmn_interrupt_2_enable.
    
    Fixes: 27450653f1db ("drivers: edac: Add EDAC driver support for QCOM SoCs")
    Signed-off-by: Komal Bajaj <quic_kbajaj@quicinc.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Cc: <stable@kernel.org>
    Link: https://lore.kernel.org/r/20241119064608.12326-1-quic_kbajaj@quicinc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
firmware: qcom: scm: Fix missing read barrier in qcom_scm_is_available() [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Mon Dec 9 15:27:54 2024 +0100

    firmware: qcom: scm: Fix missing read barrier in qcom_scm_is_available()
    
    [ Upstream commit 0a744cceebd0480cb39587b3b1339d66a9d14063 ]
    
    Commit 2e4955167ec5 ("firmware: qcom: scm: Fix __scm and waitq
    completion variable initialization") introduced a write barrier in probe
    function to store global '__scm' variable.  It also claimed that it
    added a read barrier, because as we all known barriers are paired (see
    memory-barriers.txt: "Note that write barriers should normally be paired
    with read or address-dependency barriers"), however it did not really
    add it.
    
    The offending commit used READ_ONCE() to access '__scm' global which is
    not a barrier.
    
    The barrier is needed so the store to '__scm' will be properly visible.
    This is most likely not fatal in current driver design, because missing
    read barrier would mean qcom_scm_is_available() callers will access old
    value, NULL.  Driver does not support unbinding and does not correctly
    handle probe failures, thus there is no risk of stale or old pointer in
    '__scm' variable.
    
    However for code correctness, readability and to be sure that we did not
    mess up something in this tricky topic of SMP barriers, add a read
    barrier for accessing '__scm'.  Change also comment from useless/obvious
    what does barrier do, to what is expected: which other parts of the code
    are involved here.
    
    Fixes: 2e4955167ec5 ("firmware: qcom: scm: Fix __scm and waitq completion variable initialization")
    Cc: stable@vger.kernel.org
    Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20241209-qcom-scm-missing-barriers-and-all-sort-of-srap-v2-1-9061013c8d92@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
flow_dissector: Fix handling of mixed port and port-range keys [+ + +]
Author: Cong Wang <xiyou.wangcong@gmail.com>
Date:   Mon Feb 17 20:32:07 2025 -0800

    flow_dissector: Fix handling of mixed port and port-range keys
    
    [ Upstream commit 3e5796862c692ea608d96f0a1437f9290f44953a ]
    
    This patch fixes a bug in TC flower filter where rules combining a
    specific destination port with a source port range weren't working
    correctly.
    
    The specific case was when users tried to configure rules like:
    
    tc filter add dev ens38 ingress protocol ip flower ip_proto udp \
    dst_port 5000 src_port 2000-3000 action drop
    
    The root cause was in the flow dissector code. While both
    FLOW_DISSECTOR_KEY_PORTS and FLOW_DISSECTOR_KEY_PORTS_RANGE flags
    were being set correctly in the classifier, the __skb_flow_dissect_ports()
    function was only populating one of them: whichever came first in
    the enum check. This meant that when the code needed both a specific
    port and a port range, one of them would be left as 0, causing the
    filter to not match packets as expected.
    
    Fix it by removing the either/or logic and instead checking and
    populating both key types independently when they're in use.
    
    Fixes: 8ffb055beae5 ("cls_flower: Fix the behavior using port ranges with hw-offload")
    Reported-by: Qiang Zhang <dtzq01@gmail.com>
    Closes: https://lore.kernel.org/netdev/CAPx+-5uvFxkhkz4=j_Xuwkezjn9U6kzKTD5jz4tZ9msSJ0fOJA@mail.gmail.com/
    Cc: Yoshiki Komachi <komachi.yoshiki@gmail.com>
    Cc: Jamal Hadi Salim <jhs@mojatatu.com>
    Cc: Jiri Pirko <jiri@resnulli.us>
    Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20250218043210.732959-2-xiyou.wangcong@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

flow_dissector: Fix port range key handling in BPF conversion [+ + +]
Author: Cong Wang <xiyou.wangcong@gmail.com>
Date:   Mon Feb 17 20:32:09 2025 -0800

    flow_dissector: Fix port range key handling in BPF conversion
    
    [ Upstream commit 69ab34f705fbfabcace64b5d53bb7a4450fac875 ]
    
    Fix how port range keys are handled in __skb_flow_bpf_to_target() by:
    - Separating PORTS and PORTS_RANGE key handling
    - Using correct key_ports_range structure for range keys
    - Properly initializing both key types independently
    
    This ensures port range information is correctly stored in its dedicated
    structure rather than incorrectly using the regular ports key structure.
    
    Fixes: 59fb9b62fb6c ("flow_dissector: Fix to use new variables for port ranges in bpf hook")
    Reported-by: Qiang Zhang <dtzq01@gmail.com>
    Closes: https://lore.kernel.org/netdev/CAPx+-5uvFxkhkz4=j_Xuwkezjn9U6kzKTD5jz4tZ9msSJ0fOJA@mail.gmail.com/
    Cc: Yoshiki Komachi <komachi.yoshiki@gmail.com>
    Cc: Jamal Hadi Salim <jhs@mojatatu.com>
    Cc: Jiri Pirko <jiri@resnulli.us>
    Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
    Link: https://patch.msgid.link/20250218043210.732959-4-xiyou.wangcong@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ftrace: Correct preemption accounting for function tracing. [+ + +]
Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date:   Thu Feb 20 15:07:49 2025 +0100

    ftrace: Correct preemption accounting for function tracing.
    
    commit 57b76bedc5c52c66968183b5ef57234894c25ce7 upstream.
    
    The function tracer should record the preemption level at the point when
    the function is invoked. If the tracing subsystem decrement the
    preemption counter it needs to correct this before feeding the data into
    the trace buffer. This was broken in the commit cited below while
    shifting the preempt-disabled section.
    
    Use tracing_gen_ctx_dec() which properly subtracts one from the
    preemption counter on a preemptible kernel.
    
    Cc: stable@vger.kernel.org
    Cc: Wander Lairson Costa <wander@redhat.com>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/20250220140749.pfw8qoNZ@linutronix.de
    Fixes: ce5e48036c9e7 ("ftrace: disable preemption when recursion locked")
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Tested-by: Wander Lairson Costa <wander@redhat.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ftrace: Do not add duplicate entries in subops manager ops [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Thu Feb 20 15:20:11 2025 -0500

    ftrace: Do not add duplicate entries in subops manager ops
    
    commit 8eb4b09e0bbd30981305643229fe7640ad41b667 upstream.
    
    Check if a function is already in the manager ops of a subops. A manager
    ops contains multiple subops, and if two or more subops are tracing the
    same function, the manager ops only needs a single entry in its hash.
    
    Cc: stable@vger.kernel.org
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Sven Schnelle <svens@linux.ibm.com>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Cc: Alexander Gordeev <agordeev@linux.ibm.com>
    Link: https://lore.kernel.org/20250220202055.226762894@goodmis.org
    Fixes: 4f554e955614f ("ftrace: Add ftrace_set_filter_ips function")
    Tested-by: Heiko Carstens <hca@linux.ibm.com>
    Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
geneve: Fix use-after-free in geneve_find_dev(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Thu Feb 13 13:33:54 2025 +0900

    geneve: Fix use-after-free in geneve_find_dev().
    
    [ Upstream commit 9593172d93b9f91c362baec4643003dc29802929 ]
    
    syzkaller reported a use-after-free in geneve_find_dev() [0]
    without repro.
    
    geneve_configure() links struct geneve_dev.next to
    net_generic(net, geneve_net_id)->geneve_list.
    
    The net here could differ from dev_net(dev) if IFLA_NET_NS_PID,
    IFLA_NET_NS_FD, or IFLA_TARGET_NETNSID is set.
    
    When dev_net(dev) is dismantled, geneve_exit_batch_rtnl() finally
    calls unregister_netdevice_queue() for each dev in the netns,
    and later the dev is freed.
    
    However, its geneve_dev.next is still linked to the backend UDP
    socket netns.
    
    Then, use-after-free will occur when another geneve dev is created
    in the netns.
    
    Let's call geneve_dellink() instead in geneve_destroy_tunnels().
    
    [0]:
    BUG: KASAN: slab-use-after-free in geneve_find_dev drivers/net/geneve.c:1295 [inline]
    BUG: KASAN: slab-use-after-free in geneve_configure+0x234/0x858 drivers/net/geneve.c:1343
    Read of size 2 at addr ffff000054d6ee24 by task syz.1.4029/13441
    
    CPU: 1 UID: 0 PID: 13441 Comm: syz.1.4029 Not tainted 6.13.0-g0ad9617c78ac #24 dc35ca22c79fb82e8e7bc5c9c9adafea898b1e3d
    Hardware name: linux,dummy-virt (DT)
    Call trace:
     show_stack+0x38/0x50 arch/arm64/kernel/stacktrace.c:466 (C)
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0xbc/0x108 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:378 [inline]
     print_report+0x16c/0x6f0 mm/kasan/report.c:489
     kasan_report+0xc0/0x120 mm/kasan/report.c:602
     __asan_report_load2_noabort+0x20/0x30 mm/kasan/report_generic.c:379
     geneve_find_dev drivers/net/geneve.c:1295 [inline]
     geneve_configure+0x234/0x858 drivers/net/geneve.c:1343
     geneve_newlink+0xb8/0x128 drivers/net/geneve.c:1634
     rtnl_newlink_create+0x23c/0x868 net/core/rtnetlink.c:3795
     __rtnl_newlink net/core/rtnetlink.c:3906 [inline]
     rtnl_newlink+0x1054/0x1630 net/core/rtnetlink.c:4021
     rtnetlink_rcv_msg+0x61c/0x918 net/core/rtnetlink.c:6911
     netlink_rcv_skb+0x1dc/0x398 net/netlink/af_netlink.c:2543
     rtnetlink_rcv+0x34/0x50 net/core/rtnetlink.c:6938
     netlink_unicast_kernel net/netlink/af_netlink.c:1322 [inline]
     netlink_unicast+0x618/0x838 net/netlink/af_netlink.c:1348
     netlink_sendmsg+0x5fc/0x8b0 net/netlink/af_netlink.c:1892
     sock_sendmsg_nosec net/socket.c:713 [inline]
     __sock_sendmsg net/socket.c:728 [inline]
     ____sys_sendmsg+0x410/0x6f8 net/socket.c:2568
     ___sys_sendmsg+0x178/0x1d8 net/socket.c:2622
     __sys_sendmsg net/socket.c:2654 [inline]
     __do_sys_sendmsg net/socket.c:2659 [inline]
     __se_sys_sendmsg net/socket.c:2657 [inline]
     __arm64_sys_sendmsg+0x12c/0x1c8 net/socket.c:2657
     __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline]
     invoke_syscall+0x90/0x278 arch/arm64/kernel/syscall.c:49
     el0_svc_common+0x13c/0x250 arch/arm64/kernel/syscall.c:132
     do_el0_svc+0x54/0x70 arch/arm64/kernel/syscall.c:151
     el0_svc+0x4c/0xa8 arch/arm64/kernel/entry-common.c:744
     el0t_64_sync_handler+0x78/0x108 arch/arm64/kernel/entry-common.c:762
     el0t_64_sync+0x198/0x1a0 arch/arm64/kernel/entry.S:600
    
    Allocated by task 13247:
     kasan_save_stack mm/kasan/common.c:47 [inline]
     kasan_save_track+0x30/0x68 mm/kasan/common.c:68
     kasan_save_alloc_info+0x44/0x58 mm/kasan/generic.c:568
     poison_kmalloc_redzone mm/kasan/common.c:377 [inline]
     __kasan_kmalloc+0x84/0xa0 mm/kasan/common.c:394
     kasan_kmalloc include/linux/kasan.h:260 [inline]
     __do_kmalloc_node mm/slub.c:4298 [inline]
     __kmalloc_node_noprof+0x2a0/0x560 mm/slub.c:4304
     __kvmalloc_node_noprof+0x9c/0x230 mm/util.c:645
     alloc_netdev_mqs+0xb8/0x11a0 net/core/dev.c:11470
     rtnl_create_link+0x2b8/0xb50 net/core/rtnetlink.c:3604
     rtnl_newlink_create+0x19c/0x868 net/core/rtnetlink.c:3780
     __rtnl_newlink net/core/rtnetlink.c:3906 [inline]
     rtnl_newlink+0x1054/0x1630 net/core/rtnetlink.c:4021
     rtnetlink_rcv_msg+0x61c/0x918 net/core/rtnetlink.c:6911
     netlink_rcv_skb+0x1dc/0x398 net/netlink/af_netlink.c:2543
     rtnetlink_rcv+0x34/0x50 net/core/rtnetlink.c:6938
     netlink_unicast_kernel net/netlink/af_netlink.c:1322 [inline]
     netlink_unicast+0x618/0x838 net/netlink/af_netlink.c:1348
     netlink_sendmsg+0x5fc/0x8b0 net/netlink/af_netlink.c:1892
     sock_sendmsg_nosec net/socket.c:713 [inline]
     __sock_sendmsg net/socket.c:728 [inline]
     ____sys_sendmsg+0x410/0x6f8 net/socket.c:2568
     ___sys_sendmsg+0x178/0x1d8 net/socket.c:2622
     __sys_sendmsg net/socket.c:2654 [inline]
     __do_sys_sendmsg net/socket.c:2659 [inline]
     __se_sys_sendmsg net/socket.c:2657 [inline]
     __arm64_sys_sendmsg+0x12c/0x1c8 net/socket.c:2657
     __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline]
     invoke_syscall+0x90/0x278 arch/arm64/kernel/syscall.c:49
     el0_svc_common+0x13c/0x250 arch/arm64/kernel/syscall.c:132
     do_el0_svc+0x54/0x70 arch/arm64/kernel/syscall.c:151
     el0_svc+0x4c/0xa8 arch/arm64/kernel/entry-common.c:744
     el0t_64_sync_handler+0x78/0x108 arch/arm64/kernel/entry-common.c:762
     el0t_64_sync+0x198/0x1a0 arch/arm64/kernel/entry.S:600
    
    Freed by task 45:
     kasan_save_stack mm/kasan/common.c:47 [inline]
     kasan_save_track+0x30/0x68 mm/kasan/common.c:68
     kasan_save_free_info+0x58/0x70 mm/kasan/generic.c:582
     poison_slab_object mm/kasan/common.c:247 [inline]
     __kasan_slab_free+0x48/0x68 mm/kasan/common.c:264
     kasan_slab_free include/linux/kasan.h:233 [inline]
     slab_free_hook mm/slub.c:2353 [inline]
     slab_free mm/slub.c:4613 [inline]
     kfree+0x140/0x420 mm/slub.c:4761
     kvfree+0x4c/0x68 mm/util.c:688
     netdev_release+0x94/0xc8 net/core/net-sysfs.c:2065
     device_release+0x98/0x1c0
     kobject_cleanup lib/kobject.c:689 [inline]
     kobject_release lib/kobject.c:720 [inline]
     kref_put include/linux/kref.h:65 [inline]
     kobject_put+0x2b0/0x438 lib/kobject.c:737
     netdev_run_todo+0xe5c/0xfc8 net/core/dev.c:11185
     rtnl_unlock+0x20/0x38 net/core/rtnetlink.c:151
     cleanup_net+0x4fc/0x8c0 net/core/net_namespace.c:648
     process_one_work+0x700/0x1398 kernel/workqueue.c:3236
     process_scheduled_works kernel/workqueue.c:3317 [inline]
     worker_thread+0x8c4/0xe10 kernel/workqueue.c:3398
     kthread+0x4bc/0x608 kernel/kthread.c:464
     ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:862
    
    The buggy address belongs to the object at ffff000054d6e000
     which belongs to the cache kmalloc-cg-4k of size 4096
    The buggy address is located 3620 bytes inside of
     freed 4096-byte region [ffff000054d6e000, ffff000054d6f000)
    
    The buggy address belongs to the physical page:
    page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x94d68
    head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    memcg:ffff000016276181
    flags: 0x3fffe0000000040(head|node=0|zone=0|lastcpupid=0x1ffff)
    page_type: f5(slab)
    raw: 03fffe0000000040 ffff0000c000f500 dead000000000122 0000000000000000
    raw: 0000000000000000 0000000000040004 00000001f5000000 ffff000016276181
    head: 03fffe0000000040 ffff0000c000f500 dead000000000122 0000000000000000
    head: 0000000000000000 0000000000040004 00000001f5000000 ffff000016276181
    head: 03fffe0000000003 fffffdffc1535a01 ffffffffffffffff 0000000000000000
    head: 0000000000000008 0000000000000000 00000000ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff000054d6ed00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff000054d6ed80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    >ffff000054d6ee00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                   ^
     ffff000054d6ee80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff000054d6ef00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    
    Fixes: 2d07dc79fe04 ("geneve: add initial netdev driver for GENEVE tunnels")
    Reported-by: syzkaller <syzkaller@googlegroups.com>
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250213043354.91368-1-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

geneve: Suppress list corruption splat in geneve_destroy_tunnels(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Mon Feb 17 12:37:05 2025 -0800

    geneve: Suppress list corruption splat in geneve_destroy_tunnels().
    
    [ Upstream commit 62fab6eef61f245dc8797e3a6a5b890ef40e8628 ]
    
    As explained in the previous patch, iterating for_each_netdev() and
    gn->geneve_list during ->exit_batch_rtnl() could trigger ->dellink()
    twice for the same device.
    
    If CONFIG_DEBUG_LIST is enabled, we will see a list_del() corruption
    splat in the 2nd call of geneve_dellink().
    
    Let's remove for_each_netdev() in geneve_destroy_tunnels() and delegate
    that part to default_device_exit_batch().
    
    Fixes: 9593172d93b9 ("geneve: Fix use-after-free in geneve_find_dev().")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250217203705.40342-3-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gtp: Suppress list corruption splat in gtp_net_exit_batch_rtnl(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Mon Feb 17 12:37:04 2025 -0800

    gtp: Suppress list corruption splat in gtp_net_exit_batch_rtnl().
    
    [ Upstream commit 4ccacf86491d33d2486b62d4d44864d7101b299d ]
    
    Brad Spengler reported the list_del() corruption splat in
    gtp_net_exit_batch_rtnl(). [0]
    
    Commit eb28fd76c0a0 ("gtp: Destroy device along with udp socket's netns
    dismantle.") added the for_each_netdev() loop in gtp_net_exit_batch_rtnl()
    to destroy devices in each netns as done in geneve and ip tunnels.
    
    However, this could trigger ->dellink() twice for the same device during
    ->exit_batch_rtnl().
    
    Say we have two netns A & B and gtp device B that resides in netns B but
    whose UDP socket is in netns A.
    
      1. cleanup_net() processes netns A and then B.
    
      2. gtp_net_exit_batch_rtnl() finds the device B while iterating
         netns A's gn->gtp_dev_list and calls ->dellink().
    
      [ device B is not yet unlinked from netns B
        as unregister_netdevice_many() has not been called. ]
    
      3. gtp_net_exit_batch_rtnl() finds the device B while iterating
         netns B's for_each_netdev() and calls ->dellink().
    
    gtp_dellink() cleans up the device's hash table, unlinks the dev from
    gn->gtp_dev_list, and calls unregister_netdevice_queue().
    
    Basically, calling gtp_dellink() multiple times is fine unless
    CONFIG_DEBUG_LIST is enabled.
    
    Let's remove for_each_netdev() in gtp_net_exit_batch_rtnl() and
    delegate the destruction to default_device_exit_batch() as done
    in bareudp.
    
    [0]:
    list_del corruption, ffff8880aaa62c00->next (autoslab_size_M_dev_P_net_core_dev_11127_8_1328_8_S_4096_A_64_n_139+0xc00/0x1000 [slab object]) is LIST_POISON1 (ffffffffffffff02) (prev is 0xffffffffffffff04)
    kernel BUG at lib/list_debug.c:58!
    Oops: invalid opcode: 0000 [#1] PREEMPT SMP KASAN
    CPU: 1 UID: 0 PID: 1804 Comm: kworker/u8:7 Tainted: G                T   6.12.13-grsec-full-20250211091339 #1
    Tainted: [T]=RANDSTRUCT
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
    Workqueue: netns cleanup_net
    RIP: 0010:[<ffffffff84947381>] __list_del_entry_valid_or_report+0x141/0x200 lib/list_debug.c:58
    Code: c2 76 91 31 c0 e8 9f b1 f7 fc 0f 0b 4d 89 f0 48 c7 c1 02 ff ff ff 48 89 ea 48 89 ee 48 c7 c7 e0 c2 76 91 31 c0 e8 7f b1 f7 fc <0f> 0b 4d 89 e8 48 c7 c1 04 ff ff ff 48 89 ea 48 89 ee 48 c7 c7 60
    RSP: 0018:fffffe8040b4fbd0 EFLAGS: 00010283
    RAX: 00000000000000cc RBX: dffffc0000000000 RCX: ffffffff818c4054
    RDX: ffffffff84947381 RSI: ffffffff818d1512 RDI: 0000000000000000
    RBP: ffff8880aaa62c00 R08: 0000000000000001 R09: fffffbd008169f32
    R10: fffffe8040b4f997 R11: 0000000000000001 R12: a1988d84f24943e4
    R13: ffffffffffffff02 R14: ffffffffffffff04 R15: ffff8880aaa62c08
    RBX: kasan shadow of 0x0
    RCX: __wake_up_klogd.part.0+0x74/0xe0 kernel/printk/printk.c:4554
    RDX: __list_del_entry_valid_or_report+0x141/0x200 lib/list_debug.c:58
    RSI: vprintk+0x72/0x100 kernel/printk/printk_safe.c:71
    RBP: autoslab_size_M_dev_P_net_core_dev_11127_8_1328_8_S_4096_A_64_n_139+0xc00/0x1000 [slab object]
    RSP: process kstack fffffe8040b4fbd0+0x7bd0/0x8000 [kworker/u8:7+netns 1804 ]
    R09: kasan shadow of process kstack fffffe8040b4f990+0x7990/0x8000 [kworker/u8:7+netns 1804 ]
    R10: process kstack fffffe8040b4f997+0x7997/0x8000 [kworker/u8:7+netns 1804 ]
    R15: autoslab_size_M_dev_P_net_core_dev_11127_8_1328_8_S_4096_A_64_n_139+0xc08/0x1000 [slab object]
    FS:  0000000000000000(0000) GS:ffff888116000000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000748f5372c000 CR3: 0000000015408000 CR4: 00000000003406f0 shadow CR4: 00000000003406f0
    Stack:
     0000000000000000 ffffffff8a0c35e7 ffffffff8a0c3603 ffff8880aaa62c00
     ffff8880aaa62c00 0000000000000004 ffff88811145311c 0000000000000005
     0000000000000001 ffff8880aaa62000 fffffe8040b4fd40 ffffffff8a0c360d
    Call Trace:
     <TASK>
     [<ffffffff8a0c360d>] __list_del_entry_valid include/linux/list.h:131 [inline] fffffe8040b4fc28
     [<ffffffff8a0c360d>] __list_del_entry include/linux/list.h:248 [inline] fffffe8040b4fc28
     [<ffffffff8a0c360d>] list_del include/linux/list.h:262 [inline] fffffe8040b4fc28
     [<ffffffff8a0c360d>] gtp_dellink+0x16d/0x360 drivers/net/gtp.c:1557 fffffe8040b4fc28
     [<ffffffff8a0d0404>] gtp_net_exit_batch_rtnl+0x124/0x2c0 drivers/net/gtp.c:2495 fffffe8040b4fc88
     [<ffffffff8e705b24>] cleanup_net+0x5a4/0xbe0 net/core/net_namespace.c:635 fffffe8040b4fcd0
     [<ffffffff81754c97>] process_one_work+0xbd7/0x2160 kernel/workqueue.c:3326 fffffe8040b4fd88
     [<ffffffff81757195>] process_scheduled_works kernel/workqueue.c:3407 [inline] fffffe8040b4fec0
     [<ffffffff81757195>] worker_thread+0x6b5/0xfa0 kernel/workqueue.c:3488 fffffe8040b4fec0
     [<ffffffff817782a0>] kthread+0x360/0x4c0 kernel/kthread.c:397 fffffe8040b4ff78
     [<ffffffff814d8594>] ret_from_fork+0x74/0xe0 arch/x86/kernel/process.c:172 fffffe8040b4ffb8
     [<ffffffff8110f509>] ret_from_fork_asm+0x29/0xc0 arch/x86/entry/entry_64.S:399 fffffe8040b4ffe8
     </TASK>
    Modules linked in:
    
    Fixes: eb28fd76c0a0 ("gtp: Destroy device along with udp socket's netns dismantle.")
    Reported-by: Brad Spengler <spender@grsecurity.net>
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250217203705.40342-2-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ibmvnic: Add stat for tx direct vs tx batched [+ + +]
Author: Nick Child <nnac123@linux.ibm.com>
Date:   Tue Oct 1 11:35:31 2024 -0500

    ibmvnic: Add stat for tx direct vs tx batched
    
    [ Upstream commit 2ee73c54a615b74d2e7ee6f20844fd3ba63fc485 ]
    
    Allow tracking of packets sent with send_subcrq direct vs
    indirect. `ethtool -S <dev>` will now provide a counter
    of the number of uses of each xmit method. This metric will
    be useful in performance debugging.
    
    Signed-off-by: Nick Child <nnac123@linux.ibm.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20241001163531.1803152-1-nnac123@linux.ibm.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: bdf5d13aa05e ("ibmvnic: Don't reference skb after sending to VIOS")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ibmvnic: Don't reference skb after sending to VIOS [+ + +]
Author: Nick Child <nnac123@linux.ibm.com>
Date:   Fri Feb 14 09:52:33 2025 -0600

    ibmvnic: Don't reference skb after sending to VIOS
    
    [ Upstream commit bdf5d13aa05ec314d4385b31ac974d6c7e0997c9 ]
    
    Previously, after successfully flushing the xmit buffer to VIOS,
    the tx_bytes stat was incremented by the length of the skb.
    
    It is invalid to access the skb memory after sending the buffer to
    the VIOS because, at any point after sending, the VIOS can trigger
    an interrupt to free this memory. A race between reading skb->len
    and freeing the skb is possible (especially during LPM) and will
    result in use-after-free:
     ==================================================================
     BUG: KASAN: slab-use-after-free in ibmvnic_xmit+0x75c/0x1808 [ibmvnic]
     Read of size 4 at addr c00000024eb48a70 by task hxecom/14495
     <...>
     Call Trace:
     [c000000118f66cf0] [c0000000018cba6c] dump_stack_lvl+0x84/0xe8 (unreliable)
     [c000000118f66d20] [c0000000006f0080] print_report+0x1a8/0x7f0
     [c000000118f66df0] [c0000000006f08f0] kasan_report+0x128/0x1f8
     [c000000118f66f00] [c0000000006f2868] __asan_load4+0xac/0xe0
     [c000000118f66f20] [c0080000046eac84] ibmvnic_xmit+0x75c/0x1808 [ibmvnic]
     [c000000118f67340] [c0000000014be168] dev_hard_start_xmit+0x150/0x358
     <...>
     Freed by task 0:
     kasan_save_stack+0x34/0x68
     kasan_save_track+0x2c/0x50
     kasan_save_free_info+0x64/0x108
     __kasan_mempool_poison_object+0x148/0x2d4
     napi_skb_cache_put+0x5c/0x194
     net_tx_action+0x154/0x5b8
     handle_softirqs+0x20c/0x60c
     do_softirq_own_stack+0x6c/0x88
     <...>
     The buggy address belongs to the object at c00000024eb48a00 which
      belongs to the cache skbuff_head_cache of size 224
    ==================================================================
    
    Fixes: 032c5e82847a ("Driver for IBM System i/p VNIC protocol")
    Signed-off-by: Nick Child <nnac123@linux.ibm.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20250214155233.235559-1-nnac123@linux.ibm.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ibmvnic: Introduce send sub-crq direct [+ + +]
Author: Nick Child <nnac123@linux.ibm.com>
Date:   Wed Aug 7 16:18:07 2024 -0500

    ibmvnic: Introduce send sub-crq direct
    
    [ Upstream commit 74839f7a82689bf5a21a5447cae8e3a7b7a606d2 ]
    
    Firmware supports two hcalls to send a sub-crq request:
    H_SEND_SUB_CRQ_INDIRECT and H_SEND_SUB_CRQ. The indirect hcall allows
    for submission of batched messages while the other hcall is limited to
    only one message. This protocol is defined in PAPR section 17.2.3.3.
    
    Previously, the ibmvnic xmit function only used the indirect hcall. This
    allowed the driver to batch it's skbs. A single skb can occupy a few
    entries per hcall depending on if FW requires skb header information or
    not. The FW only needs header information if the packet is segmented.
    
    By this logic, if an skb is not GSO then it can fit in one sub-crq
    message and therefore is a candidate for H_SEND_SUB_CRQ.
    Batching skb transmission is only useful when there are more packets
    coming down the line (ie netdev_xmit_more is true).
    
    As it turns out, H_SEND_SUB_CRQ induces less latency than
    H_SEND_SUB_CRQ_INDIRECT. Therefore, use H_SEND_SUB_CRQ where
    appropriate.
    
    Small latency gains seen when doing TCP_RR_150 (request/response
    workload). Ftrace results (graph-time=1):
      Previous:
         ibmvnic_xmit = 29618270.83 us / 8860058.0 hits = AVG 3.34
         ibmvnic_tx_scrq_flush = 21972231.02 us / 6553972.0 hits = AVG 3.35
      Now:
         ibmvnic_xmit = 22153350.96 us / 8438942.0 hits = AVG 2.63
         ibmvnic_tx_scrq_flush = 15858922.4 us / 6244076.0 hits = AVG 2.54
    
    Signed-off-by: Nick Child <nnac123@linux.ibm.com>
    Link: https://patch.msgid.link/20240807211809.1259563-6-nnac123@linux.ibm.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: bdf5d13aa05e ("ibmvnic: Don't reference skb after sending to VIOS")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ibmvnic: Return error code on TX scrq flush fail [+ + +]
Author: Nick Child <nnac123@linux.ibm.com>
Date:   Tue Apr 16 11:41:28 2024 -0500

    ibmvnic: Return error code on TX scrq flush fail
    
    [ Upstream commit 5cb431dcf8048572e9ffc6c30cdbd8832cbe502d ]
    
    In ibmvnic_xmit() if ibmvnic_tx_scrq_flush() returns H_CLOSED then
    it will inform upper level networking functions to disable tx
    queues. H_CLOSED signals that the connection with the vnic server is
    down and a transport event is expected to recover the device.
    
    Previously, ibmvnic_tx_scrq_flush() was hard-coded to return success.
    Therefore, the queues would remain active until ibmvnic_cleanup() is
    called within do_reset().
    
    The problem is that do_reset() depends on the RTNL lock. If several
    ibmvnic devices are resetting then there can be a long wait time until
    the last device can grab the lock. During this time the tx/rx queues
    still appear active to upper level functions.
    
    FYI, we do make a call to netif_carrier_off() outside the RTNL lock but
    its calls to dev_deactivate() are also dependent on the RTNL lock.
    
    As a result, large amounts of retransmissions were observed in a short
    period of time, eventually leading to ETIMEOUT. This was specifically
    seen with HNV devices, likely because of even more RTNL dependencies.
    
    Therefore, ensure the return code of ibmvnic_tx_scrq_flush() is
    propagated to the xmit function to allow for an earlier (and lock-less)
    response to a transport event.
    
    Signed-off-by: Nick Child <nnac123@linux.ibm.com>
    Link: https://lore.kernel.org/r/20240416164128.387920-1-nnac123@linux.ibm.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: bdf5d13aa05e ("ibmvnic: Don't reference skb after sending to VIOS")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Input: serio - define serio_pause_rx guard to pause and resume serio ports [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Wed Sep 4 21:17:06 2024 -0700

    Input: serio - define serio_pause_rx guard to pause and resume serio ports
    
    [ Upstream commit 0e45a09a1da0872786885c505467aab8fb29b5b4 ]
    
    serio_pause_rx() and serio_continue_rx() are usually used together to
    temporarily stop receiving interrupts/data for a given serio port.
    Define "serio_pause_rx" guard for this so that the port is always
    resumed once critical section is over.
    
    Example:
    
            scoped_guard(serio_pause_rx, elo->serio) {
                    elo->expected_packet = toupper(packet[0]);
                    init_completion(&elo->cmd_done);
            }
    
    Link: https://lore.kernel.org/r/20240905041732.2034348-2-dmitry.torokhov@gmail.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Stable-dep-of: 08bd5b7c9a24 ("Input: synaptics - fix crash when enabling pass-through port")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Input: synaptics - fix crash when enabling pass-through port [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Fri Jan 17 09:23:40 2025 -0800

    Input: synaptics - fix crash when enabling pass-through port
    
    [ Upstream commit 08bd5b7c9a2401faabdaa1472d45c7de0755fd7e ]
    
    When enabling a pass-through port an interrupt might come before psmouse
    driver binds to the pass-through port. However synaptics sub-driver
    tries to access psmouse instance presumably associated with the
    pass-through port to figure out if only 1 byte of response or entire
    protocol packet needs to be forwarded to the pass-through port and may
    crash if psmouse instance has not been attached to the port yet.
    
    Fix the crash by introducing open() and close() methods for the port and
    check if the port is open before trying to access psmouse instance.
    Because psmouse calls serio_open() only after attaching psmouse instance
    to serio port instance this prevents the potential crash.
    
    Reported-by: Takashi Iwai <tiwai@suse.de>
    Fixes: 100e16959c3c ("Input: libps2 - attach ps2dev instances as serio port's drvdata")
    Link: https://bugzilla.suse.com/show_bug.cgi?id=1219522
    Cc: stable@vger.kernel.org
    Reviewed-by: Takashi Iwai <tiwai@suse.de>
    Link: https://lore.kernel.org/r/Z4qSHORvPn7EU2j1@google.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
io_uring: prevent opcode speculation [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Fri Feb 14 22:48:15 2025 +0000

    io_uring: prevent opcode speculation
    
    commit 1e988c3fe1264708f4f92109203ac5b1d65de50b upstream.
    
    sqe->opcode is used for different tables, make sure we santitise it
    against speculations.
    
    Cc: stable@vger.kernel.org
    Fixes: d3656344fea03 ("io_uring: add lookup table for various opcode needs")
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Reviewed-by: Li Zetao <lizetao1@huawei.com>
    Link: https://lore.kernel.org/r/7eddbf31c8ca0a3947f8ed98271acc2b4349c016.1739568408.git.asml.silence@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lib/iov_iter: fix import_iovec_ubuf iovec management [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Fri Jan 31 14:13:15 2025 +0000

    lib/iov_iter: fix import_iovec_ubuf iovec management
    
    commit f4b78260fc678ccd7169f32dc9f3bfa3b93931c7 upstream.
    
    import_iovec() says that it should always be fine to kfree the iovec
    returned in @iovp regardless of the error code.  __import_iovec_ubuf()
    never reallocates it and thus should clear the pointer even in cases when
    copy_iovec_*() fail.
    
    Link: https://lkml.kernel.org/r/378ae26923ffc20fd5e41b4360d673bf47b1775b.1738332461.git.asml.silence@gmail.com
    Fixes: 3b2deb0e46da ("iov_iter: import single vector iovecs as ITER_UBUF")
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Reviewed-by: Jens Axboe <axboe@kernel.dk>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.6.80 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Feb 27 04:10:54 2025 -0800

    Linux 6.6.80
    
    Link: https://lore.kernel.org/r/20250224142602.998423469@linuxfoundation.org
    Tested-by: FLorian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
md/md-bitmap: add 'sync_size' into struct md_bitmap_stats [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Mon Aug 26 15:44:16 2024 +0800

    md/md-bitmap: add 'sync_size' into struct md_bitmap_stats
    
    [ Upstream commit ec6bb299c7c3dd4ca1724d13d5f5fae3ee54fc65 ]
    
    To avoid dereferencing bitmap directly in md-cluster to prepare
    inventing a new bitmap.
    
    BTW, also fix following checkpatch warnings:
    
    WARNING: Deprecated use of 'kmap_atomic', prefer 'kmap_local_page' instead
    WARNING: Deprecated use of 'kunmap_atomic', prefer 'kunmap_local' instead
    
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Link: https://lore.kernel.org/r/20240826074452.1490072-7-yukuai1@huaweicloud.com
    Signed-off-by: Song Liu <song@kernel.org>
    Stable-dep-of: 8d28d0ddb986 ("md/md-bitmap: Synchronize bitmap_get_stats() with bitmap lifetime")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

md/md-bitmap: replace md_bitmap_status() with a new helper md_bitmap_get_stats() [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Mon Aug 26 15:44:12 2024 +0800

    md/md-bitmap: replace md_bitmap_status() with a new helper md_bitmap_get_stats()
    
    [ Upstream commit 38f287d7e495ae00d4481702f44ff7ca79f5c9bc ]
    
    There are no functional changes, and the new helper will be used in
    multiple places in following patches to avoid dereferencing bitmap
    directly.
    
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Link: https://lore.kernel.org/r/20240826074452.1490072-3-yukuai1@huaweicloud.com
    Signed-off-by: Song Liu <song@kernel.org>
    Stable-dep-of: 8d28d0ddb986 ("md/md-bitmap: Synchronize bitmap_get_stats() with bitmap lifetime")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

md/md-bitmap: Synchronize bitmap_get_stats() with bitmap lifetime [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Fri Jan 24 17:20:55 2025 +0800

    md/md-bitmap: Synchronize bitmap_get_stats() with bitmap lifetime
    
    [ Upstream commit 8d28d0ddb986f56920ac97ae704cc3340a699a30 ]
    
    After commit ec6bb299c7c3 ("md/md-bitmap: add 'sync_size' into struct
    md_bitmap_stats"), following panic is reported:
    
    Oops: general protection fault, probably for non-canonical address
    RIP: 0010:bitmap_get_stats+0x2b/0xa0
    Call Trace:
     <TASK>
     md_seq_show+0x2d2/0x5b0
     seq_read_iter+0x2b9/0x470
     seq_read+0x12f/0x180
     proc_reg_read+0x57/0xb0
     vfs_read+0xf6/0x380
     ksys_read+0x6c/0xf0
     do_syscall_64+0x82/0x170
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Root cause is that bitmap_get_stats() can be called at anytime if mddev
    is still there, even if bitmap is destroyed, or not fully initialized.
    Deferenceing bitmap in this case can crash the kernel. Meanwhile, the
    above commit start to deferencing bitmap->storage, make the problem
    easier to trigger.
    
    Fix the problem by protecting bitmap_get_stats() with bitmap_info.mutex.
    
    Cc: stable@vger.kernel.org # v6.12+
    Fixes: 32a7627cf3a3 ("[PATCH] md: optimised resync using Bitmap based intent logging")
    Reported-and-tested-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Closes: https://lore.kernel.org/linux-raid/ca3a91a2-50ae-4f68-b317-abd9889f3907@oracle.com/T/#m6e5086c95201135e4941fe38f9efa76daf9666c5
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Link: https://lore.kernel.org/r/20250124092055.4050195-1-yukuai1@huaweicloud.com
    Signed-off-by: Song Liu <song@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
md/md-cluster: fix spares warnings for __le64 [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Mon Aug 26 15:44:15 2024 +0800

    md/md-cluster: fix spares warnings for __le64
    
    [ Upstream commit 82697ccf7e495c1ba81e315c2886d6220ff84c2c ]
    
    drivers/md/md-cluster.c:1220:22: warning: incorrect type in assignment (different base types)
    drivers/md/md-cluster.c:1220:22:    expected unsigned long my_sync_size
    drivers/md/md-cluster.c:1220:22:    got restricted __le64 [usertype] sync_size
    drivers/md/md-cluster.c:1252:35: warning: incorrect type in assignment (different base types)
    drivers/md/md-cluster.c:1252:35:    expected unsigned long sync_size
    drivers/md/md-cluster.c:1252:35:    got restricted __le64 [usertype] sync_size
    drivers/md/md-cluster.c:1253:41: warning: restricted __le64 degrades to integer
    
    Fix the warnings by using le64_to_cpu() to convet __le64 to integer.
    
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Link: https://lore.kernel.org/r/20240826074452.1490072-6-yukuai1@huaweicloud.com
    Signed-off-by: Song Liu <song@kernel.org>
    Stable-dep-of: 8d28d0ddb986 ("md/md-bitmap: Synchronize bitmap_get_stats() with bitmap lifetime")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
md: factor out a helper from mddev_put() [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Wed Sep 27 14:12:40 2023 +0800

    md: factor out a helper from mddev_put()
    
    [ Upstream commit 3d8d32873c7b6d9cec5b40c2ddb8c7c55961694f ]
    
    There are no functional changes, prepare to simplify md_seq_ops in next
    patch.
    
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230927061241.1552837-2-yukuai1@huaweicloud.com
    Stable-dep-of: 8d28d0ddb986 ("md/md-bitmap: Synchronize bitmap_get_stats() with bitmap lifetime")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

md: Fix md_seq_ops() regressions [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Tue Jan 9 21:39:57 2024 +0800

    md: Fix md_seq_ops() regressions
    
    commit f9cfe7e7f96a9414a17d596e288693c4f2325d49 upstream.
    
    Commit cf1b6d4441ff ("md: simplify md_seq_ops") introduce following
    regressions:
    
    1) If list all_mddevs is emptly, personalities and unused devices won't
       be showed to user anymore.
    2) If seq_file buffer overflowed from md_seq_show(), then md_seq_start()
       will be called again, hence personalities will be showed to user
       again.
    3) If seq_file buffer overflowed from md_seq_stop(), seq_read_iter()
       doesn't handle this, hence unused devices won't be showed to user.
    
    Fix above problems by printing personalities and unused devices in
    md_seq_show().
    
    Fixes: cf1b6d4441ff ("md: simplify md_seq_ops")
    Cc: stable@vger.kernel.org # v6.7+
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20240109133957.2975272-1-yukuai1@huaweicloud.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

md: fix missing flush of sync_work [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Tue Dec 5 17:42:13 2023 +0800

    md: fix missing flush of sync_work
    
    commit f2d87a759f6841a132e845e2fafdad37385ddd30 upstream.
    
    Commit ac619781967b ("md: use separate work_struct for md_start_sync()")
    use a new sync_work to replace del_work, however, stop_sync_thread() and
    __md_stop_writes() was trying to wait for sync_thread to be done, hence
    they should switch to use sync_work as well.
    
    Noted that md_start_sync() from sync_work will grab 'reconfig_mutex',
    hence other contex can't held the same lock to flush work, and this will
    be fixed in later patches.
    
    Fixes: ac619781967b ("md: use separate work_struct for md_start_sync()")
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Acked-by: Xiao Ni <xni@redhat.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20231205094215.1824240-2-yukuai1@huaweicloud.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

md: simplify md_seq_ops [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Wed Sep 27 14:12:41 2023 +0800

    md: simplify md_seq_ops
    
    [ Upstream commit cf1b6d4441fffd0ba8ae4ced6a12f578c95ca049 ]
    
    Before this patch, the implementation is hacky and hard to understand:
    
    1) md_seq_start set pos to 1;
    2) md_seq_show found pos is 1, then print Personalities;
    3) md_seq_next found pos is 1, then it update pos to the first mddev;
    4) md_seq_show found pos is not 1 or 2, show mddev;
    5) md_seq_next found pos is not 1 or 2, update pos to next mddev;
    6) loop 4-5 until the last mddev, then md_seq_next update pos to 2;
    7) md_seq_show found pos is 2, then print unused devices;
    8) md_seq_next found pos is 2, stop;
    
    This patch remove the magic value and use seq_list_start/next/stop()
    directly, and move printing "Personalities" to md_seq_start(),
    "unsed devices" to md_seq_stop():
    
    1) md_seq_start print Personalities, and then set pos to first mddev;
    2) md_seq_show show mddev;
    3) md_seq_next update pos to next mddev;
    4) loop 2-3 until the last mddev;
    5) md_seq_stop print unsed devices;
    
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230927061241.1552837-3-yukuai1@huaweicloud.com
    Stable-dep-of: 8d28d0ddb986 ("md/md-bitmap: Synchronize bitmap_get_stats() with bitmap lifetime")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

md: use separate work_struct for md_start_sync() [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Fri Aug 25 11:16:16 2023 +0800

    md: use separate work_struct for md_start_sync()
    
    [ Upstream commit ac619781967bd5663c29606246b50dbebd8b3473 ]
    
    It's a little weird to borrow 'del_work' for md_start_sync(), declare
    a new work_struct 'sync_work' for md_start_sync().
    
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Reviewed-by: Xiao Ni <xni@redhat.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230825031622.1530464-2-yukuai1@huaweicloud.com
    Stable-dep-of: 8d28d0ddb986 ("md/md-bitmap: Synchronize bitmap_get_stats() with bitmap lifetime")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
media: uvcvideo: Only save async fh if success [+ + +]
Author: Ricardo Ribalda <ribalda@chromium.org>
Date:   Tue Dec 3 21:20:08 2024 +0000

    media: uvcvideo: Only save async fh if success
    
    [ Upstream commit d9fecd096f67a4469536e040a8a10bbfb665918b ]
    
    Now we keep a reference to the active fh for any call to uvc_ctrl_set,
    regardless if it is an actual set or if it is a just a try or if the
    device refused the operation.
    
    We should only keep the file handle if the device actually accepted
    applying the operation.
    
    Cc: stable@vger.kernel.org
    Fixes: e5225c820c05 ("media: uvcvideo: Send a control event when a Control Change interrupt arrives")
    Suggested-by: Hans de Goede <hdegoede@redhat.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
    Link: https://lore.kernel.org/r/20241203-uvc-fix-async-v6-1-26c867231118@chromium.org
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: uvcvideo: Refactor iterators [+ + +]
Author: Ricardo Ribalda <ribalda@chromium.org>
Date:   Mon Apr 29 15:04:42 2024 +0000

    media: uvcvideo: Refactor iterators
    
    [ Upstream commit 64627daf0c5f7838111f52bbbd1a597cb5d6871a ]
    
    Avoid using the iterators after the list_for_each() constructs.
    This patch should be a NOP, but makes cocci, happier:
    
    drivers/media/usb/uvc/uvc_ctrl.c:1861:44-50: ERROR: invalid reference to the index variable of the iterator on line 1850
    drivers/media/usb/uvc/uvc_ctrl.c:2195:17-23: ERROR: invalid reference to the index variable of the iterator on line 2179
    
    Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Stable-dep-of: d9fecd096f67 ("media: uvcvideo: Only save async fh if success")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: uvcvideo: Remove dangling pointers [+ + +]
Author: Ricardo Ribalda <ribalda@chromium.org>
Date:   Tue Dec 3 21:20:10 2024 +0000

    media: uvcvideo: Remove dangling pointers
    
    [ Upstream commit 221cd51efe4565501a3dbf04cc011b537dcce7fb ]
    
    When an async control is written, we copy a pointer to the file handle
    that started the operation. That pointer will be used when the device is
    done. Which could be anytime in the future.
    
    If the user closes that file descriptor, its structure will be freed,
    and there will be one dangling pointer per pending async control, that
    the driver will try to use.
    
    Clean all the dangling pointers during release().
    
    To avoid adding a performance penalty in the most common case (no async
    operation), a counter has been introduced with some logic to make sure
    that it is properly handled.
    
    Cc: stable@vger.kernel.org
    Fixes: e5225c820c05 ("media: uvcvideo: Send a control event when a Control Change interrupt arrives")
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Link: https://lore.kernel.org/r/20241203-uvc-fix-async-v6-3-26c867231118@chromium.org
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
memcg: fix soft lockup in the OOM process [+ + +]
Author: Chen Ridong <chenridong@huawei.com>
Date:   Tue Dec 24 02:52:38 2024 +0000

    memcg: fix soft lockup in the OOM process
    
    [ Upstream commit ade81479c7dda1ce3eedb215c78bc615bbd04f06 ]
    
    A soft lockup issue was found in the product with about 56,000 tasks were
    in the OOM cgroup, it was traversing them when the soft lockup was
    triggered.
    
    watchdog: BUG: soft lockup - CPU#2 stuck for 23s! [VM Thread:1503066]
    CPU: 2 PID: 1503066 Comm: VM Thread Kdump: loaded Tainted: G
    Hardware name: Huawei Cloud OpenStack Nova, BIOS
    RIP: 0010:console_unlock+0x343/0x540
    RSP: 0000:ffffb751447db9a0 EFLAGS: 00000247 ORIG_RAX: ffffffffffffff13
    RAX: 0000000000000001 RBX: 0000000000000000 RCX: 00000000ffffffff
    RDX: 0000000000000000 RSI: 0000000000000004 RDI: 0000000000000247
    RBP: ffffffffafc71f90 R08: 0000000000000000 R09: 0000000000000040
    R10: 0000000000000080 R11: 0000000000000000 R12: ffffffffafc74bd0
    R13: ffffffffaf60a220 R14: 0000000000000247 R15: 0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f2fe6ad91f0 CR3: 00000004b2076003 CR4: 0000000000360ee0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     vprintk_emit+0x193/0x280
     printk+0x52/0x6e
     dump_task+0x114/0x130
     mem_cgroup_scan_tasks+0x76/0x100
     dump_header+0x1fe/0x210
     oom_kill_process+0xd1/0x100
     out_of_memory+0x125/0x570
     mem_cgroup_out_of_memory+0xb5/0xd0
     try_charge+0x720/0x770
     mem_cgroup_try_charge+0x86/0x180
     mem_cgroup_try_charge_delay+0x1c/0x40
     do_anonymous_page+0xb5/0x390
     handle_mm_fault+0xc4/0x1f0
    
    This is because thousands of processes are in the OOM cgroup, it takes a
    long time to traverse all of them.  As a result, this lead to soft lockup
    in the OOM process.
    
    To fix this issue, call 'cond_resched' in the 'mem_cgroup_scan_tasks'
    function per 1000 iterations.  For global OOM, call
    'touch_softlockup_watchdog' per 1000 iterations to avoid this issue.
    
    Link: https://lkml.kernel.org/r/20241224025238.3768787-1-chenridong@huaweicloud.com
    Fixes: 9cbb78bb3143 ("mm, memcg: introduce own oom handler to iterate only over its own threads")
    Signed-off-by: Chen Ridong <chenridong@huawei.com>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Shakeel Butt <shakeelb@google.com>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: Michal Koutný <mkoutny@suse.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm,madvise,hugetlb: check for 0-length range after end address adjustment [+ + +]
Author: Ricardo Cañuelo Navarro <rcn@igalia.com>
Date:   Mon Feb 3 08:52:06 2025 +0100

    mm,madvise,hugetlb: check for 0-length range after end address adjustment
    
    commit 2ede647a6fde3e54a6bfda7cf01c716649655900 upstream.
    
    Add a sanity check to madvise_dontneed_free() to address a corner case in
    madvise where a race condition causes the current vma being processed to
    be backed by a different page size.
    
    During a madvise(MADV_DONTNEED) call on a memory region registered with a
    userfaultfd, there's a period of time where the process mm lock is
    temporarily released in order to send a UFFD_EVENT_REMOVE and let
    userspace handle the event.  During this time, the vma covering the
    current address range may change due to an explicit mmap done concurrently
    by another thread.
    
    If, after that change, the memory region, which was originally backed by
    4KB pages, is now backed by hugepages, the end address is rounded down to
    a hugepage boundary to avoid data loss (see "Fixes" below).  This rounding
    may cause the end address to be truncated to the same address as the
    start.
    
    Make this corner case follow the same semantics as in other similar cases
    where the requested region has zero length (ie.  return 0).
    
    This will make madvise_walk_vmas() continue to the next vma in the range
    (this time holding the process mm lock) which, due to the prev pointer
    becoming stale because of the vma change, will be the same hugepage-backed
    vma that was just checked before.  The next time madvise_dontneed_free()
    runs for this vma, if the start address isn't aligned to a hugepage
    boundary, it'll return -EINVAL, which is also in line with the madvise
    api.
    
    From userspace perspective, madvise() will return EINVAL because the start
    address isn't aligned according to the new vma alignment requirements
    (hugepage), even though it was correctly page-aligned when the call was
    issued.
    
    Link: https://lkml.kernel.org/r/20250203075206.1452208-1-rcn@igalia.com
    Fixes: 8ebe0a5eaaeb ("mm,madvise,hugetlb: fix unexpected data loss with MADV_DONTNEED on hugetlbfs")
    Signed-off-by: Ricardo Cañuelo Navarro <rcn@igalia.com>
    Reviewed-by: Oscar Salvador <osalvador@suse.de>
    Cc: Florent Revest <revest@google.com>
    Cc: Rik van Riel <riel@surriel.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm: update mark_victim tracepoints fields [+ + +]
Author: Carlos Galo <carlosgalo@google.com>
Date:   Fri Feb 23 17:32:49 2024 +0000

    mm: update mark_victim tracepoints fields
    
    [ Upstream commit 72ba14deb40a9e9668ec5e66a341ed657e5215c2 ]
    
    The current implementation of the mark_victim tracepoint provides only the
    process ID (pid) of the victim process.  This limitation poses challenges
    for userspace tools requiring real-time OOM analysis and intervention.
    Although this information is available from the kernel logs, it’s not
    the appropriate format to provide OOM notifications.  In Android, BPF
    programs are used with the mark_victim trace events to notify userspace of
    an OOM kill.  For consistency, update the trace event to include the same
    information about the OOMed victim as the kernel logs.
    
    - UID
       In Android each installed application has a unique UID. Including
       the `uid` assists in correlating OOM events with specific apps.
    
    - Process Name (comm)
       Enables identification of the affected process.
    
    - OOM Score
      Will allow userspace to get additional insight of the relative kill
      priority of the OOM victim. In Android, the oom_score_adj is used to
      categorize app state (foreground, background, etc.), which aids in
      analyzing user-perceptible impacts of OOM events [1].
    
    - Total VM, RSS Stats, and pgtables
      Amount of memory used by the victim that will, potentially, be freed up
      by killing it.
    
    [1] https://cs.android.com/android/platform/superproject/main/+/246dc8fc95b6d93afcba5c6d6c133307abb3ac2e:frameworks/base/services/core/java/com/android/server/am/ProcessList.java;l=188-283
    Signed-off-by: Carlos Galo <carlosgalo@google.com>
    Reviewed-by: Steven Rostedt <rostedt@goodmis.org>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: ade81479c7dd ("memcg: fix soft lockup in the OOM process")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mtd: rawnand: cadence: fix error code in cadence_nand_init() [+ + +]
Author: Niravkumar L Rabara <niravkumar.l.rabara@intel.com>
Date:   Mon Feb 10 13:35:49 2025 +0800

    mtd: rawnand: cadence: fix error code in cadence_nand_init()
    
    commit 2b9df00cded911e2ca2cfae5c45082166b24f8aa upstream.
    
    Replace dma_request_channel() with dma_request_chan_by_mask() and use
    helper functions to return proper error code instead of fixed -EBUSY.
    
    Fixes: ec4ba01e894d ("mtd: rawnand: Add new Cadence NAND driver to MTD subsystem")
    Cc: stable@vger.kernel.org
    Signed-off-by: Niravkumar L Rabara <niravkumar.l.rabara@intel.com>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mtd: rawnand: cadence: fix incorrect device in dma_unmap_single [+ + +]
Author: Niravkumar L Rabara <niravkumar.l.rabara@intel.com>
Date:   Mon Feb 10 13:35:51 2025 +0800

    mtd: rawnand: cadence: fix incorrect device in dma_unmap_single
    
    commit f37d135b42cb484bdecee93f56b9f483214ede78 upstream.
    
    dma_map_single is using physical/bus device (DMA) but dma_unmap_single
    is using framework device(NAND controller), which is incorrect.
    Fixed dma_unmap_single to use correct physical/bus device.
    
    Fixes: ec4ba01e894d ("mtd: rawnand: Add new Cadence NAND driver to MTD subsystem")
    Cc: stable@vger.kernel.org
    Signed-off-by: Niravkumar L Rabara <niravkumar.l.rabara@intel.com>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mtd: rawnand: cadence: use dma_map_resource for sdma address [+ + +]
Author: Niravkumar L Rabara <niravkumar.l.rabara@intel.com>
Date:   Mon Feb 10 13:35:50 2025 +0800

    mtd: rawnand: cadence: use dma_map_resource for sdma address
    
    commit d76d22b5096c5b05208fd982b153b3f182350b19 upstream.
    
    Remap the slave DMA I/O resources to enhance driver portability.
    Using a physical address causes DMA translation failure when the
    ARM SMMU is enabled.
    
    Fixes: ec4ba01e894d ("mtd: rawnand: Add new Cadence NAND driver to MTD subsystem")
    Cc: stable@vger.kernel.org
    Signed-off-by: Niravkumar L Rabara <niravkumar.l.rabara@intel.com>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

 
net/sched: cls_api: fix error handling causing NULL dereference [+ + +]
Author: Pierre Riteau <pierre@stackhpc.com>
Date:   Thu Feb 13 23:36:10 2025 +0100

    net/sched: cls_api: fix error handling causing NULL dereference
    
    [ Upstream commit 071ed42cff4fcdd89025d966d48eabef59913bf2 ]
    
    tcf_exts_miss_cookie_base_alloc() calls xa_alloc_cyclic() which can
    return 1 if the allocation succeeded after wrapping. This was treated as
    an error, with value 1 returned to caller tcf_exts_init_ex() which sets
    exts->actions to NULL and returns 1 to caller fl_change().
    
    fl_change() treats err == 1 as success, calling tcf_exts_validate_ex()
    which calls tcf_action_init() with exts->actions as argument, where it
    is dereferenced.
    
    Example trace:
    
    BUG: kernel NULL pointer dereference, address: 0000000000000000
    CPU: 114 PID: 16151 Comm: handler114 Kdump: loaded Not tainted 5.14.0-503.16.1.el9_5.x86_64 #1
    RIP: 0010:tcf_action_init+0x1f8/0x2c0
    Call Trace:
     tcf_action_init+0x1f8/0x2c0
     tcf_exts_validate_ex+0x175/0x190
     fl_change+0x537/0x1120 [cls_flower]
    
    Fixes: 80cd22c35c90 ("net/sched: cls_api: Support hardware miss to tc action")
    Signed-off-by: Pierre Riteau <pierre@stackhpc.com>
    Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
    Link: https://patch.msgid.link/20250213223610.320278-1-pierre@stackhpc.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: Add non-RCU dev_getbyhwaddr() helper [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Tue Feb 18 05:49:30 2025 -0800

    net: Add non-RCU dev_getbyhwaddr() helper
    
    [ Upstream commit 4b5a28b38c4a0106c64416a1b2042405166b26ce ]
    
    Add dedicated helper for finding devices by hardware address when
    holding rtnl_lock, similar to existing dev_getbyhwaddr_rcu(). This prevents
    PROVE_LOCKING warnings when rtnl_lock is held but RCU read lock is not.
    
    Extract common address comparison logic into dev_addr_cmp().
    
    The context about this change could be found in the following
    discussion:
    
    Link: https://lore.kernel.org/all/20250206-scarlet-ermine-of-improvement-1fcac5@leitao/
    
    Cc: kuniyu@amazon.com
    Cc: ushankar@purestorage.com
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250218-arm_fix_selftest-v5-1-d3d6892db9e1@debian.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 4eae0ee0f1e6 ("arp: switch to dev_getbyhwaddr() in arp_req_set_public()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: axienet: Set mac_managed_pm [+ + +]
Author: Nick Hu <nick.hu@sifive.com>
Date:   Mon Feb 17 13:58:42 2025 +0800

    net: axienet: Set mac_managed_pm
    
    [ Upstream commit a370295367b55662a32a4be92565fe72a5aa79bb ]
    
    The external PHY will undergo a soft reset twice during the resume process
    when it wake up from suspend. The first reset occurs when the axienet
    driver calls phylink_of_phy_connect(), and the second occurs when
    mdio_bus_phy_resume() invokes phy_init_hw(). The second soft reset of the
    external PHY does not reinitialize the internal PHY, which causes issues
    with the internal PHY, resulting in the PHY link being down. To prevent
    this, setting the mac_managed_pm flag skips the mdio_bus_phy_resume()
    function.
    
    Fixes: a129b41fe0a8 ("Revert "net: phy: dp83867: perform soft reset and retain established link"")
    Signed-off-by: Nick Hu <nick.hu@sifive.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/20250217055843.19799-1-nick.hu@sifive.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfp: bpf: Add check for nfp_app_ctrl_msg_alloc() [+ + +]
Author: Haoxiang Li <haoxiang_li2024@163.com>
Date:   Tue Feb 18 11:04:09 2025 +0800

    nfp: bpf: Add check for nfp_app_ctrl_msg_alloc()
    
    commit 878e7b11736e062514e58f3b445ff343e6705537 upstream.
    
    Add check for the return value of nfp_app_ctrl_msg_alloc() in
    nfp_bpf_cmsg_alloc() to prevent null pointer dereference.
    
    Fixes: ff3d43f7568c ("nfp: bpf: implement helpers for FW map ops")
    Cc: stable@vger.kernel.org
    Signed-off-by: Haoxiang Li <haoxiang_li2024@163.com>
    Link: https://patch.msgid.link/20250218030409.2425798-1-haoxiang_li2024@163.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nilfs2: eliminate staggered calls to kunmap in nilfs_rename [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Fri Feb 21 22:37:54 2025 +0900

    nilfs2: eliminate staggered calls to kunmap in nilfs_rename
    
    commit 8cf57c6df818f58fdad16a909506be213623a88e upstream.
    
    In nilfs_rename(), calls to nilfs_put_page() to release pages obtained
    with nilfs_find_entry() or nilfs_dotdot() are alternated in the normal
    path.
    
    When replacing the kernel memory mapping method from kmap to
    kmap_local_{page,folio}, this violates the constraint on the calling order
    of kunmap_local().
    
    Swap the order of nilfs_put_page calls where the kmap sections of multiple
    pages overlap so that they are nested, allowing direct replacement of
    nilfs_put_page() -> unmap_and_put_page().
    
    Without this reordering, that replacement will cause a kernel WARNING in
    kunmap_local_indexed() on architectures with high memory mapping.
    
    Link: https://lkml.kernel.org/r/20231127143036.2425-3-konishi.ryusuke@gmail.com
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: ee70999a988b ("nilfs2: handle errors that nilfs_prepare_chunk() may return")
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nilfs2: handle errors that nilfs_prepare_chunk() may return [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Fri Feb 21 22:37:55 2025 +0900

    nilfs2: handle errors that nilfs_prepare_chunk() may return
    
    commit ee70999a988b8abc3490609142f50ebaa8344432 upstream.
    
    Patch series "nilfs2: fix issues with rename operations".
    
    This series fixes BUG_ON check failures reported by syzbot around rename
    operations, and a minor behavioral issue where the mtime of a child
    directory changes when it is renamed instead of moved.
    
    This patch (of 2):
    
    The directory manipulation routines nilfs_set_link() and
    nilfs_delete_entry() rewrite the directory entry in the folio/page
    previously read by nilfs_find_entry(), so error handling is omitted on the
    assumption that nilfs_prepare_chunk(), which prepares the buffer for
    rewriting, will always succeed for these.  And if an error is returned, it
    triggers the legacy BUG_ON() checks in each routine.
    
    This assumption is wrong, as proven by syzbot: the buffer layer called by
    nilfs_prepare_chunk() may call nilfs_get_block() if necessary, which may
    fail due to metadata corruption or other reasons.  This has been there all
    along, but improved sanity checks and error handling may have made it more
    reproducible in fuzzing tests.
    
    Fix this issue by adding missing error paths in nilfs_set_link(),
    nilfs_delete_entry(), and their caller nilfs_rename().
    
    [konishi.ryusuke@gmail.com: adjusted for page/folio conversion]
    Link: https://lkml.kernel.org/r/20250111143518.7901-1-konishi.ryusuke@gmail.com
    Link: https://lkml.kernel.org/r/20250111143518.7901-2-konishi.ryusuke@gmail.com
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Reported-by: syzbot+32c3706ebf5d95046ea1@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=32c3706ebf5d95046ea1
    Reported-by: syzbot+1097e95f134f37d9395c@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=1097e95f134f37d9395c
    Fixes: 2ba466d74ed7 ("nilfs2: directory entry operations")
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nilfs2: move page release outside of nilfs_delete_entry and nilfs_set_link [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Fri Feb 21 22:37:53 2025 +0900

    nilfs2: move page release outside of nilfs_delete_entry and nilfs_set_link
    
    commit 584db20c181f5e28c0386d7987406ace7fbd3e49 upstream.
    
    Patch series "nilfs2: Folio conversions for directory paths".
    
    This series applies page->folio conversions to nilfs2 directory
    operations.  This reduces hidden compound_head() calls and also converts
    deprecated kmap calls to kmap_local in the directory code.
    
    Although nilfs2 does not yet support large folios, Matthew has done his
    best here to include support for large folios, which will be needed for
    devices with large block sizes.
    
    This series corresponds to the second half of the original post [1], but
    with two complementary patches inserted at the beginning and some
    adjustments, to prevent a kmap_local constraint violation found during
    testing with highmem mapping.
    
    [1] https://lkml.kernel.org/r/20231106173903.1734114-1-willy@infradead.org
    
    I have reviewed all changes and tested this for regular and small block
    sizes, both on machines with and without highmem mapping.  No issues
    found.
    
    This patch (of 17):
    
    In a few directory operations, the call to nilfs_put_page() for a page
    obtained using nilfs_find_entry() or nilfs_dotdot() is hidden in
    nilfs_set_link() and nilfs_delete_entry(), making it difficult to track
    page release and preventing change of its call position.
    
    By moving nilfs_put_page() out of these functions, this makes the page
    get/put correspondence clearer and makes it easier to swap
    nilfs_put_page() calls (and kunmap calls within them) when modifying
    multiple directory entries simultaneously in nilfs_rename().
    
    Also, update comments for nilfs_set_link() and nilfs_delete_entry() to
    reflect changes in their behavior.
    
    To make nilfs_put_page() visible from namei.c, this moves its definition
    to nilfs.h and replaces existing equivalents to use it, but the exposure
    of that definition is temporary and will be removed on a later kmap ->
    kmap_local conversion.
    
    Link: https://lkml.kernel.org/r/20231127143036.2425-1-konishi.ryusuke@gmail.com
    Link: https://lkml.kernel.org/r/20231127143036.2425-2-konishi.ryusuke@gmail.com
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: ee70999a988b ("nilfs2: handle errors that nilfs_prepare_chunk() may return")
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nouveau/svm: fix missing folio unlock + put after make_device_exclusive_range() [+ + +]
Author: David Hildenbrand <david@redhat.com>
Date:   Fri Jan 24 19:15:23 2025 +0100

    nouveau/svm: fix missing folio unlock + put after make_device_exclusive_range()
    
    [ Upstream commit b3fefbb30a1691533cb905006b69b2a474660744 ]
    
    In case we have to retry the loop, we are missing to unlock+put the
    folio. In that case, we will keep failing make_device_exclusive_range()
    because we cannot grab the folio lock, and even return from the function
    with the folio locked and referenced, effectively never succeeding the
    make_device_exclusive_range().
    
    While at it, convert the other unlock+put to use a folio as well.
    
    This was found by code inspection.
    
    Fixes: 8f187163eb89 ("nouveau/svm: implement atomic SVM access")
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Reviewed-by: Alistair Popple <apopple@nvidia.com>
    Tested-by: Alistair Popple <apopple@nvidia.com>
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250124181524.3584236-2-david@redhat.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme/ioctl: add missing space in err message [+ + +]
Author: Caleb Sander Mateos <csander@purestorage.com>
Date:   Thu Feb 13 10:05:14 2025 -0700

    nvme/ioctl: add missing space in err message
    
    [ Upstream commit 487a3ea7b1b8ba2ca7d2c2bb3c3594dc360d6261 ]
    
    nvme_validate_passthru_nsid() logs an err message whose format string is
    split over 2 lines. There is a missing space between the two pieces,
    resulting in log lines like "... does not match nsid (1)of namespace".
    Add the missing space between ")" and "of". Also combine the format
    string pieces onto a single line to make the err message easier to grep.
    
    Fixes: e7d4b5493a2d ("nvme: factor out a nvme_validate_passthru_nsid helper")
    Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvmem: Create a header for internal sharing [+ + +]
Author: Miquel Raynal <miquel.raynal@bootlin.com>
Date:   Fri Dec 15 11:15:29 2023 +0000

    nvmem: Create a header for internal sharing
    
    [ Upstream commit ec9c08a1cb8dc5e8e003f95f5f62de41dde235bb ]
    
    Before adding all the NVMEM layout bus infrastructure to the core, let's
    move the main nvmem_device structure in an internal header, only
    available to the core. This way all the additional code can be added in
    a dedicated file in order to keep the current core file tidy.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
    Link: https://lore.kernel.org/r/20231215111536.316972-4-srinivas.kandagatla@linaro.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 391b06ecb63e ("nvmem: imx-ocotp-ele: fix MAC address byte order")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nvmem: imx-ocotp-ele: fix MAC address byte order [+ + +]
Author: Sascha Hauer <s.hauer@pengutronix.de>
Date:   Mon Dec 30 14:18:58 2024 +0000

    nvmem: imx-ocotp-ele: fix MAC address byte order
    
    [ Upstream commit 391b06ecb63e6eacd054582cb4eb738dfbf5eb77 ]
    
    According to the i.MX93 Fusemap the two MAC addresses are stored in
    words 315 to 317 like this:
    
    315     MAC1_ADDR_31_0[31:0]
    316     MAC1_ADDR_47_32[47:32]
            MAC2_ADDR_15_0[15:0]
    317     MAC2_ADDR_47_16[31:0]
    
    This means the MAC addresses are stored in reverse byte order. We have
    to swap the bytes before passing them to the upper layers. The storage
    format is consistent to the one used on i.MX6 using imx-ocotp driver
    which does the same byte swapping as introduced here.
    
    With this patch the MAC address on my i.MX93 TQ board correctly reads as
    00:d0:93:6b:27:b8 instead of b8:27:6b:93:d0:00.
    
    Fixes: 22e9e6fcfb50 ("nvmem: imx: support i.MX93 OCOTP")
    Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
    Cc: stable <stable@kernel.org>
    Reviewed-by: Peng Fan <peng.fan@nxp.com>
    Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
    Link: https://lore.kernel.org/r/20241230141901.263976-4-srinivas.kandagatla@linaro.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nvmem: Move and rename ->fixup_cell_info() [+ + +]
Author: Miquel Raynal <miquel.raynal@bootlin.com>
Date:   Fri Dec 15 11:15:31 2023 +0000

    nvmem: Move and rename ->fixup_cell_info()
    
    [ Upstream commit 1172460e716784ac7e1049a537bdca8edbf97360 ]
    
    This hook is meant to be used by any provider and instantiating a layout
    just for this is useless. Let's instead move this hook to the nvmem
    device and add it to the config structure to be easily shared by the
    providers.
    
    While at moving this hook, rename it ->fixup_dt_cell_info() to clarify
    its main intended purpose.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
    Link: https://lore.kernel.org/r/20231215111536.316972-6-srinivas.kandagatla@linaro.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 391b06ecb63e ("nvmem: imx-ocotp-ele: fix MAC address byte order")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nvmem: Simplify the ->add_cells() hook [+ + +]
Author: Miquel Raynal <miquel.raynal@bootlin.com>
Date:   Fri Dec 15 11:15:30 2023 +0000

    nvmem: Simplify the ->add_cells() hook
    
    [ Upstream commit 1b7c298a4ecbc28cc6ee94005734bff55eb83d22 ]
    
    The layout entry is not used and will anyway be made useless by the new
    layout bus infrastructure coming next, so drop it. While at it, clarify
    the kdoc entry.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
    Link: https://lore.kernel.org/r/20231215111536.316972-5-srinivas.kandagatla@linaro.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 391b06ecb63e ("nvmem: imx-ocotp-ele: fix MAC address byte order")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf/x86/intel: Fix ARCH_PERFMON_NUM_COUNTER_LEAF [+ + +]
Author: Kan Liang <kan.liang@linux.intel.com>
Date:   Wed Jan 29 07:48:19 2025 -0800

    perf/x86/intel: Fix ARCH_PERFMON_NUM_COUNTER_LEAF
    
    commit 47a973fd75639fe80d59f9e1860113bb2a0b112b upstream.
    
    The EAX of the CPUID Leaf 023H enumerates the mask of valid sub-leaves.
    To tell the availability of the sub-leaf 1 (enumerate the counter mask),
    perf should check the bit 1 (0x2) of EAS, rather than bit 0 (0x1).
    
    The error is not user-visible on bare metal. Because the sub-leaf 0 and
    the sub-leaf 1 are always available. However, it may bring issues in a
    virtualization environment when a VMM only enumerates the sub-leaf 0.
    
    Introduce the cpuid35_e?x to replace the macros, which makes the
    implementation style consistent.
    
    Fixes: eb467aaac21e ("perf/x86/intel: Support Architectural PerfMon Extension leaf")
    Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/20250129154820.3755948-3-kan.liang@linux.intel.com
    [ The patch is not exactly the same as the upstream patch. Because in the 6.6
      stable kernel, the umask2/eq enumeration is not supported. The number of
      counters is used rather than the counter mask. But the change is
      straightforward, which utilizes the structured union to replace the macros
      when parsing the CPUID enumeration. It also fixed a wrong macros. ]
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
power: supply: da9150-fg: fix potential overflow [+ + +]
Author: Andrey Vatoropin <a.vatoropin@crpt.ru>
Date:   Thu Jan 30 09:00:34 2025 +0000

    power: supply: da9150-fg: fix potential overflow
    
    [ Upstream commit 3fb3cb4350befc4f901c54e0cb4a2a47b1302e08 ]
    
    Size of variable sd_gain equals four bytes - DA9150_QIF_SD_GAIN_SIZE.
    Size of variable shunt_val equals two bytes - DA9150_QIF_SHUNT_VAL_SIZE.
    
    The expression sd_gain * shunt_val is currently being evaluated using
    32-bit arithmetic. So during the multiplication an overflow may occur.
    
    As the value of type 'u64' is used as storage for the eventual result, put
    ULL variable at the first position of each expression in order to give the
    compiler complete information about the proper arithmetic to use. According
    to C99 the guaranteed width for a variable of type 'unsigned long long' >=
    64 bits.
    
    Remove the explicit cast to u64 as it is meaningless.
    
    Just for the sake of consistency, perform the similar trick with another
    expression concerning 'iavg'.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: a419b4fd9138 ("power: Add support for DA9150 Fuel-Gauge")
    Signed-off-by: Andrey Vatoropin <a.vatoropin@crpt.ru>
    Link: https://lore.kernel.org/r/20250130090030.53422-1-a.vatoropin@crpt.ru
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/64s/mm: Move __real_pte stubs into hash-4k.h [+ + +]
Author: Michael Ellerman <mpe@ellerman.id.au>
Date:   Wed Aug 21 18:07:29 2024 +1000

    powerpc/64s/mm: Move __real_pte stubs into hash-4k.h
    
    [ Upstream commit 8ae4f16f7d7b59cca55aeca6db7c9636ffe7fbaa ]
    
    The stub versions of __real_pte() etc are only used with HPT & 4K pages,
    so move them into the hash-4k.h header.
    
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20240821080729.872034-1-mpe@ellerman.id.au
    Stable-dep-of: 61bcc752d1b8 ("powerpc/64s: Rewrite __real_pte() and __rpte_to_hidx() as static inline")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/64s: Rewrite __real_pte() and __rpte_to_hidx() as static inline [+ + +]
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Sun Jan 12 19:24:46 2025 +0100

    powerpc/64s: Rewrite __real_pte() and __rpte_to_hidx() as static inline
    
    [ Upstream commit 61bcc752d1b81fde3cae454ff20c1d3c359df500 ]
    
    Rewrite __real_pte() and __rpte_to_hidx() as static inline in order to
    avoid following warnings/errors when building with 4k page size:
    
              CC      arch/powerpc/mm/book3s64/hash_tlb.o
            arch/powerpc/mm/book3s64/hash_tlb.c: In function 'hpte_need_flush':
            arch/powerpc/mm/book3s64/hash_tlb.c:49:16: error: variable 'offset' set but not used [-Werror=unused-but-set-variable]
               49 |         int i, offset;
                  |                ^~~~~~
    
              CC      arch/powerpc/mm/book3s64/hash_native.o
            arch/powerpc/mm/book3s64/hash_native.c: In function 'native_flush_hash_range':
            arch/powerpc/mm/book3s64/hash_native.c:782:29: error: variable 'index' set but not used [-Werror=unused-but-set-variable]
              782 |         unsigned long hash, index, hidx, shift, slot;
                  |                             ^~~~~
    
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202501081741.AYFwybsq-lkp@intel.com/
    Fixes: ff31e105464d ("powerpc/mm/hash64: Store the slot information at the right offset for hugetlb")
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/e0d340a5b7bd478ecbf245d826e6ab2778b74e06.1736706263.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/code-patching: Fix KASAN hit by not flagging text patching area as VM_ALLOC [+ + +]
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Wed Feb 12 07:46:28 2025 +0100

    powerpc/code-patching: Fix KASAN hit by not flagging text patching area as VM_ALLOC
    
    [ Upstream commit d262a192d38e527faa5984629aabda2e0d1c4f54 ]
    
    Erhard reported the following KASAN hit while booting his PowerMac G4
    with a KASAN-enabled kernel 6.13-rc6:
    
      BUG: KASAN: vmalloc-out-of-bounds in copy_to_kernel_nofault+0xd8/0x1c8
      Write of size 8 at addr f1000000 by task chronyd/1293
    
      CPU: 0 UID: 123 PID: 1293 Comm: chronyd Tainted: G        W          6.13.0-rc6-PMacG4 #2
      Tainted: [W]=WARN
      Hardware name: PowerMac3,6 7455 0x80010303 PowerMac
      Call Trace:
      [c2437590] [c1631a84] dump_stack_lvl+0x70/0x8c (unreliable)
      [c24375b0] [c0504998] print_report+0xdc/0x504
      [c2437610] [c050475c] kasan_report+0xf8/0x108
      [c2437690] [c0505a3c] kasan_check_range+0x24/0x18c
      [c24376a0] [c03fb5e4] copy_to_kernel_nofault+0xd8/0x1c8
      [c24376c0] [c004c014] patch_instructions+0x15c/0x16c
      [c2437710] [c00731a8] bpf_arch_text_copy+0x60/0x7c
      [c2437730] [c0281168] bpf_jit_binary_pack_finalize+0x50/0xac
      [c2437750] [c0073cf4] bpf_int_jit_compile+0xb30/0xdec
      [c2437880] [c0280394] bpf_prog_select_runtime+0x15c/0x478
      [c24378d0] [c1263428] bpf_prepare_filter+0xbf8/0xc14
      [c2437990] [c12677ec] bpf_prog_create_from_user+0x258/0x2b4
      [c24379d0] [c027111c] do_seccomp+0x3dc/0x1890
      [c2437ac0] [c001d8e0] system_call_exception+0x2dc/0x420
      [c2437f30] [c00281ac] ret_from_syscall+0x0/0x2c
      --- interrupt: c00 at 0x5a1274
      NIP:  005a1274 LR: 006a3b3c CTR: 005296c8
      REGS: c2437f40 TRAP: 0c00   Tainted: G        W           (6.13.0-rc6-PMacG4)
      MSR:  0200f932 <VEC,EE,PR,FP,ME,IR,DR,RI>  CR: 24004422  XER: 00000000
    
      GPR00: 00000166 af8f3fa0 a7ee3540 00000001 00000000 013b6500 005a5858 0200f932
      GPR08: 00000000 00001fe9 013d5fc8 005296c8 2822244c 00b2fcd8 00000000 af8f4b57
      GPR16: 00000000 00000001 00000000 00000000 00000000 00000001 00000000 00000002
      GPR24: 00afdbb0 00000000 00000000 00000000 006e0004 013ce060 006e7c1c 00000001
      NIP [005a1274] 0x5a1274
      LR [006a3b3c] 0x6a3b3c
      --- interrupt: c00
    
      The buggy address belongs to the virtual mapping at
       [f1000000, f1002000) created by:
       text_area_cpu_up+0x20/0x190
    
      The buggy address belongs to the physical page:
      page: refcount:1 mapcount:0 mapping:00000000 index:0x0 pfn:0x76e30
      flags: 0x80000000(zone=2)
      raw: 80000000 00000000 00000122 00000000 00000000 00000000 ffffffff 00000001
      raw: 00000000
      page dumped because: kasan: bad access detected
    
      Memory state around the buggy address:
       f0ffff00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       f0ffff80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      >f1000000: f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8
                 ^
       f1000080: f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8
       f1000100: f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8
      ==================================================================
    
    f8 corresponds to KASAN_VMALLOC_INVALID which means the area is not
    initialised hence not supposed to be used yet.
    
    Powerpc text patching infrastructure allocates a virtual memory area
    using get_vm_area() and flags it as VM_ALLOC. But that flag is meant
    to be used for vmalloc() and vmalloc() allocated memory is not
    supposed to be used before a call to __vmalloc_node_range() which is
    never called for that area.
    
    That went undetected until commit e4137f08816b ("mm, kasan, kmsan:
    instrument copy_from/to_kernel_nofault")
    
    The area allocated by text_area_cpu_up() is not vmalloc memory, it is
    mapped directly on demand when needed by map_kernel_page(). There is
    no VM flag corresponding to such usage, so just pass no flag. That way
    the area will be unpoisonned and usable immediately.
    
    Reported-by: Erhard Furtner <erhard_f@mailbox.org>
    Closes: https://lore.kernel.org/all/20250112135832.57c92322@yea/
    Fixes: 37bc3e5fd764 ("powerpc/lib/code-patching: Use alternate map for patch_instruction()")
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/06621423da339b374f48c0886e3a5db18e896be8.1739342693.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/ism: add release function for struct device [+ + +]
Author: Julian Ruess <julianr@linux.ibm.com>
Date:   Fri Feb 14 13:01:37 2025 +0100

    s390/ism: add release function for struct device
    
    [ Upstream commit 915e34d5ad35a6a9e56113f852ade4a730fb88f0 ]
    
    According to device_release() in /drivers/base/core.c,
    a device without a release function is a broken device
    and must be fixed.
    
    The current code directly frees the device after calling device_add()
    without waiting for other kernel parts to release their references.
    Thus, a reference could still be held to a struct device,
    e.g., by sysfs, leading to potential use-after-free
    issues if a proper release function is not set.
    
    Fixes: 8c81ba20349d ("net/smc: De-tangle ism and smc device initialization")
    Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
    Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
    Signed-off-by: Julian Ruess <julianr@linux.ibm.com>
    Signed-off-by: Alexandra Winter <wintera@linux.ibm.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20250214120137.563409-1-wintera@linux.ibm.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scsi: core: Do not retry I/Os during depopulation [+ + +]
Author: Igor Pylypiv <ipylypiv@google.com>
Date:   Fri Jan 31 10:44:07 2025 -0800

    scsi: core: Do not retry I/Os during depopulation
    
    [ Upstream commit 9ff7c383b8ac0c482a1da7989f703406d78445c6 ]
    
    Fail I/Os instead of retry to prevent user space processes from being
    blocked on the I/O completion for several minutes.
    
    Retrying I/Os during "depopulation in progress" or "depopulation restore in
    progress" results in a continuous retry loop until the depopulation
    completes or until the I/O retry loop is aborted due to a timeout by the
    scsi_cmd_runtime_exceeced().
    
    Depopulation is slow and can take 24+ hours to complete on 20+ TB HDDs.
    Most I/Os in the depopulation retry loop end up taking several minutes
    before returning the failure to user space.
    
    Cc: stable@vger.kernel.org # 4.18.x: 2bbeb8d scsi: core: Handle depopulation and restoration in progress
    Cc: stable@vger.kernel.org # 4.18.x
    Fixes: e37c7d9a0341 ("scsi: core: sanitize++ in progress")
    Signed-off-by: Igor Pylypiv <ipylypiv@google.com>
    Link: https://lore.kernel.org/r/20250131184408.859579-1-ipylypiv@google.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: core: Handle depopulation and restoration in progress [+ + +]
Author: Douglas Gilbert <dgilbert@interlog.com>
Date:   Sun Oct 15 01:06:50 2023 -0400

    scsi: core: Handle depopulation and restoration in progress
    
    [ Upstream commit 2bbeb8d12404cf0603f513fc33269ef9abfbb396 ]
    
    The default handling of the NOT READY sense key is to wait for the device
    to become ready. The "wait" is assumed to be relatively short. However
    there is a sub-class of NOT READY that have the "... in progress" phrase in
    their additional sense code and these can take much longer.  Following on
    from commit 505aa4b6a883 ("scsi: sd: Defer spinning up drive while SANITIZE
    is in progress") we now have element depopulation and restoration that can
    take a long time.  For example, over 24 hours for a 20 TB, 7200 rpm hard
    disk to depopulate 1 of its 20 elements.
    
    Add handling of ASC/ASCQ: 0x4,0x24 (depopulation in progress)
    and ASC/ASCQ: 0x4,0x25 (depopulation restoration in progress)
    to sd.c . The scsi_lib.c has incomplete handling of these
    two messages, so complete it.
    
    Signed-off-by: Douglas Gilbert <dgilbert@interlog.com>
    Link: https://lore.kernel.org/r/20231015050650.131145-1-dgilbert@interlog.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Stable-dep-of: 9ff7c383b8ac ("scsi: core: Do not retry I/Os during depopulation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
smb: client: Add check for next_buffer in receive_encrypted_standard() [+ + +]
Author: Haoxiang Li <haoxiang_li2024@163.com>
Date:   Mon Feb 17 15:20:38 2025 +0800

    smb: client: Add check for next_buffer in receive_encrypted_standard()
    
    commit 860ca5e50f73c2a1cef7eefc9d39d04e275417f7 upstream.
    
    Add check for the return value of cifs_buf_get() and cifs_small_buf_get()
    in receive_encrypted_standard() to prevent null pointer dereference.
    
    Fixes: eec04ea11969 ("smb: client: fix OOB in receive_encrypted_standard()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Haoxiang Li <haoxiang_li2024@163.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
soc/mediatek: mtk-devapc: Convert to platform remove callback returning void [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date:   Mon Sep 25 11:55:05 2023 +0200

    soc/mediatek: mtk-devapc: Convert to platform remove callback returning void
    
    [ Upstream commit a129ac3555c0dca6f04ae404dc0f0790656587fb ]
    
    The .remove() callback for a platform driver returns an int which makes
    many driver authors wrongly assume it's possible to do error handling by
    returning an error code. However the value returned is ignored (apart
    from emitting a warning) and this typically results in resource leaks.
    To improve here there is a quest to make the remove callback return
    void. In the first step of this quest all drivers are converted to
    .remove_new() which already returns void. Eventually after all drivers
    are converted, .remove_new() will be renamed to .remove().
    
    Trivially convert this driver from always returning zero in the remove
    callback to the void returning variant.
    
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Link: https://lore.kernel.org/r/20230925095532.1984344-15-u.kleine-koenig@pengutronix.de
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Stable-dep-of: c9c0036c1990 ("soc: mediatek: mtk-devapc: Fix leaking IO map on driver remove")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
soc: loongson: loongson2_guts: Add check for devm_kstrdup() [+ + +]
Author: Haoxiang Li <haoxiang_li2024@163.com>
Date:   Thu Feb 20 16:17:14 2025 +0800

    soc: loongson: loongson2_guts: Add check for devm_kstrdup()
    
    commit e31e3f6c0ce473f7ce1e70d54ac8e3ed190509f8 upstream.
    
    Add check for the return value of devm_kstrdup() in
    loongson2_guts_probe() to catch potential exception.
    
    Fixes: b82621ac8450 ("soc: loongson: add GUTS driver for loongson-2 platforms")
    Cc: stable@vger.kernel.org
    Signed-off-by: Haoxiang Li <haoxiang_li2024@163.com>
    Link: https://lore.kernel.org/r/20250220081714.2676828-1-haoxiang_li2024@163.com
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

soc: mediatek: mtk-devapc: Fix leaking IO map on driver remove [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Sat Jan 4 15:20:12 2025 +0100

    soc: mediatek: mtk-devapc: Fix leaking IO map on driver remove
    
    [ Upstream commit c9c0036c1990da8d2dd33563e327e05a775fcf10 ]
    
    Driver removal should fully clean up - unmap the memory.
    
    Fixes: 0890beb22618 ("soc: mediatek: add mt6779 devapc driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20250104142012.115974-2-krzysztof.kozlowski@linaro.org
    Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sockmap, vsock: For connectible sockets allow only connected [+ + +]
Author: Michal Luczaj <mhal@rbox.co>
Date:   Thu Feb 13 12:58:49 2025 +0100

    sockmap, vsock: For connectible sockets allow only connected
    
    [ Upstream commit 8fb5bb169d17cdd12c2dcc2e96830ed487d77a0f ]
    
    sockmap expects all vsocks to have a transport assigned, which is expressed
    in vsock_proto::psock_update_sk_prot(). However, there is an edge case
    where an unconnected (connectible) socket may lose its previously assigned
    transport. This is handled with a NULL check in the vsock/BPF recv path.
    
    Another design detail is that listening vsocks are not supposed to have any
    transport assigned at all. Which implies they are not supported by the
    sockmap. But this is complicated by the fact that a socket, before
    switching to TCP_LISTEN, may have had some transport assigned during a
    failed connect() attempt. Hence, we may end up with a listening vsock in a
    sockmap, which blows up quickly:
    
    KASAN: null-ptr-deref in range [0x0000000000000120-0x0000000000000127]
    CPU: 7 UID: 0 PID: 56 Comm: kworker/7:0 Not tainted 6.14.0-rc1+
    Workqueue: vsock-loopback vsock_loopback_work
    RIP: 0010:vsock_read_skb+0x4b/0x90
    Call Trace:
     sk_psock_verdict_data_ready+0xa4/0x2e0
     virtio_transport_recv_pkt+0x1ca8/0x2acc
     vsock_loopback_work+0x27d/0x3f0
     process_one_work+0x846/0x1420
     worker_thread+0x5b3/0xf80
     kthread+0x35a/0x700
     ret_from_fork+0x2d/0x70
     ret_from_fork_asm+0x1a/0x30
    
    For connectible sockets, instead of relying solely on the state of
    vsk->transport, tell sockmap to only allow those representing established
    connections. This aligns with the behaviour for AF_INET and AF_UNIX.
    
    Fixes: 634f1a7110b4 ("vsock: support sockmap")
    Signed-off-by: Michal Luczaj <mhal@rbox.co>
    Acked-by: Stefano Garzarella <sgarzare@redhat.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
strparser: Add read_sock callback [+ + +]
Author: Jiayuan Chen <mrpre@163.com>
Date:   Wed Jan 22 18:09:13 2025 +0800

    strparser: Add read_sock callback
    
    [ Upstream commit 0532a79efd68a4d9686b0385e4993af4b130ff82 ]
    
    Added a new read_sock handler, allowing users to customize read operations
    instead of relying on the native socket's read_sock.
    
    Signed-off-by: Jiayuan Chen <mrpre@163.com>
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Reviewed-by: Jakub Sitnicki <jakub@cloudflare.com>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://patch.msgid.link/20250122100917.49845-2-mrpre@163.com
    Stable-dep-of: 36b62df5683c ("bpf: Fix wrong copied_seq calculation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tcp: adjust rcvq_space after updating scaling ratio [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Mon Feb 17 15:29:05 2025 -0800

    tcp: adjust rcvq_space after updating scaling ratio
    
    [ Upstream commit f5da7c45188eea71394bf445655cae2df88a7788 ]
    
    Since commit under Fixes we set the window clamp in accordance
    to newly measured rcvbuf scaling_ratio. If the scaling_ratio
    decreased significantly we may put ourselves in a situation
    where windows become smaller than rcvq_space, preventing
    tcp_rcv_space_adjust() from increasing rcvbuf.
    
    The significant decrease of scaling_ratio is far more likely
    since commit 697a6c8cec03 ("tcp: increase the default TCP scaling ratio"),
    which increased the "default" scaling ratio from ~30% to 50%.
    
    Hitting the bad condition depends a lot on TCP tuning, and
    drivers at play. One of Meta's workloads hits it reliably
    under following conditions:
     - default rcvbuf of 125k
     - sender MTU 1500, receiver MTU 5000
     - driver settles on scaling_ratio of 78 for the config above.
    Initial rcvq_space gets calculated as TCP_INIT_CWND * tp->advmss
    (10 * 5k = 50k). Once we find out the true scaling ratio and
    MSS we clamp the windows to 38k. Triggering the condition also
    depends on the message sequence of this workload. I can't repro
    the problem with simple iperf or TCP_RR-style tests.
    
    Fixes: a2cbb1603943 ("tcp: Update window clamping condition")
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Neal Cardwell <ncardwell@google.com>
    Link: https://patch.msgid.link/20250217232905.3162187-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: drop secpath at the same time as we currently drop dst [+ + +]
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Mon Feb 17 11:23:35 2025 +0100

    tcp: drop secpath at the same time as we currently drop dst
    
    [ Upstream commit 9b6412e6979f6f9e0632075f8f008937b5cd4efd ]
    
    Xiumei reported hitting the WARN in xfrm6_tunnel_net_exit while
    running tests that boil down to:
     - create a pair of netns
     - run a basic TCP test over ipcomp6
     - delete the pair of netns
    
    The xfrm_state found on spi_byaddr was not deleted at the time we
    delete the netns, because we still have a reference on it. This
    lingering reference comes from a secpath (which holds a ref on the
    xfrm_state), which is still attached to an skb. This skb is not
    leaked, it ends up on sk_receive_queue and then gets defer-free'd by
    skb_attempt_defer_free.
    
    The problem happens when we defer freeing an skb (push it on one CPU's
    defer_list), and don't flush that list before the netns is deleted. In
    that case, we still have a reference on the xfrm_state that we don't
    expect at this point.
    
    We already drop the skb's dst in the TCP receive path when it's no
    longer needed, so let's also drop the secpath. At this point,
    tcp_filter has already called into the LSM hooks that may require the
    secpath, so it should not be needed anymore. However, in some of those
    places, the MPTCP extension has just been attached to the skb, so we
    cannot simply drop all extensions.
    
    Fixes: 68822bdf76f1 ("net: generalize skb freeing deferral to per-cpu lists")
    Reported-by: Xiumei Mu <xmu@redhat.com>
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/5055ba8f8f72bdcb602faa299faca73c280b7735.1739743613.git.sd@queasysnail.net
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tee: optee: Fix supplicant wait loop [+ + +]
Author: Sumit Garg <sumit.garg@linaro.org>
Date:   Tue Feb 4 13:04:18 2025 +0530

    tee: optee: Fix supplicant wait loop
    
    commit 70b0d6b0a199c5a3ee6c72f5e61681ed6f759612 upstream.
    
    OP-TEE supplicant is a user-space daemon and it's possible for it
    be hung or crashed or killed in the middle of processing an OP-TEE
    RPC call. It becomes more complicated when there is incorrect shutdown
    ordering of the supplicant process vs the OP-TEE client application which
    can eventually lead to system hang-up waiting for the closure of the
    client application.
    
    Allow the client process waiting in kernel for supplicant response to
    be killed rather than indefinitely waiting in an unkillable state. Also,
    a normal uninterruptible wait should not have resulted in the hung-task
    watchdog getting triggered, but the endless loop would.
    
    This fixes issues observed during system reboot/shutdown when supplicant
    got hung for some reason or gets crashed/killed which lead to client
    getting hung in an unkillable state. It in turn lead to system being in
    hung up state requiring hard power off/on to recover.
    
    Fixes: 4fb0a5eb364d ("tee: add OP-TEE driver")
    Suggested-by: Arnd Bergmann <arnd@arndb.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
    Reviewed-by: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: gadget: core: create sysfs link between udc and gadget [+ + +]
Author: Roy Luo <royluo@google.com>
Date:   Thu Mar 7 03:09:22 2024 +0000

    USB: gadget: core: create sysfs link between udc and gadget
    
    [ Upstream commit 0ef40f399aa2be8c04aee9b7430705612c104ce5 ]
    
    udc device and gadget device are tightly coupled, yet there's no good
    way to corelate the two. Add a sysfs link in udc that points to the
    corresponding gadget device.
    An example use case: userspace configures a f_midi configfs driver and
    bind the udc device, then it tries to locate the corresponding midi
    device, which is a child device of the gadget device. The gadget device
    that's associated to the udc device has to be identified in order to
    index the midi device. Having a sysfs link would make things much
    easier.
    
    Signed-off-by: Roy Luo <royluo@google.com>
    Link: https://lore.kernel.org/r/20240307030922.3573161-1-royluo@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 399a45e5237c ("usb: gadget: core: flush gadget workqueue after device removal")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
usb: gadget: core: flush gadget workqueue after device removal [+ + +]
Author: Roy Luo <royluo@google.com>
Date:   Tue Feb 4 23:36:42 2025 +0000

    usb: gadget: core: flush gadget workqueue after device removal
    
    [ Upstream commit 399a45e5237ca14037120b1b895bd38a3b4492ea ]
    
    device_del() can lead to new work being scheduled in gadget->work
    workqueue. This is observed, for example, with the dwc3 driver with the
    following call stack:
      device_del()
        gadget_unbind_driver()
          usb_gadget_disconnect_locked()
            dwc3_gadget_pullup()
              dwc3_gadget_soft_disconnect()
                usb_gadget_set_state()
                  schedule_work(&gadget->work)
    
    Move flush_work() after device_del() to ensure the workqueue is cleaned
    up.
    
    Fixes: 5702f75375aa9 ("usb: gadget: udc-core: move sysfs_notify() to a workqueue")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Roy Luo <royluo@google.com>
    Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
    Reviewed-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/20250204233642.666991-1-royluo@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
USB: gadget: f_midi: f_midi_complete to call queue_work [+ + +]
Author: Jill Donahue <jilliandonahue58@gmail.com>
Date:   Tue Feb 11 10:48:05 2025 -0700

    USB: gadget: f_midi: f_midi_complete to call queue_work
    
    [ Upstream commit 4ab37fcb42832cdd3e9d5e50653285ca84d6686f ]
    
    When using USB MIDI, a lock is attempted to be acquired twice through a
    re-entrant call to f_midi_transmit, causing a deadlock.
    
    Fix it by using queue_work() to schedule the inner f_midi_transmit() via
    a high priority work queue from the completion handler.
    
    Link: https://lore.kernel.org/all/CAArt=LjxU0fUZOj06X+5tkeGT+6RbXzpWg1h4t4Fwa_KGVAX6g@mail.gmail.com/
    Fixes: d5daf49b58661 ("USB: gadget: midi: add midi function driver")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Jill Donahue <jilliandonahue58@gmail.com>
    Link: https://lore.kernel.org/r/20250211174805.1369265-1-jdonahue@fender.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vsock/bpf: Warn on socket without transport [+ + +]
Author: Michal Luczaj <mhal@rbox.co>
Date:   Thu Feb 13 12:58:50 2025 +0100

    vsock/bpf: Warn on socket without transport
    
    [ Upstream commit 857ae05549ee2542317e7084ecaa5f8536634dd9 ]
    
    In the spirit of commit 91751e248256 ("vsock: prevent null-ptr-deref in
    vsock_*[has_data|has_space]"), armorize the "impossible" cases with a
    warning.
    
    Fixes: 634f1a7110b4 ("vsock: support sockmap")
    Signed-off-by: Michal Luczaj <mhal@rbox.co>
    Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/cpu/kvm: SRSO: Fix possible missing IBPB on VM-Exit [+ + +]
Author: Patrick Bellasi <derkling@google.com>
Date:   Wed Feb 5 14:04:41 2025 +0000

    x86/cpu/kvm: SRSO: Fix possible missing IBPB on VM-Exit
    
    commit 318e8c339c9a0891c389298bb328ed0762a9935e upstream.
    
    In [1] the meaning of the synthetic IBPB flags has been redefined for a
    better separation of concerns:
     - ENTRY_IBPB     -- issue IBPB on entry only
     - IBPB_ON_VMEXIT -- issue IBPB on VM-Exit only
    and the Retbleed mitigations have been updated to match this new
    semantics.
    
    Commit [2] was merged shortly before [1], and their interaction was not
    handled properly. This resulted in IBPB not being triggered on VM-Exit
    in all SRSO mitigation configs requesting an IBPB there.
    
    Specifically, an IBPB on VM-Exit is triggered only when
    X86_FEATURE_IBPB_ON_VMEXIT is set. However:
    
     - X86_FEATURE_IBPB_ON_VMEXIT is not set for "spec_rstack_overflow=ibpb",
       because before [1] having X86_FEATURE_ENTRY_IBPB was enough. Hence,
       an IBPB is triggered on entry but the expected IBPB on VM-exit is
       not.
    
     - X86_FEATURE_IBPB_ON_VMEXIT is not set also when
       "spec_rstack_overflow=ibpb-vmexit" if X86_FEATURE_ENTRY_IBPB is
       already set.
    
       That's because before [1] this was effectively redundant. Hence, e.g.
       a "retbleed=ibpb spec_rstack_overflow=bpb-vmexit" config mistakenly
       reports the machine still vulnerable to SRSO, despite an IBPB being
       triggered both on entry and VM-Exit, because of the Retbleed selected
       mitigation config.
    
     - UNTRAIN_RET_VM won't still actually do anything unless
       CONFIG_MITIGATION_IBPB_ENTRY is set.
    
    For "spec_rstack_overflow=ibpb", enable IBPB on both entry and VM-Exit
    and clear X86_FEATURE_RSB_VMEXIT which is made superfluous by
    X86_FEATURE_IBPB_ON_VMEXIT. This effectively makes this mitigation
    option similar to the one for 'retbleed=ibpb', thus re-order the code
    for the RETBLEED_MITIGATION_IBPB option to be less confusing by having
    all features enabling before the disabling of the not needed ones.
    
    For "spec_rstack_overflow=ibpb-vmexit", guard this mitigation setting
    with CONFIG_MITIGATION_IBPB_ENTRY to ensure UNTRAIN_RET_VM sequence is
    effectively compiled in. Drop instead the CONFIG_MITIGATION_SRSO guard,
    since none of the SRSO compile cruft is required in this configuration.
    Also, check only that the required microcode is present to effectively
    enabled the IBPB on VM-Exit.
    
    Finally, update the KConfig description for CONFIG_MITIGATION_IBPB_ENTRY
    to list also all SRSO config settings enabled by this guard.
    
    Fixes: 864bcaa38ee4 ("x86/cpu/kvm: Provide UNTRAIN_RET_VM") [1]
    Fixes: d893832d0e1e ("x86/srso: Add IBPB on VMEXIT") [2]
    Reported-by: Yosry Ahmed <yosryahmed@google.com>
    Signed-off-by: Patrick Bellasi <derkling@google.com>
    Reviewed-by: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: stable@kernel.org
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xfs: assert a valid limit in xfs_rtfind_forw [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:02 2025 -0800

    xfs: assert a valid limit in xfs_rtfind_forw
    
    commit 6d2db12d56a389b3e8efa236976f8dc3a8ae00f0 upstream.
    
    Protect against developers passing stupid limits when refactoring the
    RT code once again.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: call xfs_bmap_exact_minlen_extent_alloc from xfs_bmap_btalloc [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:14 2025 -0800

    xfs: call xfs_bmap_exact_minlen_extent_alloc from xfs_bmap_btalloc
    
    commit 405ee87c6938f67e6ab62a3f8f85b3c60a093886 upstream.
    
    [backport: dependency of 6aac770]
    
    xfs_bmap_exact_minlen_extent_alloc duplicates the args setup in
    xfs_bmap_btalloc.  Switch to call it from xfs_bmap_btalloc after
    doing the basic setup.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: Check for delayed allocations before setting extsize [+ + +]
Author: Ojaswin Mujoo <ojaswin@linux.ibm.com>
Date:   Wed Feb 5 13:40:25 2025 -0800

    xfs: Check for delayed allocations before setting extsize
    
    commit 2a492ff66673c38a77d0815d67b9a8cce2ef57f8 upstream.
    
    Extsize should only be allowed to be set on files with no data in it.
    For this, we check if the files have extents but miss to check if
    delayed extents are present. This patch adds that check.
    
    While we are at it, also refactor this check into a helper since
    it's used in some other places as well like xfs_inactive() or
    xfs_ioctl_setattr_xflags()
    
    **Without the patch (SUCCEEDS)**
    
    $ xfs_io -c 'open -f testfile' -c 'pwrite 0 1024' -c 'extsize 65536'
    
    wrote 1024/1024 bytes at offset 0
    1 KiB, 1 ops; 0.0002 sec (4.628 MiB/sec and 4739.3365 ops/sec)
    
    **With the patch (FAILS as expected)**
    
    $ xfs_io -c 'open -f testfile' -c 'pwrite 0 1024' -c 'extsize 65536'
    
    wrote 1024/1024 bytes at offset 0
    1 KiB, 1 ops; 0.0002 sec (4.628 MiB/sec and 4739.3365 ops/sec)
    xfs_io: FS_IOC_FSSETXATTR testfile: Invalid argument
    
    Fixes: e94af02a9cd7 ("[XFS] fix old xfs_setattr mis-merge from irix; mostly harmless esp if not using xfs rt")
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: John Garry <john.g.garry@oracle.com>
    Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: distinguish extra split from real ENOSPC from xfs_attr3_leaf_split [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:10 2025 -0800

    xfs: distinguish extra split from real ENOSPC from xfs_attr3_leaf_split
    
    commit a5f73342abe1f796140f6585e43e2aa7bc1b7975 upstream.
    
    xfs_attr3_leaf_split propagates the need for an extra btree split as
    -ENOSPC to it's only caller, but the same return value can also be
    returned from xfs_da_grow_inode when it fails to find free space.
    
    Distinguish the two cases by returning 1 for the extra split case instead
    of overloading -ENOSPC.
    
    This can be triggered relatively easily with the pending realtime group
    support and a file system with a lot of small zones that use metadata
    space on the main device.  In this case every about 5-10th run of
    xfs/538 runs into the following assert:
    
            ASSERT(oldblk->magic == XFS_ATTR_LEAF_MAGIC);
    
    in xfs_attr3_leaf_split caused by an allocation failure.  Note that
    the allocation failure is caused by another bug that will be fixed
    subsequently, but this commit at least sorts out the error handling.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: distinguish extra split from real ENOSPC from xfs_attr_node_try_addname [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:11 2025 -0800

    xfs: distinguish extra split from real ENOSPC from xfs_attr_node_try_addname
    
    commit b3f4e84e2f438a119b7ca8684a25452b3e57c0f0 upstream.
    
    Just like xfs_attr3_leaf_split, xfs_attr_node_try_addname can return
    -ENOSPC both for an actual failure to allocate a disk block, but also
    to signal the caller to convert the format of the attr fork.  Use magic
    1 to ask for the conversion here as well.
    
    Note that unlike the similar issue in xfs_attr3_leaf_split, this one was
    only found by code review.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: don't free cowblocks from under dirty pagecache on unshare [+ + +]
Author: Brian Foster <bfoster@redhat.com>
Date:   Wed Feb 5 13:40:07 2025 -0800

    xfs: don't free cowblocks from under dirty pagecache on unshare
    
    commit 4390f019ad7866c3791c3d768d2ff185d89e8ebe upstream.
    
    fallocate unshare mode explicitly breaks extent sharing. When a
    command completes, it checks the data fork for any remaining shared
    extents to determine whether the reflink inode flag and COW fork
    preallocation can be removed. This logic doesn't consider in-core
    pagecache and I/O state, however, which means we can unsafely remove
    COW fork blocks that are still needed under certain conditions.
    
    For example, consider the following command sequence:
    
    xfs_io -fc "pwrite 0 1k" -c "reflink <file> 0 256k 1k" \
            -c "pwrite 0 32k" -c "funshare 0 1k" <file>
    
    This allocates a data block at offset 0, shares it, and then
    overwrites it with a larger buffered write. The overwrite triggers
    COW fork preallocation, 32 blocks by default, which maps the entire
    32k write to delalloc in the COW fork. All but the shared block at
    offset 0 remains hole mapped in the data fork. The unshare command
    redirties and flushes the folio at offset 0, removing the only
    shared extent from the inode. Since the inode no longer maps shared
    extents, unshare purges the COW fork before the remaining 28k may
    have written back.
    
    This leaves dirty pagecache backed by holes, which writeback quietly
    skips, thus leaving clean, non-zeroed pagecache over holes in the
    file. To verify, fiemap shows holes in the first 32k of the file and
    reads return different data across a remount:
    
    $ xfs_io -c "fiemap -v" <file>
    <file>:
     EXT: FILE-OFFSET      BLOCK-RANGE      TOTAL FLAGS
       ...
       1: [8..511]:        hole               504
       ...
    $ xfs_io -c "pread -v 4k 8" <file>
    00001000:  cd cd cd cd cd cd cd cd  ........
    $ umount <mnt>; mount <dev> <mnt>
    $ xfs_io -c "pread -v 4k 8" <file>
    00001000:  00 00 00 00 00 00 00 00  ........
    
    To avoid this problem, make unshare follow the same rules used for
    background cowblock scanning and never purge the COW fork for inodes
    with dirty pagecache or in-flight I/O.
    
    Fixes: 46afb0628b86347 ("xfs: only flush the unshared range in xfs_reflink_unshare")
    Signed-off-by: Brian Foster <bfoster@redhat.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: don't ifdef around the exact minlen allocations [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:13 2025 -0800

    xfs: don't ifdef around the exact minlen allocations
    
    commit b611fddc0435738e64453bbf1dadd4b12a801858 upstream.
    
    Exact minlen allocations only exist as an error injection tool for debug
    builds.  Currently this is implemented using ifdefs, which means the code
    isn't even compiled for non-XFS_DEBUG builds.  Enhance the compile test
    coverage by always building the code and use the compilers' dead code
    elimination to remove it from the generated binary instead.
    
    The only downside is that the alloc_minlen_only field is unconditionally
    added to struct xfs_alloc_args now, but by moving it around and packing
    it tightly this doesn't actually increase the size of the structure.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: don't over-report free space or inodes in statvfs [+ + +]
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Thu Dec 12 14:37:56 2024 -0800

    xfs: don't over-report free space or inodes in statvfs
    
    [ Upstream commit 4b8d867ca6e2fc6d152f629fdaf027053b81765a ]
    
    Emmanual Florac reports a strange occurrence when project quota limits
    are enabled, free space is lower than the remaining quota, and someone
    runs statvfs:
    
      # mkfs.xfs -f /dev/sda
      # mount /dev/sda /mnt -o prjquota
      # xfs_quota  -x -c 'limit -p bhard=2G 55' /mnt
      # mkdir /mnt/dir
      # xfs_io -c 'chproj 55' -c 'chattr +P' -c 'stat -vvvv' /mnt/dir
      # fallocate -l 19g /mnt/a
      # df /mnt /mnt/dir
      Filesystem      Size  Used Avail Use% Mounted on
      /dev/sda         20G   20G  345M  99% /mnt
      /dev/sda        2.0G     0  2.0G   0% /mnt
    
    I think the bug here is that xfs_fill_statvfs_from_dquot unconditionally
    assigns to f_bfree without checking that the filesystem has enough free
    space to fill the remaining project quota.  However, this is a
    longstanding behavior of xfs so it's unclear what to do here.
    
    Cc: <stable@vger.kernel.org> # v2.6.18
    Fixes: 932f2c323196c2 ("[XFS] statvfs component of directory/project quota support, code originally by Glen.")
    Reported-by: Emmanuel Florac <eflorac@intellique.com>
    Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xfs: don't use __GFP_RETRY_MAYFAIL in xfs_initialize_perag [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:21 2025 -0800

    xfs: don't use __GFP_RETRY_MAYFAIL in xfs_initialize_perag
    
    commit 069cf5e32b700f94c6ac60f6171662bdfb04f325 upstream.
    
    [backport: uses kmem_zalloc instead of kzalloc]
    
    __GFP_RETRY_MAYFAIL increases the likelyhood of allocations to fail,
    which isn't really helpful during log recovery.  Remove the flag and
    stick to the default GFP_KERNEL policies.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Brian Foster <bfoster@redhat.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: error out when a superblock buffer update reduces the agcount [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:20 2025 -0800

    xfs: error out when a superblock buffer update reduces the agcount
    
    commit b882b0f8138ffa935834e775953f1630f89bbb62 upstream.
    
    XFS currently does not support reducing the agcount, so error out if
    a logged sb buffer tries to shrink the agcount.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Brian Foster <bfoster@redhat.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: fix a sloppy memory handling bug in xfs_iroot_realloc [+ + +]
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Wed Feb 5 13:40:04 2025 -0800

    xfs: fix a sloppy memory handling bug in xfs_iroot_realloc
    
    commit de55149b6639e903c4d06eb0474ab2c05060e61d upstream.
    
    While refactoring code, I noticed that when xfs_iroot_realloc tries to
    shrink a bmbt root block, it allocates a smaller new block and then
    copies "records" and pointers to the new block.  However, bmbt root
    blocks cannot ever be leaves, which means that it's not technically
    correct to copy records.  We /should/ be copying keys.
    
    Note that this has never resulted in actual memory corruption because
    sizeof(bmbt_rec) == (sizeof(bmbt_key) + sizeof(bmbt_ptr)).  However,
    this will no longer be true when we start adding realtime rmap stuff,
    so fix this now.
    
    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: fix a typo [+ + +]
Author: Andrew Kreimer <algonell@gmail.com>
Date:   Wed Feb 5 13:40:05 2025 -0800

    xfs: fix a typo
    
    commit 77bfe1b11ea0c0c4b0ce19b742cd1aa82f60e45d upstream.
    
    Fix a typo in comments.
    
    Signed-off-by: Andrew Kreimer <algonell@gmail.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: fold xfs_bmap_alloc_userdata into xfs_bmapi_allocate [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:12 2025 -0800

    xfs: fold xfs_bmap_alloc_userdata into xfs_bmapi_allocate
    
    commit 865469cd41bce2b04bef9539cbf70676878bc8df upstream.
    
    [backport: dependency of 6aac770]
    
    Userdata and metadata allocations end up in the same allocation helpers.
    Remove the separate xfs_bmap_alloc_userdata function to make this more
    clear.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: merge xfs_attr_leaf_try_add into xfs_attr_leaf_addname [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:08 2025 -0800

    xfs: merge xfs_attr_leaf_try_add into xfs_attr_leaf_addname
    
    commit b1c649da15c2e4c86344c8e5af69c8afa215efec upstream.
    
    [backport: dependency of a5f7334 and b3f4e84]
    
    xfs_attr_leaf_try_add is only called by xfs_attr_leaf_addname, and
    merging the two will simplify a following error handling fix.
    
    To facilitate this move the remote block state save/restore helpers up in
    the file so that they don't need forward declarations now.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: pass the exact range to initialize to xfs_initialize_perag [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:18 2025 -0800

    xfs: pass the exact range to initialize to xfs_initialize_perag
    
    commit 82742f8c3f1a93787a05a00aca50c2a565231f84 upstream.
    
    [backport: dependency of 6a18765b]
    
    Currently only the new agcount is passed to xfs_initialize_perag, which
    requires lookups of existing AGs to skip them and complicates error
    handling.  Also pass the previous agcount so that the range that
    xfs_initialize_perag operates on is exactly defined.  That way the
    extra lookups can be avoided, and error handling can clean up the
    exact range from the old count to the last added perag structure.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Brian Foster <bfoster@redhat.com>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: Reduce unnecessary searches when searching for the best extents [+ + +]
Author: Chi Zhiling <chizhiling@kylinos.cn>
Date:   Wed Feb 5 13:40:23 2025 -0800

    xfs: Reduce unnecessary searches when searching for the best extents
    
    commit 3ef22684038aa577c10972ee9c6a2455f5fac941 upstream.
    
    Recently, we found that the CPU spent a lot of time in
    xfs_alloc_ag_vextent_size when the filesystem has millions of fragmented
    spaces.
    
    The reason is that we conducted much extra searching for extents that
    could not yield a better result, and these searches would cost a lot of
    time when there were millions of extents to search through. Even if we
    get the same result length, we don't switch our choice to the new one,
    so we can definitely terminate the search early.
    
    Since the result length cannot exceed the found length, when the found
    length equals the best result length we already have, we can conclude
    the search.
    
    We did a test in that filesystem:
    [root@localhost ~]# xfs_db -c freesp /dev/vdb
       from      to extents  blocks    pct
          1       1     215     215   0.01
          2       3  994476 1988952  99.99
    
    Before this patch:
     0)               |  xfs_alloc_ag_vextent_size [xfs]() {
     0) * 15597.94 us |  }
    
    After this patch:
     0)               |  xfs_alloc_ag_vextent_size [xfs]() {
     0)   19.176 us    |  }
    
    Signed-off-by: Chi Zhiling <chizhiling@kylinos.cn>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: Remove empty declartion in header file [+ + +]
Author: Zhang Zekun <zhangzekun11@huawei.com>
Date:   Wed Feb 5 13:40:17 2025 -0800

    xfs: Remove empty declartion in header file
    
    commit f6225eebd76f371dab98b4d1c1a7c1e255190aef upstream.
    
    The definition of xfs_attr_use_log_assist() has been removed since
    commit d9c61ccb3b09 ("xfs: move xfs_attr_use_log_assist out of xfs_log.c").
    So, Remove the empty declartion in header files.
    
    Signed-off-by: Zhang Zekun <zhangzekun11@huawei.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: report realtime block quota limits on realtime directories [+ + +]
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Sun Nov 3 20:19:40 2024 -0800

    xfs: report realtime block quota limits on realtime directories
    
    [ Upstream commit 9a17ebfea9d0c7e0bb7409dcf655bf982a5d6e52 ]
    
    On the data device, calling statvfs on a projinherit directory results
    in the block and avail counts being curtailed to the project quota block
    limits, if any are set.  Do the same for realtime files or directories,
    only use the project quota rt block limits.
    
    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Stable-dep-of: 4b8d867ca6e2 ("xfs: don't over-report free space or inodes in statvfs")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xfs: return bool from xfs_attr3_leaf_add [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:09 2025 -0800

    xfs: return bool from xfs_attr3_leaf_add
    
    commit 346c1d46d4c631c0c88592d371f585214d714da4 upstream.
    
    [backport: dependency of a5f7334 and b3f4e84]
    
    xfs_attr3_leaf_add only has two potential return values, indicating if the
    entry could be added or not.  Replace the errno return with a bool so that
    ENOSPC from it can't easily be confused with a real ENOSPC.
    
    Remove the return value from the xfs_attr3_leaf_add_work helper entirely,
    as it always return 0.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: skip background cowblock trims on inodes open for write [+ + +]
Author: Brian Foster <bfoster@redhat.com>
Date:   Wed Feb 5 13:40:06 2025 -0800

    xfs: skip background cowblock trims on inodes open for write
    
    commit 90a71daaf73f5d39bb0cbb3c7ab6af942fe6233e upstream.
    
    The background blockgc scanner runs on a 5m interval by default and
    trims preallocation (post-eof and cow fork) from inodes that are
    otherwise idle. Idle effectively means that iolock can be acquired
    without blocking and that the inode has no dirty pagecache or I/O in
    flight.
    
    This simple mechanism and heuristic has worked fairly well for
    post-eof speculative preallocations. Support for reflink and COW
    fork preallocations came sometime later and plugged into the same
    mechanism, with similar heuristics. Some recent testing has shown
    that COW fork preallocation may be notably more sensitive to blockgc
    processing than post-eof preallocation, however.
    
    For example, consider an 8GB reflinked file with a COW extent size
    hint of 1MB. A worst case fully randomized overwrite of this file
    results in ~8k extents of an average size of ~1MB. If the same
    workload is interrupted a couple times for blockgc processing
    (assuming the file goes idle), the resulting extent count explodes
    to over 100k extents with an average size <100kB. This is
    significantly worse than ideal and essentially defeats the COW
    extent size hint mechanism.
    
    While this particular test is instrumented, it reflects a fairly
    reasonable pattern in practice where random I/Os might spread out
    over a large period of time with varying periods of (in)activity.
    For example, consider a cloned disk image file for a VM or container
    with long uptime and variable and bursty usage. A background blockgc
    scan that races and processes the image file when it happens to be
    clean and idle can have a significant effect on the future
    fragmentation level of the file, even when still in use.
    
    To help combat this, update the heuristic to skip cowblocks inodes
    that are currently opened for write access during non-sync blockgc
    scans. This allows COW fork preallocations to persist for as long as
    possible unless otherwise needed for functional purposes (i.e. a
    sync scan), the file is idle and closed, or the inode is being
    evicted from cache. While here, update the comments to help
    distinguish performance oriented heuristics from the logic that
    exists to maintain functional correctness.
    
    Suggested-by: Darrick Wong <djwong@kernel.org>
    Signed-off-by: Brian Foster <bfoster@redhat.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: streamline xfs_filestream_pick_ag [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:24 2025 -0800

    xfs: streamline xfs_filestream_pick_ag
    
    commit 81a1e1c32ef474c20ccb9f730afe1ac25b1c62a4 upstream.
    
    Directly return the error from xfs_bmap_longest_free_extent instead
    of breaking from the loop and handling it there, and use a done
    label to directly jump to the exist when we found a suitable perag
    structure to reduce the indentation level and pag/max_pag check
    complexity in the tail of the function.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: support lowmode allocations in xfs_bmap_exact_minlen_extent_alloc [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:15 2025 -0800

    xfs: support lowmode allocations in xfs_bmap_exact_minlen_extent_alloc
    
    commit 6aac77059881e4419df499392c995bf02fb9630b upstream.
    
    Currently the debug-only xfs_bmap_exact_minlen_extent_alloc allocation
    variant fails to drop into the lowmode last resort allocator, and
    thus can sometimes fail allocations for which the caller has a
    transaction block reservation.
    
    Fix this by using xfs_bmap_btalloc_low_space to do the actual allocation.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: update the file system geometry after recoverying superblock buffers [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:19 2025 -0800

    xfs: update the file system geometry after recoverying superblock buffers
    
    commit 6a18765b54e2e52aebcdb84c3b4f4d1f7cb2c0ca upstream.
    
    Primary superblock buffers that change the file system geometry after a
    growfs operation can affect the operation of later CIL checkpoints that
    make use of the newly added space and allocation groups.
    
    Apply the changes to the in-memory structures as part of recovery pass 2,
    to ensure recovery works fine for such cases.
    
    In the future we should apply the logic to other updates such as features
    bits as well.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Brian Foster <bfoster@redhat.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: update the pag for the last AG at recovery time [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Feb 5 13:40:22 2025 -0800

    xfs: update the pag for the last AG at recovery time
    
    commit 4a201dcfa1ff0dcfe4348c40f3ad8bd68b97eb6c upstream.
    
    Currently log recovery never updates the in-core perag values for the
    last allocation group when they were grown by growfs.  This leads to
    btree record validation failures for the alloc, ialloc or finotbt
    trees if a transaction references this new space.
    
    Found by Brian's new growfs recovery stress test.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Brian Foster <bfoster@redhat.com>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: Use try_cmpxchg() in xlog_cil_insert_pcp_aggregate() [+ + +]
Author: Uros Bizjak <ubizjak@gmail.com>
Date:   Wed Feb 5 13:40:16 2025 -0800

    xfs: Use try_cmpxchg() in xlog_cil_insert_pcp_aggregate()
    
    commit 20195d011c840b01fa91a85ebcd099ca95fbf8fc upstream.
    
    Use !try_cmpxchg instead of cmpxchg (*ptr, old, new) != old in
    xlog_cil_insert_pcp_aggregate().  x86 CMPXCHG instruction returns
    success in ZF flag, so this change saves a compare after cmpxchg.
    
    Also, try_cmpxchg implicitly assigns old *ptr value to "old" when
    cmpxchg fails. There is no need to re-read the value in the loop.
    
    Note that the value from *ptr should be read using READ_ONCE to
    prevent the compiler from merging, refetching or reordering the read.
    
    No functional change intended.
    
    Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
    Reviewed-by: Christoph Hellwig <hch@infradead.org>
    Cc: Chandan Babu R <chandan.babu@oracle.com>
    Cc: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: validate inumber in xfs_iget [+ + +]
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Wed Feb 5 13:40:03 2025 -0800

    xfs: validate inumber in xfs_iget
    
    commit 05aba1953f4a6e2b48e13c610e8a4545ba4ef509 upstream.
    
    Actually use the inumber validator to check the argument passed in here.
    
    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
    Acked-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>