Changelog in Linux kernel 6.1.122

 
ASoC: Intel: sof_sdw: add quirk for Dell SKU 0B8C [+ + +]
Author: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
Date:   Sun Jul 28 12:07:54 2024 -0400

    ASoC: Intel: sof_sdw: add quirk for Dell SKU 0B8C
    
    [ Upstream commit 92d5b5930e7d55ca07b483490d6298eee828bbe4 ]
    
    Jack detection needs to rely on JD2, as most other Dell
    AlderLake-based devices.
    
    Closes: https://github.com/thesofproject/linux/issues/5021
    Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
    Link: https://patch.msgid.link/20240624121119.91552-4-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: Intel: sof_sdw: fix jack detection on ADL-N variant RVP [+ + +]
Author: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
Date:   Sun Jul 28 12:07:53 2024 -0400

    ASoC: Intel: sof_sdw: fix jack detection on ADL-N variant RVP
    
    [ Upstream commit 65c90df918205bc84f5448550cde76a54dae5f52 ]
    
    Experimental tests show that JD2_100K is required, otherwise the jack
    is detected always even with nothing plugged-in.
    
    To avoid matching with other known quirks the SKU information is used.
    
    Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Link: https://patch.msgid.link/20240624121119.91552-2-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: tree-checker: reject inline extent items with 0 ref count [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Wed Dec 4 13:30:46 2024 +1030

    btrfs: tree-checker: reject inline extent items with 0 ref count
    
    commit dfb92681a19e1d5172420baa242806414b3eff6f upstream.
    
    [BUG]
    There is a bug report in the mailing list where btrfs_run_delayed_refs()
    failed to drop the ref count for logical 25870311358464 num_bytes
    2113536.
    
    The involved leaf dump looks like this:
    
      item 166 key (25870311358464 168 2113536) itemoff 10091 itemsize 50
        extent refs 1 gen 84178 flags 1
        ref#0: shared data backref parent 32399126528000 count 0 <<<
        ref#1: shared data backref parent 31808973717504 count 1
    
    Notice the count number is 0.
    
    [CAUSE]
    There is no concrete evidence yet, but considering 0 -> 1 is also a
    single bit flipped, it's possible that hardware memory bitflip is
    involved, causing the on-disk extent tree to be corrupted.
    
    [FIX]
    To prevent us reading such corrupted extent item, or writing such
    damaged extent item back to disk, enhance the handling of
    BTRFS_EXTENT_DATA_REF_KEY and BTRFS_SHARED_DATA_REF_KEY keys for both
    inlined and key items, to detect such 0 ref count and reject them.
    
    CC: stable@vger.kernel.org # 5.4+
    Link: https://lore.kernel.org/linux-btrfs/7c69dd49-c346-4806-86e7-e6f863a66f48@app.fastmail.com/
    Reported-by: Frankie Fisher <frankie@terrorise.me.uk>
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ceph: validate snapdirname option length when mounting [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
Date:   Wed Nov 20 16:43:51 2024 +0100

    ceph: validate snapdirname option length when mounting
    
    commit 12eb22a5a609421b380c3c6ca887474fb2089b2c upstream.
    
    It becomes a path component, so it shouldn't exceed NAME_MAX
    characters.  This was hardened in commit c152737be22b ("ceph: Use
    strscpy() instead of strcpy() in __get_snap_name()"), but no actual
    check was put in place.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: Alex Markuze <amarkuze@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
chelsio/chtls: prevent potential integer overflow on 32bit [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri Dec 13 12:47:27 2024 +0300

    chelsio/chtls: prevent potential integer overflow on 32bit
    
    commit fbbd84af6ba70334335bdeba3ae536cf751c14c6 upstream.
    
    The "gl->tot_len" variable is controlled by the user.  It comes from
    process_responses().  On 32bit systems, the "gl->tot_len +
    sizeof(struct cpl_pass_accept_req) + sizeof(struct rss_header)" addition
    could have an integer wrapping bug.  Use size_add() to prevent this.
    
    Fixes: a08943947873 ("crypto: chtls - Register chtls with net tls")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/c6bfb23c-2db2-4e1b-b8ab-ba3925c82ef5@stanley.mountain
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
cxl/region: Fix region creation for greater than x2 switches [+ + +]
Author: Huaisheng Ye <huaisheng.ye@intel.com>
Date:   Mon Dec 9 15:33:02 2024 -0800

    cxl/region: Fix region creation for greater than x2 switches
    
    [ Upstream commit 76467a94810c2aa4dd3096903291ac6df30c399e ]
    
    The cxl_port_setup_targets() algorithm fails to identify valid target list
    ordering in the presence of 4-way and above switches resulting in
    'cxl create-region' failures of the form:
    
      $ cxl create-region -d decoder0.0 -g 1024 -s 2G -t ram -w 8 -m mem4 mem1 mem6 mem3 mem2 mem5 mem7 mem0
      cxl region: create_region: region0: failed to set target7 to mem0
      cxl region: cmd_create_region: created 0 regions
    
      [kernel debug message]
      check_last_peer:1213: cxl region0: pci0000:0c:port1: cannot host mem6:decoder7.0 at 2
      bus_remove_device:574: bus: 'cxl': remove device region0
    
    QEMU can create this failing topology:
    
                           ACPI0017:00 [root0]
                               |
                             HB_0 [port1]
                            /             \
                         RP_0             RP_1
                          |                 |
                    USP [port2]           USP [port3]
                /    /    \    \        /   /    \    \
              DSP   DSP   DSP   DSP   DSP  DSP   DSP  DSP
               |     |     |     |     |    |     |    |
              mem4  mem6  mem2  mem7  mem1 mem3  mem5  mem0
     Pos:      0     2     4     6     1    3     5    7
    
     HB: Host Bridge
     RP: Root Port
     USP: Upstream Port
     DSP: Downstream Port
    
    ...with the following command steps:
    
    $ qemu-system-x86_64 -machine q35,cxl=on,accel=tcg  \
            -smp cpus=8 \
            -m 8G \
            -hda /home/work/vm-images/centos-stream8-02.qcow2 \
            -object memory-backend-ram,size=4G,id=m0 \
            -object memory-backend-ram,size=4G,id=m1 \
            -object memory-backend-ram,size=2G,id=cxl-mem0 \
            -object memory-backend-ram,size=2G,id=cxl-mem1 \
            -object memory-backend-ram,size=2G,id=cxl-mem2 \
            -object memory-backend-ram,size=2G,id=cxl-mem3 \
            -object memory-backend-ram,size=2G,id=cxl-mem4 \
            -object memory-backend-ram,size=2G,id=cxl-mem5 \
            -object memory-backend-ram,size=2G,id=cxl-mem6 \
            -object memory-backend-ram,size=2G,id=cxl-mem7 \
            -numa node,memdev=m0,cpus=0-3,nodeid=0 \
            -numa node,memdev=m1,cpus=4-7,nodeid=1 \
            -netdev user,id=net0,hostfwd=tcp::2222-:22 \
            -device virtio-net-pci,netdev=net0 \
            -device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1 \
            -device cxl-rp,port=0,bus=cxl.1,id=root_port0,chassis=0,slot=0 \
            -device cxl-rp,port=1,bus=cxl.1,id=root_port1,chassis=0,slot=1 \
            -device cxl-upstream,bus=root_port0,id=us0 \
            -device cxl-downstream,port=0,bus=us0,id=swport0,chassis=0,slot=4 \
            -device cxl-type3,bus=swport0,volatile-memdev=cxl-mem0,id=cxl-vmem0 \
            -device cxl-downstream,port=1,bus=us0,id=swport1,chassis=0,slot=5 \
            -device cxl-type3,bus=swport1,volatile-memdev=cxl-mem1,id=cxl-vmem1 \
            -device cxl-downstream,port=2,bus=us0,id=swport2,chassis=0,slot=6 \
            -device cxl-type3,bus=swport2,volatile-memdev=cxl-mem2,id=cxl-vmem2 \
            -device cxl-downstream,port=3,bus=us0,id=swport3,chassis=0,slot=7 \
            -device cxl-type3,bus=swport3,volatile-memdev=cxl-mem3,id=cxl-vmem3 \
            -device cxl-upstream,bus=root_port1,id=us1 \
            -device cxl-downstream,port=4,bus=us1,id=swport4,chassis=0,slot=8 \
            -device cxl-type3,bus=swport4,volatile-memdev=cxl-mem4,id=cxl-vmem4 \
            -device cxl-downstream,port=5,bus=us1,id=swport5,chassis=0,slot=9 \
            -device cxl-type3,bus=swport5,volatile-memdev=cxl-mem5,id=cxl-vmem5 \
            -device cxl-downstream,port=6,bus=us1,id=swport6,chassis=0,slot=10 \
            -device cxl-type3,bus=swport6,volatile-memdev=cxl-mem6,id=cxl-vmem6 \
            -device cxl-downstream,port=7,bus=us1,id=swport7,chassis=0,slot=11 \
            -device cxl-type3,bus=swport7,volatile-memdev=cxl-mem7,id=cxl-vmem7 \
            -M cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=32G &
    
    In Guest OS:
    $ cxl create-region -d decoder0.0 -g 1024 -s 2G -t ram -w 8 -m mem4 mem1 mem6 mem3 mem2 mem5 mem7 mem0
    
    Fix the method to calculate @distance by iterativeley multiplying the
    number of targets per switch port. This also follows the algorithm
    recommended here [1].
    
    Fixes: 27b3f8d13830 ("cxl/region: Program target lists")
    Link: http://lore.kernel.org/6538824b52349_7258329466@dwillia2-xfh.jf.intel.com.notmuch [1]
    Signed-off-by: Huaisheng Ye <huaisheng.ye@intel.com>
    Tested-by: Li Zhijian <lizhijian@fujitsu.com>
    [djbw: add a comment explaining 'distance']
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Link: https://patch.msgid.link/173378716722.1270362.9546805175813426729.stgit@dwillia2-xfh.jf.intel.com
    Signed-off-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Drivers: hv: util: Avoid accessing a ringbuffer not initialized yet [+ + +]
Author: Michael Kelley <mhklinux@outlook.com>
Date:   Wed Nov 6 07:42:47 2024 -0800

    Drivers: hv: util: Avoid accessing a ringbuffer not initialized yet
    
    commit 07a756a49f4b4290b49ea46e089cbe6f79ff8d26 upstream.
    
    If the KVP (or VSS) daemon starts before the VMBus channel's ringbuffer is
    fully initialized, we can hit the panic below:
    
    hv_utils: Registering HyperV Utility Driver
    hv_vmbus: registering driver hv_utils
    ...
    BUG: kernel NULL pointer dereference, address: 0000000000000000
    CPU: 44 UID: 0 PID: 2552 Comm: hv_kvp_daemon Tainted: G E 6.11.0-rc3+ #1
    RIP: 0010:hv_pkt_iter_first+0x12/0xd0
    Call Trace:
    ...
     vmbus_recvpacket
     hv_kvp_onchannelcallback
     vmbus_on_event
     tasklet_action_common
     tasklet_action
     handle_softirqs
     irq_exit_rcu
     sysvec_hyperv_stimer0
     </IRQ>
     <TASK>
     asm_sysvec_hyperv_stimer0
    ...
     kvp_register_done
     hvt_op_read
     vfs_read
     ksys_read
     __x64_sys_read
    
    This can happen because the KVP/VSS channel callback can be invoked
    even before the channel is fully opened:
    1) as soon as hv_kvp_init() -> hvutil_transport_init() creates
    /dev/vmbus/hv_kvp, the kvp daemon can open the device file immediately and
    register itself to the driver by writing a message KVP_OP_REGISTER1 to the
    file (which is handled by kvp_on_msg() ->kvp_handle_handshake()) and
    reading the file for the driver's response, which is handled by
    hvt_op_read(), which calls hvt->on_read(), i.e. kvp_register_done().
    
    2) the problem with kvp_register_done() is that it can cause the
    channel callback to be called even before the channel is fully opened,
    and when the channel callback is starting to run, util_probe()->
    vmbus_open() may have not initialized the ringbuffer yet, so the
    callback can hit the panic of NULL pointer dereference.
    
    To reproduce the panic consistently, we can add a "ssleep(10)" for KVP in
    __vmbus_open(), just before the first hv_ringbuffer_init(), and then we
    unload and reload the driver hv_utils, and run the daemon manually within
    the 10 seconds.
    
    Fix the panic by reordering the steps in util_probe() so the char dev
    entry used by the KVP or VSS daemon is not created until after
    vmbus_open() has completed. This reordering prevents the race condition
    from happening.
    
    Reported-by: Dexuan Cui <decui@microsoft.com>
    Fixes: e0fa3e5e7df6 ("Drivers: hv: utils: fix a race on userspace daemons registration")
    Cc: stable@vger.kernel.org
    Signed-off-by: Michael Kelley <mhklinux@outlook.com>
    Acked-by: Wei Liu <wei.liu@kernel.org>
    Link: https://lore.kernel.org/r/20241106154247.2271-3-mhklinux@outlook.com
    Signed-off-by: Wei Liu <wei.liu@kernel.org>
    Message-ID: <20241106154247.2271-3-mhklinux@outlook.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu: don't access invalid sched [+ + +]
Author: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Date:   Fri Dec 6 13:17:45 2024 +0100

    drm/amdgpu: don't access invalid sched
    
    [ Upstream commit a93b1020eb9386d7da11608477121b10079c076a ]
    
    Since 2320c9e6a768 ("drm/sched: memset() 'job' in drm_sched_job_init()")
    accessing job->base.sched can produce unexpected results as the initialisation
    of (*job)->base.sched done in amdgpu_job_alloc is overwritten by the
    memset.
    
    This commit fixes an issue when a CS would fail validation and would
    be rejected after job->num_ibs is incremented. In this case,
    amdgpu_ib_free(ring->adev, ...) will be called, which would crash the
    machine because the ring value is bogus.
    
    To fix this, pass a NULL pointer to amdgpu_ib_free(): we can do this
    because the device is actually not used in this function.
    
    The next commit will remove the ring argument completely.
    
    Fixes: 2320c9e6a768 ("drm/sched: memset() 'job' in drm_sched_job_init()")
    Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 2ae520cb12831d264ceb97c61f72c59d33c0dbd7)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amdgpu: Handle NULL bo->tbo.resource (again) in amdgpu_vm_bo_update [+ + +]
Author: Michel Dänzer <mdaenzer@redhat.com>
Date:   Tue Dec 17 18:22:56 2024 +0100

    drm/amdgpu: Handle NULL bo->tbo.resource (again) in amdgpu_vm_bo_update
    
    commit 85230ee36d88e7a09fb062d43203035659dd10a5 upstream.
    
    Third time's the charm, I hope?
    
    Fixes: d3116756a710 ("drm/ttm: rename bo->mem and make it a pointer")
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3837
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Michel Dänzer <mdaenzer@redhat.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 695c2c745e5dff201b75da8a1d237ce403600d04)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/modes: Avoid divide by zero harder in drm_mode_vrefresh() [+ + +]
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Fri Nov 29 06:26:28 2024 +0200

    drm/modes: Avoid divide by zero harder in drm_mode_vrefresh()
    
    commit 9398332f23fab10c5ec57c168b44e72997d6318e upstream.
    
    drm_mode_vrefresh() is trying to avoid divide by zero
    by checking whether htotal or vtotal are zero. But we may
    still end up with a div-by-zero of vtotal*htotal*...
    
    Cc: stable@vger.kernel.org
    Reported-by: syzbot+622bba18029bcde672e1@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=622bba18029bcde672e1
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241129042629.18280-2-ville.syrjala@linux.intel.com
    Reviewed-by: Jani Nikula <jani.nikula@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/panel: novatek-nt35950: fix return value check in nt35950_probe() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Tue Oct 29 20:39:57 2024 +0800

    drm/panel: novatek-nt35950: fix return value check in nt35950_probe()
    
    [ Upstream commit f8fd0968eff52cf092c0d517d17507ea2f6e5ea5 ]
    
    mipi_dsi_device_register_full() never returns NULL pointer, it
    will return ERR_PTR() when it fails, so replace the check with
    IS_ERR().
    
    Fixes: 623a3531e9cf ("drm/panel: Add driver for Novatek NT35950 DSI DriverIC panels")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20241029123957.1588-1-yangyingliang@huaweicloud.com
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241029123957.1588-1-yangyingliang@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
efivarfs: Fix error on non-existent file [+ + +]
Author: James Bottomley <James.Bottomley@HansenPartnership.com>
Date:   Sun Dec 8 13:34:13 2024 -0500

    efivarfs: Fix error on non-existent file
    
    commit 2ab0837cb91b7de507daa145d17b3b6b2efb3abf upstream.
    
    When looking up a non-existent file, efivarfs returns -EINVAL if the
    file does not conform to the NAME-GUID format and -ENOENT if it does.
    This is caused by efivars_d_hash() returning -EINVAL if the name is not
    formatted correctly.  This error is returned before simple_lookup()
    returns a negative dentry, and is the error value that the user sees.
    
    Fix by removing this check.  If the file does not exist, simple_lookup()
    will return a negative dentry leading to -ENOENT and efivarfs_create()
    already has a validity check before it creates an entry (and will
    correctly return -EINVAL)
    
    Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
    Cc: <stable@vger.kernel.org>
    [ardb: make efivarfs_valid_name() static]
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
epoll: Add synchronous wakeup support for ep_poll_callback [+ + +]
Author: Xuewen Yan <xuewen.yan@unisoc.com>
Date:   Fri Apr 26 16:05:48 2024 +0800

    epoll: Add synchronous wakeup support for ep_poll_callback
    
    commit 900bbaae67e980945dec74d36f8afe0de7556d5a upstream.
    
    Now, the epoll only use wake_up() interface to wake up task.
    However, sometimes, there are epoll users which want to use
    the synchronous wakeup flag to hint the scheduler, such as
    Android binder driver.
    So add a wake_up_sync() define, and use the wake_up_sync()
    when the sync is true in ep_poll_callback().
    
    Co-developed-by: Jing Xia <jing.xia@unisoc.com>
    Signed-off-by: Jing Xia <jing.xia@unisoc.com>
    Signed-off-by: Xuewen Yan <xuewen.yan@unisoc.com>
    Link: https://lore.kernel.org/r/20240426080548.8203-1-xuewen.yan@unisoc.com
    Tested-by: Brian Geffon <bgeffon@google.com>
    Reviewed-by: Brian Geffon <bgeffon@google.com>
    Reported-by: Benoit Lize <lizeb@google.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Cc: Brian Geffon <bgeffon@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hexagon: Disable constant extender optimization for LLVM prior to 19.1.0 [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Thu Nov 21 11:22:18 2024 -0700

    hexagon: Disable constant extender optimization for LLVM prior to 19.1.0
    
    commit aef25be35d23ec768eed08bfcf7ca3cf9685bc28 upstream.
    
    The Hexagon-specific constant extender optimization in LLVM may crash on
    Linux kernel code [1], such as fs/bcache/btree_io.c after
    commit 32ed4a620c54 ("bcachefs: Btree path tracepoints") in 6.12:
    
      clang: llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp:745: bool (anonymous namespace)::HexagonConstExtenders::ExtRoot::operator<(const HCE::ExtRoot &) const: Assertion `ThisB->getParent() == OtherB->getParent()' failed.
      Stack dump:
      0.      Program arguments: clang --target=hexagon-linux-musl ... fs/bcachefs/btree_io.c
      1.      <eof> parser at end of file
      2.      Code generation
      3.      Running pass 'Function Pass Manager' on module 'fs/bcachefs/btree_io.c'.
      4.      Running pass 'Hexagon constant-extender optimization' on function '@__btree_node_lock_nopath'
    
    Without assertions enabled, there is just a hang during compilation.
    
    This has been resolved in LLVM main (20.0.0) [2] and backported to LLVM
    19.1.0 but the kernel supports LLVM 13.0.1 and newer, so disable the
    constant expander optimization using the '-mllvm' option when using a
    toolchain that is not fixed.
    
    Cc: stable@vger.kernel.org
    Link: https://github.com/llvm/llvm-project/issues/99714 [1]
    Link: https://github.com/llvm/llvm-project/commit/68df06a0b2998765cb0a41353fcf0919bbf57ddb [2]
    Link: https://github.com/llvm/llvm-project/commit/2ab8d93061581edad3501561722ebd5632d73892 [3]
    Reviewed-by: Brian Cain <bcain@quicinc.com>
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hwmon: (tmp513) Don't use "proxy" headers [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Tue Nov 28 20:06:02 2023 +0200

    hwmon: (tmp513) Don't use "proxy" headers
    
    [ Upstream commit 5d9ad4e0fa7cc27199fdb94beb6ec5f655ba9489 ]
    
    The driver uses math.h and not util_macros.h.
    
    All the same for the kernel.h, replace it with what the driver is using.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20231128180654.395692-2-andriy.shevchenko@linux.intel.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Stable-dep-of: 74d7e038fd07 ("hwmon: (tmp513) Fix interpretation of values of Shunt Voltage and Limit Registers")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (tmp513) Fix Current Register value interpretation [+ + +]
Author: Murad Masimov <m.masimov@maxima.ru>
Date:   Mon Dec 16 20:36:47 2024 +0300

    hwmon: (tmp513) Fix Current Register value interpretation
    
    [ Upstream commit da1d0e6ba211baf6747db74c07700caddfd8a179 ]
    
    The value returned by the driver after processing the contents of the
    Current Register does not correspond to the TMP512/TMP513 specifications.
    A raw register value is converted to a signed integer value by a sign
    extension in accordance with the algorithm provided in the specification,
    but due to the off-by-one error in the sign bit index, the result is
    incorrect. Moreover, negative values will be reported as large positive
    due to missing sign extension from u32 to long.
    
    According to the TMP512 and TMP513 datasheets, the Current Register (07h)
    is a 16-bit two's complement integer value. E.g., if regval = 1000 0011
    0000 0000, then the value must be (-32000 * lsb), but the driver will
    return (33536 * lsb).
    
    Fix off-by-one bug, and also cast data->curr_lsb_ua (which is of type u32)
    to long to prevent incorrect cast for negative values.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 59dfa75e5d82 ("hwmon: Add driver for Texas Instruments TMP512/513 sensor chips.")
    Signed-off-by: Murad Masimov <m.masimov@maxima.ru>
    Link: https://lore.kernel.org/r/20241216173648.526-3-m.masimov@maxima.ru
    [groeck: Fixed description line length]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (tmp513) Fix interpretation of values of Shunt Voltage and Limit Registers [+ + +]
Author: Murad Masimov <m.masimov@maxima.ru>
Date:   Mon Dec 16 20:36:46 2024 +0300

    hwmon: (tmp513) Fix interpretation of values of Shunt Voltage and Limit Registers
    
    [ Upstream commit 74d7e038fd072635d21e4734e3223378e09168d3 ]
    
    The values returned by the driver after processing the contents of the
    Shunt Voltage Register and the Shunt Limit Registers do not correspond to
    the TMP512/TMP513 specifications. A raw register value is converted to a
    signed integer value by a sign extension in accordance with the algorithm
    provided in the specification, but due to the off-by-one error in the sign
    bit index, the result is incorrect. Moreover, the PGA shift calculated with
    the tmp51x_get_pga_shift function is relevant only to the Shunt Voltage
    Register, but is also applied to the Shunt Limit Registers.
    
    According to the TMP512 and TMP513 datasheets, the Shunt Voltage Register
    (04h) is 13 to 16 bit two's complement integer value, depending on the PGA
    setting.  The Shunt Positive (0Ch) and Negative (0Dh) Limit Registers are
    16-bit two's complement integer values. Below are some examples:
    
    * Shunt Voltage Register
    If PGA = 8, and regval = 1000 0011 0000 0000, then the decimal value must
    be -32000, but the value calculated by the driver will be 33536.
    
    * Shunt Limit Register
    If regval = 1000 0011 0000 0000, then the decimal value must be -32000, but
    the value calculated by the driver will be 768, if PGA = 1.
    
    Fix sign bit index, and also correct misleading comment describing the
    tmp51x_get_pga_shift function.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 59dfa75e5d82 ("hwmon: Add driver for Texas Instruments TMP512/513 sensor chips.")
    Signed-off-by: Murad Masimov <m.masimov@maxima.ru>
    Link: https://lore.kernel.org/r/20241216173648.526-2-m.masimov@maxima.ru
    [groeck: Fixed description and multi-line alignments]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (tmp513) Fix interpretation of values of Temperature Result and Limit Registers [+ + +]
Author: Murad Masimov <m.masimov@maxima.ru>
Date:   Mon Dec 16 20:36:48 2024 +0300

    hwmon: (tmp513) Fix interpretation of values of Temperature Result and Limit Registers
    
    [ Upstream commit dd471e25770e7e632f736b90db1e2080b2171668 ]
    
    The values returned by the driver after processing the contents of the
    Temperature Result and the Temperature Limit Registers do not correspond to
    the TMP512/TMP513 specifications. A raw register value is converted to a
    signed integer value by a sign extension in accordance with the algorithm
    provided in the specification, but due to the off-by-one error in the sign
    bit index, the result is incorrect.
    
    According to the TMP512 and TMP513 datasheets, the Temperature Result (08h
    to 0Bh) and Limit (11h to 14h) Registers are 13-bit two's complement
    integer values, shifted left by 3 bits. The value is scaled by 0.0625
    degrees Celsius per bit.  E.g., if regval = 1 1110 0111 0000 000, the
    output should be -25 degrees, but the driver will return +487 degrees.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 59dfa75e5d82 ("hwmon: Add driver for Texas Instruments TMP512/513 sensor chips.")
    Signed-off-by: Murad Masimov <m.masimov@maxima.ru>
    Link: https://lore.kernel.org/r/20241216173648.526-4-m.masimov@maxima.ru
    [groeck: fixed description line length]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (tmp513) Simplify with dev_err_probe() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Tue Nov 28 20:06:03 2023 +0200

    hwmon: (tmp513) Simplify with dev_err_probe()
    
    [ Upstream commit df989762bc4b71068e6adc0c2b5ef6f76b6acf74 ]
    
    Common pattern of handling deferred probe can be simplified with
    dev_err_probe().  Less code and also it prints the error value.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20231128180654.395692-3-andriy.shevchenko@linux.intel.com
    [groeck: Fixed excessive line length]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Stable-dep-of: 74d7e038fd07 ("hwmon: (tmp513) Fix interpretation of values of Shunt Voltage and Limit Registers")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (tmp513) Use SI constants from units.h [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Tue Nov 28 20:06:04 2023 +0200

    hwmon: (tmp513) Use SI constants from units.h
    
    [ Upstream commit f07f9d2467f4a298d24e186ddee6f69724903067 ]
    
    MILLI and MICRO may be used in the driver to make code more robust
    against possible miscalculations.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20231128180654.395692-4-andriy.shevchenko@linux.intel.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Stable-dep-of: 74d7e038fd07 ("hwmon: (tmp513) Fix interpretation of values of Shunt Voltage and Limit Registers")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i2c: pnx: Fix timeout in wait functions [+ + +]
Author: Vladimir Riabchun <ferr.lambarginio@gmail.com>
Date:   Sat Dec 7 00:19:34 2024 +0100

    i2c: pnx: Fix timeout in wait functions
    
    [ Upstream commit 7363f2d4c18557c99c536b70489187bb4e05c412 ]
    
    Since commit f63b94be6942 ("i2c: pnx: Fix potential deadlock warning
    from del_timer_sync() call in isr") jiffies are stored in
    i2c_pnx_algo_data.timeout, but wait_timeout and wait_reset are still
    using it as milliseconds. Convert jiffies back to milliseconds to wait
    for the expected amount of time.
    
    Fixes: f63b94be6942 ("i2c: pnx: Fix potential deadlock warning from del_timer_sync() call in isr")
    Signed-off-by: Vladimir Riabchun <ferr.lambarginio@gmail.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: riic: Always round-up when calculating bus period [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Fri Nov 22 15:14:35 2024 +0100

    i2c: riic: Always round-up when calculating bus period
    
    commit de6b43798d9043a7c749a0428dbb02d5fff156e5 upstream.
    
    Currently, the RIIC driver may run the I2C bus faster than requested,
    which may cause subtle failures.  E.g. Biju reported a measured bus
    speed of 450 kHz instead of the expected maximum of 400 kHz on RZ/G2L.
    
    The initial calculation of the bus period uses DIV_ROUND_UP(), to make
    sure the actual bus speed never becomes faster than the requested bus
    speed.  However, the subsequent division-by-two steps do not use
    round-up, which may lead to a too-small period, hence a too-fast and
    possible out-of-spec bus speed.  E.g. on RZ/Five, requesting a bus speed
    of 100 resp. 400 kHz will yield too-fast target bus speeds of 100806
    resp. 403226 Hz instead of 97656 resp. 390625 Hz.
    
    Fix this by using DIV_ROUND_UP() in the subsequent divisions, too.
    
    Tested on RZ/A1H, RZ/A2M, and RZ/Five.
    
    Fixes: d982d66514192cdb ("i2c: riic: remove clock and frequency restrictions")
    Reported-by: Biju Das <biju.das.jz@bp.renesas.com>
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Cc: <stable@vger.kernel.org> # v4.15+
    Link: https://lore.kernel.org/r/c59aea77998dfea1b4456c4b33b55ab216fcbf5e.1732284746.git.geert+renesas@glider.be
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
i915/guc: Accumulate active runtime on gt reset [+ + +]
Author: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Date:   Wed Nov 27 09:40:06 2024 -0800

    i915/guc: Accumulate active runtime on gt reset
    
    [ Upstream commit 1622ed27d26ab4c234476be746aa55bcd39159dd ]
    
    On gt reset, if a context is running, then accumulate it's active time
    into the busyness counter since there will be no chance for the context
    to switch out and update it's run time.
    
    v2: Move comment right above the if (John)
    
    Fixes: 77cdd054dd2c ("drm/i915/pmu: Connect engine busyness stats from GuC to pmu")
    Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
    Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241127174006.190128-4-umesh.nerlige.ramappa@intel.com
    (cherry picked from commit 7ed047da59cfa1acb558b95169d347acc8d85da1)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i915/guc: Ensure busyness counter increases motonically [+ + +]
Author: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Date:   Wed Nov 27 09:40:05 2024 -0800

    i915/guc: Ensure busyness counter increases motonically
    
    [ Upstream commit 59a0b46788d58fdcee8d2f6b4e619d264a1799bf ]
    
    Active busyness of an engine is calculated using gt timestamp and the
    context switch in time. While capturing the gt timestamp, it's possible
    that the context switches out. This race could result in an active
    busyness value that is greater than the actual context runtime value by a
    small amount. This leads to a negative delta and throws off busyness
    calculations for the user.
    
    If a subsequent count is smaller than the previous one, just return the
    previous one, since we expect the busyness to catch up.
    
    Fixes: 77cdd054dd2c ("drm/i915/pmu: Connect engine busyness stats from GuC to pmu")
    Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
    Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241127174006.190128-3-umesh.nerlige.ramappa@intel.com
    (cherry picked from commit cf907f6d294217985e9dafd9985dce874e04ca37)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i915/guc: Reset engine utilization buffer before registration [+ + +]
Author: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Date:   Wed Nov 27 09:40:04 2024 -0800

    i915/guc: Reset engine utilization buffer before registration
    
    [ Upstream commit abcc2ddae5f82aa6cfca162e3db643dd33f0a2e8 ]
    
    On GT reset, we store total busyness counts for all engines and
    re-register the utilization buffer with GuC. At that time we should
    reset the buffer, so that we don't get spurious busyness counts on
    subsequent queries.
    
    To repro this issue, run igt@perf_pmu@busy-hang followed by
    igt@perf_pmu@most-busy-idle-check-all for a couple iterations.
    
    Fixes: 77cdd054dd2c ("drm/i915/pmu: Connect engine busyness stats from GuC to pmu")
    Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
    Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241127174006.190128-2-umesh.nerlige.ramappa@intel.com
    (cherry picked from commit abd318237fa6556c1e5225529af145ef15d5ff0d)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
io_uring/rw: avoid punting to io-wq directly [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Mon Mar 18 22:00:28 2024 +0000

    io_uring/rw: avoid punting to io-wq directly
    
    Commit 6e6b8c62120a22acd8cb759304e4cd2e3215d488 upstream.
    
    kiocb_done() should care to specifically redirecting requests to io-wq.
    Remove the hopping to tw to then queue an io-wq, return -EAGAIN and let
    the core code io_uring handle offloading.
    
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Tested-by: Ming Lei <ming.lei@redhat.com>
    Link: https://lore.kernel.org/r/413564e550fe23744a970e1783dfa566291b0e6f.1710799188.git.asml.silence@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    (cherry picked from commit 6e6b8c62120a22acd8cb759304e4cd2e3215d488)
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

io_uring/rw: split io_read() into a helper [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Mon Sep 11 13:31:56 2023 -0600

    io_uring/rw: split io_read() into a helper
    
    Commit a08d195b586a217d76b42062f88f375a3eedda4d upstream.
    
    Add __io_read() which does the grunt of the work, leaving the completion
    side to the new io_read(). No functional changes in this patch.
    
    Reviewed-by: Gabriel Krisman Bertazi <krisman@suse.de>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    (cherry picked from commit a08d195b586a217d76b42062f88f375a3eedda4d)
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

io_uring/rw: treat -EOPNOTSUPP for IOCB_NOWAIT like -EAGAIN [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Tue Sep 10 08:30:57 2024 -0600

    io_uring/rw: treat -EOPNOTSUPP for IOCB_NOWAIT like -EAGAIN
    
    Commit c0a9d496e0fece67db777bd48550376cf2960c47 upstream.
    
    Some file systems, ocfs2 in this case, will return -EOPNOTSUPP for
    an IOCB_NOWAIT read/write attempt. While this can be argued to be
    correct, the usual return value for something that requires blocking
    issue is -EAGAIN.
    
    A refactoring io_uring commit dropped calling kiocb_done() for
    negative return values, which is otherwise where we already do that
    transformation. To ensure we catch it in both spots, check it in
    __io_read() itself as well.
    
    Reported-by: Robert Sander <r.sander@heinlein-support.de>
    Link: https://fosstodon.org/@gurubert@mastodon.gurubert.de/113112431889638440
    Cc: stable@vger.kernel.org
    Fixes: a08d195b586a ("io_uring/rw: split io_read() into a helper")
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring: check if iowq is killed before queuing [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Thu Dec 19 19:52:58 2024 +0000

    io_uring: check if iowq is killed before queuing
    
    commit dbd2ca9367eb19bc5e269b8c58b0b1514ada9156 upstream.
    
    task work can be executed after the task has gone through io_uring
    termination, whether it's the final task_work run or the fallback path.
    In this case, task work will find ->io_wq being already killed and
    null'ed, which is a problem if it then tries to forward the request to
    io_queue_iowq(). Make io_queue_iowq() fail requests in this case.
    
    Note that it also checks PF_KTHREAD, because the user can first close
    a DEFER_TASKRUN ring and shortly after kill the task, in which case
    ->iowq check would race.
    
    Cc: stable@vger.kernel.org
    Fixes: 50c52250e2d74 ("block: implement async io_uring discard cmd")
    Fixes: 773af69121ecc ("io_uring: always reissue from task_work context")
    Reported-by: Will <willsroot@protonmail.com>
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Link: https://lore.kernel.org/r/63312b4a2c2bb67ad67b857d17a300e1d3b078e8.1734637909.git.asml.silence@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

io_uring: Fix registered ring file refcount leak [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Wed Dec 18 17:56:25 2024 +0100

    io_uring: Fix registered ring file refcount leak
    
    commit 12d908116f7efd34f255a482b9afc729d7a5fb78 upstream.
    
    Currently, io_uring_unreg_ringfd() (which cleans up registered rings) is
    only called on exit, but __io_uring_free (which frees the tctx in which the
    registered ring pointers are stored) is also called on execve (via
    begin_new_exec -> io_uring_task_cancel -> __io_uring_cancel ->
    io_uring_cancel_generic -> __io_uring_free).
    
    This means: A process going through execve while having registered rings
    will leak references to the rings' `struct file`.
    
    Fix it by zapping registered rings on execve(). This is implemented by
    moving the io_uring_unreg_ringfd() from io_uring_files_cancel() into its
    callee __io_uring_cancel(), which is called from io_uring_task_cancel() on
    execve.
    
    This could probably be exploited *on 32-bit kernels* by leaking 2^32
    references to the same ring, because the file refcount is stored in a
    pointer-sized field and get_file() doesn't have protection against
    refcount overflow, just a WARN_ONCE(); but on 64-bit it should have no
    impact beyond a memory leak.
    
    Cc: stable@vger.kernel.org
    Fixes: e7a6c00dc77a ("io_uring: add support for registering ring file descriptors")
    Signed-off-by: Jann Horn <jannh@google.com>
    Link: https://lore.kernel.org/r/20241218-uring-reg-ring-cleanup-v1-1-8f63e999045b@google.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ionic: Fix netdev notifier unregister on failure [+ + +]
Author: Brett Creeley <brett.creeley@amd.com>
Date:   Thu Dec 12 13:31:55 2024 -0800

    ionic: Fix netdev notifier unregister on failure
    
    [ Upstream commit 9590d32e090ea2751e131ae5273859ca22f5ac14 ]
    
    If register_netdev() fails, then the driver leaks the netdev notifier.
    Fix this by calling ionic_lif_unregister() on register_netdev()
    failure. This will also call ionic_lif_unregister_phc() if it has
    already been registered.
    
    Fixes: 30b87ab4c0b3 ("ionic: remove lif list concept")
    Signed-off-by: Brett Creeley <brett.creeley@amd.com>
    Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/20241212213157.12212-2-shannon.nelson@amd.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ionic: use ee->offset when returning sprom data [+ + +]
Author: Shannon Nelson <shannon.nelson@amd.com>
Date:   Thu Dec 12 13:31:57 2024 -0800

    ionic: use ee->offset when returning sprom data
    
    [ Upstream commit b096d62ba1323391b2db98b7704e2468cf3b1588 ]
    
    Some calls into ionic_get_module_eeprom() don't use a single
    full buffer size, but instead multiple calls with an offset.
    Teach our driver to use the offset correctly so we can
    respond appropriately to the caller.
    
    Fixes: 4d03e00a2140 ("ionic: Add initial ethtool support")
    Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/20241212213157.12212-4-shannon.nelson@amd.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
KVM: x86: Cache CPUID.0xD XSTATE offsets+sizes during module init [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Tue Dec 10 17:32:58 2024 -0800

    KVM: x86: Cache CPUID.0xD XSTATE offsets+sizes during module init
    
    commit 1201f226c863b7da739f7420ddba818cedf372fc upstream.
    
    Snapshot the output of CPUID.0xD.[1..n] during kvm.ko initiliaization to
    avoid the overead of CPUID during runtime.  The offset, size, and metadata
    for CPUID.0xD.[1..n] sub-leaves does not depend on XCR0 or XSS values, i.e.
    is constant for a given CPU, and thus can be cached during module load.
    
    On Intel's Emerald Rapids, CPUID is *wildly* expensive, to the point where
    recomputing XSAVE offsets and sizes results in a 4x increase in latency of
    nested VM-Enter and VM-Exit (nested transitions can trigger
    xstate_required_size() multiple times per transition), relative to using
    cached values.  The issue is easily visible by running `perf top` while
    triggering nested transitions: kvm_update_cpuid_runtime() shows up at a
    whopping 50%.
    
    As measured via RDTSC from L2 (using KVM-Unit-Test's CPUID VM-Exit test
    and a slightly modified L1 KVM to handle CPUID in the fastpath), a nested
    roundtrip to emulate CPUID on Skylake (SKX), Icelake (ICX), and Emerald
    Rapids (EMR) takes:
    
      SKX 11650
      ICX 22350
      EMR 28850
    
    Using cached values, the latency drops to:
    
      SKX 6850
      ICX 9000
      EMR 7900
    
    The underlying issue is that CPUID itself is slow on ICX, and comically
    slow on EMR.  The problem is exacerbated on CPUs which support XSAVES
    and/or XSAVEC, as KVM invokes xstate_required_size() twice on each
    runtime CPUID update, and because there are more supported XSAVE features
    (CPUID for supported XSAVE feature sub-leafs is significantly slower).
    
     SKX:
      CPUID.0xD.2  = 348 cycles
      CPUID.0xD.3  = 400 cycles
      CPUID.0xD.4  = 276 cycles
      CPUID.0xD.5  = 236 cycles
      <other sub-leaves are similar>
    
     EMR:
      CPUID.0xD.2  = 1138 cycles
      CPUID.0xD.3  = 1362 cycles
      CPUID.0xD.4  = 1068 cycles
      CPUID.0xD.5  = 910 cycles
      CPUID.0xD.6  = 914 cycles
      CPUID.0xD.7  = 1350 cycles
      CPUID.0xD.8  = 734 cycles
      CPUID.0xD.9  = 766 cycles
      CPUID.0xD.10 = 732 cycles
      CPUID.0xD.11 = 718 cycles
      CPUID.0xD.12 = 734 cycles
      CPUID.0xD.13 = 1700 cycles
      CPUID.0xD.14 = 1126 cycles
      CPUID.0xD.15 = 898 cycles
      CPUID.0xD.16 = 716 cycles
      CPUID.0xD.17 = 748 cycles
      CPUID.0xD.18 = 776 cycles
    
    Note, updating runtime CPUID information multiple times per nested
    transition is itself a flaw, especially since CPUID is a mandotory
    intercept on both Intel and AMD.  E.g. KVM doesn't need to ensure emulated
    CPUID state is up-to-date while running L2.  That flaw will be fixed in a
    future patch, as deferring runtime CPUID updates is more subtle than it
    appears at first glance, the benefits aren't super critical to have once
    the XSAVE issue is resolved, and caching CPUID output is desirable even if
    KVM's updates are deferred.
    
    Cc: Jim Mattson <jmattson@google.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Message-ID: <20241211013302.1347853-2-seanjc@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: Play nice with protected guests in complete_hypercall_exit() [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Wed Nov 27 16:43:39 2024 -0800

    KVM: x86: Play nice with protected guests in complete_hypercall_exit()
    
    commit 9b42d1e8e4fe9dc631162c04caa69b0d1860b0f0 upstream.
    
    Use is_64_bit_hypercall() instead of is_64_bit_mode() to detect a 64-bit
    hypercall when completing said hypercall.  For guests with protected state,
    e.g. SEV-ES and SEV-SNP, KVM must assume the hypercall was made in 64-bit
    mode as the vCPU state needed to detect 64-bit mode is unavailable.
    
    Hacking the sev_smoke_test selftest to generate a KVM_HC_MAP_GPA_RANGE
    hypercall via VMGEXIT trips the WARN:
    
      ------------[ cut here ]------------
      WARNING: CPU: 273 PID: 326626 at arch/x86/kvm/x86.h:180 complete_hypercall_exit+0x44/0xe0 [kvm]
      Modules linked in: kvm_amd kvm ... [last unloaded: kvm]
      CPU: 273 UID: 0 PID: 326626 Comm: sev_smoke_test Not tainted 6.12.0-smp--392e932fa0f3-feat #470
      Hardware name: Google Astoria/astoria, BIOS 0.20240617.0-0 06/17/2024
      RIP: 0010:complete_hypercall_exit+0x44/0xe0 [kvm]
      Call Trace:
       <TASK>
       kvm_arch_vcpu_ioctl_run+0x2400/0x2720 [kvm]
       kvm_vcpu_ioctl+0x54f/0x630 [kvm]
       __se_sys_ioctl+0x6b/0xc0
       do_syscall_64+0x83/0x160
       entry_SYSCALL_64_after_hwframe+0x76/0x7e
       </TASK>
      ---[ end trace 0000000000000000 ]---
    
    Fixes: b5aead0064f3 ("KVM: x86: Assume a 64-bit hypercall for guests with protected state")
    Cc: stable@vger.kernel.org
    Cc: Tom Lendacky <thomas.lendacky@amd.com>
    Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
    Reviewed-by: Nikunj A Dadhania <nikunj@amd.com>
    Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
    Reviewed-by: Binbin Wu <binbin.wu@linux.intel.com>
    Reviewed-by: Kai Huang <kai.huang@intel.com>
    Link: https://lore.kernel.org/r/20241128004344.4072099-2-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.1.122 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Dec 27 13:53:02 2024 +0100

    Linux 6.1.122
    
    Link: https://lore.kernel.org/r/20241223155353.641267612@linuxfoundation.org
    Tested-by: SeongJae Park <sj@kernel.org>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
    Tested-by: kernelci.org bot <bot@kernelci.org>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Hardik Garg <hargar@linux.microsoft.com>
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
MIPS: Loongson64: DTS: Fix msi node for ls7a [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Sun Jul 28 12:07:50 2024 -0400

    MIPS: Loongson64: DTS: Fix msi node for ls7a
    
    [ Upstream commit 98a9e2ac3755a353eefea8c52e23d5b0c50f3899 ]
    
    Add it to silent warning:
    arch/mips/boot/dts/loongson/ls7a-pch.dtsi:68.16-416.5: Warning (interrupt_provider): /bus@10000000/pci@1a000000: '#interrupt-cells' found, but node is not an interrupt provider
    arch/mips/boot/dts/loongson/loongson64g_4core_ls7a.dts:32.31-40.4: Warning (interrupt_provider): /bus@10000000/msi-controller@2ff00000: Missing '#interrupt-cells' in interrupt provider
    arch/mips/boot/dts/loongson/loongson64g_4core_ls7a.dtb: Warning (interrupt_map): Failed prerequisite 'interrupt_provider'
    
    Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mmc: sdhci-tegra: Remove SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC quirk [+ + +]
Author: Prathamesh Shete <pshete@nvidia.com>
Date:   Mon Dec 9 15:40:09 2024 +0530

    mmc: sdhci-tegra: Remove SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC quirk
    
    commit a56335c85b592cb2833db0a71f7112b7d9f0d56b upstream.
    
    Value 0 in ADMA length descriptor is interpreted as 65536 on new Tegra
    chips, remove SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC quirk to make sure max
    ADMA2 length is 65536.
    
    Fixes: 4346b7c7941d ("mmc: tegra: Add Tegra186 support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Prathamesh Shete <pshete@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Message-ID: <20241209101009.22710-1-pshete@nvidia.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/smc: check iparea_offset and ipv6_prefixes_cnt when receiving proposal msg [+ + +]
Author: Guangguan Wang <guangguan.wang@linux.alibaba.com>
Date:   Wed Dec 11 17:21:18 2024 +0800

    net/smc: check iparea_offset and ipv6_prefixes_cnt when receiving proposal msg
    
    [ Upstream commit a29e220d3c8edbf0e1beb0f028878a4a85966556 ]
    
    When receiving proposal msg in server, the field iparea_offset
    and the field ipv6_prefixes_cnt in proposal msg are from the
    remote client and can not be fully trusted. Especially the
    field iparea_offset, once exceed the max value, there has the
    chance to access wrong address, and crash may happen.
    
    This patch checks iparea_offset and ipv6_prefixes_cnt before using them.
    
    Fixes: e7b7a64a8493 ("smc: support variable CLC proposal messages")
    Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
    Reviewed-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: D. Wythe <alibuda@linux.alibaba.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: check return value of sock_recvmsg when draining clc data [+ + +]
Author: Guangguan Wang <guangguan.wang@linux.alibaba.com>
Date:   Wed Dec 11 17:21:21 2024 +0800

    net/smc: check return value of sock_recvmsg when draining clc data
    
    [ Upstream commit c5b8ee5022a19464783058dc6042e8eefa34e8cd ]
    
    When receiving clc msg, the field length in smc_clc_msg_hdr indicates the
    length of msg should be received from network and the value should not be
    fully trusted as it is from the network. Once the value of length exceeds
    the value of buflen in function smc_clc_wait_msg it may run into deadloop
    when trying to drain the remaining data exceeding buflen.
    
    This patch checks the return value of sock_recvmsg when draining data in
    case of deadloop in draining.
    
    Fixes: fb4f79264c0f ("net/smc: tolerate future SMCD versions")
    Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
    Reviewed-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: D. Wythe <alibuda@linux.alibaba.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: check smcd_v2_ext_offset when receiving proposal msg [+ + +]
Author: Guangguan Wang <guangguan.wang@linux.alibaba.com>
Date:   Wed Dec 11 17:21:20 2024 +0800

    net/smc: check smcd_v2_ext_offset when receiving proposal msg
    
    [ Upstream commit 9ab332deb671d8f7e66d82a2ff2b3f715bc3a4ad ]
    
    When receiving proposal msg in server, the field smcd_v2_ext_offset in
    proposal msg is from the remote client and can not be fully trusted.
    Once the value of smcd_v2_ext_offset exceed the max value, there has
    the chance to access wrong address, and crash may happen.
    
    This patch checks the value of smcd_v2_ext_offset before using it.
    
    Fixes: 5c21c4ccafe8 ("net/smc: determine accepted ISM devices")
    Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
    Reviewed-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: D. Wythe <alibuda@linux.alibaba.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: check sndbuf_space again after NOSPACE flag is set in smc_poll [+ + +]
Author: Guangguan Wang <guangguan.wang@linux.alibaba.com>
Date:   Wed Dec 11 17:21:17 2024 +0800

    net/smc: check sndbuf_space again after NOSPACE flag is set in smc_poll
    
    [ Upstream commit 679e9ddcf90dbdf98aaaa71a492454654b627bcb ]
    
    When application sending data more than sndbuf_space, there have chances
    application will sleep in epoll_wait, and will never be wakeup again. This
    is caused by a race between smc_poll and smc_cdc_tx_handler.
    
    application                                      tasklet
    smc_tx_sendmsg(len > sndbuf_space)   |
    epoll_wait for EPOLL_OUT,timeout=0   |
      smc_poll                           |
        if (!smc->conn.sndbuf_space)     |
                                         |  smc_cdc_tx_handler
                                         |    atomic_add sndbuf_space
                                         |    smc_tx_sndbuf_nonfull
                                         |      if (!test_bit SOCK_NOSPACE)
                                         |        do not sk_write_space;
          set_bit SOCK_NOSPACE;          |
        return mask=0;                   |
    
    Application will sleep in epoll_wait as smc_poll returns 0. And
    smc_cdc_tx_handler will not call sk_write_space because the SOCK_NOSPACE
    has not be set. If there is no inflight cdc msg, sk_write_space will not be
    called any more, and application will sleep in epoll_wait forever.
    So check sndbuf_space again after NOSPACE flag is set to break the race.
    
    Fixes: 8dce2786a290 ("net/smc: smc_poll improvements")
    Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
    Suggested-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: protect link down work from execute after lgr freed [+ + +]
Author: Guangguan Wang <guangguan.wang@linux.alibaba.com>
Date:   Wed Dec 11 17:21:16 2024 +0800

    net/smc: protect link down work from execute after lgr freed
    
    [ Upstream commit 2b33eb8f1b3e8c2f87cfdbc8cc117f6bdfabc6ec ]
    
    link down work may be scheduled before lgr freed but execute
    after lgr freed, which may result in crash. So it is need to
    hold a reference before shedule link down work, and put the
    reference after work executed or canceled.
    
    The relevant crash call stack as follows:
     list_del corruption. prev->next should be ffffb638c9c0fe20,
        but was 0000000000000000
     ------------[ cut here ]------------
     kernel BUG at lib/list_debug.c:51!
     invalid opcode: 0000 [#1] SMP NOPTI
     CPU: 6 PID: 978112 Comm: kworker/6:119 Kdump: loaded Tainted: G #1
     Hardware name: Alibaba Cloud Alibaba Cloud ECS, BIOS 2221b89 04/01/2014
     Workqueue: events smc_link_down_work [smc]
     RIP: 0010:__list_del_entry_valid.cold+0x31/0x47
     RSP: 0018:ffffb638c9c0fdd8 EFLAGS: 00010086
     RAX: 0000000000000054 RBX: ffff942fb75e5128 RCX: 0000000000000000
     RDX: ffff943520930aa0 RSI: ffff94352091fc80 RDI: ffff94352091fc80
     RBP: 0000000000000000 R08: 0000000000000000 R09: ffffb638c9c0fc38
     R10: ffffb638c9c0fc30 R11: ffffffffa015eb28 R12: 0000000000000002
     R13: ffffb638c9c0fe20 R14: 0000000000000001 R15: ffff942f9cd051c0
     FS:  0000000000000000(0000) GS:ffff943520900000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 00007f4f25214000 CR3: 000000025fbae004 CR4: 00000000007706e0
     DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
     PKRU: 55555554
     Call Trace:
      rwsem_down_write_slowpath+0x17e/0x470
      smc_link_down_work+0x3c/0x60 [smc]
      process_one_work+0x1ac/0x350
      worker_thread+0x49/0x2f0
      ? rescuer_thread+0x360/0x360
      kthread+0x118/0x140
      ? __kthread_bind_mask+0x60/0x60
      ret_from_fork+0x1f/0x30
    
    Fixes: 541afa10c126 ("net/smc: add smcr_port_err() and smcr_link_down() processing")
    Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
    Reviewed-by: Tony Lu <tonylu@linux.alibaba.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: ethernet: bgmac-platform: fix an OF node reference leak [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Sat Dec 14 10:49:12 2024 +0900

    net: ethernet: bgmac-platform: fix an OF node reference leak
    
    [ Upstream commit 0cb2c504d79e7caa3abade3f466750c82ad26f01 ]
    
    The OF node obtained by of_parse_phandle() is not freed. Call
    of_node_put() to balance the refcount.
    
    This bug was found by an experimental static analysis tool that I am
    developing.
    
    Fixes: 1676aba5ef7e ("net: ethernet: bgmac: device tree phy enablement")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20241214014912.2810315-1-joe@pf.is.s.u-tokyo.ac.jp
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hinic: Fix cleanup in create_rxqs/txqs() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri Dec 13 17:28:11 2024 +0300

    net: hinic: Fix cleanup in create_rxqs/txqs()
    
    [ Upstream commit 7203d10e93b6e6e1d19481ef7907de6a9133a467 ]
    
    There is a check for NULL at the start of create_txqs() and
    create_rxqs() which tess if "nic_dev->txqs" is non-NULL.  The
    intention is that if the device is already open and the queues
    are already created then we don't create them a second time.
    
    However, the bug is that if we have an error in the create_txqs()
    then the pointer doesn't get set back to NULL.  The NULL check
    at the start of the function will say that it's already open when
    it's not and the device can't be used.
    
    Set ->txqs back to NULL on cleanup on error.
    
    Fixes: c3e79baf1b03 ("net-next/hinic: Add logical Txq and Rxq")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/0cc98faf-a0ed-4565-a55b-0fa2734bc205@stanley.mountain
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mdiobus: fix an OF node reference leak [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Wed Dec 18 12:51:06 2024 +0900

    net: mdiobus: fix an OF node reference leak
    
    [ Upstream commit 572af9f284669d31d9175122bbef9bc62cea8ded ]
    
    fwnode_find_mii_timestamper() calls of_parse_phandle_with_fixed_args()
    but does not decrement the refcount of the obtained OF node. Add an
    of_node_put() call before returning from the function.
    
    This bug was detected by an experimental static analysis tool that I am
    developing.
    
    Fixes: bc1bee3b87ee ("net: mdiobus: Introduce fwnode_mdiobus_register_phy()")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://patch.msgid.link/20241218035106.1436405-1-joe@pf.is.s.u-tokyo.ac.jp
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mscc: ocelot: fix incorrect IFH SRC_PORT field in ocelot_ifh_set_basic() [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Thu Dec 12 18:55:45 2024 +0200

    net: mscc: ocelot: fix incorrect IFH SRC_PORT field in ocelot_ifh_set_basic()
    
    [ Upstream commit 2d5df3a680ffdaf606baa10636bdb1daf757832e ]
    
    Packets injected by the CPU should have a SRC_PORT field equal to the
    CPU port module index in the Analyzer block (ocelot->num_phys_ports).
    
    The blamed commit copied the ocelot_ifh_set_basic() call incorrectly
    from ocelot_xmit_common() in net/dsa/tag_ocelot.c. Instead of calling
    with "x", it calls with BIT_ULL(x), but the field is not a port mask,
    but rather a single port index.
    
    [ side note: this is the technical debt of code duplication :( ]
    
    The error used to be silent and doesn't appear to have other
    user-visible manifestations, but with new changes in the packing
    library, it now fails loudly as follows:
    
    ------------[ cut here ]------------
    Cannot store 0x40 inside bits 46-43 - will truncate
    sja1105 spi2.0: xmit timed out
    WARNING: CPU: 1 PID: 102 at lib/packing.c:98 __pack+0x90/0x198
    sja1105 spi2.0: timed out polling for tstamp
    CPU: 1 UID: 0 PID: 102 Comm: felix_xmit
    Tainted: G        W        N 6.13.0-rc1-00372-gf706b85d972d-dirty #2605
    Call trace:
     __pack+0x90/0x198 (P)
     __pack+0x90/0x198 (L)
     packing+0x78/0x98
     ocelot_ifh_set_basic+0x260/0x368
     ocelot_port_inject_frame+0xa8/0x250
     felix_port_deferred_xmit+0x14c/0x258
     kthread_worker_fn+0x134/0x350
     kthread+0x114/0x138
    
    The code path pertains to the ocelot switchdev driver and to the felix
    secondary DSA tag protocol, ocelot-8021q. Here seen with ocelot-8021q.
    
    The messenger (packing) is not really to blame, so fix the original
    commit instead.
    
    Fixes: e1b9e80236c5 ("net: mscc: ocelot: fix QoS class for injected packets with "ocelot-8021q"")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20241212165546.879567-1-vladimir.oltean@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sched: fix ordering of qlen adjustment [+ + +]
Author: Lion Ackermann <nnamrec@gmail.com>
Date:   Mon Dec 2 17:22:57 2024 +0100

    net: sched: fix ordering of qlen adjustment
    
    commit 5eb7de8cd58e73851cd37ff8d0666517d9926948 upstream.
    
    Changes to sch->q.qlen around qdisc_tree_reduce_backlog() need to happen
    _before_ a call to said function because otherwise it may fail to notify
    parent qdiscs when the child is about to become empty.
    
    Signed-off-by: Lion Ackermann <nnamrec@gmail.com>
    Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Cc: Artem Metla <ametla@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
netdevsim: prevent bad user input in nsim_dev_health_break_write() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Dec 13 17:25:18 2024 +0000

    netdevsim: prevent bad user input in nsim_dev_health_break_write()
    
    [ Upstream commit ee76746387f6233bdfa93d7406990f923641568f ]
    
    If either a zero count or a large one is provided, kernel can crash.
    
    Fixes: 82c93a87bf8b ("netdevsim: implement couple of testing devlink health reporters")
    Reported-by: syzbot+ea40e4294e58b0292f74@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/675c6862.050a0220.37aaf.00b1.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Jiri Pirko <jiri@nvidia.com>
    Reviewed-by: Joe Damato <jdamato@fastly.com>
    Link: https://patch.msgid.link/20241213172518.2415666-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: ipset: Fix for recursive locking warning [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Tue Dec 17 20:56:55 2024 +0100

    netfilter: ipset: Fix for recursive locking warning
    
    [ Upstream commit 70b6f46a4ed8bd56c85ffff22df91e20e8c85e33 ]
    
    With CONFIG_PROVE_LOCKING, when creating a set of type bitmap:ip, adding
    it to a set of type list:set and populating it from iptables SET target
    triggers a kernel warning:
    
    | WARNING: possible recursive locking detected
    | 6.12.0-rc7-01692-g5e9a28f41134-dirty #594 Not tainted
    | --------------------------------------------
    | ping/4018 is trying to acquire lock:
    | ffff8881094a6848 (&set->lock){+.-.}-{2:2}, at: ip_set_add+0x28c/0x360 [ip_set]
    |
    | but task is already holding lock:
    | ffff88811034c048 (&set->lock){+.-.}-{2:2}, at: ip_set_add+0x28c/0x360 [ip_set]
    
    This is a false alarm: ipset does not allow nested list:set type, so the
    loop in list_set_kadd() can never encounter the outer set itself. No
    other set type supports embedded sets, so this is the only case to
    consider.
    
    To avoid the false report, create a distinct lock class for list:set
    type ipset locks.
    
    Fixes: f830837f0eed ("netfilter: ipset: list:set set type support")
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFS/pnfs: Fix a live lock between recalled layouts and layoutget [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Mon Dec 16 19:28:06 2024 -0500

    NFS/pnfs: Fix a live lock between recalled layouts and layoutget
    
    commit 62e2a47ceab8f3f7d2e3f0e03fdd1c5e0059fd8b upstream.
    
    When the server is recalling a layout, we should ignore the count of
    outstanding layoutget calls, since the server is expected to return
    either NFS4ERR_RECALLCONFLICT or NFS4ERR_RETURNCONFLICT for as long as
    the recall is outstanding.
    Currently, we may end up livelocking, causing the layout to eventually
    be forcibly revoked.
    
    Fixes: bf0291dd2267 ("pNFS: Ensure LAYOUTGET and LAYOUTRETURN are properly serialised")
    Cc: stable@vger.kernel.org
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nilfs2: fix buffer head leaks in calls to truncate_inode_pages() [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Fri Dec 13 01:43:28 2024 +0900

    nilfs2: fix buffer head leaks in calls to truncate_inode_pages()
    
    commit 6309b8ce98e9a18390b9fd8f03fc412f3c17aee9 upstream.
    
    When block_invalidatepage was converted to block_invalidate_folio, the
    fallback to block_invalidatepage in folio_invalidate() if the
    address_space_operations method invalidatepage (currently
    invalidate_folio) was not set, was removed.
    
    Unfortunately, some pseudo-inodes in nilfs2 use empty_aops set by
    inode_init_always_gfp() as is, or explicitly set it to
    address_space_operations.  Therefore, with this change,
    block_invalidatepage() is no longer called from folio_invalidate(), and as
    a result, the buffer_head structures attached to these pages/folios are no
    longer freed via try_to_free_buffers().
    
    Thus, these buffer heads are now leaked by truncate_inode_pages(), which
    cleans up the page cache from inode evict(), etc.
    
    Three types of caches use empty_aops: gc inode caches and the DAT shadow
    inode used by GC, and b-tree node caches.  Of these, b-tree node caches
    explicitly call invalidate_mapping_pages() during cleanup, which involves
    calling try_to_free_buffers(), so the leak was not visible during normal
    operation but worsened when GC was performed.
    
    Fix this issue by using address_space_operations with invalidate_folio set
    to block_invalidate_folio instead of empty_aops, which will ensure the
    same behavior as before.
    
    Link: https://lkml.kernel.org/r/20241212164556.21338-1-konishi.ryusuke@gmail.com
    Fixes: 7ba13abbd31e ("fs: Turn block_invalidatepage into block_invalidate_folio")
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Cc: <stable@vger.kernel.org>    [5.18+]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nilfs2: prevent use of deleted inode [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Mon Dec 9 15:56:52 2024 +0900

    nilfs2: prevent use of deleted inode
    
    commit 901ce9705fbb9f330ff1f19600e5daf9770b0175 upstream.
    
    syzbot reported a WARNING in nilfs_rmdir. [1]
    
    Because the inode bitmap is corrupted, an inode with an inode number that
    should exist as a ".nilfs" file was reassigned by nilfs_mkdir for "file0",
    causing an inode duplication during execution.  And this causes an
    underflow of i_nlink in rmdir operations.
    
    The inode is used twice by the same task to unmount and remove directories
    ".nilfs" and "file0", it trigger warning in nilfs_rmdir.
    
    Avoid to this issue, check i_nlink in nilfs_iget(), if it is 0, it means
    that this inode has been deleted, and iput is executed to reclaim it.
    
    [1]
    WARNING: CPU: 1 PID: 5824 at fs/inode.c:407 drop_nlink+0xc4/0x110 fs/inode.c:407
    ...
    Call Trace:
     <TASK>
     nilfs_rmdir+0x1b0/0x250 fs/nilfs2/namei.c:342
     vfs_rmdir+0x3a3/0x510 fs/namei.c:4394
     do_rmdir+0x3b5/0x580 fs/namei.c:4453
     __do_sys_rmdir fs/namei.c:4472 [inline]
     __se_sys_rmdir fs/namei.c:4470 [inline]
     __x64_sys_rmdir+0x47/0x50 fs/namei.c:4470
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Link: https://lkml.kernel.org/r/20241209065759.6781-1-konishi.ryusuke@gmail.com
    Fixes: d25006523d0b ("nilfs2: pathname operations")
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Reported-by: syzbot+9260555647a5132edd48@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=9260555647a5132edd48
    Tested-by: syzbot+9260555647a5132edd48@syzkaller.appspotmail.com
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
of/irq: Fix interrupt-map cell length check in of_irq_parse_imap_parent() [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Mon Dec 9 21:24:59 2024 +0800

    of/irq: Fix interrupt-map cell length check in of_irq_parse_imap_parent()
    
    commit fec3edc47d5cfc2dd296a5141df887bf567944db upstream.
    
    On a malformed interrupt-map property which is shorter than expected by
    1 cell, we may read bogus data past the end of the property instead of
    returning an error in of_irq_parse_imap_parent().
    
    Decrement the remaining length when skipping over the interrupt parent
    phandle cell.
    
    Fixes: 935df1bd40d4 ("of/irq: Factor out parsing of interrupt-map parent phandle+args from of_irq_parse_raw()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Link: https://lore.kernel.org/r/20241209-of_irq_fix-v1-1-782f1419c8a1@quicinc.com
    [rh: reword commit msg]
    Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

of/irq: Fix using uninitialized variable @addr_len in API of_irq_parse_one() [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Mon Dec 9 21:25:02 2024 +0800

    of/irq: Fix using uninitialized variable @addr_len in API of_irq_parse_one()
    
    commit 0f7ca6f69354e0c3923bbc28c92d0ecab4d50a3e upstream.
    
    of_irq_parse_one() may use uninitialized variable @addr_len as shown below:
    
    // @addr_len is uninitialized
    int addr_len;
    
    // This operation does not touch @addr_len if it fails.
    addr = of_get_property(device, "reg", &addr_len);
    
    // Use uninitialized @addr_len if the operation fails.
    if (addr_len > sizeof(addr_buf))
            addr_len = sizeof(addr_buf);
    
    // Check the operation result here.
    if (addr)
            memcpy(addr_buf, addr, addr_len);
    
    Fix by initializing @addr_len before the operation.
    
    Fixes: b739dffa5d57 ("of/irq: Prevent device address out-of-bounds read in interrupt map walk")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Link: https://lore.kernel.org/r/20241209-of_irq_fix-v1-4-782f1419c8a1@quicinc.com
    Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
of: Fix error path in of_parse_phandle_with_args_map() [+ + +]
Author: Herve Codina <herve.codina@bootlin.com>
Date:   Mon Dec 2 17:58:19 2024 +0100

    of: Fix error path in of_parse_phandle_with_args_map()
    
    commit d7dfa7fde63dde4d2ec0083133efe2c6686c03ff upstream.
    
    The current code uses some 'goto put;' to cancel the parsing operation
    and can lead to a return code value of 0 even on error cases.
    
    Indeed, some goto calls are done from a loop without setting the ret
    value explicitly before the goto call and so the ret value can be set to
    0 due to operation done in previous loop iteration. For instance match
    can be set to 0 in the previous loop iteration (leading to a new
    iteration) but ret can also be set to 0 it the of_property_read_u32()
    call succeed. In that case if no match are found or if an error is
    detected the new iteration, the return value can be wrongly 0.
    
    Avoid those cases setting the ret value explicitly before the goto
    calls.
    
    Fixes: bd6f2fd5a1d5 ("of: Support parsing phandle argument lists through a nexus node")
    Cc: stable@vger.kernel.org
    Signed-off-by: Herve Codina <herve.codina@bootlin.com>
    Link: https://lore.kernel.org/r/20241202165819.158681-1-herve.codina@bootlin.com
    Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

of: Fix refcount leakage for OF node returned by __of_get_dma_parent() [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Fri Dec 6 08:52:30 2024 +0800

    of: Fix refcount leakage for OF node returned by __of_get_dma_parent()
    
    commit 5d009e024056ded20c5bb1583146b833b23bbd5a upstream.
    
    __of_get_dma_parent() returns OF device node @args.np, but the node's
    refcount is increased twice, by both of_parse_phandle_with_args() and
    of_node_get(), so causes refcount leakage for the node.
    
    Fix by directly returning the node got by of_parse_phandle_with_args().
    
    Fixes: f83a6e5dea6c ("of: address: Add support for the parent DMA bus")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Link: https://lore.kernel.org/r/20241206-of_core_fix-v1-4-dc28ed56bec3@quicinc.com
    Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
p2sb: Do not scan and remove the P2SB device when it is unhidden [+ + +]
Author: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Date:   Thu Nov 28 09:28:36 2024 +0900

    p2sb: Do not scan and remove the P2SB device when it is unhidden
    
    [ Upstream commit 360c400d0f568636c1b98d1d5f9f49aa3d420c70 ]
    
    When drivers access P2SB device resources, it calls p2sb_bar(). Before
    the commit 5913320eb0b3 ("platform/x86: p2sb: Allow p2sb_bar() calls
    during PCI device probe"), p2sb_bar() obtained the resources and then
    called pci_stop_and_remove_bus_device() for clean up. Then the P2SB
    device disappeared. The commit 5913320eb0b3 introduced the P2SB device
    resource cache feature in the boot process. During the resource cache,
    pci_stop_and_remove_bus_device() is called for the P2SB device, then the
    P2SB device disappears regardless of whether p2sb_bar() is called or
    not. Such P2SB device disappearance caused a confusion [1]. To avoid the
    confusion, avoid the pci_stop_and_remove_bus_device() call when the BIOS
    does not hide the P2SB device.
    
    For that purpose, cache the P2SB device resources only if the BIOS hides
    the P2SB device. Call p2sb_scan_and_cache() only if p2sb_hidden_by_bios
    is true. This allows removing two branches from p2sb_scan_and_cache().
    When p2sb_bar() is called, get the resources from the cache if the P2SB
    device is hidden. Otherwise, read the resources from the unhidden P2SB
    device.
    
    Reported-by: Daniel Walker (danielwa) <danielwa@cisco.com>
    Closes: https://lore.kernel.org/lkml/ZzTI+biIUTvFT6NC@goliath/ [1]
    Fixes: 5913320eb0b3 ("platform/x86: p2sb: Allow p2sb_bar() calls during PCI device probe")
    Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20241128002836.373745-5-shinichiro.kawasaki@wdc.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

p2sb: Factor out p2sb_read_from_cache() [+ + +]
Author: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Date:   Thu Nov 28 09:28:33 2024 +0900

    p2sb: Factor out p2sb_read_from_cache()
    
    [ Upstream commit 9244524d60ddea55f4df54c51200e8fef2032447 ]
    
    To prepare for the following fix, factor out the code to read the P2SB
    resource from the cache to the new function p2sb_read_from_cache().
    
    Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20241128002836.373745-2-shinichiro.kawasaki@wdc.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Stable-dep-of: 360c400d0f56 ("p2sb: Do not scan and remove the P2SB device when it is unhidden")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

p2sb: Introduce the global flag p2sb_hidden_by_bios [+ + +]
Author: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Date:   Thu Nov 28 09:28:34 2024 +0900

    p2sb: Introduce the global flag p2sb_hidden_by_bios
    
    [ Upstream commit ae3e6ebc5ab046d434c05c58a3e3f7e94441fec2 ]
    
    To prepare for the following fix, introduce the global flag
    p2sb_hidden_by_bios. Check if the BIOS hides the P2SB device and store
    the result in the flag. This allows to refer to the check result across
    functions.
    
    Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20241128002836.373745-3-shinichiro.kawasaki@wdc.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Stable-dep-of: 360c400d0f56 ("p2sb: Do not scan and remove the P2SB device when it is unhidden")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

p2sb: Move P2SB hide and unhide code to p2sb_scan_and_cache() [+ + +]
Author: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Date:   Thu Nov 28 09:28:35 2024 +0900

    p2sb: Move P2SB hide and unhide code to p2sb_scan_and_cache()
    
    [ Upstream commit 0286070c74ee48391fc07f7f617460479472d221 ]
    
    To prepare for the following fix, move the code to hide and unhide the
    P2SB device from p2sb_cache_resources() to p2sb_scan_and_cache().
    
    Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20241128002836.373745-4-shinichiro.kawasaki@wdc.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Stable-dep-of: 360c400d0f56 ("p2sb: Do not scan and remove the P2SB device when it is unhidden")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PCI/AER: Disable AER service on suspend [+ + +]
Author: Kai-Heng Feng <kai.heng.feng@canonical.com>
Date:   Sun Jul 28 12:07:52 2024 -0400

    PCI/AER: Disable AER service on suspend
    
    [ Upstream commit 5afc2f763edc5daae4722ee46fea4e627d01fa90 ]
    
    If the link is powered off during suspend, electrical noise may cause
    errors that are logged via AER.  If the AER interrupt is enabled and shares
    an IRQ with PME, that causes a spurious wakeup during suspend.
    
    Disable the AER interrupt during suspend to prevent this.  Clear error
    status before re-enabling IRQ interrupts during resume so we don't get an
    interrupt for errors that occurred during the suspend/resume process.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=209149
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=216295
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=218090
    Link: https://lore.kernel.org/r/20240416043225.1462548-2-kai.heng.feng@canonical.com
    Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
    [bhelgaas: drop pci_ancestor_pr3_present() etc, commit log]
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PCI: Add ACS quirk for Broadcom BCM5760X NIC [+ + +]
Author: Ajit Khaparde <ajit.khaparde@broadcom.com>
Date:   Sun Jul 28 12:07:45 2024 -0400

    PCI: Add ACS quirk for Broadcom BCM5760X NIC
    
    [ Upstream commit 524e057b2d66b61f9b63b6db30467ab7b0bb4796 ]
    
    The Broadcom BCM5760X NIC may be a multi-function device.
    
    While it does not advertise an ACS capability, peer-to-peer transactions
    are not possible between the individual functions. So it is ok to treat
    them as fully isolated.
    
    Add an ACS quirk for this device so the functions can be in independent
    IOMMU groups and attached individually to userspace applications using
    VFIO.
    
    [kwilczynski: commit log]
    Link: https://lore.kernel.org/linux-pci/20240510204228.73435-1-ajit.khaparde@broadcom.com
    Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Andy Gospodarek <gospo@broadcom.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: Introduce pci_resource_n() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Thu Mar 30 19:24:29 2023 +0300

    PCI: Introduce pci_resource_n()
    
    [ Upstream commit 144d204df78e40e6250201e71ef7d0e42d2a13fc ]
    
    Introduce pci_resource_n() and replace open-coded implementations of it
    in pci.h.
    
    Link: https://lore.kernel.org/r/20230330162434.35055-3-andriy.shevchenko@linux.intel.com
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
    Stable-dep-of: 360c400d0f56 ("p2sb: Do not scan and remove the P2SB device when it is unhidden")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: Use preserve_config in place of pci_flags [+ + +]
Author: Vidya Sagar <vidyas@nvidia.com>
Date:   Sun Jul 28 12:07:46 2024 -0400

    PCI: Use preserve_config in place of pci_flags
    
    [ Upstream commit 7246a4520b4bf1494d7d030166a11b5226f6d508 ]
    
    Use preserve_config in place of checking for PCI_PROBE_ONLY flag to enable
    support for "linux,pci-probe-only" on a per host bridge basis.
    
    This also obviates the use of adding PCI_REASSIGN_ALL_BUS flag if
    !PCI_PROBE_ONLY, as pci_assign_unassigned_root_bus_resources() takes care
    of reassigning the resources that are not already claimed.
    
    Link: https://lore.kernel.org/r/20240508174138.3630283-5-vidyas@nvidia.com
    Signed-off-by: Vidya Sagar <vidyas@nvidia.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: vmd: Create domain symlink before pci_bus_add_devices() [+ + +]
Author: Jiwei Sun <sunjw10@lenovo.com>
Date:   Sun Jul 28 12:07:57 2024 -0400

    PCI: vmd: Create domain symlink before pci_bus_add_devices()
    
    [ Upstream commit f24c9bfcd423e2b2bb0d198456412f614ec2030a ]
    
    The vmd driver creates a "domain" symlink in sysfs for each VMD bridge.
    Previously this symlink was created after pci_bus_add_devices() added
    devices below the VMD bridge and emitted udev events to announce them to
    userspace.
    
    This led to a race between userspace consumers of the udev events and the
    kernel creation of the symlink.  One such consumer is mdadm, which
    assembles block devices into a RAID array, and for devices below a VMD
    bridge, mdadm depends on the "domain" symlink.
    
    If mdadm loses the race, it may be unable to assemble a RAID array, which
    may cause a boot failure or other issues, with complaints like this:
    
      (udev-worker)[2149]: nvme1n1: '/sbin/mdadm -I /dev/nvme1n1'(err) 'mdadm: Unable to get real path for '/sys/bus/pci/drivers/vmd/0000:c7:00.5/domain/device''
      (udev-worker)[2149]: nvme1n1: '/sbin/mdadm -I /dev/nvme1n1'(err) 'mdadm: /dev/nvme1n1 is not attached to Intel(R) RAID controller.'
      (udev-worker)[2149]: nvme1n1: '/sbin/mdadm -I /dev/nvme1n1'(err) 'mdadm: No OROM/EFI properties for /dev/nvme1n1'
      (udev-worker)[2149]: nvme1n1: '/sbin/mdadm -I /dev/nvme1n1'(err) 'mdadm: no RAID superblock on /dev/nvme1n1.'
      (udev-worker)[2149]: nvme1n1: Process '/sbin/mdadm -I /dev/nvme1n1' failed with exit code 1.
    
    This symptom prevents the OS from booting successfully.
    
    After a NVMe disk is probed/added by the nvme driver, udevd invokes mdadm
    to detect if there is a mdraid associated with this NVMe disk, and mdadm
    determines if a NVMe device is connected to a particular VMD domain by
    checking the "domain" symlink. For example:
    
      Thread A                   Thread B             Thread mdadm
      vmd_enable_domain
        pci_bus_add_devices
          __driver_probe_device
           ...
           work_on_cpu
             schedule_work_on
             : wakeup Thread B
                                 nvme_probe
                                 : wakeup scan_work
                                   to scan nvme disk
                                   and add nvme disk
                                   then wakeup udevd
                                                      : udevd executes
                                                        mdadm command
             flush_work                               main
             : wait for nvme_probe done                ...
          __driver_probe_device                        find_driver_devices
          : probe next nvme device                     : 1) Detect domain symlink
          ...                                            2) Find domain symlink
          ...                                               from vmd sysfs
          ...                                            3) Domain symlink not
          ...                                               created yet; failed
        sysfs_create_link
        : create domain symlink
    
    Create the VMD "domain" symlink before invoking pci_bus_add_devices() to
    avoid this race.
    
    Suggested-by: Adrian Huang <ahuang12@lenovo.com>
    Link: https://lore.kernel.org/linux-pci/20240605124844.24293-1-sjiwei@163.com
    Signed-off-by: Jiwei Sun <sunjw10@lenovo.com>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    [bhelgaas: commit log]
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Nirmal Patel <nirmal.patel@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86: p2sb: Make p2sb_get_devfn() return void [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Tue Mar 5 10:45:00 2024 +0100

    platform/x86: p2sb: Make p2sb_get_devfn() return void
    
    [ Upstream commit 3ff5873602a874035ba28826852bd45393002a08 ]
    
    p2sb_get_devfn() always succeeds, make it return void and
    remove error checking from its callers.
    
    Reviewed-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20240305094500.23778-1-hdegoede@redhat.com
    Stable-dep-of: 360c400d0f56 ("p2sb: Do not scan and remove the P2SB device when it is unhidden")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/bpf: Use asm constraint "m" for LoongArch [+ + +]
Author: Tiezhu Yang <yangtiezhu@loongson.cn>
Date:   Thu Dec 19 19:15:06 2024 +0800

    selftests/bpf: Use asm constraint "m" for LoongArch
    
    commit 29d44cce324dab2bd86c447071a596262e7109b6 upstream.
    
    Currently, LoongArch LLVM does not support the constraint "o" and no plan
    to support it, it only supports the similar constraint "m", so change the
    constraints from "nor" in the "else" case to arch-specific "nmr" to avoid
    the build error such as "unexpected asm memory constraint" for LoongArch.
    
    Fixes: 630301b0d59d ("selftests/bpf: Add basic USDT selftests")
    Suggested-by: Weining Lu <luweining@loongson.cn>
    Suggested-by: Li Chen <chenli@loongson.cn>
    Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Huacai Chen <chenhuacai@loongson.cn>
    Cc: stable@vger.kernel.org
    Link: https://llvm.org/docs/LangRef.html#supported-constraint-code-list
    Link: https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/LoongArch/LoongArchISelDAGToDAG.cpp#L172
    Link: https://lore.kernel.org/bpf/20241219111506.20643-1-yangtiezhu@loongson.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sh: clk: Fix clk_enable() to return 0 on NULL clk [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Thu Feb 2 17:20:55 2023 +0100

    sh: clk: Fix clk_enable() to return 0 on NULL clk
    
    commit ff30bd6a6618e979b16977617371c0f28a95036e upstream.
    
    On SH, devm_clk_get_optional_enabled() fails with -EINVAL if the clock
    is not found.  This happens because __devm_clk_get() assumes it can pass
    a NULL clock pointer (as returned by clk_get_optional()) to the init()
    function (clk_prepare_enable() in this case), while the SH
    implementation of clk_enable() considers that an error.
    
    Fix this by making the SH clk_enable() implementation return zero
    instead, like the Common Clock Framework does.
    
    Reported-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Tested-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Acked-by: Stephen Boyd <sboyd@kernel.org>
    Link: https://lore.kernel.org/r/b53e6b557b4240579933b3359dda335ff94ed5af.1675354849.git.geert+renesas@glider.be
    Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
thunderbolt: Improve redrive mode handling [+ + +]
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Fri Nov 15 11:54:40 2024 +0200

    thunderbolt: Improve redrive mode handling
    
    commit 24740385cb0d6d22ab7fa7adf36546d5b3cdcf73 upstream.
    
    When USB-C monitor is connected directly to Intel Barlow Ridge host, it
    goes into "redrive" mode that basically routes the DisplayPort signals
    directly from the GPU to the USB-C monitor without any tunneling needed.
    However, the host router must be powered on for this to work. Aaron
    reported that there are a couple of cases where this will not work with
    the current code:
    
      - Booting with USB-C monitor plugged in.
      - Plugging in USB-C monitor when the host router is in sleep state
        (runtime suspended).
      - Plugging in USB-C device while the system is in system sleep state.
    
    In all these cases once the host router is runtime suspended the picture
    on the connected USB-C display disappears too. This is certainly not
    what the user expected.
    
    For this reason improve the redrive mode handling to keep the host
    router from runtime suspending when detect that any of the above cases
    is happening.
    
    Fixes: a75e0684efe5 ("thunderbolt: Keep the domain powered when USB4 port is in redrive mode")
    Reported-by: Aaron Rainbolt <arainbolt@kfocus.org>
    Closes: https://lore.kernel.org/linux-usb/20241009220118.70bfedd0@kf-ir16/
    Cc: stable@vger.kernel.org
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing: Add "%s" check in test_event_printk() [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Mon Dec 16 21:41:21 2024 -0500

    tracing: Add "%s" check in test_event_printk()
    
    commit 65a25d9f7ac02e0cf361356e834d1c71d36acca9 upstream.
    
    The test_event_printk() code makes sure that when a trace event is
    registered, any dereferenced pointers in from the event's TP_printk() are
    pointing to content in the ring buffer. But currently it does not handle
    "%s", as there's cases where the string pointer saved in the ring buffer
    points to a static string in the kernel that will never be freed. As that
    is a valid case, the pointer needs to be checked at runtime.
    
    Currently the runtime check is done via trace_check_vprintf(), but to not
    have to replicate everything in vsnprintf() it does some logic with the
    va_list that may not be reliable across architectures. In order to get rid
    of that logic, more work in the test_event_printk() needs to be done. Some
    of the strings can be validated at this time when it is obvious the string
    is valid because the string will be saved in the ring buffer content.
    
    Do all the validation of strings in the ring buffer at boot in
    test_event_printk(), and make sure that the field of the strings that
    point into the kernel are accessible. This will allow adding checks at
    runtime that will validate the fields themselves and not rely on paring
    the TP_printk() format at runtime.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Al Viro <viro@ZenIV.linux.org.uk>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/20241217024720.685917008@goodmis.org
    Fixes: 5013f454a352c ("tracing: Add check of trace event print fmts for dereferencing pointers")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing: Add missing helper functions in event pointer dereference check [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Mon Dec 16 21:41:20 2024 -0500

    tracing: Add missing helper functions in event pointer dereference check
    
    commit 917110481f6bc1c96b1e54b62bb114137fbc6d17 upstream.
    
    The process_pointer() helper function looks to see if various trace event
    macros are used. These macros are for storing data in the event. This
    makes it safe to dereference as the dereference will then point into the
    event on the ring buffer where the content of the data stays with the
    event itself.
    
    A few helper functions were missing. Those were:
    
      __get_rel_dynamic_array()
      __get_dynamic_array_len()
      __get_rel_dynamic_array_len()
      __get_rel_sockaddr()
    
    Also add a helper function find_print_string() to not need to use a middle
    man variable to test if the string exists.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Al Viro <viro@ZenIV.linux.org.uk>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/20241217024720.521836792@goodmis.org
    Fixes: 5013f454a352c ("tracing: Add check of trace event print fmts for dereferencing pointers")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing: Fix test_event_printk() to process entire print argument [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Mon Dec 16 21:41:19 2024 -0500

    tracing: Fix test_event_printk() to process entire print argument
    
    commit a6629626c584200daf495cc9a740048b455addcd upstream.
    
    The test_event_printk() analyzes print formats of trace events looking for
    cases where it may dereference a pointer that is not in the ring buffer
    which can possibly be a bug when the trace event is read from the ring
    buffer and the content of that pointer no longer exists.
    
    The function needs to accurately go from one print format argument to the
    next. It handles quotes and parenthesis that may be included in an
    argument. When it finds the start of the next argument, it uses a simple
    "c = strstr(fmt + i, ',')" to find the end of that argument!
    
    In order to include "%s" dereferencing, it needs to process the entire
    content of the print format argument and not just the content of the first
    ',' it finds. As there may be content like:
    
     ({ const char *saved_ptr = trace_seq_buffer_ptr(p); static const char
       *access_str[] = { "---", "--x", "w--", "w-x", "-u-", "-ux", "wu-", "wux"
       }; union kvm_mmu_page_role role; role.word = REC->role;
       trace_seq_printf(p, "sp gen %u gfn %llx l%u %u-byte q%u%s %s%s" " %snxe
       %sad root %u %s%c", REC->mmu_valid_gen, REC->gfn, role.level,
       role.has_4_byte_gpte ? 4 : 8, role.quadrant, role.direct ? " direct" : "",
       access_str[role.access], role.invalid ? " invalid" : "", role.efer_nx ? ""
       : "!", role.ad_disabled ? "!" : "", REC->root_count, REC->unsync ?
       "unsync" : "sync", 0); saved_ptr; })
    
    Which is an example of a full argument of an existing event. As the code
    already handles finding the next print format argument, process the
    argument at the end of it and not the start of it. This way it has both
    the start of the argument as well as the end of it.
    
    Add a helper function "process_pointer()" that will do the processing during
    the loop as well as at the end. It also makes the code cleaner and easier
    to read.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Al Viro <viro@ZenIV.linux.org.uk>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/20241217024720.362271189@goodmis.org
    Fixes: 5013f454a352c ("tracing: Add check of trace event print fmts for dereferencing pointers")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
udf: Fix directory iteration for longer tail extents [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Wed Jan 25 11:43:03 2023 +0100

    udf: Fix directory iteration for longer tail extents
    
    commit 1ea1cd11c72d1405a6b98440a9d5ea82dfa07166 upstream.
    
    When directory's last extent has more that one block and its length is
    not multiple of a block side, the code wrongly decided to move to the
    next extent instead of processing the last partial block. This led to
    directory corruption. Fix the rounding issue.
    
    Signed-off-by: Jan Kara <jack@suse.cz>
    Cc: Shreenidhi Shedi <yesshedi@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
udmabuf: also check for F_SEAL_FUTURE_WRITE [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Wed Dec 4 17:26:20 2024 +0100

    udmabuf: also check for F_SEAL_FUTURE_WRITE
    
    commit 0a16e24e34f28210f68195259456c73462518597 upstream.
    
    When F_SEAL_FUTURE_WRITE was introduced, it was overlooked that udmabuf
    must reject memfds with this flag, just like ones with F_SEAL_WRITE.
    Fix it by adding F_SEAL_FUTURE_WRITE to SEALS_DENIED.
    
    Fixes: ab3948f58ff8 ("mm/memfd: add an F_SEAL_FUTURE_WRITE seal to memfd")
    Cc: stable@vger.kernel.org
    Acked-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
    Signed-off-by: Jann Horn <jannh@google.com>
    Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241204-udmabuf-fixes-v2-2-23887289de1c@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: cdns3: Add quirk flag to enable suspend residency [+ + +]
Author: Roger Quadros <rogerq@kernel.org>
Date:   Sun Jul 28 12:07:47 2024 -0400

    usb: cdns3: Add quirk flag to enable suspend residency
    
    [ Upstream commit 0aca19e4037a4143273e90f1b44666b78b4dde9b ]
    
    Some platforms (e.g. ti,j721e-usb, ti,am64-usb) require
    this bit to be set to workaround a lockup issue with PHY
    short suspend intervals [1]. Add a platform quirk flag
    to indicate if Suspend Residency should be enabled.
    
    [1] - https://www.ti.com/lit/er/sprz457h/sprz457h.pdf
    i2409 - USB: USB2 PHY locks up due to short suspend
    
    Signed-off-by: Roger Quadros <rogerq@kernel.org>
    Signed-off-by: Ravi Gunasekaran <r-gunasekaran@ti.com>
    Acked-by: Peter Chen <peter.chen@kernel.org>
    Link: https://lore.kernel.org/r/20240516044537.16801-2-r-gunasekaran@ti.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: dwc2: gadget: Don't write invalid mapped sg entries into dma_desc with iommu enabled [+ + +]
Author: Peng Hongchi <hongchi.peng@siengine.com>
Date:   Sun Jul 28 12:07:48 2024 -0400

    usb: dwc2: gadget: Don't write invalid mapped sg entries into dma_desc with iommu enabled
    
    [ Upstream commit 1134289b6b93d73721340b66c310fd985385e8fa ]
    
    When using dma_map_sg() to map the scatterlist with iommu enabled,
    the entries in the scatterlist can be mergerd into less but longer
    entries in the function __finalise_sg(). So that the number of
    valid mapped entries is actually smaller than ureq->num_reqs,and
    there are still some invalid entries in the scatterlist with
    dma_addr=0xffffffff and len=0. Writing these invalid sg entries
    into the dma_desc can cause a data transmission error.
    
    The function dma_map_sg() returns the number of valid map entries
    and the return value is assigned to usb_request::num_mapped_sgs in
    function usb_gadget_map_request_by_dev(). So that just write valid
    mapped entries into dma_desc according to the usb_request::num_mapped_sgs,
    and set the IOC bit if it's the last valid mapped entry.
    
    This patch poses no risk to no-iommu situation, cause
    ureq->num_mapped_sgs equals ureq->num_sgs while using dma_direct_map_sg()
    to map the scatterlist whith iommu disabled.
    
    Signed-off-by: Peng Hongchi <hongchi.peng@siengine.com>
    Link: https://lore.kernel.org/r/20240523100315.7226-1-hongchi.peng@siengine.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
USB: serial: option: add MediaTek T7XX compositions [+ + +]
Author: Jack Wu <wojackbb@gmail.com>
Date:   Thu Nov 28 10:22:27 2024 +0800

    USB: serial: option: add MediaTek T7XX compositions
    
    commit f07dfa6a1b65034a5c3ba3a555950d972f252757 upstream.
    
    Add the MediaTek T7XX compositions:
    
    T:  Bus=03 Lev=01 Prnt=01 Port=05 Cnt=01 Dev#= 74 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=0e8d ProdID=7129 Rev= 0.01
    S:  Manufacturer=MediaTek Inc.
    S:  Product=USB DATA CARD
    S:  SerialNumber=004402459035402
    C:* #Ifs=10 Cfg#= 1 Atr=a0 MxPwr=500mA
    A:  FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 7 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 8 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=08(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 9 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=8a(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=09(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    -------------------------------
    | If Number | Function        |
    -------------------------------
    | 2         | USB AP Log Port |
    -------------------------------
    | 3         | USB AP GNSS Port|
    -------------------------------
    | 4         | USB AP META Port|
    -------------------------------
    | 5         | ADB port        |
    -------------------------------
    | 6         | USB MD AT Port  |
    ------------------------------
    | 7         | USB MD META Port|
    -------------------------------
    | 8         | USB NTZ Port    |
    -------------------------------
    | 9         | USB Debug port  |
    -------------------------------
    
    Signed-off-by: Jack Wu <wojackbb@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add MeiG Smart SLM770A [+ + +]
Author: Michal Hrusecky <michal.hrusecky@turris.com>
Date:   Tue Nov 19 14:00:18 2024 +0100

    USB: serial: option: add MeiG Smart SLM770A
    
    commit 724d461e44dfc0815624d2a9792f2f2beb7ee46d upstream.
    
    Update the USB serial option driver to support MeiG Smart SLM770A.
    
    ID 2dee:4d57 Marvell Mobile Composite Device Bus
    
    T:  Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=2dee ProdID=4d57 Rev= 1.00
    S:  Manufacturer=Marvell
    S:  Product=Mobile Composite Device Bus
    C:* #Ifs= 6 Cfg#= 1 Atr=c0 MxPwr=500mA
    A:  FirstIf#= 0 IfCount= 2 Cls=e0(wlcon) Sub=01 Prot=03
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=e0(wlcon) Sub=01 Prot=03 Driver=rndis_host
    E:  Ad=87(I) Atr=03(Int.) MxPS=  64 Ivl=4096ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0c(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0b(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=88(I) Atr=03(Int.) MxPS=  64 Ivl=4096ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0a(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=89(I) Atr=03(Int.) MxPS=  64 Ivl=4096ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0e(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Tested successfully connecting to the Internet via rndis interface after
    dialing via AT commands on If#=3 or If#=4.
    Not sure of the purpose of the other serial interfaces.
    
    Signed-off-by: Michal Hrusecky <michal.hrusecky@turris.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Netprisma LCUK54 modules for WWAN Ready [+ + +]
Author: Mank Wang <mank.wang@netprisma.com>
Date:   Fri Nov 22 09:06:00 2024 +0000

    USB: serial: option: add Netprisma LCUK54 modules for WWAN Ready
    
    commit aa954ae08262bb5cd6ab18dd56a0b58c1315db8b upstream.
    
    LCUK54-WRD's pid/vid
    0x3731/0x010a
    0x3731/0x010c
    
    LCUK54-WWD's pid/vid
    0x3731/0x010b
    0x3731/0x010d
    
    Above products use the exact same interface layout and option
    driver:
    MBIM + GNSS + DIAG + NMEA + AT + QDSS + DPL
    
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  5 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=3731 ProdID=0101 Rev= 5.04
    S:  Manufacturer=NetPrisma
    S:  Product=LCUK54-WRD
    S:  SerialNumber=feeba631
    C:* #Ifs= 8 Cfg#= 1 Atr=a0 MxPwr=500mA
    A:  FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=40 Driver=option
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 6 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8f(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: Mank Wang <mank.wang@netprisma.com>
    [ johan: use lower case hex notation ]
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add TCL IK512 MBIM & ECM [+ + +]
Author: Daniel Swanemar <d.swanemar@gmail.com>
Date:   Mon Nov 4 14:42:17 2024 +0100

    USB: serial: option: add TCL IK512 MBIM & ECM
    
    commit fdad4fb7c506bea8b419f70ff2163d99962e8ede upstream.
    
    Add the following TCL IK512 compositions:
    
    0x0530: Modem + Diag + AT + MBIM
    T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  3 Spd=10000 MxCh= 0
    D:  Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
    P:  Vendor=1bbb ProdID=0530 Rev=05.04
    S:  Manufacturer=TCL
    S:  Product=TCL 5G USB Dongle
    S:  SerialNumber=3136b91a
    C:  #Ifs= 5 Cfg#= 1 Atr=80 MxPwr=896mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=86(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 4 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    
    0x0640: ECM + Modem + Diag + AT
    T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  4 Spd=10000 MxCh= 0
    D:  Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
    P:  Vendor=1bbb ProdID=0640 Rev=05.04
    S:  Manufacturer=TCL
    S:  Product=TCL 5G USB Dongle
    S:  SerialNumber=3136b91a
    C:  #Ifs= 5 Cfg#= 1 Atr=80 MxPwr=896mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
    E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    E:  Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    
    Signed-off-by: Daniel Swanemar <d.swanemar@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Telit FE910C04 rmnet compositions [+ + +]
Author: Daniele Palmas <dnlplm@gmail.com>
Date:   Mon Dec 9 16:32:54 2024 +0100

    USB: serial: option: add Telit FE910C04 rmnet compositions
    
    commit 8366e64a4454481339e7c56a8ad280161f2e441d upstream.
    
    Add the following Telit FE910C04 compositions:
    
    0x10c0: rmnet + tty (AT/NMEA) + tty (AT) + tty (diag)
    T:  Bus=02 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#= 13 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c0 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10c4: rmnet + tty (AT) + tty (AT) + tty (diag)
    T:  Bus=02 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#= 14 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c4 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10c8: rmnet + tty (AT) + tty (diag) + DPL (data packet logging) + adb
    T:  Bus=02 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#= 17 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c8 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 3 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
zram: fix uninitialized ZRAM not releasing backing device [+ + +]
Author: Kairui Song <kasong@tencent.com>
Date:   Tue Dec 10 00:57:16 2024 +0800

    zram: fix uninitialized ZRAM not releasing backing device
    
    commit 74363ec674cb172d8856de25776c8f3103f05e2f upstream.
    
    Setting backing device is done before ZRAM initialization.  If we set the
    backing device, then remove the ZRAM module without initializing the
    device, the backing device reference will be leaked and the device will be
    hold forever.
    
    Fix this by always reset the ZRAM fully on rmmod or reset store.
    
    Link: https://lkml.kernel.org/r/20241209165717.94215-3-ryncsn@gmail.com
    Fixes: 013bf95a83ec ("zram: add interface to specif backing device")
    Signed-off-by: Kairui Song <kasong@tencent.com>
    Reported-by: Desheng Wu <deshengwu@tencent.com>
    Suggested-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

zram: refuse to use zero sized block device as backing device [+ + +]
Author: Kairui Song <kasong@tencent.com>
Date:   Tue Dec 10 00:57:15 2024 +0800

    zram: refuse to use zero sized block device as backing device
    
    commit be48c412f6ebf38849213c19547bc6d5b692b5e5 upstream.
    
    Patch series "zram: fix backing device setup issue", v2.
    
    This series fixes two bugs of backing device setting:
    
    - ZRAM should reject using a zero sized (or the uninitialized ZRAM
      device itself) as the backing device.
    - Fix backing device leaking when removing a uninitialized ZRAM
      device.
    
    
    This patch (of 2):
    
    Setting a zero sized block device as backing device is pointless, and one
    can easily create a recursive loop by setting the uninitialized ZRAM
    device itself as its own backing device by (zram0 is uninitialized):
    
        echo /dev/zram0 > /sys/block/zram0/backing_dev
    
    It's definitely a wrong config, and the module will pin itself, kernel
    should refuse doing so in the first place.
    
    By refusing to use zero sized device we avoided misuse cases including
    this one above.
    
    Link: https://lkml.kernel.org/r/20241209165717.94215-1-ryncsn@gmail.com
    Link: https://lkml.kernel.org/r/20241209165717.94215-2-ryncsn@gmail.com
    Fixes: 013bf95a83ec ("zram: add interface to specif backing device")
    Signed-off-by: Kairui Song <kasong@tencent.com>
    Reported-by: Desheng Wu <deshengwu@tencent.com>
    Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>