Список изменений в Linux 4.14.336

 
firewire: ohci: suppress unexpected system reboot in AMD Ryzen machines and ASM108x/VT630x PCIe cards [+ + +]
Author: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Date:   Tue Jan 2 20:01:50 2024 +0900

    firewire: ohci: suppress unexpected system reboot in AMD Ryzen machines and ASM108x/VT630x PCIe cards
    
    commit ac9184fbb8478dab4a0724b279f94956b69be827 upstream.
    
    VIA VT6306/6307/6308 provides PCI interface compliant to 1394 OHCI. When
    the hardware is combined with Asmedia ASM1083/1085 PCIe-to-PCI bus bridge,
    it appears that accesses to its 'Isochronous Cycle Timer' register (offset
    0xf0 on PCI memory space) often causes unexpected system reboot in any
    type of AMD Ryzen machine (both 0x17 and 0x19 families). It does not
    appears in the other type of machine (AMD pre-Ryzen machine, Intel
    machine, at least), or in the other OHCI 1394 hardware (e.g. Texas
    Instruments).
    
    The issue explicitly appears at a commit dcadfd7f7c74 ("firewire: core:
    use union for callback of transaction completion") added to v6.5 kernel.
    It changed 1394 OHCI driver to access to the register every time to
    dispatch local asynchronous transaction. However, the issue exists in
    older version of kernel as long as it runs in AMD Ryzen machine, since
    the access to the register is required to maintain bus time. It is not
    hard to imagine that users experience the unexpected system reboot when
    generating bus reset by plugging any devices in, or reading the register
    by time-aware application programs; e.g. audio sample processing.
    
    This commit suppresses the unexpected system reboot in the combination of
    hardware. It avoids the access itself. As a result, the software stack can
    not provide the hardware time anymore to unit drivers, userspace
    applications, and nodes in the same IEEE 1394 bus. It brings apparent
    disadvantage since time-aware application programs require it, while
    time-unaware applications are available again; e.g. sbp2.
    
    Cc: stable@vger.kernel.org
    Reported-by: Jiri Slaby <jirislaby@kernel.org>
    Closes: https://bugzilla.suse.com/show_bug.cgi?id=1215436
    Reported-by: Mario Limonciello <mario.limonciello@amd.com>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217994
    Reported-by: Tobias Gruetzmacher <tobias-lists@23.gs>
    Closes: https://sourceforge.net/p/linux1394/mailman/message/58711901/
    Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2240973
    Closes: https://bugs.launchpad.net/linux/+bug/2043905
    Link: https://lore.kernel.org/r/20240102110150.244475-1-o-takashi@sakamocchi.jp
    Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
i40e: fix use-after-free in i40e_aqc_add_filters() [+ + +]
Author: Ke Xiao <xiaoke@sangfor.com.cn>
Date:   Mon Dec 18 15:08:50 2023 +0800

    i40e: fix use-after-free in i40e_aqc_add_filters()
    
    [ Upstream commit 6a15584e99db8918b60e507539c7446375dcf366 ]
    
    Commit 3116f59c12bd ("i40e: fix use-after-free in
    i40e_sync_filters_subtask()") avoided use-after-free issues,
    by increasing refcount during update the VSI filter list to
    the HW. However, it missed the unicast situation.
    
    When deleting an unicast FDB entry, the i40e driver will release
    the mac_filter, and i40e_service_task will concurrently request
    firmware to add the mac_filter, which will lead to the following
    use-after-free issue.
    
    Fix again for both netdev->uc and netdev->mc.
    
    BUG: KASAN: use-after-free in i40e_aqc_add_filters+0x55c/0x5b0 [i40e]
    Read of size 2 at addr ffff888eb3452d60 by task kworker/8:7/6379
    
    CPU: 8 PID: 6379 Comm: kworker/8:7 Kdump: loaded Tainted: G
    Workqueue: i40e i40e_service_task [i40e]
    Call Trace:
     dump_stack+0x71/0xab
     print_address_description+0x6b/0x290
     kasan_report+0x14a/0x2b0
     i40e_aqc_add_filters+0x55c/0x5b0 [i40e]
     i40e_sync_vsi_filters+0x1676/0x39c0 [i40e]
     i40e_service_task+0x1397/0x2bb0 [i40e]
     process_one_work+0x56a/0x11f0
     worker_thread+0x8f/0xf40
     kthread+0x2a0/0x390
     ret_from_fork+0x1f/0x40
    
    Allocated by task 21948:
     kasan_kmalloc+0xa6/0xd0
     kmem_cache_alloc_trace+0xdb/0x1c0
     i40e_add_filter+0x11e/0x520 [i40e]
     i40e_addr_sync+0x37/0x60 [i40e]
     __hw_addr_sync_dev+0x1f5/0x2f0
     i40e_set_rx_mode+0x61/0x1e0 [i40e]
     dev_uc_add_excl+0x137/0x190
     i40e_ndo_fdb_add+0x161/0x260 [i40e]
     rtnl_fdb_add+0x567/0x950
     rtnetlink_rcv_msg+0x5db/0x880
     netlink_rcv_skb+0x254/0x380
     netlink_unicast+0x454/0x610
     netlink_sendmsg+0x747/0xb00
     sock_sendmsg+0xe2/0x120
     __sys_sendto+0x1ae/0x290
     __x64_sys_sendto+0xdd/0x1b0
     do_syscall_64+0xa0/0x370
     entry_SYSCALL_64_after_hwframe+0x65/0xca
    
    Freed by task 21948:
     __kasan_slab_free+0x137/0x190
     kfree+0x8b/0x1b0
     __i40e_del_filter+0x116/0x1e0 [i40e]
     i40e_del_mac_filter+0x16c/0x300 [i40e]
     i40e_addr_unsync+0x134/0x1b0 [i40e]
     __hw_addr_sync_dev+0xff/0x2f0
     i40e_set_rx_mode+0x61/0x1e0 [i40e]
     dev_uc_del+0x77/0x90
     rtnl_fdb_del+0x6a5/0x860
     rtnetlink_rcv_msg+0x5db/0x880
     netlink_rcv_skb+0x254/0x380
     netlink_unicast+0x454/0x610
     netlink_sendmsg+0x747/0xb00
     sock_sendmsg+0xe2/0x120
     __sys_sendto+0x1ae/0x290
     __x64_sys_sendto+0xdd/0x1b0
     do_syscall_64+0xa0/0x370
     entry_SYSCALL_64_after_hwframe+0x65/0xca
    
    Fixes: 3116f59c12bd ("i40e: fix use-after-free in i40e_sync_filters_subtask()")
    Fixes: 41c445ff0f48 ("i40e: main driver core")
    Signed-off-by: Ke Xiao <xiaoke@sangfor.com.cn>
    Signed-off-by: Ding Hui <dinghui@sangfor.com.cn>
    Cc: Di Zhu <zhudi2@huawei.com>
    Reviewed-by: Jan Sokolowski <jan.sokolowski@intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 4.14.336 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed Jan 10 14:45:41 2024 +0100

    Linux 4.14.336
    
    Link: https://lore.kernel.org/r/20240108141854.158274814@linuxfoundation.org
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mmc: core: Cancel delayed work before releasing host [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Mon Dec 4 12:29:53 2023 +0100

    mmc: core: Cancel delayed work before releasing host
    
    commit 1036f69e251380573e256568cf814506e3fb9988 upstream.
    
    On RZ/Five SMARC EVK, where probing of SDHI is deferred due to probe
    deferral of the vqmmc-supply regulator:
    
        ------------[ cut here ]------------
        WARNING: CPU: 0 PID: 0 at kernel/time/timer.c:1738 __run_timers.part.0+0x1d0/0x1e8
        Modules linked in:
        CPU: 0 PID: 0 Comm: swapper Not tainted 6.7.0-rc4 #101
        Hardware name: Renesas SMARC EVK based on r9a07g043f01 (DT)
        epc : __run_timers.part.0+0x1d0/0x1e8
         ra : __run_timers.part.0+0x134/0x1e8
        epc : ffffffff800771a4 ra : ffffffff80077108 sp : ffffffc800003e60
         gp : ffffffff814f5028 tp : ffffffff8140c5c0 t0 : ffffffc800000000
         t1 : 0000000000000001 t2 : ffffffff81201300 s0 : ffffffc800003f20
         s1 : ffffffd8023bc4a0 a0 : 00000000fffee6b0 a1 : 0004010000400000
         a2 : ffffffffc0000016 a3 : ffffffff81488640 a4 : ffffffc800003e60
         a5 : 0000000000000000 a6 : 0000000004000000 a7 : ffffffc800003e68
         s2 : 0000000000000122 s3 : 0000000000200000 s4 : 0000000000000000
         s5 : ffffffffffffffff s6 : ffffffff81488678 s7 : ffffffff814886c0
         s8 : ffffffff814f49c0 s9 : ffffffff81488640 s10: 0000000000000000
         s11: ffffffc800003e60 t3 : 0000000000000240 t4 : 0000000000000a52
         t5 : ffffffd8024ae018 t6 : ffffffd8024ae038
        status: 0000000200000100 badaddr: 0000000000000000 cause: 0000000000000003
        [<ffffffff800771a4>] __run_timers.part.0+0x1d0/0x1e8
        [<ffffffff800771e0>] run_timer_softirq+0x24/0x4a
        [<ffffffff80809092>] __do_softirq+0xc6/0x1fa
        [<ffffffff80028e4c>] irq_exit_rcu+0x66/0x84
        [<ffffffff80800f7a>] handle_riscv_irq+0x40/0x4e
        [<ffffffff80808f48>] call_on_irq_stack+0x1c/0x28
        ---[ end trace 0000000000000000 ]---
    
    What happens?
    
        renesas_sdhi_probe()
        {
            tmio_mmc_host_alloc()
                mmc_alloc_host()
                    INIT_DELAYED_WORK(&host->detect, mmc_rescan);
    
            devm_request_irq(tmio_mmc_irq);
    
            /*
             * After this, the interrupt handler may be invoked at any time
             *
             *  tmio_mmc_irq()
             *  {
             *      __tmio_mmc_card_detect_irq()
             *          mmc_detect_change()
             *              _mmc_detect_change()
             *                  mmc_schedule_delayed_work(&host->detect, delay);
             *  }
             */
    
            tmio_mmc_host_probe()
                tmio_mmc_init_ocr()
                    -EPROBE_DEFER
    
            tmio_mmc_host_free()
                mmc_free_host()
        }
    
    When expire_timers() runs later, it warns because the MMC host structure
    containing the delayed work was freed, and now contains an invalid work
    function pointer.
    
    Fix this by cancelling any pending delayed work before releasing the
    MMC host structure.
    
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/205dc4c91b47e31b64392fe2498c7a449e717b4b.1701689330.git.geert+renesas@glider.be
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: rpmb: fixes pause retune on all RPMB partitions. [+ + +]
Author: Jorge Ramirez-Ortiz <jorge@foundries.io>
Date:   Fri Dec 1 16:31:43 2023 +0100

    mmc: rpmb: fixes pause retune on all RPMB partitions.
    
    commit e7794c14fd73e5eb4a3e0ecaa5334d5a17377c50 upstream.
    
    When RPMB was converted to a character device, it added support for
    multiple RPMB partitions (Commit 97548575bef3 ("mmc: block: Convert RPMB to
    a character device").
    
    One of the changes in this commit was transforming the variable target_part
    defined in __mmc_blk_ioctl_cmd into a bitmask. This inadvertently regressed
    the validation check done in mmc_blk_part_switch_pre() and
    mmc_blk_part_switch_post(), so let's fix it.
    
    Fixes: 97548575bef3 ("mmc: block: Convert RPMB to a character device")
    Signed-off-by: Jorge Ramirez-Ortiz <jorge@foundries.io>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20231201153143.1449753-1-jorge@foundries.io
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net: bcmgenet: Fix FCS generation for fragmented skbuffs [+ + +]
Author: Adrian Cinal <adriancinal@gmail.com>
Date:   Thu Dec 28 14:56:38 2023 +0100

    net: bcmgenet: Fix FCS generation for fragmented skbuffs
    
    [ Upstream commit e584f2ff1e6cc9b1d99e8a6b0f3415940d1b3eb3 ]
    
    The flag DMA_TX_APPEND_CRC was only written to the first DMA descriptor
    in the TX path, where each descriptor corresponds to a single skbuff
    fragment (or the skbuff head). This led to packets with no FCS appearing
    on the wire if the kernel allocated the packet in fragments, which would
    always happen when using PACKET_MMAP/TPACKET (cf. tpacket_fill_skb() in
    net/af_packet.c).
    
    Fixes: 1c1008c793fa ("net: bcmgenet: add main driver file")
    Signed-off-by: Adrian Cinal <adriancinal1@gmail.com>
    Acked-by: Doug Berger <opendmb@gmail.com>
    Acked-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://lore.kernel.org/r/20231228135638.1339245-1-adriancinal1@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sched: em_text: fix possible memory leak in em_text_destroy() [+ + +]
Author: Hangyu Hua <hbh25y@gmail.com>
Date:   Thu Dec 21 10:25:31 2023 +0800

    net: sched: em_text: fix possible memory leak in em_text_destroy()
    
    [ Upstream commit 8fcb0382af6f1ef50936f1be05b8149eb2f88496 ]
    
    m->data needs to be freed when em_text_destroy is called.
    
    Fixes: d675c989ed2d ("[PKT_SCHED]: Packet classification based on textsearch (ematch)")
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: Hangyu Hua <hbh25y@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfc: llcp_core: Hold a ref to llcp_local->dev when holding a ref to llcp_local [+ + +]
Author: Siddh Raman Pant <code@siddh.me>
Date:   Tue Dec 19 23:19:43 2023 +0530

    nfc: llcp_core: Hold a ref to llcp_local->dev when holding a ref to llcp_local
    
    [ Upstream commit c95f919567d6f1914f13350af61a1b044ac85014 ]
    
    llcp_sock_sendmsg() calls nfc_llcp_send_ui_frame() which in turn calls
    nfc_alloc_send_skb(), which accesses the nfc_dev from the llcp_sock for
    getting the headroom and tailroom needed for skb allocation.
    
    Parallelly the nfc_dev can be freed, as the refcount is decreased via
    nfc_free_device(), leading to a UAF reported by Syzkaller, which can
    be summarized as follows:
    
    (1) llcp_sock_sendmsg() -> nfc_llcp_send_ui_frame()
            -> nfc_alloc_send_skb() -> Dereference *nfc_dev
    (2) virtual_ncidev_close() -> nci_free_device() -> nfc_free_device()
            -> put_device() -> nfc_release() -> Free *nfc_dev
    
    When a reference to llcp_local is acquired, we do not acquire the same
    for the nfc_dev. This leads to freeing even when the llcp_local is in
    use, and this is the case with the UAF described above too.
    
    Thus, when we acquire a reference to llcp_local, we should acquire a
    reference to nfc_dev, and release the references appropriately later.
    
    References for llcp_local is initialized in nfc_llcp_register_device()
    (which is called by nfc_register_device()). Thus, we should acquire a
    reference to nfc_dev there.
    
    nfc_unregister_device() calls nfc_llcp_unregister_device() which in
    turn calls nfc_llcp_local_put(). Thus, the reference to nfc_dev is
    appropriately released later.
    
    Reported-and-tested-by: syzbot+bbe84a4010eeea00982d@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=bbe84a4010eeea00982d
    Fixes: c7aa12252f51 ("NFC: Take a reference on the LLCP local pointer when creating a socket")
    Reviewed-by: Suman Ghosh <sumang@marvell.com>
    Signed-off-by: Siddh Raman Pant <code@siddh.me>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>